Я думаю, что логически следующий код правильный, но я получаю неправильный ответ:
.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)
является самым отрицательным.