Nota
Fare clic qui per scaricare il codice di esempio completo
Contornare lo spazio delle soluzioni delle ottimizzazioni #
Il tracciato dei contorni è particolarmente utile quando si illustra lo spazio delle soluzioni dei problemi di ottimizzazione. Non solo può axes.Axes.contour
essere utilizzato per rappresentare la topografia della funzione obiettivo, ma può essere utilizzato per generare curve al contorno delle funzioni di vincolo. Le linee di vincolo possono essere tracciate
TickedStroke
per distinguere i lati validi e non validi dei confini del vincolo.
axes.Axes.contour
genera curve con valori maggiori a sinistra del contorno. Il parametro dell'angolo viene misurato zero avanti con valori crescenti a sinistra. Di conseguenza, quando si utilizza
TickedStroke
per illustrare un vincolo in un tipico problema di ottimizzazione, l'angolo deve essere impostato tra zero e 180 gradi.
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import patheffects
fig, ax = plt.subplots(figsize=(6, 6))
nx = 101
ny = 105
# Set up survey vectors
xvec = np.linspace(0.001, 4.0, nx)
yvec = np.linspace(0.001, 4.0, ny)
# Set up survey matrices. Design disk loading and gear ratio.
x1, x2 = np.meshgrid(xvec, yvec)
# Evaluate some stuff to plot
obj = x1**2 + x2**2 - 2*x1 - 2*x2 + 2
g1 = -(3*x1 + x2 - 5.5)
g2 = -(x1 + 2*x2 - 4.5)
g3 = 0.8 + x1**-3 - x2
cntr = ax.contour(x1, x2, obj, [0.01, 0.1, 0.5, 1, 2, 4, 8, 16],
colors='black')
ax.clabel(cntr, fmt="%2.1f", use_clabeltext=True)
cg1 = ax.contour(x1, x2, g1, [0], colors='sandybrown')
plt.setp(cg1.collections,
path_effects=[patheffects.withTickedStroke(angle=135)])
cg2 = ax.contour(x1, x2, g2, [0], colors='orangered')
plt.setp(cg2.collections,
path_effects=[patheffects.withTickedStroke(angle=60, length=2)])
cg3 = ax.contour(x1, x2, g3, [0], colors='mediumblue')
plt.setp(cg3.collections,
path_effects=[patheffects.withTickedStroke(spacing=7)])
ax.set_xlim(0, 4)
ax.set_ylim(0, 4)
plt.show()