Tối ưu lồi có ràng buộc

Nhập môn Tối ưu hóa với Python

Jasmin Ludolf

Content Developer

Tối ưu lồi có ràng buộc

Hàm lồi.

  • Ràng buộc: giới hạn lên biến
  • Đường bàng quan: biểu diễn các kết hợp biến
  • Tìm điểm trên đường bàng quan cực tiểu hoặc cực đại hàm mục tiêu
Nhập môn Tối ưu hóa với Python

Đường bàng quan

Một phụ nữ trẻ tóc đen đang làm việc trên laptop

  • Kỹ sư phần mềm tự do
  • Đánh giá cao công việc ($w$) và giải trí ($l$)

 

Hàm hữu dụng:

  • $U(w, l)=w^{0.4}l^{0.6}$
Nhập môn Tối ưu hóa với Python

Vẽ đường bàng quan

import numpy as np
import matplotlib.pyplot as plt


w = np.linspace(1, 30, 100) l = np.linspace(1, 30, 100)
W, L = np.meshgrid(w, l)
F = W**0.4 * L**0.6
plt.figure(figsize=(8, 6))
contours = plt.contour(W, L, F, levels=[5, 10, 15, 20])
plt.clabel(contours)
plt.title('Indifference Curves for the function: w**0.4 * l**0.6') plt.xlabel('w') plt.ylabel('l') plt.grid(True) plt.show()
Nhập môn Tối ưu hóa với Python

Đường bàng quan

Trực quan hóa đường bàng quan

  • Alexia bàng quan với từng kết hợp $w$ và $l$
Nhập môn Tối ưu hóa với Python

Ràng buộc thời gian

  • 24 giờ mỗi ngày
  • Ràng buộc đẳng thức tuyến tính

$$ \max_{w,l} w^{0.4}l^{0.6}$$ $$s.t.\ \ \ w+l = 24$$

  • Thêm ràng buộc vào đồ thị:
    • l = 24 - w
    • plt.plot(w, l, color='red')

Đường bàng quan và ràng buộc tuyến tính. Đường bàng quan tại mức tối ưu tiếp xúc (tiếp tuyến) với ràng buộc. Tại điểm tiếp tuyến, gradient vuông góc với ràng buộc và tiếp tuyến.

Nhập môn Tối ưu hóa với Python

Giải bằng SciPy

def utility_function(vars):
    w, l = vars
    return -(w**0.4 * l**0.6)


def constraint(vars): return 24 - np.sum(vars)
initial_guess = [12, 12] constraint_definition = {'type': 'eq', 'fun': constraint} result = minimize(utility_function, initial_guess, constraints=constraint_definition) print(result.x)
[ 9.60001122 14.39998878]
Nhập môn Tối ưu hóa với Python

Ayo berlatih!

Nhập môn Tối ưu hóa với Python

Preparing Video For Download...