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 TickedStrokepour distinguer les côtés valides et non valides des limites de contrainte.

axes.Axes.contourgé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 TickedStrokepour illustrer une contrainte dans un problème d'optimisation typique, l'angle doit être défini entre zéro et 180 degrés.

contours dans la démo d'optimisation
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()

Galerie générée par Sphinx-Gallery