2022年8月21日日曜日

フェーズパターンの拡張

 次の例では、4直3交代です。

一つの制約が2列になっていて下段がシフト上段が従来のフェーズパターンです。シフトとフェーズの関係は、ANDでマッチします。シフトは無くても構いません。

下の例では、1勤務の残業回数を計測する制約ですが、フェーズパターンのみで記述する方法と、シフトとフェーズパターンの両方を用いる記述の二通りを記しています。どちらを使っても差異はありません。


次の制約では、2勤務の早残同シフト残業を禁止する制約です。早残を両方やると8+4+45=16h働くことになりますが、流石にこれはありえないので禁止してやる必要があります。
従来パターンでは、早と残でそれぞれ禁止が必要となりますが、シフトを用いたパターンでは、ひとつのパターンで記述が可能になります。たとえば、
下は、勤務2シフト AND phase 1 =Not NoTaskVar(=Working) AND phase4=NoTaskVar(=Working)のときにマッチします。



次の例は、早残回数の規制と、早残連続3回の禁止制約のための記述です。

最終的にはフェーズ集合を作って


いつものように、制約します。
従来は、Python記述をするより方法がなかったのですが、フェーズ機能の拡張により対応が可能になりました。

これで、一応フェーズ関係の拡張設計は終了しました。かなり大規模な拡張を行っていますが、現状の仕様については、影響がないようにしていますので、お客さまのプロジェクトに影響することはありません。


0 件のコメント:

コメントを投稿