今回は、休日の日勤者数の問題です。
準夜が居ないとき4名、居るとき5名です。この要求の主旨を考えてみましたが、分かりませんでした。とりあえず要求をそのまま実装してみました。<等式を見つける>
日勤者数+~(Σ準夜≧1)==5
という関係が見つかりました。
Σ準夜は、準夜数で、≧1が、1名以上、~が否定ですから、~(Σ準夜≧1)は、準夜が1名も居ないときに1,居る時に0となる変数です。これをaと表記するとa∉0,1
つまり、
日勤者数+a==5という関係になります。これは、以下の場合に分けられて、要求と合致します。
日勤者数+準夜が居ないとき1==5⇒日勤者数4名
日勤者数+準夜が居るとき0==5⇒日勤者数5名
これをPythonでプログラムすると、
となります。これもペア制約を使って記述出来ますが、重いので、上記Pythonでの記述としています。総和が5名なることを要請しています。
以上、出来る改善記述を全て行っての解が下のようになります。予定がかなり入った状態ですが、全ての日で、出来ているないことが分かります。
という状態になります。この場合、仕様自体が絵にかいた餅(願望仕様書)か、仕様自体が間違っているかのいずれかとなります。
人力解を見ると、
<ブランク予定時のエラーは、放置しない>
こうした、無理な要求は、無理な箇所でも出来るだけ満たそうとする力が働く結果、スケジュールナース解でも重篤エラー(赤)が1か所出ています。
ブランク予定時0を実現出来ている仕様であれば、このような重篤エラーは、恐らく出なかったことでしょう。このように、多数の出来ない制約が、本来必ず出来て欲しい制約の足を引っ張るという現象は、多々見られます。
現在は、設計段階ですので、仕様は正すことが出来ます。稼働時の無用なエラーを防ぐためにも、初期設計段階で仕様を適正にする作業は必要です。
現在のルールで殆ど出来ていない仕様は、仕様としての意味がないばかりか、状況をより複雑化し、本来出来て欲しい制約を出来なくしてしまうリスクを生んでしまいます。「スケジュールナースなら出来るだろう」、ではなくブランク予定で出来ない制約は取り除く、という基本設計に立ち返ることが必要です。
× 制約を厳しめにしておけば、良い解が得られるだろう
は、よくある誤解です。
物理リソースが足りている限りは、正しいのですが、物理リソースが足りていないときは、そうではなく、逆に出来る筈の制約も出来なくなる恐れが出てきます。人が居ない問題と制約とをごっちゃにせず、あくまで現在運用しているルールを書くようにしてください。
0 件のコメント:
コメントを投稿