Q.1と3が選択できるようになっていますが、どちらを使用すればよいでしょうか?
明確に目的と用途が異なります。
<制約設計時>
Algorithm1を使用して下さい。制約設計時は、デバッグツールとして、解がない場合の原因解析が必須となります。原因解析が効くのは、Algorithm1のみです。
<普段の求解時>
多くの場合、Algorithm1が最も速く、かつ安定に動作します。
ーCPU数
1で良いです。2以上でも動作しますが、さして変わりません。
<厳密解を求めたい場合>
Algorithm1は、原則的にNear Optimal解を出力します。目的関数値(UB)が0の場合は、Optimalです。時間がかかって、UBが0でない場合は、厳密解ではない可能性があります。特に、多くのエラーがある場合は、もう少し良い値が存在するかもしれません。そのような場合で、厳密解(物理的な限界値)を求めたい場合の選択肢としては、Algorithm2,3,4があります。公式サポートは、1,3のみですが、2,4も設定すると動きます。
アカデミックなベンチマークではこの厳密解に達するまでの時間を指標としていることもあり、スケジュールナースⅢのベンチマークデータは全てAlgorithm3を使用しています。タイムアウトはなく、厳密解を見つけるまで動作し続けます。従って、Algorithm1よりも悪い値で終了することはありません。また、Algorithm1の出力値と比較して、Algorithm1が厳密解目的関数値もしくは、極めて近い値を出力していることも確認できると思います。(途中で求解を止めるには中止ボタンを押してください。)
<Algorithm3>
推奨環境:32GB以上のメモリ、CPUコア数8以上の最新のプロセッサ。(全CPUパワーをフルスレッドで使います。)
ほぼ全てのインスタンスで動作しますが、Algorithm1で動作確認した上で御使用ください。
ー威力を発揮する場面
Algorithm1では、時間がかかるとき(特に多くのハード予定またはソフト制約が詰まっている)に有効です。また、LB値(この値に到達する保証はないが、目的関数値でこれ以上より良い値になることも絶対にない)を知りたい場面でも有効です。
ー動かないインスタンス
一部、フェーズ変数を用いた複雑な制約については、動かないものがあることが分かっています。
<Algorithm2>
オープンソース MIPソルバHiGHSによる解法になります。小さいインスタンス(スタッフ数10人程度)ならば、動く可能性がありますが、中規模以上では時間がかかり、求まらない可能性が高いです。
<Algorithm4>
Algorithm3は、Algorithm4と1の合体です。インスタンスによってAlgorithm1を走らせる場合がありますが、Algorithm4は、このフェーズがありません。