线性规划简介

线性规划(Linear programming,简称LP),是运筹学中研究较早、发展较快、应用广泛、方法较成熟的一个重要分支,它是辅助人们进行科学管理的一种数学方法。研究线性约束条件下线性目标函数的极值问题的数学理论和方法。英文缩写LP。

线性规划是运筹学的一个重要分支,广泛应用于军事作战、经济分析、经营管理和工程技术等方面。为合理地利用有限的人力、物力、财力等资源作出的最优决策,提供科学的依据。

线性规划模型的三要素

线性规划模型主要包括三个部分:决策变量、目标函数、约束条件

决策变量
决策变量是指问题中可以改变的量,例如生产多少货物,选择哪条路径等;线性规划的目标就是找到最优的决策变量。
在线性规划中决策变量包括实数变量,整数变量,0-1变量等。

目标函数
目标函数就是把问题中的决策目标量化,一般分为最大化目标函数和最小化目标函数。在线性规划中,目标函数为一个包含决策变量的线性函数,例如
maxx1+x2\text{max}\quad x_1 +x_2 maxx1​+x2​
约束条件

约束条件是指问题中各种时间,空间,人力,物力等限制。在线性规划中约束条件一般表示为一组包含决策变量的不等式,例如
x1+2x2≤104x1+3x2≤24\begin{array}{r} x_{1}+2 x_{2} \leq 10 \\ 4 x_{1}+3 x_{2} \leq 24 \end{array} x1​+2x2​≤104x1​+3x2​≤24​
此外,决策变量的取值范围称为符号约束,例如:
x1≥0,x2≥0x_1 \geq 0,x_2\geq 0 x1​≥0,x2​≥0

线性规划模型的数学表示

线性规划模型可以写成如下形式:
max⁡z=x1+x2s.t. x1+2x2≤104x1+3x2≤24x1,x2≥0\begin{aligned} &\max \quad z=x_{1}+x_{2}\\ &\text { s.t. } \quad x_{1}+2 x_{2} \leq 10\\ &\begin{array}{r} \quad \quad 4 x_{1}+3 x_{2} \leq 24 \\ \quad x_{1}, x_{2} \geq 0 \end{array} \end{aligned} ​maxz=x1​+x2​ s.t. x1​+2x2​≤104x1​+3x2​≤24x1​,x2​≥0​​
其中, s.t.s.t.s.t. 表示 subjecttosubject \; tosubjectto 的缩写。

上述模型的矩阵形式如下:
max⁡z=cTxs.t. Ax≤bx≥0\begin{array}{rr} \max & z=c^{T} x \\ \text { s.t. } & A x \leq b \\ & x \geq 0 \end{array} max s.t. ​z=cTxAx≤bx≥0​
对于有 nnn 个决策变量, mmm 个约束的线性规划模型,c,xc,xc,x 为 nnn 维列向量,bbb 为 mmm 为列向量,AAA 为 m∗nm*nm∗n 维系数矩阵。

单纯型法标准型与编程过程的“标准型”

单纯型法:

​ 单纯型法思路就是在 可行域的一个顶点处找到一个初始可行解判断该解是不是最优,若不是,则迭代到下一个顶点处进行重复判断。因为最优解的搜索范围从整个可行域缩小到了可行域的有限个顶点,算法的效率得到了极大的提升。

在单纯型法中,我们通过增加变量等将约束条件变成等式。在编程中,一般支持直接写等式约束小于等于约束

在单纯型法中,我们将最大化目标函数视为标准型。在编程中,我们将最小化目标函数作为标准型。

Python 求解线性规划模型

编程思路:

1. 选择适当的决策变量

在解决实际问题时,把问题归结成一个线性规划数学模型是很重要的一步,但往往也是困难的一步,模型建立得是否恰当,直接影响到求解。而选适当的决策变量,是我们建立有效模型的关键之一。

2.将求解目标简化为求一个目标函数的最大/最小值

能把要求解的问题简化为一个最值问题是能否使用线性规划模型的关键,如果这一点不能达到,之后的工作都有没有意义的。

3. 根据实际要求写出约束条件(正负性,资源约束等)

线性规划的约束条件针对不同的问题有不同的形式,总结来说有以下三种:等式约束、不等式约束、符号约束

