首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么我没有得到正确的答案

为什么我没有得到正确的答案
EN

Stack Overflow用户
提问于 2019-05-12 23:28:38
回答 1查看 64关注 0票数 0

我认为从逻辑上讲,下面的代码是正确的,但我得到了错误的答案:

.mod文件:

代码语言:javascript
复制
set R := {1,2};
set D1 := {1,2,4,5};
set P1 := {1,2,3,4,5};
var V{D1,R}, binary;
param Ud{D1,R} ; 
param  U{P1,R} ;

minimize obj{p in D1, r in R}: V[p,r] * (Ud[p,r]+ sum{j in P1: j!=p} U[j,r]); 


 s.t. a10{ r in R }: sum{p in D1} V[p,r]=2 ;

.dat文件:

代码语言:javascript
复制
 param  Ud: 1  2:=
1     -10     -6
2      -20   -4
4      1      -10
5       -4     -4;   




param  U: 1      2  :=
1          -8.1  -3
2          -6.8  -8
3          -7.2   1
4          -16     -4
5           -6.8   -4;

基本上,对于每个r和两个p,我希望最小化(Ud[p,r] + sum{j in P: j!=p} U[j,r])

但是它总是给我V[1,r]=v[5,r]=1,即使V[2,r]最小化obj函数。

我只想得到V[2,r]=1,因为-20 + (-8.1-7.2 -16-6.8)是最负面的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-13 13:12:03

目标函数的语法不正确;它应该是

代码语言:javascript
复制
minimize obj: sum {p in D1, r in R} V[p,r] * (Ud[p,r]+ sum{j in P1: j != p} U[j,r]); 

(请注意冒号(:)的位置和sum的存在。)老实说,我不太清楚AMPL在响应你的目标函数时做了什么,但我认为结果是不可预测的。

通过修正的目标函数,最优解是:

代码语言:javascript
复制
ampl: display V;
V :=
1 1   1
1 2   1
2 1   1
2 2   0
4 1   0
4 2   1
5 1   0
5 2   0
;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56104279

复制
相关文章

相似问题

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