文章目录

  • 一、线性规划(linear programming,LP)
  • 二、用 python 实现线性规划
    • 1. 方法:使用 scipy 包中的 optimize.linprog
    • 2. 实例
  • 参考链接

一、线性规划(linear programming,LP)

线性规划的标准形式如下:

  • 求的是 min
  • 所有的约束为 <= 的形式
  • 所有的变量均 >=0

如何变为标准形式?

  • 原来是max, 直接乘以 -1求min
  • 若原来约束为 = ,转为 >= 且 <=(写两个式子,同时成立相当于 = )
  • 约束原来为 >= 同样的乘以 -1,就变成了 <=
  • 若有变量 xi < 0 ,那么用 x1 – x2来替代,其中x1>=0, x2>=0

二、用 python 实现线性规划

1. 方法:使用 scipy 包中的 optimize.linprog

python真的是非常强大。其 scipy 包里面包含了很多科学计算相关的模块方法。

官方文档:scipy.optimize.linprog

  1. 函数调用方法:
scipy.optimize.linprog(c, A_ub=None, b_ub=None, A_eq=None, b_eq=None, bounds=None, method='interior-point', callback=None, options=None, x0=None)
  1. 函数解释:

线性规划:最小化受线性等式和不等式约束的线性目标函数。

  1. 线性规划解决以下形式的问题:

    其中 x 为决策变量的向量;c、bub、beq、l 、u是向量;Aub 和 Aeq 是矩阵。

  2. 参数 method :“interior-point”(默认)、“highs”、“highs-ds”、“highs-ipm”、“revised simplex”、and “simplex” (legacy)

2. 实例

原题目:

有2000元经费,需要采购单价为50元的若干桌子和单价为20元的若干椅子,你希望桌椅的总数尽可能的多,但要求椅子数量不少于桌子数量,且不多于桌子数量的1.5倍,那你需要怎样的一个采购方案呢?

解:要采购x1张桌子,x2把椅子,形式化为:

max z= x1 + x2
s.t. x1 - x2 <= 0
1.5x1 >= x2
50x1 + 20x2 <= 2000
x1, x2 >=0

代码:

from scipy import optimize as opt
import numpy as np
# 参数
# c是目标函数里变量的系数
c = np.array([1, 1])
# a是不等式条件的变量系数
a = np.array([[1, -1], [-1.5, 1], [50, 20]])
# b是不等式条件的常数项
b = np.array([0, 0, 2000])
# a1,b1是等式条件的变量系数和常数项,这个例子里无等式条件,不要这两项
# a1=np.array([[1,1,1]])
# b1=np.array([7])
# 限制
lim1 = (0, None)  # (0,None)->(0,+无穷)
lim2 = (0, None)
# 调用函数
ans = opt.linprog(-c, a, b, bounds=(lim1, lim2), method = "interior-point")
# 输出结果
print(ans)

输出结果:

     con: array([], dtype=float64)fun: -62.49999900611857     # 目标函数的最优值message: 'Optimization terminated successfully.'  # 算法退出状态的字符串描述符nit: 5        # 在所有阶段执行的迭代总数slack: array([ 1.24999998e+01, -3.33121619e-09,  3.18441803e-05])status: 0        # 表示算法的退出状态:0: 优化成功终止。1:达到迭代限制。2: 问题似乎是不可行的。3: 问题似乎是无限的。4: 遇到数值困难。success: True     # 当算法成功找到最优解时,为Truex: array([24.9999996 , 37.49999941])   # 在满足约束条件的同时最小化目标函数的决策变量的值

由于解的数量不能为小数,所以最终采购 25 把桌子、37 把椅子(x)。总共采购 62 件(fun)。


参考链接

  1. 机器学习-线性规划(LP)

