NEOS SERVERは、16MBの壁があります。今までMPSファイルをUploadしていたのですが、少し大きいインスタンスを行おうとするとこの壁に阻まれてしまいます。(最近は、CPLEXも開発者用というのがあって、月額3万程度で使うことができますが)
最近、MPSファイルの代わりにLPファイルを使う事ができることに気付きました。LPファイルは、MPSに比べれば少ないファイルサイズになりますから、これで、かなりのインスタンスをチェックできることになります。また、Short Priorityのチェックを入れなければ、最長8時間?まで、計算してくれて結果をE-mailで得ることが出来ます。
で、やってみたらLPファイルとMPSファイルで目的関数値が異なる結果になってしまいました。ちょうど目的関数値の定数項の分だけ違いました。
宮代先生のWEB
http://web.tuat.ac.jp/~miya/ipmemo.html
で、その辺の解説がありました。10.LP ファイルで目的関数に定数項を含めたい
ということで、どうもLPファイルは、目的関数に定数を入れられないようです。
LPファイルをいじるのは、自信がないので、MPS・LPファイル両方生成させて、MPSファイルの常数項、例えば、
RHS
RHS OBJROW -3900080. R0000000 1.
の項を結果からLPファイル結果から引き算することにしました。
以上で、State Of Art SolverであるCPLEX/GUROBIとSC3の比較を行う準備が出来ました。
最適化汎用ソルバーは、今世紀に入ってからも格段の進歩をしています。
https://symposia.cirrelt.ca/system/documents/000/000/111/Bixby_original.pdf?1441306917
https://www.orsj.or.jp/archive2/or59-01/or59_1_11.pdf
(この時点で、SCIPのソース行数が50万行というのは、凄いです。GCC並みです。ちなみにSC3の行数は、ライブラリを含めても20万行程度ではないかと思います。SC2は、2-3万行です。SystemVerilog Simulatorは、自力で20万行を超えたところで挫折しました。)
それにも関わらず、ナーススケジューリング専用のソルバーSC3が必要となる理由を明らかにしていきたいと思います。
0 件のコメント:
コメントを投稿