So zeichnen Sie vor der Optimierung ein 3D-Diagramm.
Was für ein dreidimensionaler Graph Sie zeichnen möchten, ist zunächst die Bewertungsfunktion in der Bibliothek genetischer Algorithmen namens DEAP. Da ich die Mehrzweckoptimierung in Betracht ziehen möchte, scheint es einfacher zu sein, ein dreidimensionales Diagramm zu zeichnen. Das erste ist also, wie ein dreidimensionales Diagramm gezeichnet wird.
Hier finden Sie die Bewertungsfunktion der Optimierung. DEAP 1.3.1-Dokumentation Eine super Einführung in Probleme der Mehrzweckoptimierung, die jeder verstehen kann
Um ein dreidimensionales Diagramm zu zeichnen, machen Sie zuerst Punkte in einer Netzform auf den beiden Achsen X1 und x2. Zu diesem Zeitpunkt wird der Wert auf der z-Achse berechnet. Zeichnen Sie mit Axes3D einen dreidimensionalen Graphen für die Werte von x1, x2 und Z.
1: Verwenden Sie die Funktion "arange" von "numpy", um gleichmäßig verteilte Zahlen zu erstellen.
np.arange (-30,30,1)
Von a-30 bis 30 können Sie numerische Werte mit einem Intervall von eins erstellen.
2: meshgrid (a, b)
gibt einen Gitterpunkt am Schnittpunkt von a und b im eindimensionalen Array an und setzt ihn in X1 und X2.
#Wie man ein Netz macht
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()
Zur Bestätigung habe ich ein zweidimensionales Streudiagramm von X1 und X2 gezeichnet, und es wurde wie folgt.
Es ist ein Netz richtig. Berechnen Sie als Nächstes den Wert der Z-Achse und erstellen Sie ein dreidimensionales Diagramm. 3: Z berechnete die sogenannte Ackley-Funktion. Formel
{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)
}
Wenn Sie mit X1 und Z zeichnen, sieht das Diagramm vorerst wie folgt aus.
Zeichnen Sie ein 4: 3-dimensionales Diagramm.
Verwenden Sie from mpl_toolkits.mplot3d import Axes3D
, um eine Bibliothek zu importieren, die 3D-Diagramme zeichnet.
"ax.plot_wireframe (X1, X2, Z)" erstellt einen dreidimensionalen Graphen.
plot_surface
: Wird als Oberfläche angezeigt.
plot_wireframe
: Wird als Drahtrahmen angezeigt.
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)
#Wird im Drahtrahmen angezeigt
ax.plot_wireframe(X1, X2, Z)
#Anzeige auf der Oberfläche
#ax.plot_surface(X1, X2, Z, rstride=1, cstride=1, cmap='hsv')
plt.show()
Recommended Posts