我正在尝试使用MATLAB的内置linprog
函数或MATLAB CVX前端来解决优化问题。这些工具提供了一种简单的方法来模拟约束,例如A.x <= B
,Aeq.x == Beq
和a <= x <= b
。
我确信我的一些变量应该具有相同的绝对值。让我们说|x1| = |x2|
。对此约束进行建模的最佳方法是什么?
答案 0 :(得分:2)
这不是凸出的问题,因此无法使用您提到的工具直接解决。
它本质上是组合的,在某种意义上,你可以根据两个变量的符号枚举案例,并且对于每个这样的情况,线性相等都成立。因此,您可以通过简单地为每个案例求解线性程序并选择最佳解决方案来解决问题,或者使用二进制变量和逻辑建模来表示案例。既然你提到了cvx和linprog,你就在MATLAB中,我可以给你代码来实现YALMIP中的模型(免责声明,由我开发),它会自动通过引入二进制变量来模拟非凸等式。合适的分离
x = sdpvar(n,1)
Model = [A*x <= b, Aeq*x == beq, abs(x(1))==abs(x(2)), a<= x <= b]
optimize(Model)