Top Banner
@GeneticIO Devoxx France 2015 #DevoxxFR Devoxx France – 8-10 avril, 2015 Genetic. io Yves Corsaire Julien Sebrien [email protected] Développer des applications scalables implémentant des algorithmes génétiques
31

Développer des applications scalables implémentant des algorithmes génétiques

Jul 27, 2015

Download

Technology

GeneticIO
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Développer des applications scalables  implémentant des algorithmes génétiques

@GeneticIO Devoxx France 2015 #DevoxxFR

Devoxx France – 8-10 avril, 2015

Genetic.io

Yves CorsaireJulien Sebrien

[email protected]

Développer des applications scalables implémentant des algorithmes génétiques

Page 2: Développer des applications scalables  implémentant des algorithmes génétiques

@GeneticIO Devoxx France 2015 #DevoxxFR

Algorithmes génétiques

• Appartiennent à la famille des algorithmes évolutionnistes.

• Permettent d'obtenir une solution approchée à un problème d'optimisation, lorsqu'il n'existe pas de méthode exacte (ou que la solution est inconnue) pour le résoudre en un temps raisonnable

Page 3: Développer des applications scalables  implémentant des algorithmes génétiques

@GeneticIO Devoxx France 2015 #DevoxxFR

Domaines d’application

• Aéronautique• Bio-Informatique• Marketing• Finance• Reseaux neuronaux• Ingénieurie mécanique• Imagerie• Linguistique• Etc.

Sources:http://en.wikipedia.org/wiki/List_of_genetic_algorithm_applications

Page 4: Développer des applications scalables  implémentant des algorithmes génétiques

@GeneticIO Devoxx France 2015 #DevoxxFR

Certainement…

Page 5: Développer des applications scalables  implémentant des algorithmes génétiques

@GeneticIO Devoxx France 2015 #DevoxxFR

Hash shafka zali addrivat mae, zhey Khaleesi??

Page 6: Développer des applications scalables  implémentant des algorithmes génétiques

@GeneticIO Devoxx France 2015 #DevoxxFR

Sélection d’orbite de satellite

Vraiment! http://goo.gl/eauC32

philae

tchoury 

Page 7: Développer des applications scalables  implémentant des algorithmes génétiques

@GeneticIO Devoxx France 2015 #DevoxxFR

Besoins

• Une modélisation génétique de chaque solutionChaque individu possède les caractéristiques matérialisant les données du problème (poids, vitesse).

• Une méthode de sélection: Détermine de quelle manière les individus seront sélectionnés (proportion au score de fitness, Tournoi, Classement).

• Une fonction de fitnessEvalue la qualité de chaque individu, son adaptation au contexte du problème donné.

.

Page 8: Développer des applications scalables  implémentant des algorithmes génétiques

@GeneticIO Devoxx France 2015 #DevoxxFR

Processus d’évolution

Génération de la population initiale Evaluation

Terminé

Mutation

Croisement

Selection

Fini!

Oui

Non

Page 9: Développer des applications scalables  implémentant des algorithmes génétiques

@GeneticIO Devoxx France 2015 #DevoxxFR

Modélisation du problème

Déterminer une trajectoire optimale vers la comète « tchoury ».

Une séquence de n chromosomes, chacun d’entre eux représentant un mouvement unitaire sur un plan 2D.

Le score d’un individu sera d’autant plus élevé qu’il est proche de la comète.

f(x) = 1/ R (R=distance restante par rapport à la comète)

• Pré-requis

• Implémentation des candidats

• Fonction de fitness

Page 10: Développer des applications scalables  implémentant des algorithmes génétiques

@GeneticIO Devoxx France 2015 #DevoxxFR

Selection

Plusieurs manières de sélectionner des individus existent: proportion au score de fitness, Tournoi, Classement, etc.

Exemple Tournoi

1.Sélectionne aléatoirement 2 individus de la population.

2.Génère une valeur aléatoire afin de décider si l’on sélectionne l’individu le plus faible ou le plus fort (selon leur score).

3.Ajoute l’individu choisi à la sélection courante. Les 2 individus précédents sont ré-insérés dans la population initiale afin de pouvoir être re-sélectionnés par la suite.

