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

远山来客
远山来客
发布时间:2026-10-12 | 3人浏览过
原创

本文详细介绍Python中PuLP库求解线性规划问题的完整流程。通过具体案例,演示如何定义决策变量、构建目标函数与约束条件,并利用CBC求解器获取最优解。内容涵盖模型建立、参数设置及代码实现,适合数学建模初学者参考。

1、什么是线性规划

线性规划(Linear programming)是指在满足一组线性等式或不等式约束的前提下,求解线性目标函数的最大值或最小值的问题。该方法广泛应用于资源分配、生产计划调度以及混合配比等场景。例如:

max		fx = 2*x1 + 3*x2 - 5*x3
s.t.	x1 + 3*x2 + x3 <= 12
		2*x1 - 5*x2 + x3 >= 10
		x1 + x2 + x3 = 7
		x1, x2, x3 >=0

针对线性规划问题的建模与求解,一般遵循以下标准流程:

(1)问题定义:明确决策变量、目标函数以及相关的约束条件; (2)模型构建:根据实际问题描述建立数学方程,并将其转化为标准形式的数学模型; (3)模型求解:应用标准的优化算法对模型进行计算,从而获得优化结果;

2、PuLP 库求解线性规划

PuLP是一个开源的Python第三方工具包,支持求解线性规划、整数规划以及混合整数规划问题。 下面通过一个具体案例,讲解使用PuLP求解线性规划问题的具体步骤:

-(0)导入 PuLP库函数

    import pulp

-(1)定义一个规划问题

    MyProbLP = pulp.LpProblem("LPProbDemo1", sense=pulp.LpMaximize)

pulp.LpProblem 用于创建问题对象的构造函数。 "LPProbDemo1"是用户自定义的问题名称,主要用于输出信息的标识。 参数 sense 用于指定求解最小值还是最大值,可选参数值为:LpMinimize、LpMaximize 。

-(2)定义决策变量

    x1 = pulp.LpVariable('x1', lowBound=0, upBound=7, cat='Continuous') 
    x2 = pulp.LpVariable('x2', lowBound=0, upBound=7, cat='Continuous')
    x3 = pulp.LpVariable('x3', lowBound=0, upBound=7, cat='Continuous') 

pulp.LpVariable 是用于定义决策变量的函数。 ‘x1' 是用户自定义的变量名称。 参数 lowBound、upBound 分别用于设定决策变量的下界和上界;若未指定下界/上界,则默认下界为负无穷、上界为正无穷。在本例中,x1、x2、x3 的取值区间被设定为 [0,7]。 参数 cat 用于设定变量类型,可选参数值包括:‘Continuous' 表示连续变量(默认值)、' Integer ' 表示离散变量(适用于整数规划问题)、' Binary ' 表示0/1变量(适用于0/1规划问题)。

-(3)添加目标函数

    MyProbLP += 2*x1 + 3*x2 - 5*x3  	# 设置目标函数

添加目标函数时,采用 “问题名 += 目标函数式” 的语法格式。

-(4)添加约束条件

    MyProbLP += (2*x1 - 5*x2 + x3 >= 10)  # 不等式约束
    MyProbLP += (x1 + 3*x2 + x3 <= 12)  # 不等式约束
    MyProbLP += (x1 + x2 + x3 == 7)  # 等式约束

添加约束条件时,采用 “问题名 += 约束条件表达式” 的语法格式。 约束条件可以是等式约束或不等式约束。对于不等式约束,可以是小于等于或大于等于关系,分别使用关键字">="、"<=“和”=="来表示。

-(5)求解

    MyProbLP.solve()
    print("Status:", pulp.LpStatus[MyProbLP.status]) # 输出求解状态
    for v in MyProbLP.variables():
        print(v.name, "=", v.varValue)  # 输出每个变量的最优值
    print("F(x) = ", pulp.value(MyProbLP.objective))  #输出最优解的目标函数值    

solve() 是执行求解的函数。PuLP默认使用 CBC 求解器来处理优化问题,用户也可以调用其他优化器,如:GLPK、COIN CLP/CBC、CPLEX 和 GUROBI,但需额外安装相应的求解器支持。

3、Python程序和运行结果

完整的程序代码如下:

import pulp
MyProbLP = pulp.LpProblem("LPProbDemo1", sense=pulp.LpMaximize)
x1 = pulp.LpVariable('x1', lowBound=0, upBound=7, cat='Continuous') 
x2 = pulp.LpVariable('x2', lowBound=0, upBound=7, cat='Continuous') 
x3 = pulp.LpVariable('x3', lowBound=0, upBound=7, cat='Continuous') 
MyProbLP += 2*x1 + 3*x2 - 5*x3  	# 设置目标函数
MyProbLP += (2*x1 - 5*x2 + x3 >= 10)  # 不等式约束
MyProbLP += (x1 + 3*x2 + x3 <= 12)  # 不等式约束
MyProbLP += (x1 + x2 + x3 == 7)  # 等式约束
MyProbLP.solve()
print("Status:", pulp.LpStatus[MyProbLP.status]) # 输出求解状态
for v in MyProbLP.variables():
    print(v.name, "=", v.varValue)  # 输出每个变量的最优值
print("F(x) = ", pulp.value(MyProbLP.objective))  #输出最优解的目标函数值
#= 关注 Youcans,分享原创系列 https://blog.csdn.net/youcans =

程序运行结果如下:

Welcome to the CBC MILP Solver 
Version: 2.9.0 
Build Date: Feb 12 2015 
Status: Optimal
x1 = 6.4285714
x2 = 0.57142857
x3 = 0.0
F(x) =  14.57142851

以上就是Python数学建模PuLP库线性规划入门示例详解的详细内容,更多关于数学建模PuLP库线性规划入门的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表