Optimizare convexă cu constrângeri

Introducere în optimizare în Python

Jasmin Ludolf

Content Developer

Optimizare convexă cu constrângeri

Funcție convexă.

  • Constrângere: limitare asupra variabilelor
  • Curbă de indiferență: reprezintă o combinație de variabile
  • Găsiți punctul de pe curba de indiferență care minimizează sau maximizează funcția obiectiv
Introducere în optimizare în Python

Curba de indiferență

O tânără cu păr închis lucrează la laptop

  • Inginer software freelancer
  • Apreciază munca ($w$) și timpul liber ($l$)

 

Funcție de utilitate:

  • $U(w, l)=w^{0.4}l^{0.6}$
Introducere în optimizare în Python

Reprezentarea grafică a curbei de indiferență

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()
Introducere în optimizare în Python

Curba de indiferență

Vizualizarea curbei de indiferență

  • Alexia este indiferentă față de combinația specifică de $w$ și $l$
Introducere în optimizare în Python

Constrângerea de timp

  • 24 de ore pe zi
  • Constrângere de egalitate liniară

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

  • Adăugați constrângerea pe grafic:
    • l = 24 - w
    • plt.plot(w, l, color='red')

Curbă de indiferență și constrângere liniară. Curba de indiferență la nivel optim este tangentă la constrângere. În punctul de tangență, gradientul este perpendicular pe constrângere și pe tangentă.

Introducere în optimizare în Python

Rezolvare cu 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]
Introducere în optimizare în Python

Să exersăm!

Introducere în optimizare în Python

Preparing Video For Download...