【Python】用 Python 的 scipy 包实现线性规划(LP)相关推荐

  1. Python使用scipy包将稀疏矩阵保存为Mtx格式和npz格式文件实战

    Python使用scipy包将稀疏矩阵保存为Mtx格式和npz格式文件实战 目录 Python将稀疏矩阵保存为Mtx格式和npz格式文件实战 #导入包和仿真数据

  2. Python小白的数学建模课-03.线性规划

    线性规划是很多数模培训讲的第一个算法,算法很简单,思想很深刻. 要通过线性规划问题,理解如何学习数学建模.如何选择编程算法. 『Python小白的数学建模课 @ Youcans』带你从数模小白成为国赛 ...

  3. python安装numpy-如何为python安装numpy和scipy?

    我厌倦了尝试为phyton 2.7.5安装numpy和scipy,我需要这个版本的python,因为我的最终目标是安装类(http://class-code.net/)和montepython(htt ...

  4. 基于 python pulp 库求解船舶泊位调度线性规划问题

    目录 基于 python pulp 库求解船舶泊位调度线性规划问题 泊位调度问题建模 代码实现 准备包 代码讲解 绘制图像 完整代码 题外话 基于 python pulp 库求解船舶泊位调度线性规划问 ...

  5. python之路——模块和包

    一.模块 1.什么是模块? 常见的场景:一个模块就是一个包含了Python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1.使用Python编 ...

  6. python操作mysql数据库依赖包_python安装mysql的依赖包mysql-python操作

    一般情况下,使用pip命令安装即可: [root@dthost27 ~]# pip install mysql-python 但是在实际工作环境中,往往会安装失败,这是因为系统缺少mysql的相关依赖 ...

  7. 无网络服务器(linux ubuntu),pip安装python科学计算所有需要包(packages)

    无网络服务器(linux ubuntu),pip安装python科学计算所有需要包(packages) # 在windows上打开anaconda,进入环境tab页,在base环境处单击,然后点开te ...

  8. Python基础之模块与包

    一.模块 1.什么是模块? 一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 2.为何要使用模块? 如果你退出python解释器然后重新进入,那么你之前定义的函 ...

  9. Python当前进程信息 (os包)

    Python当前进程信息 (os包) 我们在Linux的概念与体系,多次提及进程的重要性.Python的os包中有查询和修改进程信息的函数.学习Python的这些工具也有助于理解Linux体系. 进程 ...

最新文章

  1. MIT开发新加密货币,用户所需数据比比特币减少99%
  2. [凯立德]2014春季版3121J0H+3121D0H
  3. P1407-[国家集训队]稳定婚姻【tarjan,强连通分量】
  4. python arcgis批量绘图_ARCGIS中Python实现批量裁剪
  5. 企业案例(二):增量恢复案例
  6. 02331数据结构 散列表
  7. 标题: ZZ- Linux 系统裁减指南(LiPS)
  8. servlet中文数据存入数据库为乱码的解决办法
  9. pairwork2测试作业
  10. 浅谈Tomcat接收到一个请求后在其内部的执行流程(源码)
  11. 【ELT.ZIP】OpenHarmony啃论文俱乐部——计算机视觉数据压缩应用
  12. 服务器虚拟化专用ovf模板,科学网—开放虚拟化格式规范2.0.0——OVF package - 唐宏伟的博文...
  13. 《面试集:自用》《待完善... ...》
  14. layer.open打不开弹窗的问题
  15. 八、【中级篇】数码管驱动(74HC138,74HC595)
  16. HTML搜索结果显示,百度搜索结果如何显示你的网站logo及官网?
  17. mac 无法打开“XXXXXXX.app”,因为无法确认开发者的身份。
  18. Java用“埃氏筛法”求素数
  19. 2019年5月1日起安卓应用应基于API 26开发
  20. 红米 刷机 android7.1,红米Note5A高配稳定版固件刷机包:V11.0.1.0 安卓7.1

热门文章

  1. 打开Unity项目,加载进度条一直显示busy不消失
  2. 数据恢复工具恢复分区文件详细教程
  3. 计算机教室管理工作计划,电脑室period;多媒体教室管理工作计划
  4. PMP 真的没用吗?
  5. cas操作 java 缺点_CAS的缺点
  6. 界面显示这个时间格式的js代码: 2016年1月19日 星期二 乙未(羊)年 腊月初十
  7. [笔记]松散四叉树,BVH,BSP,KD树的特性以及适用情况
  8. 命令链接远程redis服务器
  9. 【试用邀请】星环科技TDH社区版:让大数据分析触手可及
  10. 关于最近流行的APP界面