首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MathProg到C++转换

MathProg到C++转换
EN

Stack Overflow用户
提问于 2014-02-12 18:50:43
回答 1查看 231关注 0票数 1

我用MathProg语言写了一个问题来检查我对一些混合整数问题的理解是否正确。过了一段时间,我就能搞清楚了,我可以假设这个解决方案是正确的。

代码语言:javascript
复制
GLPK Simplex Optimizer, v4.45
37 rows, 30 columns, 97 non-zeros
      0: obj =  -1.300000000e+01  infeas =  1.300e+01 (0)
*    10: obj =   7.677248677e+00  infeas =  0.000e+00 (0)
*    14: obj =   5.925925926e-01  infeas =  7.889e-31 (0)
OPTIMAL SOLUTION FOUND
Integer optimization begins...
+    14: mip =     not found yet >=              -inf        (1; 0)
+    15: >>>>>   5.925925926e-01 >=   5.925925926e-01   0.0% (2; 0)
+    15: mip =   5.925925926e-01 >=     tree is empty   0.0% (0; 3)
INTEGER OPTIMAL SOLUTION FOUND
Time used:   0.0 secs
Memory used: 0.2 Mb (204010 bytes)
...
Model has been successfully processed

但是我实际上需要的是在C++代码中实现的相同的例程。用GLPK重写这个问题花了我一段时间,但是在单元测试中,我发现C++版本没有返回一个解决方案,因为没有一个可行的解决方案。

代码语言:javascript
复制
GLPK Simplex Optimizer, v4.45
37 rows, 30 columns, 10 non-zeros
      0: obj =   0.000000000e+00  infeas =  2.000e+00 (16)
PROBLEM HAS NO FEASIBLE SOLUTION

显然,我犯了一些错误,我需要找出地点。

我是否可以使用一些调试或预览方法,例如,查看由我的C++代码和MathProg模型生成的模型来比较它们?简单地看一遍我可能搞砸的所有地方,也许是一些解决办法,但却是相当无效的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-13 19:50:00

过了一会儿,我想出了一种方法来一步一步地修复我的程序。

首先运行这样的MathProg程序:

代码语言:javascript
复制
glpsol -m model.mod -d data.dat --output solution.txt --wglp glp.mod

然后运行坏了的C++例程,在gtl_simplex之后运行以下命令:

代码语言:javascript
复制
glp_print_mip(problem, "broken_solution.txt");
glp_write_prob(problem, 0, "broken_glp.mod");

solution.txtbroken_solution.txt可以看出列约束定义和行约束定义之间的区别。当我们使用空闲变量作为约束创建模拟第一行等于成本函数时,它会有所帮助。通过旋转行和列定义,我们可以确保两个文件都以相同的顺序拥有它们各自的行和列定义。

一旦这些约束被修复,我们就可以开始修复实际的数据。glp.modbroken_glp.mod都将包含每个约束的定义以及每一行和每列的值。它们是1索引的,0行是成本函数因子.

如果在C++程序中,我们已经按照与MathProg生成的模型相同的顺序排列行和列,那么我们可以很容易地比较这两个文件--但是首先对它们进行排序,比如sort glp.mod > glp.sorted --即使我们以与MathProg文件相同的顺序定义行和列,它们的值也可能以不同的顺序出现。

过了一段时间,我能够修复我的程序,以执行与MathProg 1相同的例程。唯一的区别是显示的准确性,但这只是一个输出格式的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21736964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档