我正在使用整数线性编程来解决优化问题,其中一个约束假设变量的值属于一组值,如下所示
min 5*x1 + 2*x2
s.t.
x1,x2>0
x1 in {2,4,-5}
如何在matlab中使用CPLEX或lp_solve来解决此问题? F,A,b数组的值是多少?
由于
答案 0 :(得分:1)
您可以重写一个问题,其中整数变量采用有限的不连续的可能整数值集作为更多变量中的二进制程序。只需写下:
2 * b1 + 4 * b2 -5 * b3 - x1 = 0
b1 + b2 + b3 = 1
b1, b2, b3
约束为二进制。这可能是直接支持的,或表示为
b1, b2, b3 integer
0 <= b1, b2, b3 <= 1
如果不允许平等约束,请记住一对不等式约束是等效的。
Ax = b;
与
相同 Ax <= b
-Ax <- -b
但解决方案集仍然没有内部,所以内部点方法无法工作。您可以通过以下方式放松:
Ax - e <= b
-Ax - e <= -b
并使用您的目标函数最小化e
。