シフト型勤務表では、必要ありませんが、タスク型勤務表では、さらに タスクとフェーズという概念の理解が必要になります。
タスクの概念
フェーズの概念
シフトの復習
■アクティブになるシフトは、1日あたり1個です。
日勤・深夜・準夜勤 シフト形態は、色々がありますが、1人のスタッフについて、1日あたり許されるシフトは、1個です。2個以上でも、0個でもありません。常に1個です。言い換えると常にどれかのシフトがアクティブになっており、それ以外は、非アクティブ状態にあります。ですので、「休み」というシフトを、記述する必要があります。日勤でも、深夜でも準夜勤..でもないときは、「休み」シフトがアクティブになります。この性質は、シフト型・タスク型によらず共通の性質です。
フェーズ定義
シフトとフェーズを結びつけます。このフェーズ定義で1フェーズでも定義していると、タスク勤務表となります。下は塾勤務表の例です。
1日に4時限まであり、4フェーズとしています。
例えば、Workというシフトは、4コマ全部のフェーズになります。PH13と言うシフトは、1時限から3時限までの連続フェーズになります。
■各フェーズは名前が必要です。
■各フェーズは、時刻指定が必須です。時刻指定は、実態と一致している必要はなく便宜的なものですが、必ず増加するように定義している必要があります。
■時刻指定開始から終了まで、翌日に跨いでもOKですが、総時間が24時間以下である必要があります。
■各フェーズは、少なくとも1個のシフトを含む必要があります。
■一つのシフトで見たとき、フェーズが連続的に定義されていなくても構いません。跨いでもOKです。
■チェックが付いているフェーズをアクティブフェーズと呼びます。
タスク定義
■アクティブフェーズ中のタスクは、必ず1個が選択されます。選択されたタスクをアクティブタスクと呼びます。
■非アクティブフェーズ中のタスクは、決してアクティブになりません。非アクティブフェーズ中のアクティブタスク数は0です。
■アクティブフェーズ中のタスクは、必ず1個のタスクが選択されなければいけないことに注意してください。例えば、英国数タスクだけ定義していて空タスクを定義しておかなかった状態を想定しましょう。
もしも、英国数どのタスクも割り当てられない状態がありえるとすると、解がないハードエラーとなってしまいます。
■一日中、アクティブシフトは一つ、アクティブシフト中かつアクティブフェーズ中のアクティブタスクは一つ、という原則を覚えましょう。(2個でも0個でもなく1個です。)
タスク別名ラベルオプション
「別名ラベルをフェーズ毎のラベルとして使用」にチェックし、フェーズ数分のラベルを用意します。
タスク集合
「演算子」は、「または」(OR) が使えます。「でない」(NOT)は、特殊タスクである「NoTaskVar」しか使えません。
フェーズオブジェクト
■特定のフェーズと特定のタスクを結びつけるのが、フェーズオブジェクトです。フェーズオブジェクトは、2種類あり、フェーズ変数とフェーズ変数集合から成ります。
■フェーズオブジェクトは、殆どの場合、シフトと同様に扱うことが出来ます。
フェーズ変数
下がフェーズ変数の定義例になります。
フェーズは、今、1限(ph0)から4限(ph3)まで定義されているものとします。 例えば、下の「フェーズ変数1」は、ph0のタスク、英語が定義されたシフトである、という見方ができます。2限(ph0)から4限(ph3)までは、何も定義されていないので、ブランクです。ブランク部は、何が来てもよいのですが、1限だけは、英語である必要があります。
もう一度フェーズ定義に戻りましょう。下記のように定義していました。
1限が定義されているシフトは、
■Work
■PH13
■PH12
のみです。つまり、「フェーズ変数1」がアクティブになる(選択される、または 0/1のうち1になる)のは、上記シフトのどれかであり、なおかつ1限タスクが英語のときのみである、
ということが言えます。
同様に、「フェーズ変数2」、「フェーズ変数3」、「フェーズ変数4」は、各々選択される可能性があるシフトが限定され、各限毎のタスクが英語に限定されることになります。
フェーズ変数集合
フェーズ変数集合は、フェーズ変数のOR(または)を取ったものです。
上のフェーズ変数集合「POA1」がアクティブになる(選択される、または 0/1のうち1になる)のは、1限(ph0)から4限(ph3)までのどれか一つでも英語が入ることを意味しています。言うなれば、「その日英語の授業が1コマでもある」ということを示しています。
フェーズ変数やフェーズ変数集合は、シフト予定入力や、各制約でシフトとして参照できる。
例えば、上の行制約は、「英語のコマが1コマ以上ある日が1日以上ある」ことが望ましい、ということになります。
フェーズ変数は、フェーズ間のタスクをAND(かつ)で結合したもの
次の例は、英語が2コマあるパターンを全て列挙したものです。制約には、ブランク部に英語が入るかもしれないので、英語が2コマ以上あるパターンを全て列挙したもの、です。 例えば、E21は、1限及び2限が、両方英語であることを要求しています。
NoTaskVarは、特別なタスクで非選択状態を示す
NoTaskVarは、それ以外のタスク全てが非アクティブであるときアクティブになる予約された名前の特別なタスクです。
言い換えると、NoTaskVarがアクティブになるのは、 PH13シフトの3限、PH24シフトの1限、PH12シフトの3限と4限 等になります。
これを用いると、例えば、次の「フェーズ変数5」は、2限英国 かつ 3限英数であるPH23または、PH24シフトを現わしています。NoTaskVarを使用しないと、シフトを限定できないことに注意してください。
シフト集合のNOT演算は、NoTaskVarだけ可能
工場の工程では、多数のタスクが出現することがあります。そのようなとき、NoTaskVarのNOTを取っておけば、様々なTaskが増減してもメンテナンスの必要なく、常に「業務」を現わすことが出来ます。 下の例で、「業務集合」と「業務集合2」は、等価です。