目录

5.1 线性规划的概念和理论

1. 线性规划的一般模型

2. 线性规划解的概念及理论

3. 可转化为线性规划的问题

5.2 线性规划的Python求解

5.2.1 用scipy.optimize模块求解

5.2.2 用cvxopt.solvers模块求解

5.2.3 用cvxpy求解

5.3 灵敏度分析

5.4 投资的收益和风险

1. 问题提出

2. 符号规定和基本假设

3. 模型的建立与分析


5.1 线性规划的概念和理论

1. 线性规划的一般模型

上面的表达式中,第一个公式为目标函数,第二个公式为约束条件,其中  ,称其为价值向量(目标向量);称其为决策向量; 称其为资源向量; 称其为约束条件的系数矩阵;(j=1,2,...,n)称其为约束条件的系数向量。

线性规划模型的标准型为:

2. 线性规划解的概念及理论

线性规划的基本点就是:在满足一定约束条件下使预定目标达到最优。

(1)可行解:满足全部约束条件的决策向量  称为可行解;

(2)可行域:全部可行解构成的集合;

(3)最优解:使目标函数达到最优值(最大或最小值,并且有界)的可行解

3. 可转化为线性规划的问题

5.2 线性规划的Python求解

5.2.1 用scipy.optimize模块求解

函数:linprog

注意:scipy中线性规划的标准型:

注意目标函数转化为求最小值(如果求最大值则等号两面加负号) 

约束条件全部改成小于

例5.1 求解线性规划问题

from scipy.optimize import linprog
c = [-1, 4]
A = [[-3, 1], [1, 2]]#类似系数矩阵
b = [6, 4]#类似结果矩阵
bound=((None,None),(-3,None))#x,y取值范围
res=linprog(c,A,b,None,None,bound)
print("目标函数的最小值:",res.fun)
print("最优解为:",res.x)

所以所求问题的最优解为:x1=10,x2=-3,目标函数最优值为-22 

例5.2 求下列线性规划问题

首化先为scipy标准型:

from scipy.optimize import linprog
c=[-1, 2, 3]; A = [[-2, 1, 1], [3, -1, -2]]
b=[[9], [-4]]; Aeq=[[4, -2, -1]]; beq=[-6]
LB=[-10, 0, None];
UB=[None]*len(c)  #生成3个None的列表
bound=tuple(zip(LB, UB))  #生成决策向量界限的元组
res=linprog(c,A,b,Aeq,beq,bound)
print("目标函数的最小值:",res.fun)
print("最优解为:",res.x)

例5.3 食用油原料的月采购和加工计划 

解:

所以得到线性规划模型:

转化为python标准型:

from scipy.optimize import linprog
c=[110, 120, 130, 110, 115,-150]    #目标向量
A =[[1,1,0,0,0, 0],[0,0,1,1,1,0],[8.8,6.1,2.0,4.2,5.0,-6],[-8.8,-6.1,-2.0,-4.2,-5.0,3]]
b=[[200],[250],[0],[0]]; Aeq=[[1,1,1,1,1,-1]]; beq=[0]
res=linprog(c,A,b,Aeq,beq)
print("目标函数的最小值:",res.fun)
print("最优解为:",res.x)

5.2.2 用cvxopt.solvers模块求解

cvxopt.solvers模块求解线性规划模型的标准型如下:

例5.4 求解线性规划:

注意:整数数据也要转换为浮点数输入!

import numpy as np
from cvxopt import matrix, solvers
c=matrix([-4.,-5]); A=matrix([[2.,1],[1,2],[-1,0],[0,-1]]).T
b=matrix([3.,3,0,0]); sol=solvers.lp(c,A,b)
print("最优解为:\n",sol['x'])
print("最优值为:",sol['primal objective'])

例5.5 求解线性规划:

转化为标准型:

import numpy
from cvxopt import matrix, solvers
c=matrix([2.,1]); A=matrix([[-1.,1],[-1,-1],[1,-2],[0,-1]]).T
b=matrix([1.,-2,4,0]); Aeq=matrix([1.,2],(1,2)) #Aeq为行向量
beq=matrix(3.5); sol=solvers.lp(c,A,b,Aeq,beq)
print("最优解为:\n",sol['x'])
print("最优值为:",sol['primal objective'])

5.2.3 用cvxpy求解

例5.6 已知某种商品6个仓库的存货量,8个客户对该商品的需求量,单位商品运价如表5.4所示,试确定6个仓库到8个客户的商品调运数量,使总的运输费用最小。

5.3 灵敏度分析

研究某些数值的变化对最优值的影响

例5.7 一家奶制品加工厂用牛奶生产A, B两种奶制品,1桶牛奶可以在甲类设备上用12h 加工成3kg A,或者在乙类设备上用8h 加工成4kg B.假定根据市场需求,生产的A,B全部能售出,且每千克A获利24元,每千克B获利16元.
现在加工厂每天能得到50桶牛奶的供应,每天正式工人总的劳动时同为480h,升且甲类设备每天至多能加工100kg A,乙类设备的加工能力没有限制.试为该厂制订一个生产计划,使每天获利最大,并进一步讨论以下两个附加问题:
(1)若可以聘用临时工人以增加劳动时间,是否聘用临时工人.(2)假设由于市场需求变化,每千克A的获利增加到30元,是否改变生产计划.

from scipy.optimize import linprog
c=[-72, -64]    #目标向量
A =[[1, 1],[12, 8]]; b=[[50],[480]]
bound=((0,100/3.0),(0,None))
res=linprog(c,A,b,None,None,bound,method='simplex',options={"disp": True})
print("求解结果如下:",res)

所以最优解为x1=20,x2=30,最大收益为3360元。

由于slack的两个分量都为0,所以两个约束条件都为紧约束,及最优解使不等式的约束条件达到了边界,约束条件实际上是等式约束,所以增加劳动时间会增加效益。

更改条件后:

from scipy.optimize import linprog
c=[-90, -64]    #目标向量
A =[[1, 1],[12, 8]]; b=[[50],[480]]
bound=((0,100/3.0),(0,None))
res=linprog(c,A,b,None,None,bound,method='simplex',options={"disp": True})
print("求解结果如下:",res)

结果不变(略)。

5.4 投资的收益和风险

1. 问题提出

2. 符号规定和基本假设

3. 模型的建立与分析

