我只是学习GLPK工具来解决我的数学模型。
实际上,我的模型将使用幂运算符将此问题转化为非线性问题。
简短的代码如:
set I;
var x{I} binary;
var V{I};
maximize M: sum{i in I} V[i];
subject to C1: sum{i in I} x[i] <=1;
subject to C2{i in I}: V[i] = 2^x[i];
//I want to use variable x to compute V, and my objective function dependent on V
data;
set I := i1 i2 i3;
我想问一下这个问题是否合理?是否可以通过GLPK解决? 我尝试使用一些条件表达式来实现我的对象,但我不熟悉这种语言。 有没有其他工具可以解决这样的问题? 谢谢你的帮助。
答案 0 :(得分:2)
像GLPK这样的MILP求解器要求你的约束是线性的。由于幂运算符是非线性的,因此会遇到问题。
有一个简单的转换解决方案
V[i] == 2^x[i]
到线性表达式,当x [i]是二进制变量时。在x[i] = 0
,V[i] = 2^0 = 1
时。当x[i] = 1, V[i] = 2^1 = 2
时。因此,您可以将V[i]
表达为
V[i] == 1 + x[i]
x[i] = 0
,1 + x[i] = 1
。在x[i] = 1
,1 + x[i] = 2
。