Python数模笔记-PuLP库(3)线性规划实例


本节以一个实际数学建模案例,讲解 PuLP 求解线性规划问题的建模与编程。

1、问题描述

某厂生产甲乙两种饮料,每百箱甲饮料需用原料6千克、工人10名,获利10万元;每百箱乙饮料需用原料5千克、工人20名,获利9万元。
今工厂共有原料60千克、工人150名,又由于其他条件所限甲饮料产量不超过8百箱。
 (1)问如何安排生产计划,即两种饮料各生产多少使获利最大?
 (2)若投资0.8万元可增加原料1千克,是否应作这项投资?投资多少合理?
 (3)若每百箱甲饮料获利可增加1万元,是否应否改变生产计划?
 (4)若每百箱甲饮料获利可增加1万元,若投资0.8万元可增加原料1千克,是否应作这项投资?投资多少合理?
 (5)若不允许散箱(按整百箱生产),如何安排生产计划,即两种饮料各生产多少使获利最大?

欢迎关注 Youcans 原创系列,每周更新数模笔记

Python数模笔记-PuLP库
Python数模笔记-StatsModels统计回归
Python数模笔记-Sklearn
Python数模笔记-NetworkX
Python数模笔记-模拟退火算法

2、用PuLP 库求解线性规划

2.1 问题 1

(1)数学建模

问题建模:
  决策变量:
    x1:甲饮料产量(单位:百箱)
    x2:乙饮料产量(单位:百箱)
  目标函数:
    max fx = 10*x1 + 9*x2
  约束条件:
    6*x1 + 5*x2 <= 60
    10*x1 + 20*x2 <= 150
  取值范围:
    给定条件:x1, x2 >= 0,x1 <= 8
    推导条件:由 x1,x2>=0 和 10*x1+20*x2<=150 可知:0<=x1<=15;0<=x2<=7.5
    因此,0 <= x1<=8,0 <= x2<=7.5

(2)Python 编程

	import pulp      # 导入 pulp库ProbLP1 = pulp.LpProblem("ProbLP1", sense=pulp.LpMaximize)    # 定义问题 1,求最大值x1 = pulp.LpVariable('x1', lowBound=0, upBound=8, cat='Continuous')  # 定义 x1x2 = pulp.LpVariable('x2', lowBound=0, upBound=7.5, cat='Continuous')  # 定义 x2ProbLP1 += (10*x1 + 9*x2)  # 设置目标函数 f(x)ProbLP1 += (6*x1 + 5*x2 <= 60)  # 不等式约束ProbLP1 += (10*x1 + 20*x2 <= 150)  # 不等式约束ProbLP1.solve()print(ProbLP1.name)  # 输出求解状态print("Status:", pulp.LpStatus[ProbLP1.status])  # 输出求解状态for v in ProbLP1.variables():print(v.name, "=", v.varValue)  # 输出每个变量的最优值print("F1(x)=", pulp.value(ProbLP1.objective))  # 输出最优解的目标函数值# = 关注 Youcans,分享原创系列 https://blog.csdn.net/youcans =

(3)运行结果

ProbLP1
x1=6.4285714
x2=4.2857143
F1(X)=102.8571427

2.2 问题 2

(1)数学建模

问题建模:
  决策变量:
    x1:甲饮料产量(单位:百箱)
    x2:乙饮料产量(单位:百箱)
    x3:增加投资(单位:万元)
  目标函数:
    max fx = 10*x1 + 9*x2 - x3
  约束条件:
    6*x1 + 5*x2 <= 60 + x3/0.8
    10*x1 + 20*x2 <= 150
  取值范围:
    给定条件:x1, x2 >= 0,x1 <= 8
    推导条件:由 x1,x2>=0 和 10*x1+20*x2<=150 可知:0<=x1<=15;0<=x2<=7.5
    因此,0 <= x1<=8,0 <= x2<=7.5