考虑以下线性规划问题:
max⁡z=2x1+3x2−5x3s.t. x1+x2+x3=72x1−5x2+x3≥10x1+3x2+x3≤12x1,x2,x3≥0\begin{array}{r} \max z=2 x_{1}+3 x_{2}-5 x_{3} \\ \text { s.t. } \quad x_{1}+x_{2}+x_{3}=7 \\ 2 x_{1}-5 x_{2}+x_{3} \geq 10 \\ x_{1}+3 x_{2}+x_{3} \leq 12 \\ x_{1}, x_{2}, x_{3} \geq 0 \end{array} maxz=2x1​+3x2​−5x3​ s.t. x1​+x2​+x3​=72x1​−5x2​+x3​≥10x1​+3x2​+x3​≤12x1​,x2​,x3​≥0​
Step1:导入相关函数库:

import numpy as np
from scipy import optimize as op

Step2: 定义决策变量:

# 给出变量取值范围
x1=(0,None)
x2=(0,None)
x3=(0,None)

Step3: 将原问题化为标准形式

注意:编程时默认为最小化目标函数,因此这里改为 ;第二个约束为大于等于约束,这里化为小于等于约束;

Step4: 定义目标函数系数和约束条件系数

c=np.array([-2,-3,5])   # 目标函数系数,3x1列向量A_ub=np.array([[-2,5,-1],[1,3,1]]) # 不等式约束系数A,2x3维矩阵
B_ub=np.array([-10,12])  # 等式约束系数b, 2x1维列向量
A_eq=np.array([[1,1,1]])  # 等式约束系数Aeq,3x1维列向量
B_eq=np.array([7])   # 等式约束系数beq,1x1数值

Step5: 求解

res=op.linprog(c,A_ub,B_ub,A_eq,B_eq,bounds=(x1,x2,x3)) #调用函数进行求解
print('结果如下:\n',res)

完整代码如下:

import numpy as np
from scipy import optimize as op
# 给出变量取值范围
x1=(0,None)
x2=(0,None)
x3=(0,None)
c=np.array([-2,-3,5])   # 目标函数系数,3x1列向量A_ub=np.array([[-2,5,-1],[1,3,1]]) # 不等式约束系数A,2x3维矩阵
B_ub=np.array([-10,12])  # 等式约束系数b, 2x1维列向量
A_eq=np.array([[1,1,1]])  # 等式约束系数Aeq,3x1维列向量
B_eq=np.array([7])   # 等式约束系数beq,1x1数值
res=op.linprog(c,A_ub,B_ub,A_eq,B_eq,bounds=(x1,x2,x3)) #调用函数进行求解
print('结果如下:\n',res)

结果如下

结果如下:con: array([1.80712334e-09])fun: -14.571428565645078message: 'Optimization terminated successfully.'nit: 5slack: array([-2.24570584e-10,  3.85714286e+00])status: 0success: Truex: array([6.42857143e+00, 5.71428571e-01, 2.35900788e-10])

即,当x1=6.42857143,x2=0.571428571,x3=2.35900788×10−10x_1=6.42857143,x_2=0.571428571,x_3=2.35900788\times10^{-10}x1​=6.42857143,x2​=0.571428571,x3​=2.35900788×10−10 时候目标函数取得最大值。

部分内容参考其他文章
分享自微信公众号 - 数据科学CLUB(jiji8215)
作者:少年吉

