or-toolsの前のBoolVarの最大数は使用できなくなりました
OR-Toolsの例として使用される標準的な看護師のスケジューリング問題(たとえば、 https://developers.google.com/optimization/scheduling/employee_scheduling)次のコード行でブール値をブール変数に割り当てようとします。
shifts[(n, d, s)] = model.NewBoolVar('shift_n%id%is%i' % (n, d, s))
このトイプロブレムの場合、OR-Toolsは正常に実行されますが、作成されるブール変数は105個のみです(5人の看護師、7日、3シフト) $\Rightarrow 3\times 5\times7=105$ 特定の看護師が特定のシフトで働くかどうかに関して割り当てるブール値)。
私は、OR-Toolsを使用して、より現実的なスケジューリング問題を解決することを検討しています。私が扱っている現実の問題では、シフトは15分単位で割り当てられ、より多くの労働者とより多くの役割が関係しています。最終的に、11,064個のブール値が割り当てられることになります。
これは、OR-Toolsが現実的に機能することを期待するには多すぎますか?すぐに(あまり良くない)スケジュールが作成されることがわかりましたが、1時間実行しても、最初の数秒で思いついた最初のスケジュールではまったく改善されません。
これはOR-Toolsの典型的な動作ですか?何かご意見は?
回答
その質問に対する良い答えはありません。それはモデル、問題の複雑さに依存します。私の直感的な反応は、OR-Toolsが日常的に大きな問題を最適化するために解決することですが、いくつかのはるかに小さな問題は証明できないか、実行可能な解決策を見つけることさえ不可能です。
OR-Toolsは優れたCPソルバーです(過去2回のminizincチャレンジで4つの金メダルすべてを獲得しました)。また、まともなMIPソルバーでもあります(5つの開いているMIPLIB 2017インスタンスを閉じ、さらにいくつかの境界を改善しました)。
私は提案するか、上記の提案を繰り返します:
- 市販のMIPソルバー(Gurobi、Cplex、Xpress)と比較して、運試しをしてください。
- CPLEXCP-Optimizerと比較してください。比較を行った学術研究者との話し合いでは、これ以上良くなるとは思いませんが、CPOのパフォーマンスが良ければ問題になるかもしれません。
- モデルをor-toolsユーザーのメーリングリストに送信し、特に検索パラメーターに関してヘルプやコメントを求めます。