数学建模| 线性规划(Matlab)

线性规划(Matlab)

线性规划

线性规划:约束条件和目标函数都是线性的。简单点说,所有的决策变量在目标函数和约束条件中都是一次方。

Matlab函数

Matlab函数:

matlab 复制代码
[x, value] = linprog(func, A, b, Aeq, beq ,lb, ub);

参数解释:

  • func 表示目标函数。
  • A 表示不等式约束条件系数矩阵,b 表示不等式约束条件常数矩阵。
  • Aeq 表示等式约束条件系数矩阵,beq 表示等式约束条件常数矩阵。
  • lb 表示决策变量的下限数组,ub表示决策变量的上限数组。
  • x 表示目标函数 func 取得最小值时的决策变量取值数组。
  • value 表示目标函数 func 取得的最小值。

Matlab中线性规划的标准形式:
min ⁡ x c T x \min_x c^Tx xmincTx
s . t . { A x ⩽ b A e q ⋅ x = b e q l b ⩽ x ⩽ u b s.t. \begin{cases} Ax\leqslant b\\ Aeq\cdot x= beq\\ lb\leqslant x\leqslant ub\\ \end{cases} s.t.⎩ ⎨ ⎧Ax⩽bAeq⋅x=beqlb⩽x⩽ub

注意:

  • 对于不存在的约束用空矩阵[],意思是例如beq条件不存在,但是lb和ub条件存在,可以写成linprog(func, A, b, Aeq, [] ,lb, ub)。如果不是中间某个参数不存在,而是后面都不存在就可以省略,例如lb和ub不存在,可以写成linprog(func, A, b, Aeq, beq)。
  • 根据Matlab标准,默认求解最小值,如果要求解最大值,把目标函数变成相反数(系数全部乘以-1);约束条件默认求的都是小于等于或者等号,大于号得转成小于等于。就是说拿到一个目标函数和约束条件,放进Matlab求解前,要先转换为Matlab标准。

Matlab使用例子

步骤:按照数模题目进行建模,得到目标函数和约束条件,然后把目标函数和约束条件化为标准形式,再化成matlab里面矩阵形式,再填入代码中。

目标函数和约束条件:
m a x z = x 1 + x 2 − 3 x 3 max\quad z=x_1+x_2-3x_3 maxz=x1+x2−3x3
s . t . { x 1 + x 2 + x 3 = 6 x 1 − x 2 ≥ 2 x 1 + x 2 − 2 x 3 ≤ 5 x 1 , x 2 , x 3 ≤ 15 s.t. \begin{cases} x_1+x_2+x_3=6\\ x_1-x_2\geq2\\ x_1+x_2-2x_3\leq5\\ x_1,x_2,x_3\leq15\\ \end{cases} s.t.⎩ ⎨ ⎧x1+x2+x3=6x1−x2≥2x1+x2−2x3≤5x1,x2,x3≤15

根据Matlab标准化后的目标函数和约束条件:
m i n w = − x 1 − x 2 + 3 x 3 min\quad w=-x_1-x_2+3x_3 minw=−x1−x2+3x3
s . t . { x 1 + x 2 + x 3 = 6 − x 1 + x 2 + 0 ∗ x 3 ≤ − 2 x 1 + x 2 − 2 x 3 ≤ 5 x 1 , x 2 , x 3 ≤ 15 s.t. \begin{cases} x_1+x_2+x_3=6\\ -x_1+x_2+0*x_3\leq-2\\ x_1+x_2-2x_3\leq5\\ x_1,x_2,x_3\leq15\\ \end{cases} s.t.⎩ ⎨ ⎧x1+x2+x3=6−x1+x2+0∗x3≤−2x1+x2−2x3≤5x1,x2,x3≤15

约束条件矩阵化:
( 1 − 1 0 1 1 − 2 ) ( x 1 x 2 x 3 ) ≤ ( − 2 5 ) \left(\begin {array}{c} 1 &-1 &0 \\ 1 &1 &-2 \\ \end{array}\right) \left(\begin {array}{c} x_1\\ x_2\\ x_3\\ \end{array}\right) \leq \left(\begin {array}{c} -2\\ 5\\ \end{array}\right) (11−110−2) x1x2x3 ≤(−25)

1 1 1 \] ⋅ \[ x 1 x 2 x 3 \] T = 6 \\left\[\\begin {array}{c} 1\&1\&1 \\end{array}\\right\] \\cdot {\\left\[\\begin {array}{c} x_1\&x_2\&x_3 \\end{array}\\right\]}\^T=6 \[111\]⋅\[x1x2x3\]T=6 \[ x 1 x 2 x 3 \] T ≤ \[ 15 15 15 \] T {\\left\[\\begin {array}{c} x_1\&x_2\&x_3 \\end{array}\\right\]}\^T\\leq{\\left\[\\begin {array}{c} 15\&15\&15 \\end{array}\\right\]}\^T \[x1x2x3\]T≤\[151515\]T Matlab代码: ```matlab func=[-1;-1;3]; A=[1,-1,0;1,1,-1]; b=[-2;5]; aeq=[1,1,1] beq=6; ub=[15;15;15]; [x,value]=linprog(func,A,b,aeq,beq,[],ub); ``` 结果: ```matlab >> x x = -9.5000 15.0000 0.5000 >> value value = -4 ```

相关推荐
Wect3 小时前
LeetCode 130. 被围绕的区域:两种解法详解(BFS/DFS)
前端·算法·typescript
NAGNIP15 小时前
一文搞懂深度学习中的通用逼近定理!
人工智能·算法·面试
颜酱1 天前
单调栈:从模板到实战
javascript·后端·算法
CoovallyAIHub1 天前
仿生学突破:SILD模型如何让无人机在电力线迷宫中发现“隐形威胁”
深度学习·算法·计算机视觉
CoovallyAIHub1 天前
从春晚机器人到零样本革命:YOLO26-Pose姿态估计实战指南
深度学习·算法·计算机视觉
CoovallyAIHub1 天前
Le-DETR:省80%预训练数据,这个实时检测Transformer刷新SOTA|Georgia Tech & 北交大
深度学习·算法·计算机视觉
CoovallyAIHub1 天前
强化学习凭什么比监督学习更聪明?RL的“聪明”并非来自算法,而是因为它学会了“挑食”
深度学习·算法·计算机视觉
CoovallyAIHub1 天前
YOLO-IOD深度解析:打破实时增量目标检测的三重知识冲突
深度学习·算法·计算机视觉
NAGNIP2 天前
轻松搞懂全连接神经网络结构!
人工智能·算法·面试
NAGNIP2 天前
一文搞懂激活函数!
算法·面试