制約のタイプ

「ペア禁止」と「AならばB] 制約の二つがあります。

ペア禁止は、AさんとBさんの一緒の勤務を禁止するといった制約になります。(シフトを同じにすれば、その勤務で働くことが禁止になります)
個人の名前で制約するときは、演算子「または」「かつ」はどちらでもOKです。

必ず設定しないといけない項目

■適用 チェックしないと制約は無視されます。
■設定 変更後は、設定ボタンをクリックしないと反映されません。
■ペア制約名 曜日タイプ グループタイプ シフトタイプ、制約タイプは、 必ず記載する必要があります。
■制約タイプ 「ペア禁止」「AならばB] のいずれかを指定します。
■ソフトレベルに1から7のいずれかを記載した場合は、ソフト制約、記載しない場合はハード制約となります。



ソフト制約

求解時には、列制約レベルとして表示されるので、該当レベルの適用をチェックしてください。



ペア禁止の解表示

OK/NGが列制約結果部に表示されます。



AならばB制約

Aが真ならばBも真となるようにする、という制約です。Aが真でないときは、Bは何も規制されません。



■演算子 上記例で<=0になっています。この記法で「または」と「かつ」演算子を書くと、次のようになります。
「または」 → >=1
「かつ」  → >=当該全スタッフ

■日オフセット BのAに対するDayオフセットになります。上の例で説明します。
このプロジェクトの「週末」定義は、土日になります。集合としては、先月部から

週末=土日土日土日…
という集合になります。日オフセットが-1のとき、Aが07日で(Sun)で真だったとすると、Bは、その一日前06(土)日に真でなければなりません。
Aが13日で(土)で真だったとすると、Bは、その一日前07(Sun)日に真でなければなりません。

■解表示は、Aが真であるときのみ行います。そのDayは、BのDayです



リニアペア制約

下図青部右クリックで、メニューが出るので、リニアペア制約のを挿入を行います。



数理的表現による制約です。

係数*A 演算子  係数*B +数値オフセット

による制約となります。

新人(A)二人につき、最小一人の指導者の例

新人(A)二人につき、最小一人の指導者(B)を割り当てたいとします。

新人 指導者最小人数
0 0
2 1
4 2
6 3

ここまでは、依存ないと思います。
奇数人数の扱いについては、

新人 指導者最小人数
1 1
3 2
5 3
7 4

とするやり方の場合は、次のように記述します。

A<=2*B



新人一人のとき、最小0人の指導者でもよい場合は、

A<=2*B+1

とすれば、

新人 指導者最小人数
1 0
3 1
5 2
7 3

となります。




会議の制約の例

A*B参加者人数<=B

とします。B集合の人数は、BFULLとしておくと、会議参加者の人数、メンバー等が変更になっても、この制約のメンテは不要です。(AFULLも同様の作用です。) 次の例の場合は、看護師長のみに会議用シフトを割り振っています。この制約とは別に、行制約でこの会議シフトが月に何回あるかの記述が必要です。



フェーズペア制約

下図青部右クリックで、メニューが出るので、フェーズページを挿入を行います。



■シフトAまたはタスクAのうち、どちらかまたは両方が記述されている必要があります。
■シフトBまたはタスクBのうち、どちらかまたは両方が記述されている必要があります。

■フェーズNo.は、必ず指定します。
■フェーズオフセットは、オプションです。指定しないと0となります。
■Bフェーズは、Bフェーズ=Aフェーズ+フェーズオフセット となります。B曜日は、次のように、曜日集合で指定される曜日が計算されます。

例:A曜日=曜日集合[ADay],APhase=5 phase_offset=-6 Phase数6のとき、BPhase=5 B曜日=曜日集合[ADAY-1]



例:会議日に日勤者増



マクロ記述