De l'article précédent J'ai essayé d'exécuter platypus qui peut résoudre un petit problème d'optimisation J'ai donc essayé de déplacer le problème de problème DTLZ2 dans le document. Mais je ne suis pas sûr car ce document n'est pas écrit en détail.
C'est un problème simple, et je vais essayer de comprendre comment il est calculé.
minimize (x,-x)\qquad for\quad x\in[-10,10]
J'ai un peu changé le problème dans l'exemple du plotypus. L'implication de ce problème est que lorsque $ x $ prend $ -10 $ à $ 10 $, les deux fonctions
y=f(x)\qquad y=-f(x)
Quelle est la réponse à minimiser? C'est le problème.
Le premier est ʻimport. Ces trois ont l'air bien.
from platypus import NSGAII, Problem, Real`
Ensuite, créez une fonction qui constitue la base de la solution polyvalente.
def schaffer(x):return [x[0], (x[0]*(-1))]
Définissez le nombre de variables explicatives et le nombre de variables objectives avec «problème = problème (1, 2)». En d'autres termes, je pense que la variable explicative $ x $ est un et la variable objective est deux.
prochain
Avec problem.types [:] = Real (-10, 10)
, définissez le type et la plage de nombres donnés à x. Je pense que "Real" est une déclaration selon laquelle il s'agit probablement d'un nombre réel.
Déclarez la fonction à calculer avec problem.function = schaffer
. Déclarez que la fonction schaffer
est un problème.
Avec ʻalgorithm = NSGAII (problem) , créez une instance qui résout le problème de la fonction déclarée dans
problem` dans NSGAII.
ʻAlgorithm.run (10000) `est configuré pour répéter le calcul 10000 fois, et le calcul est effectué.
C'est la base, et si vous modifiez les paramètres, cela semble fonctionner d'une manière ou d'une autre.
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)
La réponse sort et il semble que c'est dans "result" sans permission, alors retirez-la et dessinez un graphique.
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()
Le résultat.
Eh bien, la réponse est comme prévu.
Recommended Posts