Các cơ bản về mô hình PuLP

Phân tích Chuỗi Cung Ứng với Python

Aaren Stubberfield

Supply Chain Analytics Mgr.

PuLP là gì

  • PuLP là khung mô hình cho các bài toán Quy hoạch tuyến tính (LP) và Quy hoạch số nguyên (IP) viết bằng Python

  • Được COIN-OR Foundation (Computational Infrastructure for Operations Research) duy trì

  • PuLP kết nối với các bộ giải

    • CPLEX
    • COIN
    • Gurobi
    • v.v.
Phân tích Chuỗi Cung Ứng với Python

Ví dụ PuLP – lập lịch tài nguyên

  • Tư vấn cho tiệm bánh boutique bán 2 loại bánh
  • Tháng 30 ngày
  • Có:
    • 1 lò nướng
    • 2 thợ làm bánh
    • 1 nhân viên đóng gói – chỉ làm 22 ngày
Phân tích Chuỗi Cung Ứng với Python

Ví dụ PuLP – lập lịch tài nguyên

  • Nhu cầu tài nguyên khác nhau cho 2 loại bánh:
Bánh A Bánh B
0,5 ngày 1 ngày
Thợ bánh 1 ngày 2,5 ngày
Đóng gói 1 ngày 2 ngày

.

Bánh A Bánh B
Lợi nhuận $20,00 $40,00
Phân tích Chuỗi Cung Ứng với Python

Ví dụ PuLP – lập lịch tài nguyên

  • Mục tiêu: tối đa hóa lợi nhuận
    • Lợi nhuận = 20*A + 40*B
  • Với ràng buộc:
    • A ≥ 0
    • B ≥ 0
    • 0,5A + 1B ≤ 30
    • 1A + 2,5B ≤ 60
    • 1A + 2B ≤ 22
Phân tích Chuỗi Cung Ứng với Python

Quy trình mô hình hóa PuLP phổ biến

  1. Khởi tạo mô hình
  2. Định nghĩa biến quyết định
  3. Định nghĩa hàm mục tiêu
  4. Định nghĩa ràng buộc
  5. Giải mô hình
Phân tích Chuỗi Cung Ứng với Python

Khởi tạo mô hình - LpProblem()

LpProblem(name='NoName', sense=LpMinimize)
  • name = Tên bài toán dùng trong tệp .lp đầu ra, ví dụ "My LP Problem"
  • sense = Tối đa hóa hoặc tối thiểu hóa hàm mục tiêu
    • Tối thiểu hóa = LpMinimize (mặc định)
    • Tối đa hóa = LpMaximize
Phân tích Chuỗi Cung Ứng với Python

Ví dụ PuLP – lập lịch tài nguyên

  1. Khởi tạo mô hình
from pulp import *

# Initialize Class
model = LpProblem("Maximize Bakery Profits", LpMaximize)
Phân tích Chuỗi Cung Ứng với Python

Định nghĩa biến quyết định - LpVariable()

LpVariable(name, lowBound=None, upBound=None, cat='Continuous', e=None)
  • name = Tên biến dùng trong tệp .lp đầu ra
  • lowBound = Cận dưới
  • upBound = Cận trên
  • cat = Kiểu biến
    • Số nguyên
    • Nhị phân
    • Liên tục (mặc định)
  • e = Dùng cho mô hình hóa theo cột
Phân tích Chuỗi Cung Ứng với Python

Ví dụ PuLP – lập lịch tài nguyên

  1. Khởi tạo lớp
  2. Định nghĩa biến
# Define Decision Variables
A = LpVariable('A', lowBound=0, cat='Integer')
B = LpVariable('B', lowBound=0, cat='Integer')
Phân tích Chuỗi Cung Ứng với Python

Ví dụ PuLP – lập lịch tài nguyên

  1. Khởi tạo lớp
  2. Định nghĩa biến
  3. Định nghĩa hàm mục tiêu
# Define Objective Function
model += 20 * A + 40 * B
Phân tích Chuỗi Cung Ứng với Python

Ví dụ PuLP – lập lịch tài nguyên

  1. Khởi tạo lớp
  2. Định nghĩa biến
  3. Định nghĩa hàm mục tiêu
  4. Định nghĩa ràng buộc
# Define Constraints
model += 0.5 * A + 1 * B <= 30
model += 1 * A + 2.5 * B <= 60
model += 1 * A + 2 * B <= 22
Phân tích Chuỗi Cung Ứng với Python

Ví dụ PuLP – lập lịch tài nguyên

  1. Khởi tạo lớp
  2. Định nghĩa biến
  3. Định nghĩa hàm mục tiêu
  4. Định nghĩa ràng buộc
  5. Giải mô hình
# Solve Model
model.solve()
print("Produce {} Cake A".format(A.varValue))
print("Produce {} Cake B".format(B.varValue))
Phân tích Chuỗi Cung Ứng với Python

Ví dụ PuLP – lập lịch tài nguyên

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))
Phân tích Chuỗi Cung Ứng với Python

Tóm tắt

  • PuLP là trình mô hình LP / IP bằng Python
  • Ôn 5 bước quy trình mô hình PuLP

    1. Khởi tạo mô hình
    2. Định nghĩa biến quyết định
    3. Định nghĩa hàm mục tiêu
    4. Định nghĩa ràng buộc
    5. Giải mô hình
  • Hoàn tất ví dụ lập lịch tài nguyên

Phân tích Chuỗi Cung Ứng với Python

Ayo berlatih!

Phân tích Chuỗi Cung Ứng với Python

Preparing Video For Download...