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

时间:2019-05-12 23:28:38

标签: optimization linear-programming ampl glpk

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

.mod文件:

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文件:

 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最小化obj函数,它也总是给我V[2,r]

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

1 个答案:

答案 0 :(得分:2)

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

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针对您的目标函数在做什么,但我只是将结果视为不可预测。

通过修改后的目标函数,最佳解决方案是:

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
;