(2)Python 编程

	import pulp      # 导入 pulp库ProbLP2 = pulp.LpProblem("ProbLP2", sense=pulp.LpMaximize)    # 定义问题 2,求最大值x1 = pulp.LpVariable('x1', lowBound=0, upBound=8, cat='Continuous')  # 定义 x1x2 = pulp.LpVariable('x2', lowBound=0, upBound=7.5, cat='Continuous')  # 定义 x2x3 = pulp.LpVariable('x3', cat='Continuous')  # 定义 x3ProbLP2 += (10*x1 + 9*x2 - x3)  # 设置目标函数 f(x)ProbLP2 += (6*x1 + 5*x2 - 1.25*x3 <= 60)  # 不等式约束ProbLP2 += (10*x1 + 20*x2 <= 150)  # 不等式约束ProbLP2.solve()print(ProbLP2.name)  # 输出求解状态print("Status:", pulp.LpStatus[ProbLP2.status])  # 输出求解状态for v in ProbLP2.variables():print(v.name, "=", v.varValue)  # 输出每个变量的最优值print("F2(x)=", pulp.value(ProbLP2.objective))  # 输出最优解的目标函数值

(3)运行结果

ProbLP2
x1=8.0
x2=3.5
x3=4.4
F2(X)=107.1

2.3 问题 3

(1)数学建模

问题建模:
  决策变量:
    x1:甲饮料产量(单位:百箱)
    x2:乙饮料产量(单位:百箱)
  目标函数:
    max fx = 11*x1 + 9*x2
  约束条件:
    6*x1 + 5*x2 <= 60
    10*x1 + 20*x2 <= 150
  取值范围:
    给定条件:x1, x2 >= 0,x1 <= 8
    推导条件:由 x1,x2>=0 和 10*x1+20*x2<=150 可知:0<=x1<=15;0<=x2<=7.5
    因此,0 <= x1<=8,0 <= x2<=7.5

(2)Python 编程

	import pulp      # 导入 pulp库ProbLP3 = pulp.LpProblem("ProbLP3", sense=pulp.LpMaximize)  # 定义问题 3,求最大值x1 = pulp.LpVariable('x1', lowBound=0, upBound=8, cat='Continuous')  # 定义 x1x2 = pulp.LpVariable('x2', lowBound=0, upBound=7.5, cat='Continuous')  # 定义 x2ProbLP3 += (11 * x1 + 9 * x2)  # 设置目标函数 f(x)ProbLP3 += (6 * x1 + 5 * x2 <= 60)  # 不等式约束ProbLP3 += (10 * x1 + 20 * x2 <= 150)  # 不等式约束ProbLP3.solve()print(ProbLP3.name)  # 输出求解状态print("Status:", pulp.LpStatus[ProbLP3.status])  # 输出求解状态for v in ProbLP3.variables():print(v.name, "=", v.varValue)  # 输出每个变量的最优值print("F3(x) =", pulp.value(ProbLP3.objective))  # 输出最优解的目标函数值

(3)运行结果

ProbLP3
x1=8.0
x2=2.4
F3(X) = 109.6

2.4 问题 4

(1)数学建模

问题建模:
  决策变量:
    x1:甲饮料产量(单位:百箱)
    x2:乙饮料产量(单位:百箱)
    x3:增加投资(单位:万元)
  目标函数:
    max fx = 11*x1 + 9*x2 - x3
  约束条件:
    6*x1 + 5*x2 <= 60 + x3/0.8
    10*x1 + 20*x2 <= 150
  取值范围:
    给定条件:x1, x2 >= 0,x1 <= 8
    推导条件:由 x1,x2>=0 和 10*x1+20*x2<=150 可知:0<=x1<=15;0<=x2<=7.5
    因此,0 <= x1<=8,0 <= x2<=7.5

