0

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

4

1 回答 1

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.

于 2014-04-10T17:16:43.787 回答