[PYTHON] Automatisation de la génération d'algorithmes à l'aide d'algorithmes génétiques

Préface

Les algorithmes génétiques sont souvent introduits avec des exemples très simples tels que l'ajustement des paramètres et l'optimisation des combinaisons, mais avec un peu d'ingéniosité, il est possible de générer automatiquement des algorithmes et des programmes.

Connaissances préalables

Algorithme génétique

C'est un algorithme de recherche basé sur l'idée d'évolution des organismes due à la mutation, l'hérédité, la sélection, etc.

Génotype

Un type qui est sujet à des manipulations génétiques telles que des mutations et des croisements.

Type d'expression

C'est un individu exprimé à partir du génotype à évaluer pour l'adaptabilité.

Divers algorithmes génétiques

Programmation génétique

Le génotype est la structure arborescente

Wikipedia

Programmation du réseau génétique

Gemtype est une structure de réseau

Graph Structured Program Evolution (GRAPE) Séquence unidimensionnelle du génotype Le type de représentation est la structure du graphique

Référentiel d'informations académiques de l'Université nationale de Yokohama

Un algorithme qui nécessite une boucle peut également être exprimé, et un programme qui trouve le multiplicateur ou fibonacci peut être généré automatiquement avec une certaine probabilité. [Démo réellement fonctionnelle](https://qiita.com/technote-space/items/7acade8a2b768153f005#%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3% 82% BA% E3% 83% A0% E8% 87% AA% E5% 8B% 95% E7% 94% 9F% E6% 88% 90)

Problème de cible

J'ai utilisé GRAPE pour résoudre un problème simple d'OpenAI Gym, qui est un environnement de simulation pour un apprentissage intensif.

Implémentation (GitHub)

Cart Pole Le problème est de déplacer le chariot pour l'équilibrer afin que le pôle sur le dessus ne tombe pas. Étant donné que l'état initial est quelque peu aléatoire, un algorithme pouvant être utilisé à des fins générales est nécessaire.

L'image ci-dessous montre le comportement de l'algorithme réellement acquis. CartPole

Voici ce que j'ai craché pour rendre cet algorithme généré automatiquement exécutable en Python: La mise en œuvre automatise également ce processus. Code source Partie algorithme

Mountain Car Le problème est de déplacer la voiture et de gravir la montagne à droite. Là encore, les conditions initiales sont quelque peu aléatoires.

L'image ci-dessous montre le comportement de l'algorithme réellement acquis. MountainCar

Voici ce que j'ai craché pour rendre cet algorithme généré automatiquement exécutable en Python:

Code source Partie algorithme

Résumé

[AutoML-Zero] récemment annoncé (https://ai.googleblog.com/2020/07/automl-zero-evolving-code-that-learns.html) construit également automatiquement l'algorithme lui-même en utilisant un algorithme évolutif. C'était une chose. À l'avenir, on s'attend à ce que des recherches plus actives soient menées pour créer automatiquement des algorithmes et de la programmation, y compris l'apprentissage automatique, complètement loin des mains humaines. Nous avons implémenté AutoML-Zero en étendant GRAPE, qui suit un algorithme génétique plus général pour l'expression individuelle et la manipulation génétique, et à ce stade, nous obtenons à peu près les résultats attendus. (L'implémentation en Python était trop lente pour être utile, je l'ai donc réimplémentée avec diverses optimisations en C ++.)

Comme mentionné dans l'introduction, les algorithmes génétiques font plus que simplement résoudre l'optimisation des paramètres et l'optimisation des combinaisons numériques. L'évolution et l'apprentissage sont compatibles, et je pense qu'AutoML-Zero reproduit la relation de maximisation de la nouvelle structure obtenue par l'évolution dans l'apprentissage à un niveau pratique, et l'algorithme génétique de cette évolution Je crois qu'il peut être grandement utilisé pour la pièce. J'espère que cela sera utile pour ceux qui mènent de la recherche et du développement dans ce domaine.

Recommended Posts

Automatisation de la génération d'algorithmes à l'aide d'algorithmes génétiques
[Python] Remarques sur l'accélération des algorithmes génétiques à l'aide du multitraitement
Algorithme génétique en python
Algorithme de détection de génération de méduses
Recherche de structures stables de nanoclusters métalliques à l'aide d'algorithmes génétiques
Sélection des caractéristiques par algorithme génétique
Algorithme de recherche utilisant word2vec [python]
Génération de Pokémon la plus puissante utilisant LSTM
Trouvez la valeur optimale de la fonction à l'aide d'un algorithme génétique (partie 1)