(2)Python 编程

	import pulp      # 导入 pulp库    ProbLP4 = pulp.LpProblem("ProbLP4", sense=pulp.LpMaximize)  # 定义问题 2,求最大值x1 = pulp.LpVariable('x1', lowBound=0, upBound=8, cat='Continuous')  # 定义 x1x2 = pulp.LpVariable('x2', lowBound=0, upBound=7.5, cat='Continuous')  # 定义 x2x3 = pulp.LpVariable('x3', cat='Continuous')  # 定义 x3ProbLP4 += (11 * x1 + 9 * x2 - x3)  # 设置目标函数 f(x)ProbLP4 += (6 * x1 + 5 * x2 - 1.25 * x3 <= 60)  # 不等式约束ProbLP4 += (10 * x1 + 20 * x2 <= 150)  # 不等式约束ProbLP4.solve()print(ProbLP4.name)  # 输出求解状态print("Status:", pulp.LpStatus[ProbLP4.status])  # 输出求解状态for v in ProbLP4.variables():print(v.name, "=", v.varValue)  # 输出每个变量的最优值print("F4(x) = ", pulp.value(ProbLP4.objective))  # 输出最优解的目标函数值# = 关注 Youcans,分享原创系列 https://blog.csdn.net/youcans =

(3)运行结果

ProbLP4
x1=8.0
x2=3.5
x3=4.4
F4(X) = 115.1

2.5 问题 5:整数规划问题

(1)数学建模

问题建模:
  决策变量:
    x1:甲饮料产量,正整数(单位:百箱)
    x2:乙饮料产量,正整数(单位:百箱)
  目标函数:
    max fx = 10*x1 + 9*x2
  约束条件:
    6*x1 + 5*x2 <= 60
    10*x1 + 20*x2 <= 150
  取值范围:
    给定条件:x1, x2 >= 0,x1 <= 8,x1, x2 为整数
    推导条件:由 x1,x2>=0 和 10*x1+20*x2<=150 可知:0<=x1<=15;0<=x2<=7.5
    因此,0 <= x1<=8,0 <= x2<=7

说明:本题中要求饮料车辆为整百箱,即决策变量 x1,x2 为整数,因此是整数规划问题。PuLP提供了整数规划的

(2)Python 编程

	import pulp      # 导入 pulp库ProbLP5 = pulp.LpProblem("ProbLP5", sense=pulp.LpMaximize)  # 定义问题 1,求最大值x1 = pulp.LpVariable('x1', lowBound=0, upBound=8, cat='Integer')  # 定义 x1,变量类型:整数x2 = pulp.LpVariable('x2', lowBound=0, upBound=7, cat='Integer')  # 定义 x2,变量类型:整数ProbLP5 += (10 * x1 + 9 * x2)  # 设置目标函数 f(x)ProbLP5 += (6 * x1 + 5 * x2 <= 60)  # 不等式约束ProbLP5 += (10 * x1 + 20 * x2 <= 150)  # 不等式约束ProbLP5.solve()print(ProbLP5.name)  # 输出求解状态print("Status:", pulp.LpStatus[ProbLP5.status])  # 输出求解状态for v in ProbLP5.variables():print(v.name, "=", v.varValue)  # 输出每个变量的最优值print("F5(x) =", pulp.value(ProbLP5.objective))  # 输出最优解的目标函数值

(3)运行结果

ProbLP5
x1=8.0
x2=2.0
F5(X) = 98.0

版权说明:
YouCans 原创作品
Copyright 2021 YouCans, XUPT
Crated:2021-04-28


关注 Youcans,分享原创系列 https://blog.csdn.net/youcans

Python数模笔记-PuLP库(1)线性规划入门
Python数模笔记-PuLP库(2)线性规划进阶
Python数模笔记-PuLP库(3)线性规划实例
Python数模笔记-StatsModels 统计回归(1)简介
Python数模笔记-StatsModels 统计回归(2)线性回归
Python数模笔记-StatsModels 统计回归(3)模型数据的准备
Python数模笔记-StatsModels 统计回归(4)可视化
Python数模笔记-Sklearn (1)介绍
Python数模笔记-Sklearn (2)聚类分析
Python数模笔记-Sklearn (3)主成分分析
Python数模笔记-Sklearn (4)线性回归
Python数模笔记-Sklearn (5)支持向量机
Python数模笔记-模拟退火算法(1)多变量函数优化
Python数模笔记-模拟退火算法(2)约束条件的处理
Python数模笔记-模拟退火算法(3)整数规划问题
Python数模笔记-模拟退火算法(4)旅行商问题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/566182.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度学习资料整理

