GLPK を使用して、混合整数計画問題を解決してきました。MathProg 形式のサンプル入力ファイルを次に示します。
set REACTIONS;
set REACTANTS;
param Ys {i in REACTANTS, j in REACTIONS};
param Gamma {i in REACTANTS, j in REACTIONS};
param eps;
param delt;
var w {i in REACTANTS} >=-delt <=delt;
var R0 {i in REACTIONS} >=0 <=1, integer;
var Rn {i in REACTIONS} >=0 <=1, integer;
minimize z: sum{i in REACTIONS} -Rn[i];
s.t. const1{i in REACTIONS} : sum{k in REACTANTS} w[k]*Gamma[k,i] <= delt*(1-R0[i]);
s.t. const2{i in REACTIONS} : -sum{k in REACTANTS} w[k]*Gamma[k,i] <= delt*(1-R0[i]);
s.t. const3{i in REACTIONS} : Rn[i] <= 1-R0[i];
s.t. const5{i in REACTIONS} : sum{k in REACTANTS} w[k]*Gamma[k,i] <= delt*(1-Rn[i])-eps;
s.t. const6{i in REACTIONS, j in REACTIONS: i <> j} : sum{k in REACTANTS} w[k]*(Ys[k,i]-Ys[k,j]) <= delt*(1-Rn[i]+Rn[j]+R0[j]);
data;
set REACTIONS:= 1 2 3 4 5 6;
set REACTANTS:= 1 2 3 4 5 6;
param Ys: 1 2 3 4 5 6:=
1 1 0 0 0 0 0
2 1 0 0 0 0 0
3 0 1 1 0 0 0
4 0 0 0 1 0 0
5 0 0 0 1 0 0
6 0 0 0 0 1 1;
param Gamma: 1 2 3 4 5 6:=
1 -1 1 0 0 0 1
2 -1 1 1 0 0 0
3 1 -1 -1 0 0 0
4 0 0 1 -1 1 0
5 0 0 0 -1 1 1
6 0 0 0 1 -1 -1;
param eps:=0.1;
param delt:=10;
end;
私は、この種のより大きな問題でパフォーマンスの問題に直面してきました。SCIP は MIP の GLPK よりも数倍高速であると主張しているため、調査する価値があるようです。ただし、入力ファイル形式に関しては、ドキュメントの頭や尾を作ることができませんでした。SCIP のホームページは AMPL フォーマットをサポートしていると述べており、GLPK のホームページは MathProg が AMPL のサブセットであると述べています。上記のファイルを経由で SCIP 3.1.0 にフィードしようとするとscip -f file.nl
、次のエラーが返されます。
read problem <file.nl>
============
no reader for input file <file.nl> available
これが、AMPL をサポートする SCIP のビルドに失敗したためなのか、それとも別の理由によるものなのかはわかりません。AMPL をサポートする SCIP の構築に関するこのブログ投稿を見つけましたが、SCIP 3.1.0 のソース zip にはinterfaces
フォルダーが含まれていないため、手順が古くなっているようです。
だから、私は2つの質問があります:
- SCIP に私の MathProg 入力をそのまま認識させることは可能ですか?
- そうでない場合は、認識されている形式に変換する方法について誰かアドバイスできますか? さらに別のフォーマットを学ぶ必要はありませんので、自動化された方法が望ましいですが、手動の方法は何もないよりはましです.
助けてくれてありがとう、そして私の無知をお詫びします!