Comment dessiner un graphique 3D avant l'optimisation.
Tout d'abord, le type de graphe tridimensionnel que vous souhaitez dessiner est la fonction d'évaluation de la bibliothèque d'algorithmes génétiques appelée DEAP. Puisque je veux envisager l'optimisation polyvalente, il semble plus facile à comprendre en dessinant un graphique en trois dimensions, donc le premier est de savoir comment dessiner un graphique en trois dimensions.
Voir ici pour la fonction d'évaluation de l'optimisation. Documentation DEAP 1.3.1 Une super-introduction aux problèmes d'optimisation polyvalents que tout le monde peut comprendre
Pour dessiner un graphe tridimensionnel, commencez par créer des points en forme de maillage sur les deux axes X1 et x2. À ce stade, la valeur sur l'axe z est calculée. Dessinez un graphique en trois dimensions avec Axes3D pour les valeurs de x1, x2 et Z.
1: Utilisez la fonction numpy
ʻarangepour créer des nombres régulièrement espacés.
np.arange (-30,30,1)De a-30 à 30, vous pouvez créer des valeurs numériques avec un intervalle à la fois. 2:
meshgrid (a, b)` donne un point de grille à l'intersection de a et b dans le tableau unidimensionnel, et le place dans X1 et X2.
#Comment faire un maillage
import numpy as np
a = np.arange(-30,30,1)
b = np.arange(-30,30,1)
print(a)
#[-30 -29 -28 -27 -26 -25 -24 -23 -22 -21 -20 -19 -18 -17 -16 -15 -14 -13
# -12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5
# 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
# 24 25 26 27 28 29]
print(b)
#[-30 -29 -28 -27 -26 -25 -24 -23 -22 -21 -20 -19 -18 -17 -16 -15 -14 -13
# -12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5
# 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
# 24 25 26 27 28 29]
X1, x2 = np.meshgrid(a, b)
print(X1)
#[[-30 -29 -28 ... 27 28 29]
# [-30 -29 -28 ... 27 28 29]
# [-30 -29 -28 ... 27 28 29]
# ...
# [-30 -29 -28 ... 27 28 29]
# [-30 -29 -28 ... 27 28 29]
# [-30 -29 -28 ... 27 28 29]]
print(X2)
#[[-30 -29 -28 ... 27 28 29]
# [-30 -29 -28 ... 27 28 29]
# [-30 -29 -28 ... 27 28 29]
# ...
# [-30 -29 -28 ... 27 28 29]
# [-30 -29 -28 ... 27 28 29]
# [-30 -29 -28 ... 27 28 29]]
import matplotlib.pyplot as plt
plt.scatter(X1,X2,s=1)
plt.show()
Pour confirmation, j'ai dessiné un diagramme de dispersion bidimensionnel de X1 et X2, et il est devenu comme suit.
C'est un maillage proprement. Ensuite, calculez la valeur de l'axe Z et créez un graphique en trois dimensions. 3: Z a calculé ce qu'on appelle la fonction Ackley. Formule
{f(x_{1}, x_{2})=20-20\exp \biggl( -0.2\sqrt{\frac{1}{n}\sum_{i=1}^{n}x_{i}^2} \biggr) +e-\exp \biggl(\frac{1}{n}\sum_{i=1}^{n}\cos(2\pi x_{i}) \biggr)
}
Pour le moment, si vous tracez avec X1 et Z, le graphique sera le suivant.
Dessinez un graphe dimensionnel 4: 3.
Utilisez from mpl_toolkits.mplot3d import Axes3D
pour importer une bibliothèque pour dessiner des graphiques 3D.
ʻAx.plot_wireframe (X1, X2, Z) `crée un graphe en trois dimensions.
plot_surface
: affiché comme une surface.
plot_wireframe
: affiché sous forme de fil de fer.
Z =20 - 20 * np.exp(-0.2 * np.sqrt((X1 ** 2 + X2 ** 2) / 2)) + np.exp(1) - np.exp((np.cos(2 * np.pi * X1) + np.cos(2 * np.pi * X2)) / 2)
plt.scatter(X1,Z,s=1)
plt.show()
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = Axes3D(fig)
#Affichage en fil de fer
ax.plot_wireframe(X1, X2, Z)
#Affichage en surface
#ax.plot_surface(X1, X2, Z, rstride=1, cstride=1, cmap='hsv')
plt.show()
Recommended Posts