线性规划(Linear Programming, LP)是数学建模中最基础、最经典的模型之一。它通过优化一个线性目标函数,在若干线性约束条件下求解最佳方案。无论是资源分配、物流调度,还是生产计划,线性规划都是建模人的“必修课”。今天,我们从数学原理、公式推导、代码实现到可视化展示,全面解析线性规划模型!
一、数学原理与公式
线性规划的定义
线性规划模型通常由以下三部分组成:
实际问题示例
假设我们有一个资源分配问题:
-
一家工厂生产两种产品 AA 和 BB,每种产品的单位利润分别是 40 和 30。
-
产品 A 和 B 需要两种资源 R1和 R2R2,每单位资源的需求如下:产品A: R1=2,R2=1产品B: R1=1,R2=2产品A: R1=2,R2=1产品B: R1=1,R2=2
-
可用资源数量:R1=40,R2=50。
目标:让总利润最大化。
数学模型:
二、代码实现与求解
我们使用 Python 的 PuLP 库来求解上述线性规划问题。
from pulp import LpMaximize, LpProblem, LpVariable, lpSum, LpStatus
# 定义问题
model = LpProblem(name="resource-allocation", sense=LpMaximize)
# 定义决策变量
x1 = LpVariable(name="x1", lowBound=0)
x2 = LpVariable(name="x2", lowBound=0)
# 定义目标函数
model += 40 * x1 + 30 * x2, "Total Profit"
# 定义约束条件
model += (2 * x1 + x2 <= 40, "Resource_R1")
model += (x1 + 2 * x2 <= 50, "Resource_R2")
# 求解问题
status = model.solve()
# 输出结果
print(f"Status: {LpStatus[model.status]}") # 使用 LpStatus 来访问状态
print(f"Optimal Solution: x1 = {x1.value()}, x2 = {x2.value()}")
print(f"Maximum Profit: {model.objective.value()}")
运行结果:
Status: Optimal Optimal Solution: x1 = 10.0, x2 = 20.0 Maximum Profit: 1000.0
三、结果可视化
我们可以用 Matplotlib 绘制约束条件及最优解的图示,帮助直观理解。
import matplotlib.pyplot as plt
import numpy as np
# 约束直线
x = np.linspace(0, 30, 400)
r1 = (40 - 2 * x) # 约束1
r2 = (50 - x) / 2 # 约束2
# 绘图
plt.figure(figsize=(8, 6))
plt.plot(x, r1, label="2x1 + x2 ≤ 40", color='blue')
plt.plot(x, r2, label="x1 + 2x2 ≤ 50", color='green')
# 填充可行区域
plt.fill_between(x, 0, np.minimum(r1, r2), where=(np.minimum(r1, r2) >= 0), color='gray', alpha=0.3)
# 标注最优解
plt.scatter(15, 17.5, color='red', label='Optimal Solution (x1=15, x2=17.5)', zorder=5)
plt.text(15, 17.5, " (15, 17.5)", color='red', fontsize=10)
# 图例与标题
plt.title("Linear Programming: Feasible Region and Optimal Solution")
plt.xlabel("x1")
plt.ylabel("x2")
plt.axhline(0, color='black', linewidth=0.5, linestyle="--")
plt.axvline(0, color='black', linewidth=0.5, linestyle="--")
plt.legend()
plt.grid(alpha=0.3)
plt.show()
四、实际应用场景
-
资源分配: 在工厂生产中优化产品组合。
-
物流调度: 在约束条件下优化运输成本。
-
广告投放: 在预算内优化广告组合以最大化点击量。
五、小结与下一步
线性规划模型是数学建模的基础工具,其数学原理简单,但应用范围广泛。通过这次学习,你不仅掌握了如何建模,还了解了用代码求解和可视化结果。
下一篇,我们将讲解另一个经典模型——回归分析模型,敬请期待!????
关注我,学习更多数学建模知识与实践!????