231 votes

Quels sont les bons exemples de génétique algorithmes/génétique des solutions de programmation ?

Les algorithmes génétiques (GA) et de la programmation génétique (GP) sont des domaines de recherche intéressants.

Je voudrais savoir au sujet de certains problèmes que vous avez résolus à l'aide de GA/GP et que les bibliothèques/cadres de vous servir si vous n'avez pas à rouler.

Questions:

  • Quels problèmes avez-vous utilisé GA/GP à résoudre?
  • Quelles librairies/frameworks avez-vous utilisé?

Je suis à la recherche d'expériences, de sorte s'il vous plaît ne pas répondre, sauf si vous avez que.

151voto

MusiGenesis Points 49273

Pas de devoirs.

Mon premier emploi en tant que programmeur professionnel (1995) a écrit une génétique de l'algorithme de base de système de trading automatique pour le S&P500 à terme. L'application a été écrite en Visual Basic 3 [!] et je n'ai aucune idée de comment j'ai fait quelque chose de nouveau, puis, depuis VB3 n'ai même pas de classes.

Le démarrage de l'application, avec une population de généré de façon aléatoire des chaînes de longueur fixe (le "gène" de la partie), dont chacun correspond à une forme spécifique dans la minute par minute des données sur les prix de l'indice S&P 500 contrats à terme, ainsi que de l'ordre (achat ou vente) et le stop-loss et stop-montants du bénéfice. Chaque chaîne (ou "gène") avait son profit la performance évaluée par une course à travers 3 années de données historiques; à chaque fois que l'indication de la forme" d'appariement des données historiques, j'ai pris le correspondant d'achat ou de vente et d'évaluer le commerce du résultat. J'ai ajouté l'avertissement que chaque gène a commencé avec un montant fixe d'argent et pourrait donc potentiellement aller cassé et être retiré à partir du gène de la piscine entièrement.

Après chaque évaluation d'une population, les survivants ont été croisées au hasard (par un peu de mélange de bits à partir de deux parents), avec la probabilité d'un gène d'être sélectionné en tant que parent étant proportionnelle au résultat qu'elle produit. J'ai également ajouté la possibilité de mutations ponctuelles pour pimenter les choses un peu. Après quelques centaines de générations de cela, je me suis retrouvé avec une population de gènes qui pourraient tourner à $5000 en moyenne d'environ $10000 avec aucune chance de la mort/brokeness (sur les données historiques, bien sûr).

Malheureusement, je n'ai jamais eu la chance d'utiliser ce système en direct, depuis mon patron a perdu près de 100 000 $en moins de 3 mois de négociation de façon traditionnelle, et il a perdu sa volonté de poursuivre le projet. Rétrospectivement, je pense que le système aurait fait d'énormes profits, non pas parce que j'ai été nécessairement fait rien, mais parce que la population de gènes que j'ai produit qui est arrivé à être orientés vers les ordres d'achat (par opposition à des ordres de vente) par le sujet d'un rapport 5:1. Et comme nous le savons avec notre 20/20 avec le recul, le marché est allé un peu après 1995.

90voto

mempko Points 71

J'ai fait un peu de créatures qui vivaient dans ce petit monde. Ils avaient un réseau de neurones du cerveau qui a reçu certains apports de la monde et la sortie a été un vecteur de mouvement parmi d'autres actions. Leurs cerveaux ont été les "gènes".

Le programme a commencé par un hasard de la population de créatures aléatoires cerveaux. Les entrées et la sortie des neurones étaient statiques, mais ce qui était entre les deux n'était pas.

L'environnement contenait de la nourriture et des dangers. L'alimentation a augmenté d'énergie et quand vous avez assez d'énergie, vous pouvez mate. Les dangers permettrait de réduire la consommation d'énergie et si l'énergie était de 0, ils sont morts.

Finalement, les créatures ont évolué pour se déplacer dans le monde et trouver de la nourriture et éviter les dangers.

