求解後の解を編集し再求解する


例で見ていきましょう。
下記の初期状態で求解してみます。



解が出力されるので、好きな解のページで初期割り当てに送るをクリックします。



すると初期割り当て編集のページで、他の初期割り当てを編集をクリックし、送った解1を見ることができます。このページは編集可能です。


ここで求解を行ってみると、次のようなメッセージが出ます。この意味は、Solution(解と言う意味です。)1番目がありません。
ということを言っています。Solutionは、0番から割り振られるので、逆にいうとSolution0の解はあることになります。




実は、上の初期割り当てで、解1の解データをそのまま初期値としたために、コンピュータが計算する余地はなく、解は元々の解である1解しか存在しません。ですので、この場合は、解は一つしかないけれども正常終了ということになります。



そこで、コンピュータに計算の余地を与えるために、下のようにブランクを作りました。


このブランクは、マウス右クリックでメニュー 削除を選択すると作ることが出来ます。
(Ctrlキーを押しながらセルのクリックで、任意の複数のセルを選択することが出来ます。)


このように任意の編集が可能です。
この状態で求解すると、下の4個の解が得られました。







求解条件で、解の個数は、この例の場合10個を指定したにも係わらず、4個の解しか出力されませんでした。スケジュールナースは、解の個数分まで、別解を探索し続けようとしますが、4個で終っているのは、それが全体の制約を満たす全てであるからです。これ以外に上のブランク部を満たす解は存在しません。

ナーススケジューリングの制約は、多重制約で雁字搦めにされているので、ブランク数が小さいうちは、解が元の一個しかないのが普通です。逆に言うと、それだけナーススケジューリング問題は、難しい問題ともいえるでしょう


編集中は、Undo Redo機能により、編集を巻き戻すことが出来ます。求解を繰り返しながら、このようにして解の結果を微調整することが可能です。
しかし、これでも、思うような解が得られない場合は、制約そのものを緩めるしかありません。制約は、あくまで全体で効いています。部分的に制約を緩めればより広範囲な解が得られるでしょう。


なお、今まで解1上で、編集してきましたが、入力は、そのまま生きています。入力画面にすれば、またこの画面に対する初期設定で、求解が可能です。