Développer des applications scalables implémentant des algorithmes génétiques
-
Upload
geneticio -
Category
Technology
-
view
137 -
download
3
Transcript of 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
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
@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
@GeneticIO Devoxx France 2015 #DevoxxFR
Certainement…
@GeneticIO Devoxx France 2015 #DevoxxFR
Hash shafka zali addrivat mae, zhey Khaleesi??
@GeneticIO Devoxx France 2015 #DevoxxFR
Sélection d’orbite de satellite
Vraiment! http://goo.gl/eauC32
philae
tchoury
@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é.
.
@GeneticIO Devoxx France 2015 #DevoxxFR
Processus d’évolution
Génération de la population initiale Evaluation
Terminé
Mutation
Croisement
Selection
Fini!
Oui
Non
@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
@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.
@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
@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 …
@GeneticIO Devoxx France 2015 #DevoxxFR
Evaluation
Fonction de fitness = distance restante
tchoury
philaephilae
philae
philaephilae
philae
philae
philae
philae
philae
philaephilae
@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.
…
@GeneticIO Devoxx France 2015 #DevoxxFR
Si je veux essayer, que
dois-je choisir?
@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…
@GeneticIO Devoxx France 2015 #DevoxxFR
Mais ça, c’était avant;)
@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!
@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
@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
@GeneticIO Devoxx France 2015 #DevoxxFR
Importation des données
@GeneticIO Devoxx France 2015 #DevoxxFR
Conversion des données
@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 ...;
}}
@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;}...
}
@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 ...;}
}
@GeneticIO Devoxx France 2015 #DevoxxFR
Configuration des jobs
@GeneticIO Devoxx France 2015 #DevoxxFR
Evolution des scores de fitness
@GeneticIO Devoxx France 2015 #DevoxxFR
Représentation configurable des candidats
@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!
@GeneticIO Devoxx France 2015 #DevoxxFR
Demo!
@GeneticIO Devoxx France 2015 #DevoxxFR
Questions?