Vom vorherigen Artikel Ich habe versucht, Platypus auszuführen, das ein kleines Optimierungsproblem lösen kann Also habe ich versucht, das DTLZ2-Problem im Dokument zu verschieben. Ich bin mir aber nicht sicher, da dieses Dokument nicht detailliert geschrieben ist.
Es ist ein einfaches Problem, und ich werde versuchen zu verstehen, wie es berechnet wird.
minimize (x,-x)\qquad for\quad x\in[-10,10]
Ich habe das Problem im Plotypus-Beispiel ein wenig geändert. Die Implikation dieses Problems ist, dass, wenn $ x $ $ -10 $ bis $ 10 $ nimmt, die beiden Funktionen
y=f(x)\qquad y=-f(x)
Was ist die Antwort zu minimieren? Ist das Problem.
Erstens ist "Import". Diese drei sehen gut aus.
from platypus import NSGAII, Problem, Real
Erstellen Sie als Nächstes eine Funktion, die die Grundlage für die Mehrzwecklösung bildet.
def schaffer(x):return [x[0], (x[0]*(-1))]
Stellen Sie die Anzahl der erklärenden Variablen und die Anzahl der objektiven Variablen mit problem = Problem (1, 2)
ein. Mit anderen Worten, ich denke, dass die erklärende Variable $ x $ eins und die objektive Variable zwei ist.
Nächster
Stellen Sie mit problem.types [:] = Real (-10, 10)
den Typ und den Bereich der Zahlen für x ein. Ich denke, "Real" ist eine Erklärung, dass es wahrscheinlich eine reelle Zahl ist.
Deklarieren Sie die zu berechnende Funktion mit problem.function = schaffer
. Erklären Sie, dass die Funktion "Schaffer" als Problem gelöst werden soll.
Erstellen Sie mit algorithm = NSGAII (problem)
eine Instanz, die das Problem der in problem
in NSGAII deklarierten Funktion löst.
Stellen Sie in algorithm.run (10000)
ein, dass die Berechnung 10000 Mal wiederholt und die Berechnung durchgeführt wird.
Dies ist die Grundvoraussetzung, und wenn Sie die Einstellungen ändern, scheint es irgendwie zu funktionieren.
from platypus import NSGAII, Problem, Real
def schaffer(x):
return [x[0], (x[0]*(-1))]
problem = Problem(1, 2)
problem.types[:] = Real(-10, 10)
problem.function = schaffer
algorithm = NSGAII(problem)
algorithm.run(10000)
Die Antwort kommt heraus und es scheint, dass sie ohne Erlaubnis im "Ergebnis" ist. Nehmen Sie sie heraus und zeichnen Sie eine Grafik.
import matplotlib.pyplot as plt
plt.scatter([s.objectives[0] for s in algorithm.result],
[s.objectives[1] for s in algorithm.result])
plt.xlim([-10, 10])
plt.ylim([-10, 10])
plt.xlabel("$f_1(x)$")
plt.ylabel("$f_2(x)$")
plt.show()
Das Ergebnis.
Nun, die Antwort ist wie erwartet.
Recommended Posts