MATLAB求解带绝对值的规划问题

对于带有绝对值的非线性规划问题,尽量进行手工线性化再根据线性规划的方法去做。

例如:

对于 ∣ x i ∣ \vert x_i \vert ∣xi∣,我们无法运用正常的线性规划方式进行求解,因此我们可以进行变量变换,将模型转换为线性规划模型。

我们可以用两个线性规划变量来表示,令 u i = x i + ∣ x i ∣ 2 , v i = ∣ x i ∣ − x i 2 , i = 1 , 2 , 3 , 4 u_i= \dfrac {x_i+\vert x_i \vert} 2,v_i=\dfrac {\vert x_i \vert-x_i} 2,i=1,2,3,4 ui=2xi+∣xi∣,vi=2∣xi∣−xi,i=1,2,3,4

令 u u u= [ u 1 , u 2 , u 3 , u 4 ] T , v = [ v 1 , v 2 , v 3 , v 4 ] T [u_1,u_2,u_3,u_4]^T,v=[v_1,v_2,v_3,v_4]^T [u1,u2,u3,u4]T,v=[v1,v2,v3,v4]T

则转换成的线性规划模型为:
m i n min min c T ( u + v ) c^T(u+v) cT(u+v)
s t st st { A ( u − v ) ≤ b u , v ≥ 0 \left\{ \begin{matrix} A(u-v)\leq b \\ u,v\geq0 \end{matrix} \right. {A(u−v)≤bu,v≥0

所以我们在线性规划方程中添加一个变量就可以了。

matlab 复制代码
c=[1,2,3,4];b=[-2;-1;-1/2];
a=[1,-1,-1,1;1,-1,1,-3;1,-1,-2,3];
prob=optimproblem('ObjectiveSense','min');//目标函数最小化,也可以写成prob=optimproblem;
u=optimvar('u',4,'LowerBound',0)//决策变量
v=optimvar('v',4,'LowerBound',0)//决策变量
prob.Objective=sum(c*(u+v))//目标函数
prob.Constraints.con=a*(u-v)<=b//约束条件
[sol,fval,flag,out]=solve(prob)//fval返回了最优值
x=sol.u-sol.v//求出xi的值

结果为

则最优解为 x 1 = − 2 , x 2 = x 3 = x 4 = 0 x_1=-2,x_2=x_3=x_4=0 x1=−2,x2=x3=x4=0.

最优值 f v a l = 2 fval=2 fval=2.

相关推荐
胡萝卜3.01 小时前
掌握C++ map:高效键值对操作指南
开发语言·数据结构·c++·人工智能·map
电子_咸鱼1 小时前
【STL string 全解析:接口详解、测试实战与模拟实现】
开发语言·c++·vscode·python·算法·leetcode
沐知全栈开发2 小时前
ionic 选项卡栏操作详解
开发语言
曹牧2 小时前
C#中,#region和#endregion
开发语言·c#
顾安r2 小时前
11.22 脚本打包APP 排错指南
linux·服务器·开发语言·前端·flask
蒙小萌19932 小时前
Swift UIKit MVVM + RxSwift Development Rules
开发语言·prompt·swift·rxswift
Z***25803 小时前
Java爬虫框架
java·开发语言·爬虫
hateregiste3 小时前
C语言中如何优雅、准确、高效地设计和处理输入输出
c语言·开发语言·scanf·输入输出
SundayBear3 小时前
C语言复杂类型声明完全解析:从右左原则到工程实践
c语言·开发语言·数据结构·嵌入式
90后小陈老师4 小时前
用户管理系统 05 实现后端注册功能 | Java新手实战 | 最小架构 | 期末实训 | Java+SpringBoot+Vue3
java·开发语言·spring boot·后端·spring·maven·mybatis