ナーススケジューリングの場合、Taskが必要になることはあまりないのですが、確かに必要となる場合があります。例えば、
NRC2(Nurse Scheduling CompetitionⅡ)では、次のような解になります。
いつものSC3と様子が違うのは、1日が4つに分割されていることです。この場合、4Shift1Phase の例になります。一つのシフトに複数の業務の一つを割り振る場合に必要となるのがTaskです。上の例の場合でも、一つのシフトに複数のTaskが割り振られているのが分かります。
あるいは、シフトをさらに2つに分割して、
3Shift2Phaseの例(1日に6個の独立したTaskが記述)も可能です。やはり、午前と午後で別なTaskを割り振るのに加え、早番遅残業があるという工場でのシフト問題で、超難問です。
簡単な例では、1Shift2Phaseというのもあります。日勤外来専用のナース配置問題で、
午前と午後で行き先が違う(Taskが異なる)問題です。
Shiftは、1日に一つです。Shiftは、時間帯概念です。基本的に、1Shift内では、一つの仕事となります。
その概念を拡張するのがTaskになります。Taskを用いると複数の仕事の中から一つの仕事を割り振ることが出来ます。さらに、シフトを分割するのがPhaseという概念になります。1シフト内に複数のシーケンス(Phase)を持ち、Phase毎に複数の仕事の中から一つの仕事を割り振りたい場合に使います。
ポイントは、複数の仕事の中から一つの仕事を割り振る必要があるかということです。Taskを用いると次元が増えるためにGUIでは書けなくなる傾向にあります。(従いPythonで書く必要が出てきます。) ですから、なるべくTaskは、使わなくて済むならば使いたくはないです。
一見Taskが必要に見えても、実はShiftだけで非常に細かく書ける例も存在します。そのような例を次回紹介します。
0 件のコメント:
コメントを投稿