J'ai alors décidé de faire une petite expérience. J'ai donné à la créature le cerveau d'un neurone de sortie appelé "bouche", et un neurone d'entrée appelé "oreille". A démarré et a été surpris de trouver qu'ils ont évolué afin de maximiser l'espace et chaque créature de rester dans sa partie (de la nourriture a été placé au hasard). Ils ont appris à coopérer les uns avec les autres et non les uns les autres. Il y avait toujours des exceptions.

Ensuite, j'ai essayé quelque chose d'intéressant. J'morts, des créatures devenir de la nourriture. Essayez de deviner ce qui s'est passé! Deux types de créatures évolué, ceux qui ont attaqué comme en essaims, et ceux qui ont été élevés d'évitement.

Alors, quelle est la leçon à tirer ici? Les moyens de Communication de la coopération. Dès que vous introduisez un élément où blesser l'autre signifie que vous gagner quelque chose, la coopération est détruit.

Je me demande comment cela se reflète sur le système de libre marché et le capitalisme. Je veux dire, si les entreprises peuvent blesser leur concurrence et de sortir avec elle, puis son clair qu'ils vont faire tout en leur pouvoir pour nuire à la concurrence.

Edit:

Je l'ai écrit en C++ à l'aide de pas de cadres. Écrit mon propre réseau neuronal et GA code. Eric, merci de dire qu'il est tout à fait plausible. Habituellement, les gens ne croient pas dans les pouvoirs de la GA (même si les limites sont évidentes) jusqu'à ce qu'ils ont joué avec elle. GA est simple mais pas simpliste.

Pour les sceptiques, les réseaux de neurones ont été prouvé être capable de simuler n'importe quelle fonction de si ils ont plus d'une couche. GA est une manière assez simple de naviguer dans un espace de solution trouver un local et potentiellement minimum global. Combiner GA avec les réseaux de neurones et vous avez une assez bonne façon de trouver des fonctions qui permettent de trouver approximative des solutions à des problèmes génériques. Parce que nous sommes à l'aide de réseaux de neurones, alors nous sommes à l'optimisation de la fonction de certains intrants, ce n'est pas quelques entrées pour une fonction, comme d'autres le sont à l'aide de GA

Voici la démo de code pour la survie de l'exemple: http://www.mempko.com/darcs/neural/demos/eaters/ Les instructions:

  • Installer darcs, libboost, liballegro, gcc, cmake, faire
  • darcs clone --lazy http://www.mempko.com/darcs/neural/
  • cd neural
  • cmake .
  • make
  • cd demos/eaters
  • ./eaters

Eaters Screenshot

54voto

adi Points 1

En janvier 2004, j'ai été contacté par Philips de Nouvelles Technologies d'Affichage qui ont été la création de l'électronique pour la première commerciale de l'e-ink, le Sony Librie, qui avait été publié dans le Japon des années avant que le Kindle d'Amazon et les autres sur le marché en NOUS une Europe.

Le Philips ingénieurs avaient un problème majeur. Quelques mois avant que le produit était censé frapper le marché, ils ont toujours des effets de rémanence sur l'écran lors du changement de pages. Le problème était de 200 pilotes de la création du champ électrostatique. Chacun de ces conducteurs avaient une certaine tension qui devait être défini entre zéro et 1000 mV ou quelque chose comme ça. Mais si vous avez modifié l'un d'eux, il serait tout changer.

Donc l'optimisation de chacun des pilotes de tension individuellement, il était hors de question. Le nombre de combinaisons possibles de valeurs en milliards de dollars,et il a fallu environ 1 minute pour une caméra spéciale pour évaluer une combinaison unique. Les ingénieurs avaient essayé beaucoup de techniques d'optimisation, mais rien ne viendrait fermer.

L'ingénieur en chef, m'a contacté parce que j'avais déjà publié une Programmation Génétique de la bibliothèque à la communauté open-source. Il a demandé si GP/GA serait de l'aide et si je pouvais participer. Je l'ai fait, et depuis environ un mois, nous avons travaillé ensemble, moi, l'écriture et le réglage de l'AG de la bibliothèque, sur des données synthétiques, et lui de l'intégrer dans leur système. Ensuite, un week-end, ils ont laissé exécuter en direct avec la vraie chose.

