首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MathProg域外

MathProg域外
EN

Stack Overflow用户
提问于 2014-09-23 22:31:23
回答 2查看 2.1K关注 0票数 1

我需要使用GLPK解决一个问题,实际上我需要的是计算两个数组中元素之间的差异,但是,我收到了域外的错误,我希望你能修复它,因为我对这个错误一无所知

代码语言:javascript
复制
set cols1;
set cols2;
set w;
set range:=1..2;
#set Groups;
#set Items{Groups} ;
param p1{cols1}>=0;
param p2{cols2}>=0;
param uf{w}>=0;
var x>=0;
maximize regret: x;
s.t. a: sum { i in range } (p1[i] -p2[i]) * uf[i]>=x;
s.t. b: sum { i in range } p2[i] * uf[i] =1;
data;
set cols1:=40  110;
set cols2:=51 134;
set w:= 0.8 0.2;
#set Groups := {cols1, cols2, w};
end;
EN

回答 2

Stack Overflow用户

发布于 2014-10-13 11:35:22

constraint b不包含变量,只包含参数:

代码语言:javascript
复制
s.t. b: sum { i in range } p2[i] * uf[i] =1;

也许这导致了glpk中的域外错误。最好将其重写为check语句:

代码语言:javascript
复制
check: sum { i in range } p2[i] * uf[i] =1;

此外,参数p1p2uf也没有数据。

票数 0
EN

Stack Overflow用户

发布于 2015-03-10 23:40:24

Out of Domain错误位于两个约束的sum{i in range}语句中。

参数p1{cols1}的索引如下

代码语言:javascript
复制
p1[40]
p1[110]

在sum语句中,使用既不是40也不是110range对p1进行索引。

在这个gmpl示例中还有一些其他的东西。正确的索引应如下所示:

代码语言:javascript
复制
set range:={1,2};
param p1{range}>=0;
param p2{range}>=0;
param uf{range}>=0;
var x>=0;
maximize regret: x;
s.t. a: sum { i in range } (p1[i] -p2[i]) * uf[i]>=x;
s.t. b: sum { i in range } p2[i] * uf[i] =1;
data;
param p1:=1 40 2 110;
param p2:=1 51 2 134;
param uf:= 1 0.8 2 0.2;
end;

但还有一个技术含量较低的问题。就像vitaut已经提到的,你的第二个约束看起来不对,会使你的问题变得不可行。因为您的参数不满足equal 1约束。

代码语言:javascript
复制
51 * 0.8 + 134 * 0.2 != 1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25997771

复制
相关文章

相似问题

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