PuLP 建模基礎

Python 的供應鏈分析

Aaren Stubberfield

Supply Chain Analytics Mgr.

什麼是 PuLP

  • PuLP 是用 Python 撰寫的線性規劃(LP)與整數規劃(IP)建模框架。

  • 由 COIN-OR 基金會(運籌研究計算基礎設施)維護。

  • PuLP 可介接多種求解器:

    • CPLEX
    • COIN
    • Gurobi
    • 等等…
Python 的供應鏈分析

PuLP 範例-資源排程

  • 你是精品蛋糕坊的顧問,販售 2 種蛋糕。
  • 月份為 30 天。
  • 資源如下:
    • 烤箱 1 台
    • 烘焙師 2 位
    • 包裝人員 1 位-只上班 22 天
Python 的供應鏈分析

PuLP 範例-資源排程

  • 兩種蛋糕的資源需求不同:
Cake A Cake B
Oven 0.5 days 1 day
Bakers 1 day 2.5 days
Packers 1 day 2 days

.

Cake A Cake B
Profit $20.00 $40.00
Python 的供應鏈分析

PuLP 範例-資源排程

  • 目標:最大化利潤。
    • Profit = 20*A + 40*B
  • 限制條件:
    • A ≥ 0
    • B ≥ 0
    • 0.5A + 1B ≤ 30
    • 1A + 2.5B ≤ 60
    • 1A + 2B ≤ 22
Python 的供應鏈分析

PuLP 建模的一般流程

  1. 初始化模型
  2. 定義決策變數
  3. 定義目標函式
  4. 定義限制式
  5. 求解模型
Python 的供應鏈分析

初始化模型 - LpProblem()

LpProblem(name='NoName', sense=LpMinimize)
  • name = 輸出 .lp 檔中的問題名稱,例如「My LP Problem」
  • sense = 目標函式為極大或極小
    • 極小化 = LpMinimize (預設)
    • 極大化 = LpMaximize
Python 的供應鏈分析

PuLP 範例-資源排程

  1. 初始化模型
from pulp import *

# Initialize Class
model = LpProblem("Maximize Bakery Profits", LpMaximize)
Python 的供應鏈分析

定義決策變數 - LpVariable()

LpVariable(name, lowBound=None, upBound=None, cat='Continuous', e=None)
  • name = 輸出 .lp 檔中的變數名稱
  • lowBound = 下界
  • upBound = 上界
  • cat = 變數型別
    • Integer
    • Binary
    • Continuous (預設)
  • e = 供欄式建模使用
Python 的供應鏈分析

PuLP 範例-資源排程

  1. Initialize Class
  2. 定義變數
# Define Decision Variables
A = LpVariable('A', lowBound=0, cat='Integer')
B = LpVariable('B', lowBound=0, cat='Integer')
Python 的供應鏈分析

PuLP 範例-資源排程

  1. Initialize Class
  2. 定義變數
  3. 定義目標函式
# Define Objective Function
model += 20 * A + 40 * B
Python 的供應鏈分析

PuLP 範例-資源排程

  1. Initialize Class
  2. 定義變數
  3. 定義目標函式
  4. 定義限制式
# Define Constraints
model += 0.5 * A + 1 * B <= 30
model += 1 * A + 2.5 * B <= 60
model += 1 * A + 2 * B <= 22
Python 的供應鏈分析

PuLP 範例-資源排程

  1. Initialize Class
  2. 定義變數
  3. 定義目標函式
  4. 定義限制式
  5. 求解模型
# Solve Model
model.solve()
print("Produce {} Cake A".format(A.varValue))
print("Produce {} Cake B".format(B.varValue))
Python 的供應鏈分析

PuLP 範例-資源排程

from pulp import *

# Initialize Class
model = LpProblem("Maximize Bakery Profits",
                   LpMaximize)

# Define Decision Variables
A = LpVariable('A', lowBound=0,
                cat='Integer')
B = LpVariable('B', lowBound=0, 
                cat='Integer')

# Define Objective Function
model += 20 * A + 40 * B
# Define Constraints
model += 0.5 * A + 1 * B <= 30
model += 1 * A + 2.5 * B <= 60
model += 1 * A + 2 * B <= 22

# Solve Model
model.solve()
print("Produce {} Cake A".format(A.varValue))
print("Produce {} Cake B".format(B.varValue))
Python 的供應鏈分析

重點摘要

  • PuLP 是 Python 的 LP/IP 建模工具。
  • 回顧 PuLP 建模流程 5 步:

    1. 初始化模型
    2. 定義決策變數
    3. 定義目標函式
    4. 定義限制式
    5. 求解模型
  • 已完成資源排程範例

Python 的供應鏈分析

一起來練習吧!

Python 的供應鏈分析

Preparing Video For Download...