我正在尝试解决设施位置问题。这是我的代码:
set S;
param prod{i in S};
param distri{i in S};
param fixed{i in S};
param cap{i in S};
param demand{i in S};
var x{i in S, j in S}, >= 0;
var y{i in S}, binary;
minimize obj :
sum{i in S} fixed[i]*y[i] +
sum{i in S, j in S} x[i,j]*(prod[i] + distri[i])*y[i];
s.t. c1{i in S}:
sum{j in S} x[i,j]*y[i] <= cap[i];
s.t. c2{i in S}:
sum{j in S} x[j,i]*y[j] = demand[i];
display S;
solve;
printf '\n Solution: \nMinimum Cost = %.2f\n', obj;
display x;
display y;
data;
set S := 0 1 2 3;
param prod :=
0 20
1 30
2 40
3 50;
param distri :=
0 60
1 70
2 80
3 90;
param fixed :=
0 10
1 15
2 10
3 15;
param cap :=
0 100
1 110
2 120
3 130;
param demand :=
0 120
1 60
2 70
3 100;
end;
当我运行此.mod
文件时,我收到以下错误:
example.mod:13: multiplication of linear forms not allowed
Context: S } x [ i , j ] * ( prod [ i ] + distri [ i ] ) * y [ i ] ;
MathProg model processing error
这里 x 是设施“i”为客户“j”提供的部分需求。
我从提到的行中删除了 y[i] 并且错误消失了。但是如果我这样做,我会得到相同的乘法错误,但这次是c1
受限的。
什么是正确的方法?谢谢你。