2025年11月2日日曜日

Q.平日日勤者数各チーム3年目以上2名以外に出来れば2名の日勤者を確保したい

 仕様は以下です。

長日者数3名のとき、要求をそのまま実装しようとすると、

2+2+2+2=8名となってしまい、7名以上を上回ることになってしまいます。

ただし、仕様をよく見ると、そういう場合は、1名でも良いことになっています。


これらを勘案すると、共通ルールは、AチームBチーム共、日勤者3名以上、ということになります。ただし、長日2名時は、AチームBチーム共、日勤者4名以上という特殊ルールとなります。一般に、上のように一見複雑な仕様を紐解き、シンプルな制約に変換するのは、熟練を要します。

<等号関係を見つける>

長日2名+Aチーム4名==6

長日3名+Aチーム3名==6

とう等式が見つかりました。

ただし、長日3名時全体として、日勤者7名以上が要請されているので、Aチームまたは、Bチームのどちらかは4名、どちらかは3名になります。次の不等式を満たせばよいことになります。

長日(全体)+A/Bチーム≧6

ここで、長日とA/Bチームの集合が違うことに注意してください。集合が異なるのでGUIでは記述できません。Pythonによる記述となります。長日に対しては、全体集合、チームに対しては、A/Bチームで足し算を行います。Min=6、Max=7、Tolerance=4、レベル2で制約しています。


これは、結構難しい制約です。

別解としては、日勤者3名以上を標準列制約、長日2名時ならば、Aチーム4名以上というペア制約AならばBで制約する手があります。この方法はGUIで記述出来ますが、重いので、今回はPythonで記述しました。

0 件のコメント:

コメントを投稿