【Matlab】线性规划模型

线性规划定义:在一组线性约束条件(s.t.)的限制下,求一线性目标函数最值的问题

一般线性规划问题的Matlab标准型为:

 \mathop{min}\limits_{x}\ f^Tx\\\\ s.t.\left\{ \begin{aligned} &A\cdot x\leq b, \\ &Aeq\cdot x=beq,\\ &lb\leq x\leq ub \end{aligned} \right.

其中f, x, b, beq, lb, ub 均为列向量,A, Aeq 为矩阵

符号名称
f价值向量
x决策向量
b资源向量
lb下限向量
ub上限向量

满足约束条件的解被称为可行解,使目标函数达到最大的解称为最优解

所有可行解构成的集合成为问题的可行域,记为R

matlab 求解方程为:

[ x, y ] = linprog( f, A, b)

[ x, y ] = linprog( f, A, b, Aeq, beq)

[ x, y ] = linprog( f, A, b, Aeq, beq, lb, ub)

x 返回决策向量的最优取值,fval 返回目标函数最优解,若没有相应约束条件,则对应位置数据为空:[]

代码模板:


 

变式1:

 \begin{aligned} &min\ f_1|x_1|+f_2|x_2|+...+f_n|x_n|\\\\&s.t.\ A\cdot x\leq b \end{aligned}

我们知道:对于任意实数 x,总存在非负实数 u 和 v,使得 x=u-v,|x|=u+v

证明如下:

当 x\geq 0 时,x = u 且 v = 0;当 x\leq0 时,x = -v且 u=0。

如此一来,我们可以表示出 u 和 v:

u=\frac{|x_i|+x_i}{2},v=\frac{|x_i|-x_i}{2}

我们可以把上面的问题变为:

\begin{aglined} &min\ f_1(u_1+v_1)+f_2(u_2+v_2)+...+f_n(u_n+v_n)\\&s.t. \left\{\begin{aglined} &A\cdot (u-v)\leq b\\ &u,v\geq0 \end{aglined} \right.\end{aglined}

化为矩阵形式:

\begin{aligned} &min\ f^Ty\\\\ &s.t.\left\{\begin{aligned} &[A,-A]\begin{bmatrix} u\\v \end{bmatrix} \leq b\\ &\begin{bmatrix} 0\\...\\0 \end{bmatrix}\leq\begin{bmatrix} u\\v \end{bmatrix} \end{aligned} \right. \end{aligned}

其中:f=[f;f],A=[A,-A]

返回的 y 是一个长度为 2n 的列向量,其前 n 个元素为 u,后 n 个元素为 v,因此我们可以通过 y 计算 x:

x = y(1:n) - y(n+1:end)

代码模板:


 

变式2:

\mathop{min}\limits_{x_i}\{\mathop{max}\limits_{y_i}\ \varepsilon \} 其中 \varepsilon 是关于 x_i 和 y_i 的表达式。

我们令 v=\mathop{max}\limits_{y_i}\ \varepsilon,所以约束条件为:v\geq\varepsilon,即:

\begin{aligned} & min\ v\\ &s.t.\ v\geq \varepsilon \end{aligned}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

六月渔烬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值