2018年12月9日日曜日

INRC-IIの実装検討 JOB Propertyの追加

仕様検討漏れがありました。
解のFORMATを見ると、

SOLUTION
0 n005w4
ASSIGNMENTS = 25
Patrick Mon Early HeadNurse
Patrick Tue Early HeadNurse
Patrick Fri Early Nurse
Patrick Sat Early HeadNurse
Patrick Sun Late Nurse
..
Nguyen Wed Late Nurse
Nguyen Fri Late Nurse
Nguyen Sat Night Nurse
Nguyen Sun Night Nurse

となっていて、SKILL Propertyも出力されています。言い換えると、これも変数定義が必要になるということです。言語表現では、

 X[Staff][Day][Shift]

だけでは不十分で、

 X[Staff][Day][Shift][Skill]

まで定義することが必要となります。そうなると現状のGUIでは、対応できないことになります。
ソルバも現状IFは定義されていません。

そこで、追加仕様として、以下のようにJobとTaskの概念をGroupPopertyに追加することにしました。
上の場合、次のように記述します。
JOBは、Taskの集合体です。一つのJOBは、複数のTaskからなります。上の場合一つのJOB名は、TASKで、TASK[0]がHeadNurse,TASK[1]がNurseとします。通常のGroupPropertyと違うのは、
ΣTask[i]=1 (in any staff/day/shift)という制約が課せられることです。つまり、一人の人は、複数のタスクを持ちえて、なおかつ、同時には、実行できません。例えば、Patrikは、HeadNurseとNurseという二つのスキルを持ちますが、同時に出来る仕事は、一つのみで、HeadNurseという仕事かNurseという仕事のどちらか一方しか一日内には割り当てられません。そのような性格を考慮すると、能力とかスキルというよりもタスクといった方が割り当てられる具体的な仕事という意味に近いように思います。今後、そのように呼称します。
Competitionの仕様上は、JOBは一つですが、JOB1[0],,,JOB2[0],,という風にも記述できるように
拡張したいと思います。各JOB上、ΣJOB1[i]=1,ΣJOB2[i]=1とします。ソルバ側では、xx[]というブランケット付きのGroupPropertyが来たら、そのように処理するように設計追加します。
 
今まで、仕事を分けようとすると多数のシフトになってしまいがちでしたが、上のように記述した方がすっきりする場合もあるかもしれません。 Competitionの仕様を出来る限りGUIで記述できるようにして、評価・検証を行いたいと思います。
 
なお、CompleteWeekEndは、以下の通り、仕様変更・追加なしにGUIで記述できました。
 
 
 
 
 
 




0 件のコメント:

コメントを投稿