2014年4月7日月曜日

連続休みを2回以上、連続休み間隔は2週間程度で平準化 その4


上図の青色部分が今回書いた制約です。

肝心のパターンの部分は、
$O($A( $S(1,0,1,$P(1,xx)),$S(1,0,1,$P(3,xx))),$A( $S(1,0,1,$P(2,xx)),$S(1,0,1,$P(4,xx))))
となっていて、なにやら意味不明だと思いますが、分解すると
$Oは、ブール代数OR(または)の略で、
$A( $S(1,0,1,$P(1,xx)),$S(1,0,1,$P(3,xx)))
$A( $S(1,0,1,$P(2,xx)),$S(1,0,1,$P(4,xx)))
の2項のORを取るという意味です。$Aは、AND(かつ)の略です。

$S(min,max,type,指定期間中のパターン)で、パターンの加算を行って演算を演算を行うという意味になっています。$(1,0,1,..)は、指定期間中のパターンが1回以上であること、という意味になります。
従って、
$S(1,0,1,$P(1,xx))は、
1週間目に期間にパターンxx(連続休み)が一回以上であることを要求します。
同様に、
$S(1,0,1,$P(3,xx)))は、3週間目に、パターンxx(連続休み)が一回以上あることを要求します。

全体では、
1週間目に一回以上、かつ、3週間目に一回以上 または、
2週間目に一回以上、かつ、4週間目に一回以上
の連続休みがあること、
という制約になります。

面倒ですね。実際的には、青色の制約行をコピペすればよいだけですので、理解する必要はありません。

ちなみに各週の定義は、Version111から左のようにビルトイン(定義しなくても組み込み済み)
しています。





結果ですが、下図のようになっています。




 

必ずしも2週間間隔になっていないものが散見されます。上の制約は、約2週間の間隔の連続休みがあることを制約しているだけで、その他の休みについては、なんら制約がかかりません。つまり、約2週間間隔の休みが少なくとも一つ存在するという制約であって、2週間間隔以下の休みがない、という制約ではないことに注意してください。
 
この段階で、かなり厳しい制約だと思います。人間には無理でしょう。
(この問題を解ける看護師長さんはいらっしゃらないでしょう。)
 
ソフトの限界まで頑張ろうということで、さらにフリー休みが一回あるという制約を附加したのが、
次の結果です。

看護師勤務自動作成ソフト、スケジュールナースで、この求解に、なんと40秒近くかかっています。
(最近のデスクトップマシンで、この時間は、かなり長い(難しい)問題だと思います。)
 実際的には、この職場条件で、看護師の勤務希望を入れ込むと、恐らくエラーが0(すなわち、フリー休み一回以上、かつ約2週間隔に平準化した連続休みが2回以上という制約を看護師スタッフ全員に満たす)にはならないでしょう。なんらかのアイテムをソフト制約として、妥協を図る必要があるでしょう。


0 件のコメント:

コメントを投稿