是否可以将MathProg MIP文件转换为SCIP识别的格式?

时间:2014-07-10 02:22:21

标签: glpk scip mathprog

我一直在使用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's homepage表示它支持AMPL格式,以及GLPK的主页,MathProg是AMPL的子集。尝试通过scip -f file.nl将上述文件提供给SCIP 3.1.0会返回以下错误:

read problem <file.nl>
============

no reader for input file <file.nl> available

我不确定这是否是因为我无法使用AMPL支持或其他方式构建SCIP。我发现this blog post建立SCIP并支持AMPL,但由于SCIP 3.1.0的源zip文件不包含interfaces文件夹,因此说明似乎已过时。

所以,我有两个问题:

  1. 是否有可能让SCIP按原样识别我的MathProg输入?
  2. 如果没有,有人可以建议如何将其转换为公认的格式吗?自动化方法更可取,因为我真的不想学习另一种格式,但手动方法总比没有好。
  3. 感谢您对我的无知的任何帮助和道歉!

1 个答案:

答案 0 :(得分:3)

正如我在上面的评论中指出的那样,Ampl-interface仍然包含在SCIP发行版中,你应该能够编译它并阅读你的问题 正如您引用的优秀博客文章中所述。

如果你想尝试不同的文件格式,我会看到两个选项:

  1. 使用glpk将您的问题转换为SCIP可识别的file format。我找到了方法glp_write_mps()glp_write_lp。 SCIP可以读取.lp.mps个文件。确保您正好使用这些文件扩展名,因为SCIP无法识别.lp - 格式的文件,而是以.txt结尾。
  2. 使用Zimpl来制定您的问题。 ZimplAmpl两种格式非常相似,请参阅documentation示例和进一步参考。 Zimpl中的问题描述可以翻译成.lp - 格式或SCIP直接读取,如果您使用ZIMPL=true - 选项编译SCIP,这是默认选项。