2024年12月24日火曜日

Q 来月の勤務表の解を求めるとエラーになってしまいます。何が原因か診断して頂けないでしょうか?

 Ans.

赤字で表示されているので解がありません。


上の表示から、列制約レベル6のソフト制約が、範囲外にあることを示しています。

制約名は、「平日休みの数が7名を超えない金」で曜日が2025年1月3日が満足していないことを示しています。

平日休みの数が7名を超えない金

をダブルクリックすると当該制約箇所が表示されます。


当該行の曜日タイプ部でマウスミドルボタンを押すと曜日集合が表示されます。

制約を見ると、

1月3日の休みの数が最大で8名と制約しています。

ソフト制約レベル6です。

列制約レベル6の許容エラーは、現在3になっています。


これを、大きくしてみて(例えば3→6)、解が出るようにしてみます。


解は出ました。12人が休みになっていることが分かります。


制約最大8人に対して、実際は、12人ですから、許容エラーは、

12-8=4

4以上である必要があります。許容エラー3の場合、変更前ソフトエラー範囲は、

8プラス3ですから、11人までがソフトエラー範囲つまりハード制約で、12人以上はハード制約を超えるのでエラーとなります。ですから12人の場合は「解がない」エラーとなってしまいます。


これで、エラーの理由が判明しました。1月3日に大量の休みがエントリーされているということです。

ところで、制約の曜日集合名を見ると、

「祝ではない金今月」

になっています。1月3日は、確かに金曜日ですが、祝ではない..?

確かに、祝ではないですが、年始ではあります。そこで、曜日集合の定義を見てみます。


「祝でない」は、「特祝」の補集合(でない)であることが分かります。「特祝」の定義は、以下のように、年末、年始を含んでいます。

年末は、


確かに、定義されていますが、年始は定義されておりません。

従い、年始を設定すれば、このエラーは解消します。

以上のように、順を追って解析すれば、エラーは解消できます。

制約漏れではなく、単に

年始の設定忘れだった、

ということです。解がないときに、つい慌ててしまいますが、エラーメッセージに従って落ち着いて見ていけば、原因に辿り着けるのでやってみてください。

0 件のコメント:

コメントを投稿