我一直在使用 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.0scip -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
文件夹。
所以,我有两个问题:
- 是否可以让 SCIP 按原样识别我的 MathProg 输入?
- 如果没有,谁能建议如何将其转换为可识别的格式?自动化方法会更好,因为我真的不想学习另一种格式,但是手动方法总比没有好。
感谢您的帮助,并为我的无知道歉!