当前位置: 首页 > news >正文

用Python实现运筹学——Day 3: 线性规划模型构建

一、学习内容

线性规划模型构建的步骤与技巧

线性规划(Linear Programming, LP)模型构建是运筹学中的核心内容,通常用于求解资源的最优分配问题。要从实际问题中提取出一个线性规划模型,需要按照以下步骤进行:

  1. 问题描述与分析: 首先,明确问题的实际背景,并识别问题的关键要素,如目标、限制条件和可控变量。

  2. 定义决策变量: 决策变量是影响目标函数值的变量。要明确哪些量是可以调整的,并将其设为变量。

  3. 构建目标函数: 目标函数是需要最大化或最小化的量,通常是与经济效益、成本、效率等相关的指标。目标函数应该是一个关于决策变量的线性表达式。

  4. 构建约束条件: 实际问题中的限制条件通常来源于资源的有限性、生产能力、市场需求等。这些条件通常以不等式或等式的形式表示,并且是线性的。

  5. 确定变量的非负性或其他约束: 决策变量通常有一些范围限制,如生产数量不能为负数。


二、实战案例:生产计划中的线性规划

2.1 问题描述

一家工厂生产两种产品:产品 A和产品 B。每种产品的利润、生产时间以及材料需求如下表所示:

产品每单位利润(元)每单位所需生产时间(小时)每单位材料需求(单位)
A5043
B4032

公司每天最多可提供 240 小时的生产时间和 180 单位的原材料。公司希望最大化利润,决定每天生产多少单位的产品 A 和产品 B。

2.2 构建线性规划模型
  1. 定义决策变量

    • x_1​:每天生产的产品 A 的数量。
    • x_2:每天生产的产品 B 的数量。
  2. 构建目标函数: 目标是最大化利润。利润来自生产 A 和 B,每单位 A 的利润为 50 元,每单位 B 的利润为 40 元。因此,目标函数为:

    Z = 50x_1 + 40x_2

    其中, Z 表示总利润。

  3. 构建约束条件

  • 生产时间限制:每单位 A 需要 4 小时,每单位 B需要 3 小时。总生产时间不能超过 240 小时,因此:4x_1 + 3x_2 \leq 240
  • 材料限制:每单位 A需要 3 单位原材料,每单位 B 需要 2 单位原材料。总材料消耗不能超过 180 单位,因此:3x_1 + 2x_2 \leq 180
  • 非负性约束:生产数量不能为负数:x_1 \geq 0, \quad x_2 \geq 0
2.3 Python 实现

我们将使用 scipy.optimize.linprog 函数求解这个线性规划问题。

import numpy as np
from scipy.optimize import linprog# 目标函数系数 (将最大化问题转为最小化,通过乘 -1)
c = [-50, -40]  # 每单位产品A和产品B的利润# 约束条件系数矩阵 (左边部分)
A = [[4, 3],   # 生产时间约束[3, 2]    # 材料需求约束
]# 约束条件右侧常数项
b = [240, 180]  # 最大生产时间和最大材料使用量# 变量的边界(非负性约束)
x_bounds = [(0, None), (0, None)]  # x1 和 x2 均为非负数# 求解线性规划问题
result = linprog(c, A_ub=A, b_ub=b, bounds=x_bounds, method='highs')# 输出结果
if result.success:print("优化成功!")print(f"每天生产产品 A 的数量:{result.x[0]:.2f}")print(f"每天生产产品 B 的数量:{result.x[1]:.2f}")print(f"最大每日利润:{-result.fun:.2f} 元")
else:print("优化失败。")
2.4 代码解释
  1. 目标函数

    • 我们需要最大化目标函数 Z = 50x_1 + 40x_2​。在 scipy.optimize.linprog 中只能处理最小化问题,因此我们将目标函数的系数乘以 -1,使得最大化问题转为最小化问题。
  2. 约束条件

    • A_ub 表示不等式约束的系数矩阵,其中每一行代表一个约束条件。
    • b_ub 表示不等式约束右边的常数值。
    • x_bounds 限制变量 x_1x_2 为非负。
  3. 求解方法

    • method='highs' 是一种稳定且高效的线性规划求解方法。
2.5 运行结果分析

运行代码后,系统会输出每天生产产品 A 和 B 的最优数量,以及最大化的利润。运行结果(示例)

优化成功!
每天生产产品 A 的数量:30.00
每天生产产品 B 的数量:40.00
最大每日利润:3700.00 元

分析结果

  • 最优生产方案是每天生产 30 单位的产品 A和 40 单位的产品 B。
  • 此时的最大利润为 3700 元。
  • 这个结果满足生产时间和材料的限制,既没有超出资源限制,也能实现利润最大化。

三、总结

通过这个案例,我们展示了如何从实际问题中提取线性规划模型。构建模型时,需要明确决策变量、目标函数以及约束条件。该模型求解问题清晰,并且可以通过 Python 实现自动化求解,能够有效地帮助决策者优化资源配置并实现目标(如最大化利润或最小化成本)。


http://www.mrgr.cn/news/36496.html

相关文章:

  • 脑神经科学原理精解【2】
  • DS2756E+TR一款用于数据采集和信息存储器件 高精度电池电量计
  • Python 常用用库学习整理(二)
  • 找到字符串中所有字母异位词、串联所有单词的子串
  • Qemu开发ARM篇-6、emmc/SD卡AB分区镜像制作并通过uboot进行挂载启动
  • SOMEIP_ETS_135: SD_Option_Length_ends_past_Options_Array_Var_B
  • 十大知名BI公司,助力企业数据分析新时代
  • C++入门day4-面向对象编程(下)
  • Redis 主从复制的实现过程
  • SpringBoot开发——集成国密SM4加密算法
  • TreeMap源码详解
  • FastAPI 第四课 -- 交互式 API 文档
  • [leetcode]39_组合总和_给定数组且数组可重复
  • 正确理解C++的友元friend
  • 谷歌浏览器每次打开都提示更新
  • CSS网格布局
  • NASA数据集:ATLAS/ICESat-2 L3A 海洋地表高度 V006
  • 综合实践:JPA+Thymeleaf 增删改查
  • MySQL --事务(上)
  • Rust 函数