为什么我没有得到正确的答案
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
;
我认为逻辑上下面的代码是正确的,但我得到了错误的答案:
.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
;