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.

相关推荐
Anastasiozzzz5 分钟前
Java异步编程:CompletableFuture从入门到底层实现
java·开发语言
九.九25 分钟前
高性能算子库 ops-nn 的底层架构:从调度到指令的极致优化
开发语言
比奇堡派星星26 分钟前
sed命令
linux·运维·服务器·开发语言
船神丿男人29 分钟前
C++:STL string(一)
开发语言·c++
程序员zgh34 分钟前
Linux 内存管理单元 MMU
linux·运维·服务器·c语言·开发语言·c++
想做功的洛伦兹力11 小时前
2026/2/12日打卡
开发语言·c++·算法
大模型玩家七七1 小时前
技术抉择:微调还是 RAG?——以春节祝福生成为例
android·java·大数据·开发语言·人工智能·算法·安全
逍遥德1 小时前
编程技能点小记之if-else条件分支合理用法
java·开发语言·代码规范·代码复审·极限编程·代码覆盖率
低调小一1 小时前
Fresco 图片加载全链路解析:从 SimpleDraweeView 到 Producer 责任链
android·开发语言·fresco
_周游1 小时前
Java8 API文档搜索引擎_7.项目优化之权重合并
java·开发语言·前端·搜索引擎·intellij-idea