本文是转载了别人的博客&#xff0c;然后还加上了自己到淘宝上买的百度云盘资料(还包括一些数据挖掘&#xff0c;大数据之类的教程)。 编者按&#xff1a;本文收集了百来篇关于机器学习和深度学习的资料&#xff0c;含各种文档&#xff0c;视频&#xff0c;源码等。而且原文也会…

Python数模笔记-模拟退火算法(1)多变量函数优化

1、模拟退火算法 模拟退火算法借鉴了统计物理学的思想&#xff0c;是一种简单、通用的启发式优化算法&#xff0c;并在理论上具有概率性全局优化性能&#xff0c;因而在科研和工程中得到了广泛的应用。 退火是金属从熔融状态缓慢冷却、最终达到能量最低的平衡态的过程。模拟退…

Python数模笔记-模拟退火算法(2)约束条件的处理

1、最优化与线性规划 最优化问题的三要素是决策变量、目标函数和约束条件。 线性规划&#xff08;Linear programming&#xff09;&#xff0c;是研究线性约束条件下线性目标函数的极值问题的优化方法&#xff0c;常用于解决利用现有的资源得到最优决策的问题。 简单的线性规…

Python数模笔记-模拟退火算法(3)整数规划问题

1、整数规划问题 整数规划问题在工业、经济、国防、医疗等各行各业应用十分广泛&#xff0c;是指规划中的变量&#xff08;全部或部分&#xff09;限制为整数&#xff0c;属于离散优化问题&#xff08;Discrete Optimization&#xff09;。 线性规划问题的最优解可能是分数或小…

数据结构之算法特性及分类

数据结构之算法特性及分类 算法的特性 1.通用性。2.有效性。3.确定性4.有穷性。基本算法分类 1.穷举法顺序查找K值2.回溯,搜索八皇后&#xff0c;树和图遍历3.递归分治二分查找K值&#xff0c;快速排序&#xff0c;归并排序。4.贪心法Huffman编码树&#xff0c;最短路Dijkstra…

Python数模笔记-模拟退火算法(4)旅行商问题

1、旅行商问题(Travelling salesman problem, TSP) 旅行商问题是经典的组合优化问题&#xff0c;要求找到遍历所有城市且每个城市只访问一次的最短旅行路线&#xff0c;即对给定的正权完全图求其总权重最小的Hamilton回路&#xff1a;设有 n个城市和距离矩阵 D[dij]&#xff0…

神经网络概述

神经网络概述 以监督学习为例&#xff0c;假设我们有训练样本集 &#xff0c;那么神经网络算法能够提供一种复杂且非线性的假设模型 &#xff0c;它具有参数 &#xff0c;可以以此参数来拟合我们的数据。 为了描述神经网络&#xff0c;我们先从最简单的神经网络讲起&#x…

Python数模笔记-StatsModels 统计回归(1)简介

1、关于 StatsModels statsmodels&#xff08;http://www.statsmodels.org&#xff09;是一个Python库&#xff0c;用于拟合多种统计模型&#xff0c;执行统计测试以及数据探索和可视化。 欢迎关注 Youcans 原创系列&#xff0c;每周更新数模笔记 Python数模笔记-PuLP库 Pyth…

Python数模笔记-StatsModels 统计回归(2)线性回归

1、背景知识 1.1 插值、拟合、回归和预测 插值、拟合、回归和预测&#xff0c;都是数学建模中经常提到的概念&#xff0c;而且经常会被混为一谈。 插值&#xff0c;是在离散数据的基础上补插连续函数&#xff0c;使得这条连续曲线通过全部给定的离散数据点。 插值是离散函数…

