GAMS - 整数变量作为索引
GAMS - Integer variable as index
让我们考虑一个采用非负索引和 returns 整数的参数 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 returns 在我定义方程 profit
:
的行中出现以下错误
Set expected
有没有办法实现我想做的事情?
您可以使用 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;
让我们考虑一个采用非负索引和 returns 整数的参数 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 returns 在我定义方程 profit
:
Set expected
有没有办法实现我想做的事情?
您可以使用 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;