实验九:求解线性/整数/01/连续线性规划
本博文源于python基础,旨在讲解用python做线性规划。先讲解python下做线性规划的相关函数,然后python四道例题进行演示。
0.linprog()函数调用格式
optimize.linprog(C,A,B,Aeq,beq,bounds,method,X0,options)
- C 是最值向量
- A和B对应线性不等式约束
- Aeq和Beq对应线性等式约束
- bounds对应公式中的Lb和Ub,即决策向量的上界和下界
- method是求解器(方法)的类型
- X0是X的初始值
- option提供常用最值算法,如Nelder-Mead,Powell,CG,BFGS,Newtonn-CG等;部分参数可默认。
1.求解线性规划maxf=2x1+3x2+4x3max f=2x_1+3x_2+4x_3maxf=2x1+3x2+4x3
s.t.{1.5x1+3x2+5x3≤600280x1+250x2+400x3≤60000x1,x2,x3≥0s.t.\left\{ \begin{array}{rcl} 1.5x_1+3x_2+5x_3\le{600}\\ 280x_1+250x_2+400x_3\leq{60000}\\ x_1,x_2,x_3\ge{0}\\ \end{array} \right. s.t.⎩⎨⎧1.5x1+3x2+5x3≤600280x1+250x2+400x3≤60000x1,x2,x3≥0
>>> from scipy import optimize # 导入库
>>> from sympy import * # 导入库
>>> C = Matrix([2,3,4]) # 确定目标函数系数矩阵C
>>> A = Matrix([[1.5,3,5],[280,250,400]]) # 确定约束条件系数矩阵A
>>> B = Matrix([[600],[60000]]) # 确定约束条件常数矩阵B
>>> res = optimize.linprog(-C,A,B,method='simplex') # 问题要求最大值,雇佣-C
>>> print(res)con: array([], dtype=float64)fun: -632.258064516129message: 'Optimization terminated successfully.'nit: 3slack: array([0., 0.])status: 0success: Truex: array([ 64.51612903, 167.74193548, 0. ])
>>>
通过观察解之的x1=64.52,x2=167.74,x3=0x_1=64.52,x_2=167.74,x_3=0x1=64.52,x2=167.74,x3=0时,此时线性规划最优值为f=632.26f=632.26f=632.26
2.用python求解连续线性规划问题
maxf=72x1+64x2s.t{x1+x2≤5012x1+8x2≤4803x1≤100x1≥0,x2≥0max f=72x_1+64x_2\\ s.t\left\{ \begin{array}{rcl} x_1+x_2\le{}50\\ 12x_1+8x_2\leq{480}\\ 3x_1\leq{100}\\ x_1\geq{0},x_2\geq{0}\\ \end{array} \right. maxf=72x1+64x2s.t⎩⎪⎪⎨⎪⎪⎧x1+x2≤5012x1+8x2≤4803x1≤100x1≥0,x2≥0
>>> from scipy import optimize
>>> from sympy import * # 第一行第二行导入库
>>> C = Matrix([72,64]) # 确定目标函数系数矩阵C
>>> A = Matrix([[1,1],[12,8],[3,0]]) # 确定约束条件系数矩阵A
>>> B = Matrix([[50],[480],[100]]) # 确定约束条件常数矩阵B
>>> res = optimize.linprog(-C,A,B,method='simplex') # 问题要求最低阿志,故用-C
>>> res # 最优值是显示结果的相反数con: array([], dtype=float64)fun: -3360.0message: 'Optimization terminated successfully.'nit: 4slack: array([ 0., 0., 40.])status: 0success: Truex: array([20., 30.])
>>>
最后得出结果是x1=20,x2=30x_1=20,x_2=30x1=20,x2=30,此时线性规划问题最优值为f=3360f=3360f=3360
3.求解整数规划
maxys.t.{y≤12x1,y≤13x25x1+4x2≤9609x1+10x2≤1440(5x1+4x2)−(9x1+10x2)≥−60(5x1+4x2)−(9x1+10x2)≤60x1≥0,x2≥0,y≥0,且为整数max\ y \\ s.t.\left\{ \begin{array}{rcl} y\le\frac{1}{2}x_1,y\leq\frac{1}{3}x_2\\ 5x_1+4x_2\leq{960}\\ 9x_1+10x_2\leq{1440}\\ (5x_1+4x_2)-(9x_1+10x_2)\geq{-60}\\ (5x_1+4x_2)-(9x_1+10x_2)\leq{60}\\ x_1\ge{0},x_2\ge{0},y\ge{0},且为整数 \end{array} \right. max ys.t.⎩⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎧y≤21x1,y≤31x25x1+4x2≤9609x1+10x2≤1440(5x1+4x2)−(9x1+10x2)≥−60(5x1+4x2)−(9x1+10x2)≤60x1≥0,x2≥0,y≥0,且为整数
import pulpmodel = pulp.LpProblem("Example 8",pulp.LpMaximize)
x1 = pulp.LpVariable("x1",lowBound=0,cat='Integer') # 限制约束变量为整数
x2 = pulp.LpVariable('x2',lowBound=0,cat = 'Integer') # 限制约束变量为整数
y = pulp.LpVariable('y',lowBound=0,cat='Integer') # 限制约束变量为整数
# 目标函数
model += y
# 约束条件
model += y-0.5*x1 <= 0
model += y-1/3*x2 <= 0
model += 5*x1+4*x2 <= 960
model += 9*x1+10*x2 <= 1440
model += 4*x1+6*x2 <= 60model.solve() # 解决问题
pulp.LpStatus[model.status]print('x1={}'.format(x1.varValue))
print('x2={}'.format(x2.varValue)) # 打印最有解
print("最大产量为y=",pulp.value(model.objective)) # 打印最优值
x1与x2x_1与x_2x1与x2就是最优解
4.求解0-1规划
maxf=1000x1+1500x2+900x3+2100x4s.t.{4x1+6x2+6x3+8x4≤20xi=0或1,i=1,2,3,4max \ f = 1000x_1 + 1500x_2+900x_3+2100x_4 s.t.\left\{ \begin{array}{rcl} 4x_1+6x_2+6x_3+8x_4\leq{20}\\ x_i=0或1,i=1,2,3,4 \end{array} \right. max f=1000x1+1500x2+900x3+2100x4s.t.{4x1+6x2+6x3+8x4≤20xi=0或1,i=1,2,3,4
import pulp
model = pulp.LpProblem("Example 8",pulp.LpMaximize)
x1 = pulp.LpVariable("x1",lowBound=0,cat='Binary') # 限制约束变量为0-1
x2 = pulp.LpVariable('x2',lowBound=0,cat = 'Binary') # 限制约束变量为0-1
x3 = pulp.LpVariable('x3',lowBound=0,cat = 'Binary') # 限制约束变量为0-1
x4 = pulp.LpVariable('x4',lowBound=0,cat = 'Binary') # 限制约束变量为0-1# 目标函数
model += 1000*x1+1500*x2+900*x3+2100*x4
# 约束条件
model += 4*x1+6*x2+6*x3+8*x4 <= 20model.solve() # 解决问题
pulp.LpStatus[model.status]print('x1={}'.format(x1.varValue))
print('x2={}'.format(x2.varValue)) # 打印最有解
print('x3={}'.format(x3.varValue))
print('x4={}'.format(x4.varValue))print('x1={}'.format(x1.varValue))print("最大产量为y=",pulp.value(model.objective)) # 打印最优值
实验九:求解线性/整数/01/连续线性规划相关推荐
- python 方程组 整数解_用Python语言求解线性整数方程组
我在寻找一种用Python求解线性方程组的方法. 特别是,我在寻找大于所有零的最小整数向量,并解出给定的方程. 例如,我有以下等式: 想解决 .在 在这种情况下,求解该方程的最小整数向量为 .在 但是 ...
- 操作系统实验一到实验九合集(哈工大李治军)
操作系统实验 作者寄语 操作系统实验的学习是一个循序渐进的过程,初次看linux-0.11中的代码,看着满屏的汇编语言,确实头疼.但通过学习赵炯博士的Linux内核0.11完全注释,结合着王爽老师的汇 ...
- 南京邮电大学电工电子(数电)实验报告——周期信号的频谱分析 连续时间系统模拟
文章目录 一.周期信号频谱分析 (1)实验目的 (2)实验原理及设计过程 (3)实验电路图 (4)实验数据分析和实验结果 二.连续时间系统模拟 (1)实验目的 (2)实验原理及设计过程 (3)实验电路 ...
- 利用matlab求零输入响应波形,实验3 利用matlab求LTI连续系统的响应
实验3 利用matlab求LTI连续系统的响应 一. 实验目的: 1. 了解LTI系统的冲激响应h(t)及matlab实现: 2. 了解LTI系统的阶跃响应g(t)及matlab实现: 3. 了解LT ...
- 实验九201771010119穷吉
实验九异常.断言与日志 理论知识: 异常:在程序的执行过程中所发生的异常事件,它中断指令的正常执行. Java的异常处理机制可以控制程序从错误产生的位置转移到能够进行错误处理的位置. 程序中出现的常见 ...
- 计算机排版技能会操方案,实验九 Word的高级排版技巧.pdf
<微机操作>实验九 课件 一.实验要求 通过本节学习,要求熟练掌握下列操作技能 (1) 能够适时适地插入页码.分页符.分节符: (2) 能够编辑相同页眉.页脚,也能建立不同节奇偶页不一样的 ...
- 求解线性同余方程--扩展欧几里得
资料来源:https://blog.csdn.net/ //求解ax=b(mod m) 返回0为无解,否则返回gcd(a,m)个mod m意义下的解,用X[]存 int mod(int a, int ...
- 【数字信号处理】线性常系数差分方程 ( 使用递推解法求解 “ 线性常系数差分方程 “ | “ 线性常系数差分方程 “ 初始条件的重要性 )
文章目录 一.使用递推解法求解 " 线性常系数差分方程 " 二." 线性常系数差分方程 " 初始条件的重要性 一.使用递推解法求解 " 线性常系数差分 ...
- jxnu-linux 实验九
jxnu-linux 实验九 实验内容 1.编写shell脚本,其功能包括: a.根据用户输入的数值输出2020年的月历,用户输入"Q"退出查询: b.用户可连续查看多个月份的月历 ...
最新文章
- spi通讯不需要地线吗_抖音真的需要养号吗?不需要!千万别被割了韭菜
- 闭眼入!采集 Nginx 日志的几种方式!
- python tkinter计算器实例_Python编程使用tkinter模块实现计算器软件完整代码示例
- access 子窗体 鼠标滚动不工作_Python GUI项目实战(五)明细信息窗体的完善
- 使用Gradle的maven-publish插件发布快照
- Gin 快速入门知识点总结(奇淼)
- C# WPF ListView Bindding 图片
- 图卷积网络详细介绍(二)
- vs C4996的错误解决方法
- Struts2 标签
- koa2 mysql增删改查_使用nodejs-koa2-mysql-sequelize-jwt实现登录注册,文章增删改查接口...
- 这7个素材网站送你参考,一部手机就可以做影视剪辑,0基础抖音涨粉
- NLPCC'22 | 一种兼具准确性和多样性的图像风格化描述生成框架
- 大数据_07 【hadoop HDFS的shell命令操作】
- 可燃气体泄漏监控报警系统_独立式可燃气体泄漏探测报警系统软件整体解决方案
- android 9.0监听来电,android9.0来电无法获取处理
- owc java_OWC操作excel
- 图像识别自动化android,Android自动化测试
- python 统计组合用什么库_Python数据分析之双色球统计两个红和蓝球哪组合比例高的方法...
- 计算机系统的四种启动方式是,U盘启动有四种模式?云骑士装机大师教你怎么选...