计算机软件求解线性规划模型--Python相关推荐

  1. 用Python求解线性规划问题

    线性规划简介及数学模型表示线性规划简介一个典型的线性规划问题线性规划模型的三要素线性规划模型的数学表示图解法和单纯形法图解法单纯形法使用python求解简单线性规划模型编程思路求解案例例1:使用sci ...

  2. 数学建模:线性规划及 Python 求解

    目录 线性规划模型形式 线性规划问题的Python求解 1. scipy.optimize.linprog 2. cvxopt.solvers 3. cvxpy 线性规划模型形式 线性规划模型的一般形 ...

  3. 数学建模:整数规划示例模型 (Python 求解)

    目录 例 1 : 选课策略模型 1. 为了选修课程门数最少, 应学习哪些课程? 建立 0-1 规划模型 Python 求解 2. 选修课程最少时, 为了学分尽量多, 应学习哪些课程? 例 2 : 装箱 ...

  4. 2021-04-24 Python 最小二乘法求解线性回归模型

    Python 最小二乘法求解线性回归模型 机器学习线性回归模型 线性回归(linear regression)是一种线性模型,它假设输入变量 x 和单个输出变量 y 之间存在线性关系 具体来说,利用线 ...

  5. 数学建模——线性规划模型详解Python代码

    数学建模--线性规划模型详解Python代码 标准形式为: min z=2X1+3X2+x s.t x1+4x2+2x3>=8 3x1+2x2>=6 x1,x2,x3>=0 上述线性 ...

  6. 【数学建模】线性规划模型MATLAB求解(最优化)

    文章目录 一.算法介绍 二.适用问题 三.算法总结 1.可以转化为线性规划的问题 四.应用场景举例 1. 例1.1: 2. 解: 2. 例1.2: 2. 解: 五.MATLAB操作 六.实际案例(投资 ...

  7. 【数学建模】12 线性规划模型的求解方法

    目录 1 图解法 2 MATLAB函数求解方法 3 Lingo法 4 课后习题 1 图解法 (1)有线性规划模型 • 目标函数 • 约束条件 在二元的约束条件画出来是直线,三元的约束条件画出来是一个平 ...

  8. Python求解二次规划模型

    在学习司守奎老师编写的Pyhon数学实验与建模.学到第6.6求解二次规划模型的时候,忽然觉得很多地方又看不懂了,之前学的一些都忘记了,所以又赶紧查资料弥补一下知识.放在这里,给后面学习的小伙伴提供一些 ...

  9. 【数学建模】线性规划模型LINGO求解(最优化)

    文章目录 一.算法介绍 二.适用问题 三.算法总结 四.应用场景举例(lingo求解) 五.LINGO代码 六.实际案例 七.论文案例片段(待完善) 线性规划模型主要针对数学建模问题中的一些小的子问题 ...

最新文章

  1. 用最骚的话让你彻底弄懂贝叶斯!
  2. docker部署nacos单机版
  3. sql insert and update
  4. Docker部署ElasticSearch7.11.1并挂载+配置X-Pack设置帐号密码+Kibana7.11.1+IK插件
  5. CVPR 2018 VITAL:《VITAL: VIsual Tracking via Adversarial Learning》论文笔记
  6. MySQL源码学习:MySQL中禁止跨库访问的实现
  7. HDU 2602.Bone Collector-动态规划0-1背包
  8. Nim游戏(初谈博弈)
  9. TensorFlow DCNN
  10. 并发编程 - 线程 - 1.线程queue/2.线程池进程池/3.异步调用与回调机制
  11. Atitit 项目培训与学校的一些思路总结
  12. 黑马程序员-IT学生解惑真经-想做程序员或者正在迟疑的同学可以看一下,很有帮助的一篇文章
  13. 关于MATLAB的saveas函数错误
  14. 无线ap 热图测试软件,无线AP功能测试
  15. 三年前,故事这样开始 三年后,故事这样延续---2015年终总结
  16. 国科大数据挖掘课程总结
  17. 007. RPX服务端和设计端说明
  18. 电源学习总结(三)——线性稳压的参数
  19. 【写作工具】用Katex打出常见矩阵
  20. 如何把视频mp4转换mp3音乐

热门文章

  1. MOS管的导通电阻RDS(on)与阈值电压VGS(th)温度特性详解
  2. 9-java.sql.SQLException: Incorrect string value: ‘\xE9\x82\xA3\xE5\xB0\xB1‘ for column ‘content‘
  3. DSB matlab仿真
  4. SAP中成本中心实际/计划/差异报表查询实例
  5. phpwind9.0 read.php 修改,phpwind9.0模板制作教程——制作论坛风格
  6. 关于身份证号或者手机号,密码 隐藏中间几位数字
  7. 四足机器人|机器狗|仿生机器人|多足机器人|PPT|汇报|科研汇报PPT|技术汇报
  8. Laravel Collect集合用pluck取多维数组中某个字段值
  9. netty权威指南笔记-以回车换行结尾的消息如何处理半包问题
  10. 伽码值(灰度系数)相关