让我们考虑一个参数A
,该参数采用一个非负索引并返回一个整数。我想在优化过程中使用A
的值,所以我创建了一个整数变量B
。我的目标是使用B
作为A
的自变量,以便优化程序可以选择最佳索引来优化模型。>
以下代码是我尝试执行的操作的示例:
parameter A(*) "Parameter A" /
0 0,
1 10,
2 30,
3 45,
4 82
/;
display A;
integer variable B "Integer B, used as an index for parameter A";
free variable z "Variable to maximize";
equations profit "Profit";
profit.. z =e= A(B);
model m / all /;
solve m using MIP maximizing z;
当我尝试对其进行编译时,GAMS在定义方程式profit
的那一行返回以下错误:
Set expected
有没有办法实现我的目标?
答案 0 :(得分:1)
您可以使用n个二进制变量而不是整数变量(在解决方案中,其中一个只能是1),然后将它们耦合到A。看起来可能像这样:
Set i /0*4/;
parameter A(i) "Parameter A" /
0 0,
1 10,
2 30,
3 45,
4 82
/;
display A;
binary variable B(i);
free variable z "Variable to maximize";
equations profit "Profit"
oneB;
profit.. z =e= sum(i,A(i)*B(i));
oneB.. sum(i,B(i)) =l= 1;
model m / all /;
solve m using MIP maximizing z;