볼록 제약 최적화

Python으로 배우는 Optimization 입문

Jasmin Ludolf

Content Developer

볼록 제약 최적화

볼록 함수.

  • 제약: 변수에 대한 제한
  • 무차별곡선: 변수 조합을 나타냄
  • 목적함수를 최소/최대로 만드는 무차별곡선상의 점을 찾음
Python으로 배우는 Optimization 입문

무차별곡선

짙은 머리의 젊은 여성이 노트북으로 작업하는 모습

  • 프리랜서 소프트웨어 엔지니어
  • 일($w$)과 여가($l$)를 가치 있게 여김

 

효용함수:

  • $U(w, l)=w^{0.4}l^{0.6}$
Python으로 배우는 Optimization 입문

무차별곡선 그리기

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()
Python으로 배우는 Optimization 입문

무차별곡선

무차별곡선 시각화

  • 알렉시아는 특정한 $w$와 $l$의 조합에 무차별함
Python으로 배우는 Optimization 입문

시간 제약

  • 하루 24시간
  • 선형 등식 제약

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

  • 그래프에 제약 추가:
    • l = 24 - w
    • plt.plot(w, l, color='red')

무차별곡선과 선형 제약. 최적 수준의 무차별곡선은 제약에 접한다. 접점에서 기울기는 제약과 접선에 수직이다.

Python으로 배우는 Optimization 입문

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]
Python으로 배우는 Optimization 입문

연습해 봅시다!

Python으로 배우는 Optimization 입문

Preparing Video For Download...