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

31
@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

Upload: geneticio

Post on 27-Jul-2015

137 views

Category:

Technology


3 download

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?