Page 11: Développer des applications scalables  implémentant des algorithmes génétiques

@GeneticIO Devoxx France 2015 #DevoxxFR

Croisement

NE N E NE S W SW E

E NE N NW W E E NW

1 point de croisement 1 point de croisement

parent 1 parent 2

enfant 1 enfant2

NE N E NE S E E NW

E NE N NW W W SW E

Page 12: Développer des applications scalables  implémentant des algorithmes génétiques

@GeneticIO Devoxx France 2015 #DevoxxFR

MutationObjectif : injecter de la diversité au sein de la population, permettant de réduire le risque de stagner au sein d’un optimum local.

Description : générer un nombre aléatoire. Si le nombre est inférieur au taux de mutation préalablement défini, on effectue la mutation, sinon l’algorithme continue son exécution.

Graphique extrait de: http://www.codeproject.com/Articles/707505/Genetic-Algorithms-Demystified

enfant 2

… W …

… E …

Page 13: Développer des applications scalables  implémentant des algorithmes génétiques

@GeneticIO Devoxx France 2015 #DevoxxFR

Evaluation

Fonction de fitness = distance restante

tchoury 

philaephilae

philae

philaephilae

philae

philae

philae

philae

philae

philaephilae

Page 14: Développer des applications scalables  implémentant des algorithmes génétiques

@GeneticIO Devoxx France 2015 #DevoxxFR

Terminé?

L’algorithme se termine si l’une des conditions de terminaison suivantes est satisfaite:

1. Un nombre maximum d’itérations de générations est atteint.

2. Un candidat a un score de fitness supérieur ou égal à un seuil préalablement défini.

3. L’algorithme s’exécute depuis une trop longue durée.

Page 15: Développer des applications scalables  implémentant des algorithmes génétiques

@GeneticIO Devoxx France 2015 #DevoxxFR

Si je veux essayer, que

dois-je choisir?

Page 16: Développer des applications scalables  implémentant des algorithmes génétiques

@GeneticIO Devoxx France 2015 #DevoxxFR

Solutions existantes

• De nombreuses librairies existent, mais de très bas niveau, nécessitant un investissement important sur le plan technique, et sur la théorie des algorithmes génétiques.

• Exemples : JGAP, ECJ, EpochX, dans plusieurs langages (Java, C++, Python, etc.)

• Aucune n’entre elles:

- Ne fournit d’interface web moderne de configuration…

- Ne permet l’implémentation d’algorithmes à l’aide de plusieurs langages simultanément…

- N’exploite des architectures distribuées…

Page 17: Développer des applications scalables  implémentant des algorithmes génétiques

@GeneticIO Devoxx France 2015 #DevoxxFR

Mais ça, c’était avant;)

Page 18: Développer des applications scalables  implémentant des algorithmes génétiques

@GeneticIO Devoxx France 2015 #DevoxxFR

Installation simplifiée• Installer Genetic.io à l’aide des scripts fournis (windows, unix, mac)

• Créer les comptes utilisateur

• Importer vos données à l’aide de diverses méthodes d’importation (fichier local, téléversement, base de données distante, etc.)

• Configurer les paramètres du job (type de moteur d’évolution, classes dépendentes, conditions de terminaison, etc.)

• Eventuellement, paramétrer la méthode de parallélisation du score de fitness (spark, jppf, multitheadé)

• Démarrer et visualiser l’avancement de l’exécution de l’algorithme en temps réel!

Page 19: Développer des applications scalables  implémentant des algorithmes génétiques

@GeneticIO Devoxx France 2015 #DevoxxFR

Pile logicielle

Serveur d’Application Web

Client Web

HTTPWebSocket

Base de données

Grille d’exécution de jobs

Batch

CQL

CQL

Wire

Wire Cluster de calcul de données

Page 20: Développer des applications scalables  implémentant des algorithmes génétiques

@GeneticIO Devoxx France 2015 #DevoxxFR

Infrastructure

Démarrage des jobs, ré

cupération des résultats

Gestions des comptes utilisateur, sources de données, etc.