Python数模笔记-StatsModels 统计回归(3)模型数据的准备

1、读取数据文件 回归分析问题所用的数据都是保存在数据文件中的&#xff0c;首先就要从数据文件读取数据。 数据文件的格式很多&#xff0c;最常用的是 .csv&#xff0c;.xls 和 .txt 文件&#xff0c;以及 sql 数据库文件的读取 。 欢迎关注 Youcans 原创系列&#xff0c;每…

神经网络反向传导算法

假设我们有一个固定样本集 &#xff0c;它包含 个样例。我们可以用批量梯度下降法来求解神经网络。具体来讲&#xff0c;对于单个样例 &#xff0c;其代价函数为&#xff1a; 这是一个&#xff08;二分之一的&#xff09;方差代价函数。给定一个包含 个样例的数据集&#xff…

Python数模笔记-StatsModels 统计回归(4)可视化

1、如何认识可视化&#xff1f; 图形总是比数据更加醒目、直观。解决统计回归问题&#xff0c;无论在分析问题的过程中&#xff0c;还是在结果的呈现和发表时&#xff0c;都需要可视化工具的帮助和支持。  欢迎关注 Youcans 原创系列&#xff0c;每周更新数模笔记 Python数…

梯度检验与高级优化

众所周知&#xff0c;反向传播算法很难调试得到正确结果&#xff0c;尤其是当实现程序存在很多难于发现的bug时。举例来说&#xff0c;索引的缺位错误&#xff08;off-by-one error&#xff09;会导致只有部分层的权重得到训练&#xff0c;再比如忘记计算偏置项。这些错误会使你…

Python数模笔记-Sklearn (1)介绍

1、SKlearn 是什么 Sklearn&#xff08;全称 SciKit-Learn&#xff09;&#xff0c;是基于 Python 语言的机器学习工具包。 Sklearn 主要用Python编写&#xff0c;建立在 Numpy、Scipy、Pandas 和 Matplotlib 的基础上&#xff0c;也用 Cython编写了一些核心算法来提高性能。…

自编码算法与稀疏性

目前为止&#xff0c;我们已经讨论了神经网络在有监督学习中的应用。在有监督学习中&#xff0c;训练样本是有类别标签的。现在假设我们只有一个没有带类别标签的训练样本集合 &#xff0c;其中 。自编码神经网络是一种无监督学习算法&#xff0c;它使用了反向传播算法&#…

Python数模笔记-Sklearn(2)聚类分析

1、分类的分类 分类的分类&#xff1f;没错&#xff0c;分类也有不同的种类&#xff0c;而且在数学建模、机器学习领域常常被混淆。 首先我们谈谈有监督学习&#xff08;Supervised learning&#xff09;和无监督学习&#xff08;Unsupervised learning&#xff09;&#xff…

可视化自编码器训练结果

训练完&#xff08;稀疏&#xff09;自编码器&#xff0c;我们还想把这自编码器学到的函数可视化出来&#xff0c;好弄明白它到底学到了什么。我们以在1010图像&#xff08;即n100&#xff09;上训练自编码器为例。在该自编码器中&#xff0c;每个隐藏单元i对如下关于输入的函数…

Python数模笔记-Sklearn(3)主成分分析

主成分分析&#xff08;Principal Components Analysis&#xff0c;PCA&#xff09;是一种数据降维技术&#xff0c;通过正交变换将一组相关性高的变量转换为较少的彼此独立、互不相关的变量&#xff0c;从而减少数据的维数。 1、数据降维 1.1 为什么要进行数据降维&#xff1…

稀疏自编码器一览表

下面是我们在推导sparse autoencoder时使用的符号一览表&#xff1a; 符号含义训练样本的输入特征&#xff0c;.输出值/目标值. 这里 可以是向量. 在autoencoder中&#xff0c;.第 个训练样本输入为 时的假设输出&#xff0c;其中包含参数 . 该输出应当与目标值 具有相同的…