如何在GLPK上使用电源操作器

时间:2014-04-08 08:33:14

标签: linear-programming glpk

我只是学习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解决? 我尝试使用一些条件表达式来实现我的对象,但我不熟悉这种语言。 有没有其他工具可以解决这样的问题? 谢谢你的帮助。

1 个答案:

答案 0 :(得分:2)

像GLPK这样的MILP求解器要求你的约束是线性的。由于幂运算符是非线性的,因此会遇到问题。

有一个简单的转换解决方案

  V[i] == 2^x[i] 

到线性表达式,当x [i]是二进制变量时。在x[i] = 0V[i] = 2^0 = 1时。当x[i] = 1, V[i] = 2^1 = 2时。因此,您可以将V[i]表达为

  V[i] == 1 + x[i]

x[i] = 01 + x[i] = 1。在x[i] = 11 + x[i] = 2