【问题标题】:Is it possible to convert a MathProg MIP file to a format recognised by SCIP?是否可以将 MathProg MIP 文件转换为 SCIP 可识别的格式?
【发布时间】:2014-08-31 05:41:56
【问题描述】:

我一直在使用 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 在构建支持 AMPL 的 SCIP,但说明似乎已经过时,因为 SCIP 3.1.0 的源 zip 不包含 interfaces 文件夹。

所以,我有两个问题:

  1. 是否可以让 SCIP 按原样识别我的 MathProg 输入?
  2. 如果没有,谁能建议如何将其转换为可识别的格式?自动化方法会更好,因为我真的不想学习另一种格式,但手动方法总比没有好。

感谢您的帮助并为我的无知道歉!

【问题讨论】:

  • 压缩包确实有一个interfaces-目录。它位于 SCIP 主目录中,也就是 SCIP 优化套件的 SCIP 子目录中,如果您下载了后者。
  • 谢谢,不知道我是怎么错过的!不幸的是,scipampl 没有将 MathProg 数据识别为有效的 AMPL,所以我认为 MathProg 和 AMPL 之间的关系比我希望的要复杂。
  • scipampl 是一个 AMPL 求解器,因此它接受 .nl 格式的输入 (en.wikipedia.org/wiki/Nl_(format))。我不认为 MathProg 支持这一点。

标签: glpk scip mathprog


【解决方案1】:

正如我在上面的评论中指出的那样,Ampl 接口仍然包含在 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。

【讨论】:

  • 标记为已接受是有用的信息,尽管它并没有让我找到解决方案。一位同事找到了我正在寻找的答案:glpsol 包括将 MathProg 转换为 .lp 格式的选项,该格式已被 SCIP 接受。如果它对其他人有用,方法如下:glpsol --check --wlp newfilename.lp --math oldfilename.glpk
  • 感谢您发布解决方案。我不习惯 glpk,当我下载它来回答你的问题时,我认为唯一的访问方式是将库包含到自己的项目中,我想你一定已经写过了。我不太明白有一个独立的可执行文件glpsol,手册也没有给我提示。
猜你喜欢
  • 1970-01-01
  • 2014-10-03
  • 2019-02-09
  • 2020-01-27
  • 2011-05-29
  • 1970-01-01
  • 1970-01-01
  • 2022-01-16
  • 1970-01-01
相关资源
最近更新 更多