Noter
Cliquez ici pour télécharger l'exemple de code complet
Contourner l'espace des solutions des optimisations #
Le traçage des contours est particulièrement pratique pour illustrer l'espace des solutions des problèmes d'optimisation. Non seulement peut axes.Axes.contour
être utilisé pour représenter la topographie de la fonction objectif, mais il peut également être utilisé pour générer des courbes aux limites des fonctions de contrainte. Les lignes de contrainte peuvent être dessinées avec
TickedStroke
pour distinguer les côtés valides et non valides des limites de contrainte.
axes.Axes.contour
génère des courbes avec des valeurs plus grandes à gauche du contour. Le paramètre d'angle est mesuré zéro en avant avec des valeurs croissantes vers la gauche. Par conséquent, lors de l'utilisation
TickedStroke
pour illustrer une contrainte dans un problème d'optimisation typique, l'angle doit être défini entre zéro et 180 degrés.
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()