当在MathProg中无法使用LP时,打印完全不同的内容

手指

我正在使用MathProg(一种特定于GLPK库的语言,类似于AMPL的子集)来查找图的顶点的拓扑排名。这是我的线性编程课的作业。这是一个介绍性练习,以确保我们可以制定一个简单的线性程序并使用GLPK进行求解。

我已经编写了一个Perl脚本,该脚本在MathProg中为给定的图形生成线性程序。它通过来打印变量的值(顶点的秩)printf如果可行,那正是我想要的。否则,它会打印所有零,但我只想打印Infeasible, has cycles or loops.

我设法以一种怪异的方式做到了(见下文)。如何在不重复可行性条件的情况下更优雅地做到这一点?有没有一种方法可以检测不可行性,而这不取决于要解决的问题?

param Vsize := 3;
set V "Vertices" := (0..Vsize-1);
set E "Edges" within V cross V := {(0, 1), (1, 2), (2, 0)};

var v{i in V} >= 0;
minimize rank_total: sum{i in V} v[i];
edge{(i, j) in E}: v[j] - v[i] >= 1;

solve;

printf "#OUTPUT:\n";
printf (if ((exists{i in V} v[i] >= 1) or card(E) = 0) then "" else "Infeasible, has cycles or loops.\n");
printf{i in V} (if ((exists{j in V} v[j] >= 1) or card(E) = 0) then "v_%d: %d\n" else ""), i, v[i];
printf "#OUTPUT END\n";

end;

我试图声明,param Feasible binary := (exists{i in V} v[i] >= 1) or card(E) = 0;但GLPK拒绝了Model processing error当我之前宣布它时solve,它说operand preceding >= has invalid type,之后之后,它说expression following := has invalid type我正在寻找通用编程语言中的变量之类的东西。

维他命

在AMPL中,您可以检查内置参数solve_result以查看问题是否不可行:

if solve_result = 'infeasible' then
  print 'Infeasible, has cycles or loops.';

但是,我不确定GLPK是否支持此参数,在这种情况下,您可能需要手动检查可行性。

至于错误,由于exists是逻辑表达式,因此不能将其用作数字表达式。解决方法是将逻辑表达式简单地放在if

param Feasible binary :=
  if (exists{i in V} v[i].val >= 1) or card(E) = 0 then 1;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用“std::cout”打印相同指针的连续行产生完全不同的输出

如何使用jQuery或JavaScript从字符串中查找完全不同的数字

如果字符串中的内容与模式所检查的完全不同,则正则表达式返回false

Swift中的阴影与Sketch中的阴影完全不同

打印多行不同的内容时,while循环无法正常工作

RSS Feed与浏览器中的显示完全不同

通用应用中iPad的UI完全不同

语言检测中的测试集与训练集完全不同

Pytesseract的输出与图像中的文本完全不同

在完全不同的类中构造子类对象

如何使用.replace()和.substring()修复完全不同的输出?

如何使用Random使Java中生成的数字完全不同?

(PostgreSQL、Node.js 和 Discord.js)。为什么我的查询输出显示的内容与数据库中的内容完全不同?

我必须使用2种方法从最大到最小排列此数组中的元素,但输出完全不同

程序打印出与预期的字符串完全不同的字符串

如何基于屏幕分辨率发送完全不同的HTML内容?

是否可以使用单个DHCP服务器将完全不同范围的IP推送到不同LAN中的不同网络接口?

基于ng-repeat中不同值的完全不同的dom结构

QR码在扫描时是否可以给出随机数或完全不同的数字?

当强制类型转换为完全不同的类时,static_cast的行为如何?

为MySql生成完全不同的UUID

从 Firebase 检索完全不同的密钥

完全不同的手机视图

ResolveMethod()返回完全不同的方法

回声以完全不同的方式工作

以完全不同的格式混合数据

Unity PC版与Android完全不同

Mapbox 相机去到完全不同的位置

当在 java 中无法发现 wsdl 时,使用soap web 服务的推荐方法是什么?