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

Why I do not get the right answer

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

.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 即使 V[2,r] 最小化 obj 函数。

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

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

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 对您的 objective 函数,但我认为结果不可预测。

修改后的objective函数,最优解为:

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
;