以下是一个基于 生产计划优化 的整数规划案例,使用 Python 的 PuLP
库求解。该案例结合了资源约束和利润最大化目标,同时包含完整的代码实现和结果分析。
案例背景
某工厂生产两种产品 A 和 B,需满足以下条件:
• 资源消耗:
• 每生产 1 个 A 需要 3 小时加工时间 和 1 小时装配时间。
• 每生产 1 个 B 需要 1 小时加工时间 和 2 小时装配时间。
• 资源限制:
• 每日总加工时间 ≤ 100 小时。
• 每日总装配时间 ≤ 80 小时。
• 利润:
• 每个 A 利润为 300 元,每个 B 利润为 200 元。
目标:制定生产计划,使每日总利润最大化,且生产数量为整数。
1. 问题定义
某工厂生产两种产品 A 和 B,目标为在资源约束下最大化利润。
参数定义:
•
x
1
x_1
x1:产品 A 的生产数量(整数)
•
x
2
x_2
x2:产品 B 的生产数量(整数)
• 资源消耗:
• 加工时间:A 消耗 3 小时/单位,B 消耗 1 小时/单位
• 装配时间:A 消耗 1 小时/单位,B 消耗 2 小时/单位
• 资源限制:
• 加工时间总上限:100 小时
• 装配时间总上限:80 小时
• 利润:
• A 的利润为 300 元/单位,B 的利润为 200 元/单位
2. 模型公式
目标函数(最大化总利润)
Maximize
Z
=
300
x
1
+
200
x
2
\text{Maximize} \quad Z = 300x_1 + 200x_2
MaximizeZ=300x1+200x2
解释:总利润由两种产品的生产量及其单位利润乘积之和构成。
约束条件
- 加工时间约束:
3 x 1 + x 2 ≤ 100 3x_1 + x_2 \leq 100 3x1+x2≤100 - 装配时间约束:
x 1 + 2 x 2 ≤ 80 x_1 + 2x_2 \leq 80 x1+2x2≤80 - 非负性与整数约束:
x 1 , x 2 ≥ 0 且为整数 x_1, x_2 \geq 0 \quad \text{且为整数} x1,x2≥0且为整数
Python 实现
1. 安装依赖库
pip install pulp
2. 建模与求解代码
from pulp import LpProblem, LpVariable, LpMaximize, LpInteger, value
# 创建线性规划问题
model = LpProblem(name="Production_Optimization", sense=LpMaximize)
# 定义决策变量(整数类型)
units_a = LpVariable(name="Product_A", lowBound=0, cat=LpInteger)
units_b = LpVariable(name="Product_B", lowBound=0, cat=LpInteger)
# 目标函数:最大化总利润
model += 300 * units_a + 200 * units_b, "Total_Profit"
# 添加约束条件
model += 3 * units_a + units_b <= 100, "Processing_Time_Constraint"
model += units_a + 2 * units_b <= 80, "Assembly_Time_Constraint"
# 求解问题
model.solve()
# 输出结果
print(f"状态: {model.status}")
print(f"生产产品 A 数量: {int(value(units_a))}")
print(f"生产产品 B 数量: {int(value(units_b))}")
print(f"最大总利润: {value(model.objective)} 元")
3. 结果示例
状态: Optimal
生产产品 A 数量: 24
生产产品 B 数量: 28
最大总利润:12800 元
关键分析
-
模型建立:
• 目标函数为利润最大化,约束条件为资源限制。
• 使用LpInteger
确保生产数量为整数。 -
求解工具选择:
•PuLP
库适合处理整数规划问题,且语法直观。 -
实际意义:
• 该模型可扩展至多产品、多资源场景,例如调整资源限制或增加产品类型。
可视化(可选)
使用 matplotlib
绘制生产比例饼图:
import matplotlib.pyplot as plt
labels = ['Product A', 'Product B']
sizes = [value(units_a), value(units_b)]
plt.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=90)
plt.title("生产比例分布")
plt.show()
延伸场景
• 动态调整:根据资源供应波动(如机器故障)实时优化生产计划。
• 成本优化:引入原材料成本约束,进一步细化模型。
• 多目标优化:平衡利润与碳排放等可持续发展指标。
通过此案例,可以看到整数规划在资源分配中的强大能力。更多复杂问题(如供应链网络优化)可参考 scipy.optimize
或 Pyomo
库实现。