日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python数模笔记-PuLP库(1)线性规划入门

發(fā)布時間:2025/3/15 python 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python数模笔记-PuLP库(1)线性规划入门 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.


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

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

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

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

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

歡迎關注 Youcans 原創(chuàng)系列,每周更新數(shù)模筆記

Python數(shù)模筆記-PuLP庫
Python數(shù)模筆記-StatsModels統(tǒng)計回歸
Python數(shù)模筆記-Sklearn
Python數(shù)模筆記-NetworkX
Python數(shù)模筆記-模擬退火算法

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)化問題,也可以調用其它的優(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

版權說明:
原創(chuàng)作品= 關注 Youcans,分享原創(chuàng)系列 https://blog.csdn.net/youcans =
Copyright 2021 YouCans, XUPT
Crated:2021-04-28


關注 Youcans,分享原創(chuàng)系列 https://blog.csdn.net/youcans

Python數(shù)模筆記-PuLP庫(1)線性規(guī)劃入門
Python數(shù)模筆記-PuLP庫(2)線性規(guī)劃進階
Python數(shù)模筆記-PuLP庫(3)線性規(guī)劃實例
Python數(shù)模筆記-StatsModels 統(tǒng)計回歸(1)簡介
Python數(shù)模筆記-StatsModels 統(tǒng)計回歸(2)線性回歸
Python數(shù)模筆記-StatsModels 統(tǒng)計回歸(3)模型數(shù)據(jù)的準備
Python數(shù)模筆記-StatsModels 統(tǒng)計回歸(4)可視化
Python數(shù)模筆記-Sklearn (1)介紹
Python數(shù)模筆記-Sklearn (2)聚類分析
Python數(shù)模筆記-Sklearn (3)主成分分析
Python數(shù)模筆記-Sklearn (4)線性回歸
Python數(shù)模筆記-Sklearn (5)支持向量機
Python數(shù)模筆記-模擬退火算法(1)多變量函數(shù)優(yōu)化
Python數(shù)模筆記-模擬退火算法(2)約束條件的處理
Python數(shù)模筆記-模擬退火算法(3)整數(shù)規(guī)劃問題
Python數(shù)模筆記-模擬退火算法(4)旅行商問題

總結

以上是生活随笔為你收集整理的Python数模笔记-PuLP库(1)线性规划入门的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。