Le lundi suivant, j'ai eu ces lumineux e-mails à partir de lui et de leur matériel, designer, sur la façon personne ne pouvait croire les résultats étonnants de la GA trouvé. Ce qu'il était. Plus tard dans l'année le produit sur le marché.

Je n'ai pas payé un centime pour elle, mais je les ai vantardise des droits de l'. Ils ont dit dès le début, ils étaient déjà plus de budget, je savais donc que l'affaire était avant j'ai commencé à travailler sur elle. Et c'est une belle histoire pour les applications de Gaz. :)

53voto

Adrian McCarthy Points 17018

J'ai utilisé un GA pour optimiser la réservation de sièges à ma réception de mariage. 80 personnes de plus de 10 tables. La fonction d'évaluation a été basée sur le maintien de personnes avec leurs dates, de mettre des gens ayant quelque chose en commun, et de garder les gens à l'extrême opposé des vues à des tables séparées.

J'ai couru plusieurs fois. À chaque fois, je l'ai eu neuf bonnes tables, et celui avec toutes les boules. En fin de compte, ma femme a fait la réservation de sièges.

Mon voyageur de commerce optimiseur utilisé une nouvelle cartographie des chromosomes à l'itinéraire, qui fait qu'il est trivial de la race et de la mutation de l'chromosomes sans aucun risque de générer des invalides tours.

35voto

edebill Points 3572

J'ai utilisé les algorithmes génétiques (ainsi que quelques techniques) afin de déterminer les meilleurs paramètres pour un système de gestion des risques qui a essayé de garder de l'or agriculteurs d'utiliser des cartes de crédit volées à payer pour les Mmo. Le système serait de prendre dans plusieurs milliers de transactions avec les "connus" des valeurs (la fraude ou non) et de comprendre quelle est la meilleure combinaison de paramètres a été pour identifier correctement les transactions frauduleuses, sans avoir trop de faux positifs.

Nous disposions de données sur plusieurs dizaines d' (boolean) caractéristiques d'une opération, dont chacun avait une valeur et additionnés. Si le total est supérieur à un seuil, l'opération a été fraude. L'AG serait de créer un grand nombre de jeux de hasard de valeurs, de les évaluer à l'encontre d'un corpus de données, sélectionnez ceux qui ont eu les meilleurs (à la fois pour la détection de la fraude et de limiter le nombre de faux positifs), puis traverser la meilleure race peu de chaque génération pour produire une nouvelle génération de candidats. Après un certain nombre de générations, le meilleur score d'un ensemble de valeurs a été considéré comme le vainqueur.

La création d'un corpus de données connues à tester a été le talon d'Achille du système. Si vous avez attendu rabais, vous avez été plusieurs mois de retard en essayant de répondre aux fraudeurs, de sorte que quelqu'un aurait à examiner manuellement un grand nombre d'opérations à mettre en place que l'corpus de données sans avoir à attendre trop longtemps.

Il a fini vers le haut d'identifier la grande majorité de la fraude qui vient, mais ne pouvait pas tout à fait le faire en dessous de 1% sur la plupart des fraudes sujettes à des éléments (étant donné que 90% des transactions entrantes pourrait être la fraude, qui s'en sortait plutôt bien).

J'ai fait tout ça à l'aide de perl. Une exécution du logiciel sur un assez vieux linux serait prendre 1 à 2 heures de course (20 minutes pour charger des données sur une liaison WAN, le reste du temps passé à croquer). La taille de chaque génération est limitée par la mémoire disponible. J'ai couru encore et encore, avec de légères modifications aux paramètres, à la recherche pour une bonne jeu de résultats.

Dans l'ensemble c'éviter certains dérapages qui est venu avec manuellement en essayant d'ajuster les valeurs relatives des dizaines d'indicateurs de fraude, et de manière cohérente est venu avec de meilleures solutions que j'ai pu créer à la main. Autant que je sache, il est toujours en usage (environ 3 ans après je l'ai écrit).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X