目录
  • 2、pulp 库求解线性规划
    • -(0)导入 pulp库函数
  • 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 库求解线性规划

    pulp是一个开源的第三方工具包,可以求解线性规划、整数规划、混合整数规划问题。
    下面以该题为例讲解 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库线性规划入门的资料请关注www.887551.com其它相关文章!