Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 当一个变量属于一个集合时,如何求解整数线性规划_Matlab_Linear Programming_Cplex_Lpsolve - Fatal编程技术网

Matlab 当一个变量属于一个集合时,如何求解整数线性规划

Matlab 当一个变量属于一个集合时,如何求解整数线性规划,matlab,linear-programming,cplex,lpsolve,Matlab,Linear Programming,Cplex,Lpsolve,我正在使用整数线性规划解决优化问题,其中一个约束假设变量的值属于一组值,如下所示 min 5*x1 + 2*x2 s.t. x1,x2>0 x1 in {2,4,-5} 如何在matlab中用CPLEX或lp_solve表示这个问题来解决它?F、A、b数组的值是多少 多亏了您可以重写一个问题,在这个问题中,一个整数变量作为一个二进制程序在更多变量中接受一组有限的不连续的可能整数值。只要写下: 2 * b1 + 4 * b2 -5 * b3 - x1 = 0 b1 + b2 + b

我正在使用整数线性规划解决优化问题,其中一个约束假设变量的值属于一组值,如下所示

 min 5*x1 + 2*x2
 s.t.
 x1,x2>0
 x1 in {2,4,-5}
如何在matlab中用CPLEX或lp_solve表示这个问题来解决它?F、A、b数组的值是多少


多亏了

您可以重写一个问题,在这个问题中,一个整数变量作为一个二进制程序在更多变量中接受一组有限的不连续的可能整数值。只要写下:

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您可以尝试的一件事是编写
x1=2*b1+4*b2-5*b3
s.t.
0@BenVoigt:这会起作用,但您需要附加
(b1+b2+b3)@dhrumeel:对不起,是的。我本来打算是b1+b2+b3=1,但后来忘了在我的问题中输入这个。(需要相等,因为不允许使用
x1=0
)原始问题中的边界
x1,x2>0
已经避免了x1=0。我想这也使得(-5)这个词显得多余了。此外,许多ILP解算器不接受等式约束,因此如果我们想要等式,我们需要说
b1+b2+b3=1
@dhrumeel:是的,我介绍了转换等式约束的著名方法,以及使其与内点方法兼容的技巧。是否允许严格的不等式约束取决于求解方法(例如,障碍法解算器使所有不等式严格)。当然,可以使用
-x1
 Ax <= b
-Ax <- -b
 Ax - e <= b
-Ax - e <= -b