การหาค่าเหมาะสมแบบมีขอบเขต

การหาค่าที่เหมาะสมที่สุดใน Python เบื้องต้น

Jasmin Ludolf

Content Developer

การหาค่าเหมาะสมแบบมีขอบเขต

 

  • ตัวแก้ปัญหาเริ่มต้น: Broyden-Fletcher-Goldfarb-Shanno (BFGS)
  • เงื่อนไขคือช่วงของค่า
  • ผลิตสินค้าระหว่าง 50 ถึง 100 หน่วยต่อวัน

 

from scipy.optimize import Bounds

bounds = Bounds(50, 100)
การหาค่าที่เหมาะสมที่สุดใน Python เบื้องต้น

L-BFGS-B

from scipy.optimize import minimize, Bounds

def objective_function(b):
  return (2*b[0] - 1.5*b[1])

bounds = Bounds([5, 10], [25, 30])
x0 = [10, 5] result = minimize(objective_function, x0, method='L-BFGS-B', bounds=bounds) print(result.x)
[ 5. 30.]
การหาค่าที่เหมาะสมที่สุดใน Python เบื้องต้น

การหาค่าเหมาะสมแบบมีเงื่อนไขเชิงเส้น

ฟังก์ชันวัตถุประสงค์ OR

  • เชิงเส้น
  • $p = 2x + 1.5y$

กราฟเชิงเส้นของฟังก์ชันวัตถุประสงค์

เงื่อนไข

  • เชิงเส้น
  • $3x + 2y <= 100$

กราฟเชิงเส้นของเงื่อนไข

การหาค่าที่เหมาะสมที่สุดใน Python เบื้องต้น

อสมการแบบเข้มงวด

  • เงื่อนไขอย่างเข้มงวด
  • เมื่อแป้งหมด จะไม่สามารถผลิตบิสกิตได้อีก!

ถุงแป้ง

การหาค่าที่เหมาะสมที่สุดใน Python เบื้องต้น

แก้ปัญหาการหาค่าเหมาะสมแบบมีเงื่อนไขเชิงเส้น

from scipy.optimize import minimize


def objective_function(b): return (b[0]) ** 2 + (b[1]) ** 0.5
def constraint_function(x): return 2*x[0] + 3*x[1] - 6
constraint = {'type': 'ineq', 'fun': constraint_function}
x0 = [20, 20]
result = minimize(objective_function, x0, constraints=[constraint])
print(result)
     fun: 1.4000405652399073
     jac: array([0.24057153, 0.36086182])
 message: 'Optimization terminated successfully'
    nfev: 25
     nit: 8
    njev: 8
  status: 0
 success: True
       x: array([0.12028576, 1.9198095 ])
  • ประเภทของเงื่อนไข:
    • 'eq': ความเท่ากัน
    • 'ineq': อสมการ
การหาค่าที่เหมาะสมที่สุดใน Python เบื้องต้น

มาฝึกกันเถอะ!

การหาค่าที่เหมาะสมที่สุดใน Python เบื้องต้น

Preparing Video For Download...