我一直在用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快几倍,所以似乎值得研究。但是,当涉及到输入文件格式时,我还无法理解文档的头绪。工商及科技局网页说它支持AMPL格式,GLPK的主页认为MathProg是AMPL的一个子集。试图通过scip -f file.nl将上述文件输入SCIP3.1.0,将返回以下错误:
read problem <file.nl>
============
no reader for input file <file.nl> available我不确定这是因为我没有构建带有AMPL支持的SCIP,还是其他什么东西。我在构建带有AMPL支持的SCIP时发现了这篇博客文章,但是这些说明似乎已经过时了,因为SCIP3.1.0的源代码zip不包含interfaces文件夹。
所以,我有两个问题:
谢谢你的帮助,为我的无知道歉!
发布于 2014-07-10 08:53:41
正如我在上面的评论中指出的,Ampl接口仍然包含在SCIP发行版中,您应该能够编译它并阅读您引用的优秀博客文章中记录的问题。
如果您想尝试不同的文件格式,我会看到两个选项:
glpk将您的问题转换为可由SCIP识别的文件格式。我找到了方法glp_write_mps()和glp_write_lp。可同时读取.lp和.mps-files。确保正确使用这些文件扩展名,因为SCIP不识别.lp-format中的文件,而是以.txt结尾。Zimpl来解决您的问题。Zimpl和Ampl的两种格式非常相似,参见文档中的示例和进一步参考。Zimpl中的问题描述可以转换为.lp-format或由SCIP直接读取,如果您使用默认的ZIMPL=true-option编译ZIMPL=true-option。https://stackoverflow.com/questions/24666531
复制相似问题