calcul des scores de fitness

Charg

emen

t des

can

dida

ts (a

vec

data

loca

lité)Chargem

ents des confs des jobs

Page 21: Développer des applications scalables  implémentant des algorithmes génétiques

@GeneticIO Devoxx France 2015 #DevoxxFR

Importation des données

Page 22: Développer des applications scalables  implémentant des algorithmes génétiques

@GeneticIO Devoxx France 2015 #DevoxxFR

Conversion des données

Page 23: Développer des applications scalables  implémentant des algorithmes génétiques

@GeneticIO Devoxx France 2015 #DevoxxFR

Calcul du fitness

public class PhilaeFitnessCalculator implements FitnessCalculator{@Overridepublic double calculate(IndividualBean bean, ...) {

double remainingDistance = computeRemainingDistance(bean);

return 1/remainingDistance;}@Overridepublic boolean isNatural() {

return true;}

private double computeRemainingDistance(IndividualBean bean){return ...;

}}

Page 24: Développer des applications scalables  implémentant des algorithmes génétiques

@GeneticIO Devoxx France 2015 #DevoxxFR

Operateur de croisementpublic class PhilaeCrossoverOperator implements CrossoverOperator {

...@Overridepublic List<IndividualBean> crossover(IndividualBean firstParent, IndividualBean

secondParent, Random rng) {IndividualBean firstChild = new IndividualBean(firstParent);IndividualBean secondChild = new IndividualBean(secondParent);int numberOfCrossoverPoints = getNbCrossoverPoints(); for (int i = 0; i < numberOfCrossoverPoints; i++){ int max = Math.min(firstChild.getNbAttributes(),

secondChild.getNbAttributes()); if (max > 1){

int crossoverIndex = (1 + rng.nextInt(max - 1)); for (int j = 0; j < crossoverIndex; j++){ Object temp = firstChild.getValue(j); firstChild.setValue(j, secondChild.getValue(j)); secondChild.setValue(j, temp); } }}return Arrays.asList(firstChild, secondChild);

}@Overridepublic int getNbCrossoverPoints() {

return this.nbCrossoverPoints;}...

}

Page 25: Développer des applications scalables  implémentant des algorithmes génétiques

@GeneticIO Devoxx France 2015 #DevoxxFR

Operateur de mutation

public class PhilaeMutationOperator implements MutationOperator{...@Overridepublic IndividualBean mutate(IndividualBean individual, Random rng) {

individual.setValue("direction", mutateDirection(individual.getValue("direction"),

rng));return individual;

}private String mutateDirection(String direction, Random rng) {

return ...;}

}

Page 26: Développer des applications scalables  implémentant des algorithmes génétiques

@GeneticIO Devoxx France 2015 #DevoxxFR

Configuration des jobs

Page 27: Développer des applications scalables  implémentant des algorithmes génétiques

@GeneticIO Devoxx France 2015 #DevoxxFR

Evolution des scores de fitness

Page 28: Développer des applications scalables  implémentant des algorithmes génétiques

@GeneticIO Devoxx France 2015 #DevoxxFR

Représentation configurable des candidats

Page 29: Développer des applications scalables  implémentant des algorithmes génétiques

@GeneticIO Devoxx France 2015 #DevoxxFR

Caractéristiques• Gestion de comptes utilisateur sécurisée

• Data localité sur les bases de données distribuées les plus populaires (MongoDB, Cassandra)

• Parallélisation du calcul du score de fitness avec Spark, JPPF ou multithreadé

• Distribution de l’exécution des jobs via JPPF

• Représentation personnalisée des individus avec D3.js SVG

• Possiblité de re-jouer les jobs afin de diagnostiquer leurs évolutions

• Multilanguage (Java, Scala…), multiplatforme (Windows, Unix, Mac)

• Open source!

Page 30: Développer des applications scalables  implémentant des algorithmes génétiques

@GeneticIO Devoxx France 2015 #DevoxxFR

Demo!

Page 31: Développer des applications scalables  implémentant des algorithmes génétiques

@GeneticIO Devoxx France 2015 #DevoxxFR

Questions?