Python数学建模PuLP库线性规划实际案例编程详解

目录
  • 1、问题描述
  • 2、用PuLP 库求解线性规划
    • 2.1 问题 1
      • (1)数学建模
      • (2)Python 编程
      • (3)运行结果
    • 2.2 问题 2
      • (1)数学建模
      • (2)Python 编程
      • (3)运行结果
    • 2.3 问题 3
      • (1)数学建模
      • (2)Python 编程
      • (3)运行结果
    • 2.4 问题 4
      • (1)数学建模
      • (2)Python 编程
      • (3)运行结果
    • 2.5 问题 5:整数规划问题
      • (1)数学建模
      • (2)Python 编程
      • (3)运行结果

1、问题描述

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

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')  # 定义 x1
    x2 = pulp.LpVariable('x2', lowBound=0, upBound=7.5, cat='Continuous')  # 定义 x2
    ProbLP1 += (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')  # 定义 x1
    x2 = pulp.LpVariable('x2', lowBound=0, upBound=7.5, cat='Continuous')  # 定义 x2
    x3 = pulp.LpVariable('x3', cat='Continuous')  # 定义 x3
    ProbLP2 += (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')  # 定义 x1
    x2 = pulp.LpVariable('x2', lowBound=0, upBound=7.5, cat='Continuous')  # 定义 x2
    ProbLP3 += (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')  # 定义 x1
    x2 = pulp.LpVariable('x2', lowBound=0, upBound=7.5, cat='Continuous')  # 定义 x2
    x3 = pulp.LpVariable('x3', cat='Continuous')  # 定义 x3
    ProbLP4 += (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.5, 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

以上就是Python数学建模PuLP库线性规划实际案例编程详解的详细内容,更多关于PuLP库线性规划实际编程案例的资料请关注我们其它相关文章!

(0)

相关推荐

  • Python数学建模PuLP库线性规划入门示例详解

    目录 1.什么是线性规划 2.PuLP 库求解线性规划 -(0)导入 PuLP库函数 -(1)定义一个规划问题 -(2)定义决策变量 -(3)添加目标函数 -(4)添加约束条件 -(5)求解 3.Python程序和运行结果 1.什么是线性规划 线性规划(Linear programming),在线性等式或不等式约束条件下求解线性目标函数的极值问题,常用于解决资源分配.生产调度和混合问题.例如: max fx = 2*x1 + 3*x2 - 5*x3 s.t. x1 + 3*x2 + x3 <=

  • Python数学建模PuLP库线性规划进阶基于字典详解

    目录 1.基于字典的创建规划问题 2.线性规划问题案例 3.建立模型 (1)决策变量 (2)目标函数 (3)约束条件 (4)变量取值范围 4.PuLP 程序1:使用 LpVariable 逐一定义变量 5.PuLP 程序2:使用 dict 定义决策变量和约束条件 6.Python程序和运行结果 1.基于字典的创建规划问题 上篇中介绍了使用 LpVariable 对逐一定义每个决策变量,设定名称.类型和上下界,类似地对约束条件也需要逐一设置模型参数.在大规模的规划问题中,这样逐个定义变量和设置模型

  • Python数学建模StatsModels统计回归模型数据的准备

    目录 1.读取数据文件 (1)读取 .csv 文件: (2)读取 .xls 文件: (3)读取 .txt 文件: 2.数据文件的拆分与合并 (1)将 Excel 文件分割为多个文件 (2)将 多个 Excel 文件合并为一个文件 3.数据的预处理 (1)缺失数据的处理 (2)重复数据的处理 (3)异常值处理 4.Python 例程(Statsmodels) 4.1 问题描述 4.2 Python 程序 4.3 程序运行结果: 版权说明: 1.读取数据文件 回归分析问题所用的数据都是保存在数据文件

  • python statsmodel的使用

    1.Pandas Python Data Analysis Library 或 pandas 是基于NumPy 的一种工具,相当于这是Python官方自己的一套库 statsmodel是基于Pandas开发的一套库,用于一些描述统计.统计模型估计.推断.预测 2.自回归模型(AutoRegression model,AR) 自回归,从物理的角度来理解就是:当前记录与其历史记录的差值.eg,自回归认为历史的发展是一条斜率一定的直线. 3.滑动平均模型(moving average model, M

  • Python数学建模PuLP库线性规划实际案例编程详解

    目录 1.问题描述 2.用PuLP 库求解线性规划 2.1 问题 1 (1)数学建模 (2)Python 编程 (3)运行结果 2.2 问题 2 (1)数学建模 (2)Python 编程 (3)运行结果 2.3 问题 3 (1)数学建模 (2)Python 编程 (3)运行结果 2.4 问题 4 (1)数学建模 (2)Python 编程 (3)运行结果 2.5 问题 5:整数规划问题 (1)数学建模 (2)Python 编程 (3)运行结果 1.问题描述 某厂生产甲乙两种饮料,每百箱甲饮料需用原

  • Python数学建模StatsModels统计回归之线性回归示例详解

    目录 1.背景知识 1.1 插值.拟合.回归和预测 1.2 线性回归 2.Statsmodels 进行线性回归 2.1 导入工具包 2.2 导入样本数据 2.3 建模与拟合 2.4 拟合和统计结果的输出 3.一元线性回归 3.1 一元线性回归 Python 程序: 3.2 一元线性回归 程序运行结果: 4.多元线性回归 4.1 多元线性回归 Python 程序: 4.2 多元线性回归 程序运行结果: 5.附录:回归结果详细说明 1.背景知识 1.1 插值.拟合.回归和预测 插值.拟合.回归和预测

  • python中h5py开源库的使用样例详解

    目录 一.h5py模块介绍 二.h5py模块使用 1.h5py接口简单介绍 2.h5py的使用样例 一.h5py模块介绍 本文只是简单的对h5py库的基本创建文件,数据集和读取数据的方式进行介绍!如果读者需要进一步详细的学习h5py的更多知识,请参考h5py的官方文档. h5py简单介绍 一个HDF5文件是一种存放两类对象的容器:dataset和group. Dataset是类似于数组的数据集,而group是类似文件夹一样的容器,它好比python中的字典,有键(key)和值(value),存放

  • Python的装饰器模式与面向切面编程详解

    今天来讨论一下装饰器.装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志.性能测试.事务处理等.装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量函数中与函数功能本身无关的雷同代码并继续重用.概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能. 1. 装饰器入门 1.1. 需求是怎么来的? 装饰器的定义很是抽象,我们来看一个小例子. 复制代码 代码如下: def foo():     print 'in foo()'   foo() 这是一个很无聊

  • python 基于TCP协议的套接字编程详解

    基于TCP协议的套接字编程 实现电话沟通为例,这里传递的是字符,可以自己尝试去发送一个文件 # 服务端 import socket # 1. 符合TCP协议的手机 server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) # TCP # 2. 绑定手机号 一个服务器,我们自己的电脑作为服务器的话,用自己的IP地址 server.bind(('127.0.0.1',8000)) # 127.0.0.1 代表本地 # server.bind(

  • 浅谈Python数学建模之线性规划

    目录 一.求解方法.算法和编程方案 1.1.线性规划问题的求解方法 1.2.线性规划的最快算法 1.3.选择适合自己的编程方案 二.PuLP库求解线性规划问题 2.1.线性规划问题的描述 2.2.PuLP 求解线性规划问题的步骤 2.3.Python例程:线性规划问题 三.小结 一.求解方法.算法和编程方案 线性规划 (Linear Programming,LP) 是很多数模培训讲的第一个算法,算法很简单,思想很深刻. 线性规划问题是中学数学的内容,鸡兔同笼就是一个线性规划问题.数学规划的题目在

  • Python数学建模库StatsModels统计回归简介初识

    目录 1.关于 StatsModels 2.文档 3.主要功能 4.获取和安装 1.关于 StatsModels statsmodels(http://www.statsmodels.org)是一个Python库,用于拟合多种统计模型,执行统计测试以及数据探索和可视化. 2.文档 最新版本的文档位于: https://www.statsmodels.org/stable/ 3.主要功能 1.线性回归模型: 普通最小二乘法 广义最小二乘法 加权最小二乘法 具有自回归误差的最小二乘法 分位数回归 递

  • 浅谈Python数学建模之固定费用问题

    目录 一.固定费用问题案例解析 1.1.固定费用问题(Fixed cost problem) 1.2.案例问题描述 1.3.建模过程分析 1.4.PuLP 求解固定费用问题的编程 1.5.Python 例程:固定费用问题 1.6.Python 例程运行结果 二.PuLP 求解规划问题的快捷方法 2.1.PuLP 求解固定费用问题的编程 2.2.Python 例程:PuLP 快捷方法 2.3.Python 例程运行结果 一.固定费用问题案例解析 1.1.固定费用问题(Fixed cost prob

随机推荐