【学习笔记】第五章 线性规划相关推荐

  1. Programming Entity Framework-dbContext 学习笔记第五章

    ### Programming Entity Framework-dbContext 学习笔记 第五章 将图表添加到Context中的方式及容易出现的错误 方法 结果 警告 Add Root 图标中的 ...

  2. 《Go语言圣经》学习笔记 第五章函数

    <Go语言圣经>学习笔记 第五章 函数 目录 函数声明 递归 多返回值 匿名函数 可变参数 Deferred函数 Panic异常 Recover捕获异常 注:学习<Go语言圣经> ...

  3. 2022 最新 Android 基础教程,从开发入门到项目实战【b站动脑学院】学习笔记——第五章:中级控件

    第 5 章 中级控件 本章介绍App开发常见的几类中级控件的用法,主要包括:如何定制几种简单的图形.如何使用几种选择按钮.如何高效地输入文本.如何利用对话框获取交互信息等,然后结合本章所学的知识,演示 ...

  4. 《Android深度探究HAL与驱动开发》学习笔记----第五章

    第五章 搭建S3C6410开发板的测试环境 开发板是开发和学习嵌入式技术的主要硬件设备. 主要学习了搭建S3C6410开发板的测试环境.首先要了解到S3C6410是一款低功耗.高性价比的RISC处理器 ...

  5. muduo学习笔记 - 第五章 高效的多线程日志

    第五章 高效的多线程日志 日志有两种意思: 诊断日志 交易日志 本章讲的是前一种日志,文本的供人阅读的日志,通常用于故障诊断和追踪,也可用于性能分析. 日志通常要记录: 收到的每条消息的id(关键字段 ...

  6. javascript高级程序设计 学习笔记 第五章 上

      第五章   引用类型的值(对象)是引用类型的一个实例.在 ECMAScript 中,引用类型是一种数据结构, 用于将数据和功能组织在一起.它也常被称为类,但这种称呼并不妥当.尽管 ECMAScri ...

  7. css层叠样式表基础学习笔记--第五章 文本属性

    第五章 文本属性 5-01 字间距 5-02 行高 5-03 首行缩进 5-04 水平排列方式 5-05 垂直对齐方式 5-06 文本修饰 5-07 文本阴影 5-08 文本属性重置 5-01 字间距 ...

  8. 程序设计与算法三~C++面向对象程序设计~北大郭炜MOOC学习笔记~第五章:继承与派生(新标准C++程序设计)

    以下内容为笔者手打,望读者珍惜,如有转载还请注明. 第五章 继承与派生 $5.1 继承与派生的概念 $5.1.1 基本概念     在C++中,当定义一个新的类B时,如果发现类B拥有某个已经写好的类A ...

  9. 《谁说菜鸟不会数据分析》学习笔记 第五章数据分析

    第五章 数据分析 5.1 数据分析方法 现状分析 5.1.1 对比分析法 5.1.2 分组分析法 5.1.3 结构分析法 5.1.4 分布分析法 5.1.5 交叉分析法 5.1.6 RFM分析法 5. ...

  10. 操作系统学习笔记 第五章:文件管理(王道考研)

    本文章基于网课: 2019 王道考研 操作系统 考试复习推荐资料:操作系统复习总结 - 百度文库 (baidu.com) 需要相关电子书的可以关注我的公众号BaretH后台回复操作系统 第一章:操作系 ...

最新文章

  1. Thinkphp5.1允许uni-app的H5跨域请求接口解决方法
  2. 伤害世界怎么自建服务器,Hurtworld伤害世界服务器怎么架设?服务器架设图文教程...
  3. 利用Docker构建开发环境
  4. 修正 IE 的双倍页边距 bug
  5. TreeView数据绑定的方法
  6. 音视频技术开发周刊 | 238
  7. java操作mysql临时表_Java开发网 - 系统临时表使用问题
  8. matlab simulink光伏发电系统MPPT算法
  9. 清华大学计算机2021研究生录取分数线,清华大学2021年研究生录取分数线多少分...
  10. 请完成设计配置计算机,平面设计师的电脑配置有什么要求?
  11. python中的yield是什么意思_python中yield指的什么意思
  12. 教程篇(7.0) 01. FortiGate安全 简介及初始配置 ❀ Fortinet 网络安全专家 NSE 4
  13. 科研试剂Norbornene-5-TAMRA,降冰片烯-5-羧基四甲基罗丹明
  14. 我花了整整24530元,才写出这篇育发防踩雷攻略
  15. [事务] 事务的回滚机制
  16. 这11个网络工程师必备实用软件,别说老杨藏私不告诉你
  17. python从csv提取需要的数据_使用Python从文本(CSV文件)中提取数据
  18. Github项目推荐——树莓派防吃灰
  19. Java学习之SoapUI报文发送和解析
  20. dll重定位内存注入

热门文章

  1. Mac下Sunny_Ngrok内网地址映射成外网
  2. Abp Vnext新增模块
  3. 如何运营一家数据标注公司 (基础架构篇)
  4. Excel怎么调出开发工具选项
  5. ant design pro v2 - 权限控制
  6. Python解析m3u8拼接下载mp4视频文件
  7. Ubuntu16.04 安装 OPENCV详细教程 避坑
  8. python 文件名批量修改、重命名
  9. HTML5不支持createtouch,新手写createjs时容易遇到的坑(持续更新)
  10. Rebuttal得来的经验