MATLAB优化中变量的绝对值相等

MATLAB优化中变量的绝对值相等,matlab,optimization,Matlab,Optimization,我正在尝试使用MATLAB的内置linprog函数或MATLAB CVX前端解决优化问题。这些工具提供了一种简单的方法来建模约束,例如A.x,它不是一个凸问题,因此无法使用您提到的工具直接解决 它本质上是组合的,从这个意义上说,你可以根据两个变量的符号来列举案例,对于每一个这样的案例,线性等式成立。因此,您可以通过简单地为每种情况求解线性规划并选择最佳解决方案来解决问题,或者使用二进制变量和逻辑建模来表示这些情况。既然您提到了cvx和linprog,那么您就在MATLAB中,然后我可以给您代码来

我正在尝试使用MATLAB的内置
linprog
函数或MATLAB CVX前端解决优化问题。这些工具提供了一种简单的方法来建模约束,例如
A.x,它不是一个凸问题,因此无法使用您提到的工具直接解决

它本质上是组合的,从这个意义上说,你可以根据两个变量的符号来列举案例,对于每一个这样的案例,线性等式成立。因此,您可以通过简单地为每种情况求解线性规划并选择最佳解决方案来解决问题,或者使用二进制变量和逻辑建模来表示这些情况。既然您提到了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)
x=sdpvar(n,1)

型号=[A*x如果您的约束是绝对值,那么您的问题就不是线性的。但不确定凸编程工具。如果您没有太多的约束,您可能希望独立运行每个分支:
x2=x1
,和
x2=-x1
,并将变量计数减少一个。当然,但我不能这样做,原因有两个。第一个一个是你提到的一个(未知数量,有时两个以上的变量相等),另一个是两个变量都用于约束。假设
u1
u2
是向量,我有
u1'*x+u2'*x==0