目录
  • 1、什么是线性规划
  • 2、PuLP 库求解线性规划
    • -(0)导入 PuLP库函数
    • -(1)定义一个规划问题
    • -(2)定义决策变量
    • -(3)添加目标函数
    • -(4)添加约束条件
    • -(5)求解
  • 3、Python程序和运行结果

    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 库求解线性规划

    -(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. x2 = 0. x3 = 0.0 F(x) = 14. 

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

    您可能感兴趣的文章:

    • python statsmodel的使用
    • Python数学建模PuLP库线性规划实际案例编程详解
    • Python数学建模PuLP库线性规划进阶基于字典详解
    • Python数学建模StatsModels统计回归模型数据的准备