2019年9月16日月曜日

最適化の先

<リソースの確認>
最近、ユーザさんのプロジェクトファイルをよく見ます。総じて、期待通りに使いこなしている方が多いのですが、過剰な設定も目に付きます。(一つ一つGUIに計数エントリするのも面倒なので、全て挿入という、項目を作りました。結果をすべて出し、Excelで表示させています。レベル7違反は、赤表示にしました。Excelだと全体が黄色赤具合が一目瞭然なのでそのような利用をしています。)

最適化が効くのは、リソースがあるときです。リソースがないところでは無力に近いです。まずは、初心に戻って必要なリソースが確保されているかということを確認しましょう。確認の手順については、AdvancedUnserManualの方に書きます。 

<速度アップのTIPS>
1)リソースがない(自明な)ところには、(意味がない)のでソフト制約化しない。
2)ソフト制約の数を減らす
3)ソフト制約の種類を減らす

いずれも、ソフト制約に関することになります。なぜ、ソフト制約が速度に効いてくるかというと、
2値問題から最適化問題になるからです。SAT/UNSATの判定には、SATを広大な探索空間から一つ見つければ十分です。ところが最適化問題になると、それだけでは足りず、SATの中でも、どのSAT組み合わせが最適か?という問題になります。これだけでも、遅くなりそうだということが分かると思います。

さらにソフト項、例えば、基数制約における許容エラー量+1の増加は、軽く探索空間の桁オーダを増やします。

こういった事情で、ソフト制約項が直接速度と関わってくるのです。まとめると、
ソフト項の増大→探索空間増大→速度低下
というのが大枠的なイメージとなります。

 この中でも、基数制約のソフト制約が支配的、つまりパターン制約は、ハード制約で、列制約がソフト制約で構成される場合は、数理的ソルバーが有効なことが分かっています。(日本の勤務表では、こういった例は皆無に近いのですが)そのような場合にAlgorithm4は、有効に作用します。

いずれにしても、元々の人力解と比べれば、圧倒的に高品質なのですから、適当なところで、
打ち切るのもありだと思います。下界が早期に分かれば、それ以上は絶対に良くなることは分かるので、この辺で止めておこうかという判断ができるのですが、それにはAlogithm4のRUNが必要になります。




0 件のコメント:

コメントを投稿