matlab求解线性规划问题(附样例代码)

前言

线性规划问题,相信任何一个上过高中的人都对它不陌生。给你多个变量,让你求在某个约束条件下目标函数的最大或者最小值。

在高中,我们做的一般都是规模较小情况下的线性规划问题,但如果约束条件或者变量多达几万个,手算就不太可能做出来了。幸运的是,matlab提供了相应的工具帮助我们求解线性规划问题。

标准方程

首先,我们先规定线性规划方程的标准方程,具体如下:

\min \limits_{x} \textbf{f}^\text{T}\textbf{x} \newline \newline \newline s.t. \left\{\begin{matrix} \textbf{A} \cdot \textbf{x} \leq \textbf{b} \\ \textbf{Aeq} \cdot \textbf{x} = \textbf{beq} \\ \textbf{lb} \leq \textbf{x} \leq \textbf{ub} \end{matrix}\right.

其中,f、x、b、beq、lb、ub均为列向量,其中f为价值向量,b为资源向量;A,Aeq为不等式约束的相关矩阵。你可能会问,假如我要求的是最大值或者方程中不等号是大于号怎么办?很简单,给两边加上负号,不等号变号(或者max变成min,不过要记得最后要取最优目标函数值相反数),就和标准方程一样了。

linprog函数

matlab为我们提供了一个linprog函数,具体使用方式是[x,y] = linprog(f,A,b,Aeq,beq,lb,ub)  (如果方程里没有lb和ub则可以直接忽略这两项,Aeq和beq同理),其中y为目标函数值,其他和上述标准方程定义一致。

具体实例

\max z=2x-y \newline \newline \newline s.t. \left\{\begin{matrix} x+y-7 \leq 0\\ x-3y+1 \leq 0\\ 3x-y-5\geq 0 \\ 2x-y = 8\\ 4 \leq x \leq 5\\ 2 \leq y \leq 3 \end{matrix}\right.

我们从这个方程可以提取到:

\textbf{f} = \begin{bmatrix} -2\\ 1 \end{bmatrix} \newline \newline \newline \newline \textbf{A}=\begin{bmatrix} 1 & 1 \\ 1&-3 \\ -3& 1 \end{bmatrix} \newline \newline \newline \newline \textbf{b} = \begin{bmatrix} 7\\ -1\\ -5 \end{bmatrix} \newline \newline \newline \newline \textbf{Aeq}= \begin{bmatrix} 2 & -1 \end{bmatrix} \newline \newline \newline \newline \textbf{beq} = \begin{bmatrix} 8 \end{bmatrix} \newline \newline \newline \newline \textbf{lb}= \begin{bmatrix} 4\\ 2 \end{bmatrix} \newline \newline \newline \newline \textbf{ub}= \begin{bmatrix} 5\\ 3 \end{bmatrix}

使用linprog函数即可求得答案:当x取5,y取2时,z的最大值为8(如果显示是-8,那么是因为你求的是最小值,需要取相反数)

样例matlab代码

clear;
clc;
f=[-2;1];
A=[1,1;1,-3;-3,1];
b=[7;-1;-5];
Aeq=[2,-1];
beq=[8];
lb=[4;2];
ub=[5;3];
[x,z]=linprog(f,A,b,Aeq,beq,lb,ub);
z=-z;

最后输出找到最优解,同时x变成[5;2],z变成8。

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值