Python线性规划求解方法详解 | 高效解决优化问题
- Python
- 2025-07-18
- 2100
Python线性规划求解方法详解
使用SciPy和PuLP库解决优化问题
什么是线性规划?
线性规划(Linear Programming)是运筹学中一种优化方法,用于在给定线性约束条件下最大化或最小化线性目标函数。它在工业、商业、经济等领域有广泛应用。
标准线性规划问题形式:
最大化(或最小化):
cTx
满足约束条件:
A·x ≤ b
x ≥ 0
Python求解库介绍
SciPy库
SciPy的linprog()函数提供了一种简单的方法来解决线性规划问题。它基于单纯形法或内点法实现。
优点:简单易用,适合中小规模问题
缺点:功能相对基础,不支持整数规划
PuLP库
PuLP是一个开源的线性规划建模库,提供了更直观的问题描述方式,支持多种求解器。
优点:建模灵活,支持整数规划,可扩展性强
缺点:需要额外安装求解器
使用SciPy求解线性规划
示例问题:生产优化
某工厂生产两种产品A和B:
- 产品A每单位利润100元,需要2小时加工时间和1小时装配时间
- 产品B每单位利润150元,需要1小时加工时间和3小时装配时间
- 每天可用加工时间120小时,装配时间90小时
目标:最大化总利润
数学模型:
最大化:z = 100x1 + 150x2
约束条件:
2x1 + x2 ≤ 120(加工时间约束)
x1 + 3x2 ≤ 90(装配时间约束)
x1 ≥ 0, x2 ≥ 0
SciPy求解代码
from scipy.optimize import linprog
# 定义目标函数系数(注意:linprog默认最小化,所以取负号)
c = [-100, -150] # 最大化问题转换为最小化
# 不等式约束条件(A_ub * x <= b_ub)
A = [[2, 1], [1, 3]]
b = [120, 90]
# 变量边界(x1 >= 0, x2 >= 0)
x_bounds = (0, None)
y_bounds = (0, None)
# 求解线性规划问题
result = linprog(c, A_ub=A, b_ub=b, bounds=[x_bounds, y_bounds], method='highs')
# 输出结果
print(f"优化状态: {result.message}")
print(f"最优解: 生产A产品 {round(result.x[0])} 单位, 生产B产品 {round(result.x[1])} 单位")
print(f"最大利润: {-round(result.fun)} 元") # 转换回最大化问题的结果
使用PuLP求解线性规划
示例问题:饮食优化
设计最低成本的饮食方案,满足营养需求:
- 食物A:每单位6元,含维生素5单位,蛋白质3单位
- 食物B:每单位8元,含维生素2单位,蛋白质4单位
- 每天至少需要20单位维生素和15单位蛋白质
目标:最小化总成本
数学模型:
最小化:z = 6x1 + 8x2
约束条件:
5x1 + 2x2 ≥ 20(维生素约束)
3x1 + 4x2 ≥ 15(蛋白质约束)
x1 ≥ 0, x2 ≥ 0
PuLP求解代码
import pulp
# 创建最小化问题
prob = pulp.LpProblem("Diet_Optimization", pulp.LpMinimize)
# 定义决策变量
x1 = pulp.LpVariable("Food_A", lowBound=0, cat='Continuous') # 食物A的数量
x2 = pulp.LpVariable("Food_B", lowBound=0, cat='Continuous') # 食物B的数量
# 定义目标函数(最小化成本)
prob += 6*x1 + 8*x2, "Total_Cost"
# 添加约束条件
prob += 5*x1 + 2*x2 >= 20, "Vitamin_Requirement"
prob += 3*x1 + 4*x2 >= 15, "Protein_Requirement"
# 求解问题
prob.solve()
# 输出结果
print(f"优化状态: {pulp.LpStatus[prob.status]}")
print(f"最优解: 食物A = {x1.varValue:.2f} 单位, 食物B = {x2.varValue:.2f} 单位")
print(f"最小成本: ¥{pulp.value(prob.objective):.2f}")
线性规划应用场景
生产制造
优化生产计划、资源分配、库存管理,最大化利润或最小化成本
物流运输
解决货物运输路径优化、车辆调度问题,降低运输成本
金融投资
资产组合优化,在风险约束下最大化收益
能源管理
优化能源生产和分配,降低成本并满足需求
本文由ChaoDangXin于2025-07-18发表在吾爱品聚,如有疑问,请联系我们。
本文链接:https://www.521pj.cn/20255872.html
发表评论