欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python數(shù)學建模PuLP庫線性規(guī)劃入門示例詳解

 更新時間:2021年10月18日 15:23:42   作者:youcans  
這篇文章主要為大家介紹了Python數(shù)學建模PuLP庫線性規(guī)劃入門示例詳解,想學習關于Python建模的同學可以學習參考下,希望能夠有所幫助

1、什么是線性規(guī)劃

線性規(guī)劃(Linear programming),在線性等式或不等式約束條件下求解線性目標函數(shù)的極值問題,常用于解決資源分配、生產(chǎn)調(diào)度和混合問題。例如:

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

線性規(guī)劃問題的建模和求解,通常按照以下步驟進行:

(1)問題定義,確定決策變量、目標函數(shù)和約束條件;
(2)模型構建,由問題描述建立數(shù)學方程,并轉化為標準形式的數(shù)學模型;
(3)模型求解,用標準模型的優(yōu)化算法對模型求解,得到優(yōu)化結果;

2、PuLP 庫求解線性規(guī)劃

PuLP是一個開源的第三方工具包,可以求解線性規(guī)劃、整數(shù)規(guī)劃、混合整數(shù)規(guī)劃問題。
下面以該題為例講解 PuLP 求解線性規(guī)劃問題的步驟:

-(0)導入 PuLP庫函數(shù)

    import pulp

-(1)定義一個規(guī)劃問題

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

pulp.LpProblem 是定義問題的構造函數(shù)。
  "LPProbDemo1"是用戶定義的問題名(用于輸出信息)。
  參數(shù) sense 用來指定求最小值/最大值問題,可選參數(shù)值: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 是定義決策變量的函數(shù)。
  ‘x1' 是用戶定義的變量名。
  參數(shù) lowBound、upBound 用來設定決策變量的下界、上界;可以不定義下界/上界,默認的下界/上界是負無窮/正無窮。本例中 x1,x2,x3 的取值區(qū)間為 [0,7]。
  參數(shù) cat 用來設定變量類型,可選參數(shù)值:‘Continuous' 表示連續(xù)變量(默認值)、' Integer ' 表示離散變量(用于整數(shù)規(guī)劃問題)、' Binary ' 表示0/1變量(用于0/1規(guī)劃問題)。

-(3)添加目標函數(shù)

    MyProbLP += 2*x1 + 3*x2 - 5*x3  	# 設置目標函數(shù)

添加目標函數(shù)使用 “問題名 += 目標函數(shù)式” 格式。

-(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]) # 輸出求解狀態(tài)
    for v in MyProbLP.variables():
        print(v.name, "=", v.varValue)  # 輸出每個變量的最優(yōu)值
    print("F(x) = ", pulp.value(MyProbLP.objective))  #輸出最優(yōu)解的目標函數(shù)值    

solve() 是求解函數(shù)。PuLP默認采用 CBC 求解器來求解優(yōu)化問題,也可以調(diào)用其它的優(yōu)化器來求解,如: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  	# 設置目標函數(shù)
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]) # 輸出求解狀態(tài)
for v in MyProbLP.variables():
    print(v.name, "=", v.varValue)  # 輸出每個變量的最優(yōu)值
print("F(x) = ", pulp.value(MyProbLP.objective))  #輸出最優(yōu)解的目標函數(shù)值
#= 關注 Youcans,分享原創(chuàng)系列 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數(shù)學建模PuLP庫線性規(guī)劃入門示例詳解的詳細內(nèi)容,更多關于數(shù)學建模PuLP庫線性規(guī)劃入門的資料請關注腳本之家其它相關文章!

相關文章

  • 一篇文章帶你入門Python正則表達式

    一篇文章帶你入門Python正則表達式

    這篇文章主要介紹了Python中正則表達式的詳細教程,正則表達式是Python學習進階當中的重要內(nèi)容,需要的朋友可以參考下
    2021-10-10
  • Python實現(xiàn)的銀行系統(tǒng)模擬程序完整案例

    Python實現(xiàn)的銀行系統(tǒng)模擬程序完整案例

    這篇文章主要介紹了Python實現(xiàn)的銀行系統(tǒng)模擬程序,結合完整實例形式分析了Python基于面向對象程序設計模擬的銀行系統(tǒng)登錄驗證、開戶、找回密碼、掛失、查詢、存取款、轉賬等功能相關操作技巧,需要的朋友可以參考下
    2019-04-04
  • iPython pylab模式啟動方式

    iPython pylab模式啟動方式

    這篇文章主要介紹了iPython pylab模式啟動方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • python繪制二維直方圖的代碼實現(xiàn)

    python繪制二維直方圖的代碼實現(xiàn)

    本文主要介紹了python繪制二維直方圖的代碼實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-07-07
  • python 密碼學示例——理解哈希(Hash)算法

    python 密碼學示例——理解哈希(Hash)算法

    這篇文章主要介紹了哈希(Hash)算法的相關資料,幫助大家更好的利用python處理密碼,感興趣的朋友可以了解下
    2020-09-09
  • python子線程如何有序執(zhí)行

    python子線程如何有序執(zhí)行

    最近在寫一個項目,需要用到子線程,那么python子線程如何有序執(zhí)行,需要的朋友們下面隨著小編來一起學習學習吧
    2021-05-05
  • Python新年炫酷煙花秀代碼

    Python新年炫酷煙花秀代碼

    大家好,本篇文章主要講的是Python新年炫酷煙花秀代碼,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01
  • Python sep參數(shù)使用方法詳解

    Python sep參數(shù)使用方法詳解

    這篇文章主要介紹了Python sep參數(shù)使用方法詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-02-02
  • python函數(shù)裝飾器之帶參數(shù)的函數(shù)和帶參數(shù)的裝飾器用法示例

    python函數(shù)裝飾器之帶參數(shù)的函數(shù)和帶參數(shù)的裝飾器用法示例

    這篇文章主要介紹了python函數(shù)裝飾器之帶參數(shù)的函數(shù)和帶參數(shù)的裝飾器用法,結合實例形式分析了Python函數(shù)裝飾器中函數(shù)帶多個參數(shù)以及裝飾器帶有多個參數(shù)的具體原理與實現(xiàn)方法,需要的朋友可以參考下
    2019-11-11
  • python獲取網(wǎng)頁中所有圖片并篩選指定分辨率的方法

    python獲取網(wǎng)頁中所有圖片并篩選指定分辨率的方法

    下面小編就為大家分享一篇python獲取網(wǎng)頁中所有圖片并篩選指定分辨率的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03

最新評論