Documentation

Version actuelle: 0.2 – Notes de version

Documentation

1. Démarrage rapide

Genetic.io est une solution qui permet d’implémenter des algorithmes évolutionnistes pour répondre à des problématiques d’optimisation de processus métiers.
Cette documentation décrit comment les taches correspondantes doivent être initialisées et démarrées au sein de la solution, pour répondre à ces problématiques.

1.1 Test de la demo

Tester notre solution en mode démo afin de pouvoir tester les fonctionnalités proposées.
Saisissez vos coordonnées dans le formulaire, et cliquer sur le bouton Confirmer:

demo-form-fr

Validez votre adresse email en cliquant sur le lien présent dans l’email reçu:

first-email1-fr

L’ecran de confirmation suivant devrait ainsi apparaître:

first-email2-fr

Une fois votre adresse email validée, vous recevrez un second email vous indiquant comment accéder à la démo:

second-email1-fr

1.2 Authentification

Cliquer sur le lien présent dans le second email recu:

second-email2-fr

Et saisissez l’email utilisé lors de votre demande de test (le mot de passe est : demodemo):

auth-fr

1.3 Exécution d’une simulation

Une fois authentifié, accéder à l’encadré Tâches et cliquer sur le lien Tout afficher:

display-all-fr

Ensuite, sélectionner par exemple la tâche job_rocket_local_embedded:

job-select-fr

Cliquer ensuite sur le bouton Exécutions:

job-select-executions-fr

Enfin, cliquer sur le bouton Démarrer:

job-start-fr

La simulation démarrera automatiquement:

job-exec-fr

Une fois la simulation terminée, cliquer sur le lien Exécutions:

job-completed-executions-fr

Repérez votre exécution, et cliquer sur le bouton Détails:

job-execution-detail-fr

Un résumé de l’exécution sera présentée. Cliquer sur le lien Population afin d’observer le détail de la population résultante générée:

job-execution-detail-summary-fr

Vous aurez accès aux caractéristiques complètes de la population, ainsi que l’ensemble des détails de la simulation:

job-execution-population-detail-fr

Félicitations! Vous avez été jusqu’au bout du guide de démarrage rapide.

Si vous souhaitez obtenir plus de détails sur l’importation d’une nouvelle source de données, jusqu’au paramétrage de nouvelles tâches, rendez-vous dans les sections suivantes de cette documentation.

2. Importation d’une source de données

Cliquer sur le lien Créer une nouvelle source de données:

datasource-link-fr

2.1 Sélection de la méthode

Plusieurs méthodes d’importation sont proposées:

  • Fichier Local : importation depuis fichier CSV présent sur le serveur local
  • JDBC : importation depuis une base de données externe, accessible via un connecteur JDBC
  • Cassandra : importation depuis une base de données externe de type Cassandra
  • MongoDB : importation depuis une base de données externe de type MongoDB
  • Fichier Téléversé : importation depuis un fichier CSV (éventullement zippé) téléversé

Pour chacune de ces méthodes, une configuration spécifique devra être paramétrée.

Sélectionner par exemple le type d’importation Fichier téléversé.
Télécharger ensuite le fichier de population accessible à l’adresse : http://dl.genetic.io/sdk/importer_data_rockets.txt.
Sélectionner ce fichier pour la configuration d’importation en cours.
Vérifier que le séparateur est bien à ; et que l’option Extraire en-tête du fichier téléversé est bien cochée:

Cliquer ensuite sur Aperçu afin de déclencher une analyse du fichier téléversé, et commencer à paramétrer l’importation en cours.

2.2 Configuration de l’importation

L’ecran suivant présente les résultats de l’analyse de la source de données en cours:

import-milieu-fusées

Les attributs analysés sont:

  • le nom de la colonne tel qu’il a été analysé, selon la méthode choisie. (ie. dans le cas d’un fichier téléversé, les noms récupérés sont présents au niveau de la première ligne d’un fichier CSV, si l’option Extraire en-tête du fichier téléversé a été cochée).
  • le type de valeur pour chaque colonne. (ie. dans le cas d’un fichier CSV, le type sera toujours Chaine de caractères. Dans le cas d’une base de données, le type sera celui de la colonne de la table concernée).
  • la première valeur extraite pour chaque colonne (ie. au niveau de la première ligne succédant l’en-tête pour un fichier CSV, ou au niveau de la première ligne de la table pour une base de données).
  • le type de stockage qui sera utilisée dans la source de données destination qui va être créée. Il existe 4 types de stockage : ID (identifiant de la ligne), IGNORE (valeur ignorée lors de l’importation), INDEX (valeur indexée dans la source de données destination, rendant possible le filtrage de la source de données lors de simulations), STANDARD (valeur à importer, ne représentant pas un identifiant et qui ne sera pas indexée).
  • les conversions de données proposées pour la valeur de chaque colonne. Une conversion de données sera effectuée pour chaque colonne lors de l’importation. (ie. un colonne ayant comme valeur true dans un fichier CSV pourra être physiquement convertie en tant que boolean dans la source de données destination)

Dans cet exemple, au niveau de la colonne id, spécifier un stockage de type ID, et une conversion Vers UUID. Spécifier ensuite un nom pour la source de données, et cliquer sur Lancer.

Après quelques instants, la source de données sera importée et directement utilisable pour de nouvelles simulations.

2.3 Visualisation de la source de données

Les caractéristiques de toute source de données créée sont consultables au sein de l’écran Source de données :

datasource_fusées

L’écran permet de modifier:

  • le nom de la source de données.
  • la limite de chargement : paramètre technique permettant de contrôler, au cours de l’exécution d’une tâche, le nombre de lignes chargées depuis la base de données, à chaque itération, jusqu’au chargement total de la population.

3. Configuration d’une tâche

Cliquer sur le lien Créer une nouvelle tache:

job-create-task-link-fr

Cliquer sur le bouton Créer:

task-new

3.1 Paramètres généraux

Saisissez un nom pour cette nouvelle tâche, et spécifier Multithreadé pour la méthode de calcul du score.

Cette méthode de calcul du score indique que les scores des individus sont calculés en parallèle (par plusieurs threads, 1 par cœur processeur).

Sélectionner la source de données que vous avez créée, et cocher tous les champs proposés :

job-general-fusées

Ces champs seront ainsi tous disponibles au moment du calcul du score de chaque individu.

3.2 Paramètres du moteur

Les Paramètres du moteur permettent de configurer le type d’évolution, sélection, les conditions de terminaison et le mode d’affichage des individus:

job-parametres_fusées

Trois types d’évolution sont disponibles:

  • Evolution de type générationnelle : l’ensemble de la population d’individus évolue en parallèle, à chaque génération.
  • Evolution de type Stratégie : l’ensemble de la population évolue selon des stratégies de type (μ+λ) et (μ,λ).
  • Evolution de type Etat Stable: la population d’individus évolue de manière incrémentale (un seul individu pris au hasard évolue entre chaque génération).

Deux types de sélection sont disponibles:

  • Tournoi : chaque individu est comparé à un autre. L’individu le plus fort a alors X % de chances d’être sélectionné. La probabilité de sélection doit être grande (au-dessus de 70 %), afin de privilégier les meilleurs individus, tout en laissant une chance aux plus faibles d’appartenir à la génération suivante.
  • Roulette : chaque individu a d’autant plus de chances d’être sélectionné, pour la génération suivante, que son score est élevé.

Quatre types de conditions de terminaison sont disponibles:

  • Compteur générations : le nombre de générations a atteint une limite définie préalablement.
  • Temps écoulé : la durée d’exécution de la simulation dépasse une durée fixée.
  • Stagnation : le score de référence (le meilleur ou la moyenne de la population) stagne depuis un certain nombre de générations.
  • Aptitude cible : le meilleur score a atteint une limite définie préalablement.

Il existe deux modes définissant de quelle manière les individus seront représentés à l’écran, génération après génération, au cours d’une exécution:

  • Mode Texte : une chaine de caractères, personnalisable, décrira l’individu.
  • Mode Personnalisé : une forme géométrique représentera l’individu.

Selon le mode choisi, une certain nombre de paramètres doivent être spécifiés.

Pour le mode personnalisé:

  • AUTO_ROTATE : Auto Rotation des fusées en fonction de leur trajectoire
  • CUMULATIVE_FORCE : Force Cumulative pour les vecteur d’accélération
  • INITIAL_X : Abscisse initiale (en pixels) de chaque individu
  • INITIAL_Y : Ordonnée Initiale (en pixels) de chaque individu
  • NB_COORDINATES : Nombre de coordonnées (vecteurs d’accélération) à gérer successivement pour chaque individu
  • NB_INDIVIDUALS : Nombre d’individus à afficher dans le plan
  • OBSTACLE_HEIGHT : Hauteur de l’obstacle (rectangle) à positionner dans le plan
  • OBSTACLE_WIDTH : Largeur de l’obstacle (rectangle) à positionner dans le plan
  • OBSTACLE_X : Abscisse de l’obstacle (rectangle) à positionner dans le plan
  • OBSTACLE_Y : Ordonnée de l’obstacle (rectangle) à positionner dans le plan
  • PANEL_HEIGHT : Hauteur du plan (en pixels)
  • PANEL_WIDTH : Largeur du plan (en pixels)
  • SHAPE : forme de l’individu (fusée). Non pris en compte pour le moment
  • TARGET_HEIGHT : Hauteur de la cible (carré) à positionner dans le plan
  • TARGET_WIDTH : Largeur de la cible (carré) à positionner dans le plan
  • TARGET_X : Abscisse de la cible (carré) à positionner dans le plan
  • TARGET_Y : Ordonnée de la cible (carré) à positionner dans le plan

Pour le mode texte:

  • NB_INDIVIDUALS : Nombre d’individus à afficher dans le plan
  • PANEL_HEIGHT : Hauteur du plan (en pixels)
  • PANEL_WIDTH : Largeur du plan (en pixels)

Dans le cas présent, sélectionner une Evolution de type générationnelle, et un type de sélection Tournoi. Au niveau des Conditions, sélectionner Compteur Générations, et cocher Activer. Spécifier ensuite 300 comme valeur pour le paramètre Nb. Générations Max.

Spécifier un type d’affichage Personnalisé. Pour configurer les propriétés, passer en mode texte:

job_rocket_display_props_switch_fr

et coller les propriétés suivantes:

AUTO_ROTATE=true
CUMULATIVE_FORCE=true
INITIAL_X=400
INITIAL_Y=220
NB_COORDINATES=300
NB_INDIVIDUALS=10
OBSTACLE_HEIGHT=10
OBSTACLE_WIDTH=200
OBSTACLE_X=300
OBSTACLE_Y=100
PANEL_HEIGHT=200
PANEL_WIDTH=800
SHAPE=rectangle
TARGET_HEIGHT=24
TARGET_WIDTH=24
TARGET_X=388
TARGET_Y=24

Ces propriétés permettent, d’une manière générale, de fixer :

  • les dimensions du plan au sein duquel apparaîtront les représentations (ici une fusées) des individus.
  • les coordonnées et dimensions de l’obstacle et de la cible.
  • les coordonnées de départ de chaque fusée.
  • des paramètres permettant de fixer le comportement des mouvements des fusées (Auto Rotation, Force cumulative).
  • Le nombre d’individus affichés (n’ayant aucun impact sur le déroulement de la simulation), pour des problématiques de performance.

Afin de pouvoir paramétrer les dépendances, il est nécessaire de sauvegarder au moins une fois la tâche en cours.

3.3 Implémentation et dépendances

L’onglet Implémentation & Dépendances permet de spécifier la classe qui implémentera :

  • l’opérateur de croisement
  • l’opérateur de mutation
  • la fonction de fitness
  • la fonction qui génère la description d’un individu

job-deps_fusées

Cette classe peut être implémentée dans les languages suivants:

  • Java
  • Scala
  • Python
  • Javascript
  • R

Implémentation Java:

package ;

import java.util.List;
import java.util.Random;
import org.geneticio.core.manager.job.entity.individual.IndividualBean;
import org.geneticio.core.manager.job.entity.evolution.impl.AbstractCheckEvolutionaryProcessor;

public class InlineEvolutionaryProcessor extends AbstractCheckEvolutionaryProcessor {

public InlineEvolutionaryProcessor(){}

@Override
public IndividualBean mutate(IndividualBean individual, Random rng) {		return individual;}

@Override
public double calculate(IndividualBean bean) {		return 0.0d;	}

@Override
public boolean isNatural() {return false;}

@Override
public String describe(IndividualBean bean) {return "";}}

Implémentation Scala:

package 

import java.util.List
import java.util.Random
import org.geneticio.core.manager.job.entity.individual.IndividualBean
import org.geneticio.core.manager.job.entity.evolution.impl.AbstractCheckEvolutionaryProcessor
import scala.collection.JavaConversions._

@SerialVersionUID(1L)
class InlineEvolutionaryProcessor extends AbstractCheckEvolutionaryProcessor {

override def mutate(individual: IndividualBean, rng: Random): IndividualBean = individual

override def calculate(bean: IndividualBean): Double = 0.0d

override def isNatural(): Boolean = false

override def describe(individual: IndividualBean): String = null

}

Implémentation Python:

from java.util import List
from java.util import Random
from org.geneticio.core.manager.job.entity.individual import IndividualBean
from org.geneticio.core.manager.job.entity.evolution.impl import AbstractEvolutionaryProcessor

class InlineEvolutionaryProcessor(AbstractEvolutionaryProcessor):
    def __init__(self):
        pass

    def mutate(self, individual, rng):
        return individual

    def calculate(self, individual):
        return 0.0

    def isNatural(self):
        return False

    def describe(self, individual):
        return None

Implémentation Javascript:

var AbstractEvolutionaryProcessor = Java.type('org.geneticio.core.manager.job.entity.evolution.impl.AbstractEvolutionaryProcessor');
var InlineEvolutionaryProcessor = Java.extend(AbstractEvolutionaryProcessor);

var inlineEvolutionaryProcessor = new InlineEvolutionaryProcessor() {
    mutate: function(individual, rng) {
        return individual;
    },
    calculate: function(individual) {
        return 0.0;
    },
    isNatural: function(){
    	return false;
    },
    describe: function(individual) {
        return "";
    }
}

Implémentation R:

import(java.util.List)
import(java.util.Random)
import(org.geneticio.core.manager.job.entity.individual.IndividualBean)
import(org.geneticio.core.manager.job.entity.JobInitBean)
import(org.geneticio.dispatcher.examples.string.StringProperty)
import(java.lang.StringBuilder)

initialize <- function(initBean){
}

mutate <- function(individual, mutationProbabilityVariable, rng){
  return(NULL)
}

calculate <- function(individual){
	 fitness <- 0
	 return(fitness)
}
isNatural <- function(){
    return(FALSE)
}

describe <- function(bean){
    return(NULL)
}

Les fonctions à implémenter sont:

  • mutate : retourne un individu éventuellement muté. Prends l’individu original, ainsi qu’un générateur de nombre pseudo aléatoire en paramètre
  • calculate : calcule et retourne le score de l’individu en paramètre
  • isNatural : indique si les scores sont naturels ou non
  • descrive : retourne une chaîne de caractères décrivant l’individu. Utile pour le mode d’affichage texte
  • optionnellement, crossover : retourne deux individus enfants, générés après avoir effectué des croisements de gènes de leurs parents, passés en paramètre
  • optionnellement, initialize : initialise le processeur à partir des paramètres configurés par l’utilisateur

Le SDK correspondant est accessible à cette adresse : http://dl.genetic.io/sdk/
La Javadoc correspondante est accessible à cette adresse : http://dl.genetic.io/sdk/javadoc/

Il existe deux manières de proposer une implémentation du processeur:

  • directement en ligne à l’aide de l’éditeur intégré. Exemple avec notre article de blog sur TOBEORNOTTOBE.
  • en indiquant le nom de la classe d’implémentation du processeur, après avoir téléversé l’ensemble des dépendances (jar) de la simulation. Exemple avec notre article de blog sur les Smart Rockets.

Dans le cas présent, nous allons directement spécifier le nom de la classe d’implémentation. Dans la champ Classe d’implémentation, spécifier ainsi:

org.geneticio.dispatcher.examples.rocket.RocketEvolutionaryProcessor

Cette classe est en effet directement disponible dans le contexte d’exécution (classpath) de la solution. Il n’est donc pas utile de téleverser des dépendances additionnelles.

La section Propriétés permet de configurer certaines propriétés utiles pour le bon déroulement de la simulation :

  • MUTATION_PROBABILITY : probabilité de mutation (ie. 0.01 pour 1 pourcent).
  • CROSSOVER_POINTS_PROBABILITY : probabilité de croisement. En général très élevé, nous mettrons ici 1 pour 100%.
  • NB_CROSSOVER_POINTS : nombre de points de croisement. Dans le cadre de cette simulation, nous aurons 1 seul point de croisement.
  • RANDOMIZER : type de générateur aléatoire. Le générateur Mersenne Twister est souvent utilisé en remplacement (pour ses performances, et sa plus grande période) de l’implémentation par défaut proposée par l’environnement Java. Spécifier MERSENNE_TWISTER_RNG .
  • FITNESS_SELECTION_PROBABILITY : probabilité de sélection. En général très élevé, au-delà de 70%. Nous mettrons ici 1 pour 100%.
  • MAX_FORCE : spécifique à l’exemple des Smart Rockets. Limitation de la force unitaire à appliquer sur une fusée. Spécifier 0.1 .

Pour insérer ces propriétés, passer en mode texte, et coller les lignes suivantes:

MUTATION_PROBABILITY=0.01
CROSSOVER_POINTS_PROBABILITY=1
MAX_FORCE=0.1
NB_CROSSOVER_POINTS=1
RANDOMIZER=MERSENNE_TWISTER_RNG
FITNESS_SELECTION_PROBABILITY=1

Afin de démarrer une simulation, il est nécessaire de sauvegarder la tâche en cours.

4. Exécution d’une simulation

Il existe plusieurs manières de démarrer une simulation.

Première méthode:

Dans le menu utilisateur, cliquer sur Exécutions:

menu-executions-fr

Puis cliquer sur le bouton Démarrer de la tâche correspondante:

executions-list-fr

Seconde méthode:

Depuis l’ecran de votre tâche, cliquer sur le lien Exécutions:

job-execution-bouton-fr

Puis cliquer sur le bouton Démarrer:

job-executions-start-fr

La simulation se lancera alors automatiquement:

Simualtion example rockets

5. Récupération des résultats

Au niveau de l’écran des exécutions, cliquer sur le bouton Population de la tâche correspondante:

job-execution-detail-summary-fr

Vous aurez ainsi accès à toutes les données de la simulation, et de la population générée:

job-execution-population-detail-fr

Il est possible d’extraire les caractéristiques de la population au format CSV, en modifiant éventuellement le séparateur, puis en cliquant sur le bouton Télécharger.

6. API

6.1 Users

6.1.1 Sign-in

  • URL : /api/account/signin
  • Request Method: POST
  • Payload : {email: « demo@demo.com », password: « demodemo », rememberMe: true}
  • Response codes: 200,500
  • Response : {token: « xyz »}

6.1.2 Get information about current user

  • URL : /api/users/current
  • Request Method: GET
  • Request header: {X-Auth-Token : xyz}
  • Response codes: 200,500
  • Response :
    {id:"355441a0-1ee5-11e4-b871-2c44fd2578e0",
    firstName:"demo",
    lastName:"demo",
    email:"demo@demo.com",
    role:"GUEST",
    language:"fr",
    subscription:"NONE"}
    

6.1.3 Get information about user id

  • URL : /api/users/:id
  • Request Method: GET
  • Request header: {X-Auth-Token : xyz}
  • Response codes: 200,500
  • Response :
    {id:"355441a0-1ee5-11e4-b871-2c44fd2578e0",
    firstName:"demo",
    lastName:"demo",
    email:"demo@demo.com",
    role:"GUEST",
    language:"fr"}
    

6.1.4 Update current user

  • URL : /api/users
  • Request Method: POST
  • Request header: {X-Auth-Token : xyz}
  • Response codes: 200,500
  • Payload:
    {email:"demo@demo.com",
    firstName:"demo",
    id:"324785a0-1ee5-11e4-b871-2c44fd2578e0",
    language:"fr",
    lastName:"demo",
    role:"GUEST"}
    
  • Response : {userId: « 325543a0-1ee5-11e4-b871-2c44fd2578e0 »}

6.2 Importations

6.2.1 Create import configuration

  • URL : /api/importers
  • Request Method: POST
  • Request header: {X-Auth-Token : xyz}
  • Payload:
    {fieldParams:[{position: "0", name: "c0", storateType: "STANDARD", fieldType: "STRING", convectorType: "TO_STRING"},{...}],
    importerParams:[{key: "FILE_SEPARATOR", value: ";"}, {key: "INCLUDE_HEADER", value: "true"},…],
    importerType:"UPLOADED_FILE",
    name:"Importation par défaut"}
    
  • Response codes: 200,500
  • Response : {serviceId: « 7ee23450-4447-11e7-8504-ecb1d7462982 »}

6.2.2 Get import configurations

  • URL : /api/importers
  • Request Method: GET
  • Request header: {X-Auth-Token : xyz}
  • Response codes: 200,500
  • Response : [{name: « testSites »,id: « 0b0ec9c0-07d0-11e7-9a16-ecb1d7462982 »},{…}]

6.2.3 Get importation configuration types

  • URL : /api/importers/conf/types
  • Request Method: GET
  • Request header: {X-Auth-Token : xyz}
  • Response codes: 200,500
  • Response : [« LOCAL_FILE », « JDBC », « CASSANDRA », « MONGODB », « UPLOADED_FILE »]

6.2.4 Get importation field storage types

  • URL : /api/importers/conf/fieldStorageTypes
  • Request Method: GET
  • Request header: {X-Auth-Token : xyz}
  • Response codes: 200,500
  • Response : [« ID », « INDEX », « STANDARD », « IGNORE »]

6.2.5 Launching an importation preview

Use a websocket to keep track the current importation:

  • URL : ws://[url]/api/importers/socket/
  • Request Method: GET
  • Response codes: 101

First Frame:

  • Direction: Client -> Server
  • Payload:
    {command:"Preview",
    fileName:"importer_data_strings.txt",
    fileSize:19246,
    importerId:"7ee23450-4447-11e7-8504-ecb1d7462982",
    importerType:"UPLOADED_FILE"}
    

Second frame:

  • Direction: Server -> Client
  • {feederId: « 8031bec0-4447-11e7-8504-ecb1d7462982 »,importerId: « 7ee23450-4447-11e7-8504-ecb1d7462982 »}

Use the feederId to post importation information:

  • URL : /api/importers/upload?feederId=
  • Request Method: POST
  • Request header: {X-Auth-Token : xyz}
  • Response codes: 200,500
  • Request payload : {Content-Disposition: form-data; name= »file »; filename= »importer_data_strings.txt », Content-Type: text/plain}

Third frame:

  • Direction: Server -> Client
  • {status: « STARTED », data: «  », error: « false », eventType: « preview »}

Fourth frame:

  • Direction: Server -> Client
  • {status: « ONGOING », data: «  », error: « false », eventType: « preview »}

Fifth frame:

  • Direction: Server -> Client
  • {name: « c0 », fieldType: « STRING », value: « R », elligiblesConversions: [« TO_STRING »]},…,{name: « id », fieldType: « STRING », value: « 210cd7f0-c8af-11e5-b0ae-dc5360344db9 »,…}

6.2.6 Launch an importation

Use a websocket to keep track the current importation:

  • URL : ws://[url]/api/importers/socket/
  • Request Method: GET
  • Response codes: 101

First Frame:

  • Direction: Client -> Server
  • Payload:
    {command:"Start",
    dataSourceAction:"create",
    datasourceId:"",
    datasourceName:"ma__source_strings",
    fileName:"importer_data_strings.txt",
    fileSize:19246,
    importerId:"7ee23450-4447-11e7-8504-ecb1d7462982",
    importerType:"UPLOADED_FILE",
    overrideExisting:true}
    

Second frame:

  • Direction: Server -> Client
  • {feederId: « 8031bec0-4447-11e7-8504-ecb1d7462982 »,importerId: « 7ee23450-4447-11e7-8504-ecb1d7462982 »}

Use the feederId to post importation information:

  • URL : /api/importers/upload?feederId=
  • Request Method: POST
  • Request header: {X-Auth-Token : xyz}
  • Response codes: 200,500
  • Request payload : {Content-Disposition: form-data; name= »file »; filename= »importer_data_strings.txt », Content-Type: text/plain}

Third frame:

  • Direction: Server -> Client
  • {status: « STARTED », data: «  », error: « 0.0 », eventType: « import »}

Fourth frame:

  • Direction: Server -> Client
  • {status: « ONGOING », data: «  », error: «  », eventType: « import »}

Multiples frames related to storing (with updated progress status in error field):

  • Direction: Server -> Client
  • {status: « STORING », data: «  », error: « 0.32967889431570196 », eventType: « import »}

Last frame:

  • Direction: Server -> Client
  • {status: « SUCCESS », data: «  », error: «  », eventType: « import »}

6.3 Datasources

6.3.1 Get datasources

  • URL : /api/datasources
  • Request Method: GET
  • Request header: {X-Auth-Token : xyz}
  • Response codes: 200,500
  • Response :
    [{id:"26ef79f0-07d0-11e7-8533-ecb1d7462982",
    name:"datasource_string",
    status:"COMPLETED",
    userId:"demo demo",
    importerId:"testStrings",
    creationDate:1489397624588,
    lastModificationDate:1489397626253,
    fieldParams:[{name:"id",storageType:"ID",fieldType:"UUID"},...}],setSize:300,loadingLimit:100},{...}]}]
    

6.3.2 Get datasource by id

  • URL : /api/datasources/:id
  • Request Method: GET
  • Request header: {X-Auth-Token : xyz}
  • Response codes: 200,500
  • Response :
    {id:"3ea5a040-444a-11e7-8504-ecb1d7462982",
    name:"ma__source_strings_2",
    status:"COMPLETED",
    userId:"324193a0-1ee5-11e4-b871-2c44fd2578e0",
    importerId:"7ee23450-4447-11e7-8504-ecb1d7462982",
    creationDate:1496047132737,
    lastModificationDate:1496048104295,
    fieldParams:[{name:"c0",storageType:"STANDARD",fieldType:"STRING"},...],
    setSize:300,
    loadingLimit:100}
    

6.3.3 Update datasource

  • URL : /api/datasources
  • Request Method: PUT
  • Request header: {X-Auth-Token : xyz}
  • Response codes: 200,500
  • Request payload : {id: « 3ea5a040-444a-11e7-8504-ecb1d7462982 », name: « ma__source_strings_2 », loadingLimit: « 100 »}
  • Response payload: {datasourceId: « 3ea5a040-444a-11e7-8504-ecb1d7462982 »}

6.3.4 Delete datasource

  • URL : /api/datasources/:id
  • Request Method: DELETE
  • Request header: {X-Auth-Token : xyz}
  • Response codes: 200,500

6.3.5 Get Last created datasources

  • URL : /api/datasources/lastCreatedDatasources
  • Request Method: GET
  • Request header: {X-Auth-Token : xyz}
  • Response codes: 200,500
  • Response :
    [{id:"26ef79f0-07d0-11e7-8533-ecb1d7462982",
    name:"datasource_string",
    status:"COMPLETED",
    userId:"demo demo",
    importerId:"testStrings",
    creationDate:1489397624588,
    lastModificationDate:1489397626253,
    fieldParams:[{name:"id",storageType:"ID",fieldType:"UUID"},...}],
    setSize:300,
    loadingLimit:100},
    {...}]
    

6.4 Jobs

6.4.1 Create job

  • URL : /api/jobs
  • Request Method: POST
  • Request header: {X-Auth-Token : xyz}
  • Response codes: 200,500
  • Request payload :
    {computingServiceId:"fa789280-07cf-11e7-bedf-efb93edd4a5d"
    datasourceId:"3ea5a040-444a-11e7-8504-ecb1d7462982"
    dependencies:[]
    displayProperties:[{key: "NB_INDIVIDUALS", value: "10"}, {key: "PANEL_HEIGHT", value: "400"},{key: "NB_INDIVIDUALS", value: "10"},{key: "PANEL_HEIGHT", value: "400"},{key: "PANEL_WIDTH", value: "800"}
    displayType:"TEXT"
    engineProperties:[]
    engineType:"GENERATIONAL_EVOLUTION"
    evolutionaryProcessorClass:"org.geneticio.dispatcher.examples.string.StringEvolutionaryProcessor"
    evolutionaryProperties:[{key: "TARGET", value: "TOBEORNOTTOBE"},{key: "MUTATION_PROBABILITY", value: "0.01"},{key: "CROSSOVER_POINTS_PROBABILITY", value: "1"},
    {key: "NB_CROSSOVER_POINTS", value: "1"},{key: "RANDOMIZER", value: "MERSENNE_TWISTER_RNG"},{key: "FITNESS_SELECTION_PROBABILITY", value: "1"}]
    initialLimitEnabled:false
    initialValuesConditions:[{key: "c0", value: ""}, {key: "c1", value: ""}, {key: "c10", value: ""}, {key: "c11", value: ""},…]
    name:"ma_source_strings"
    selectionType:"ROULETTE_WHEEL"
    terminationBeans:[{activate:true,properties:[{key: "GENERATION_LIMIT_VALUE", value: "300", pType: "INTEGER"}],terminationType:"GENERATION_COUNT"}]}
    
  • Response payload: {jobId: »1a393d70-4454-11e7-8504-ecb1d7462982″}

6.4.2 Delete job

  • URL : /api/jobs/:id
  • Request Method: DELETE
  • Request header: {X-Auth-Token : xyz}
  • Response codes: 200,500

6.4.3 Get jobs

  • URL : /api/jobs
  • Request Method: GET
  • Request header: {X-Auth-Token : xyz}
  • Response codes: 200,500
  • Response : [{id: « 28369ff0-07d0-11e7-8533-ecb1d7462982 »,name: « job_string_spark_script_R »},…]

6.4.4 Get Last edited jobs

  • URL : /api/jobs/lastEditedJobs
  • Request Method: GET
  • Request header: {X-Auth-Token : xyz}
  • Response codes: 200,500
  • Response : [{id: « 28369ff0-07d0-11e7-8533-ecb1d7462982 »,name: « job_string_spark_script_R »},…]

6.4.5 Get job dependencies for current user

  • URL : /api/jobs/conf/dependencies
  • Request Method: GET
  • Request header: {X-Auth-Token : xyz}
  • Response codes: 200,500
  • Response : [{id: « 282ae020-07d0-11e7-8533-ecb1d7462982 »,name: « javascript_working_content »},{…}]

6.4.6 Get job dependency languages

  • URL : /api/jobs/conf/evolutionary/languages
  • Request Method: GET
  • Request header: {X-Auth-Token : xyz}
  • Response codes: 200,500
  • Response : [« JAVA », « SCALA », « JAVASCRIPT », « PYTHON », « R »]

6.4.7 Get job dependency inline template for specified language

  • URL :
    /api/jobs/conf/evolutionary/template/PYTHON/InlineEvolutionaryProcessor
    
  • Request Method: GET
  • Request header: {X-Auth-Token : xyz}
  • Response codes: 200,500
  • Response : {generatedCode: « from java.util import List… »,realClassName: « …geneticio.InlineEvolutionaryProcessor »}

6.4.8 Get job evolutionary properties

  • URL : /api/jobs/conf/evolutionaryProperties
  • Request Method: GET
  • Request header: {X-Auth-Token : xyz}
  • Response codes: 200,500
  • Response :
    [{key:"RANDOMIZER",value:""},
    {key:"NB_CROSSOVER_POINTS",value:""},
    {key:"CROSSOVER_POINTS_PROBABILITY,value:""},
    {key:"FITNESS_SELECTION_PROBABILITY,"value:""},
    {key:"MUTATION_PROBABILITY,value:""}]
    

6.4.9 Get job engine types

  • URL : /api/jobs/conf/engine/types
  • Request Method: GET
  • Request header: {X-Auth-Token : xyz}
  • Response codes: 200,500
  • Response :
    ["GENERATIONAL_EVOLUTION","EVOLUTION_STRATEGY","STEADY_STATE_EVOLUTION"]
    

6.4.10 Get job selection types

  • URL : /api/jobs/conf/selection/types
  • Request Method: GET
  • Request header: {X-Auth-Token : xyz}
  • Response codes: 200,500
  • Response : [« ROULETTE_WHEEL », « TOURNAMENT »]

6.4.11 Get job display types

  • URL : /api/jobs/conf/display/types
  • Request Method: GET
  • Request header: {X-Auth-Token : xyz}
  • Response codes: 200,500
  • Response : [« TEXT », « SHAPE »]

6.4.12 Get job fitness computing services

  • URL : /api/services/computing
  • Request Method: GET
  • Request header: {X-Auth-Token : xyz}
  • Response codes: 200,500
  • Response : [{id: « fa789280-07cf-11e7-bedf-efb93edd4a5d »,name: « multithreaded »},{…}]

6.4.13 Get job termination types

  • URL : /api/jobs/conf/terminationPropertiesForType/undefined
  • Request Method: GET
  • Request header: {X-Auth-Token : xyz}
  • Response codes: 200,500
  • Response :
    [{terminationType:"ELAPSED_TIME",
    properties:[{key:"MAX_DURATION_VALUE",value:"3600000",pType:"LONG"}],
    activate:false},
    {...}]
    

6.5 Job Executions

6.5.1 Get all executions

  • URL : /api/jobs/activity
  • Request Method: GET
  • Request header: {X-Auth-Token : xyz}
  • Response codes: 200,500
  • Response :
    [{id:"1f056a10-07d0-11e7-9930-ecb1d7462982",
    name:"job_rocket_local_embedded",
    executions:1,
    date:1495726521486,
    status:"TERMINATED"},
    {...}]
    

6.5.2 Get a job executions

  • URL : /api/jobs/:id/executions
  • Request Method: GET
  • Request header: {X-Auth-Token : xyz}
  • Response codes: 200,500
  • Response :
    [{id:"1f056a10-07d0-11e7-9930-ecb1d7462982",
    name:"job_rocket_local_embedded",
    executions:1,
    date:1495726521486,
    status:"TERMINATED"},
    {...}]
    

6.5.3 Get all executions

  • URL : /api/jobs/executions
  • Request Method: GET
  • Request header: {X-Auth-Token : xyz}
  • Response codes: 200,500
  • Response :
    [{id:"1f056a10-07d0-11e7-9930-ecb1d7462982",
    name:"job_rocket_local_embedded",
    executions:1,
    date:1495726521486,
    status:"TERMINATED"},
    {...}]
    

6.5.4 Get Last executions

  • URL : /api/jobs/lastExecutions
  • Request Method: GET
  • Request header: {X-Auth-Token : xyz}
  • Response codes: 200,500
  • Response :
    [{executionId:"b61bc020-415f-11e7-8852-ecb1d7462982",
    jobId:"1f056a10-07d0-11e7-9930-ecb1d7462982",
    userId:"324193a0-1ee5-11e4-b871-2c44fd2578e0",
    nbGenerations:300,
    naturalFitness:true,
    populationSize:50,
    eliteSize:0,
    status:"TERMINATED",
    date:1495726521486,
    jobName:"job_rocket_local_embedded"}]
    

6.5.6 Get a job execution population

  • URL : /api/jobs/:job_id/executions/:execution_id/population
  • Request Method: GET
  • Request header: {X-Auth-Token : xyz}
  • Response codes: 200,500
  • Response :
    {executionId:"b61bc020-415f-11e7-8852-ecb1d7462982",
    jobId:"1f056a10-07d0-11e7-9930-ecb1d7462982",
    generationNumber:300,
    status:"TERMINATED",
    bestCandidateFitness:1.9381851129973538E-18,
    meanFitness:7.84516311614825E-19,
    elapsedTime:12123,
    fitnessStandardDeviation:5.770540708916155E-19,
    startDate:1495726509344,
    endDate:1495726521467,
    datasource:{...},
    bestCandidateParams:[{param1:value1, ...}]}
    

6.5.7 Run a job

Use a websocket to keep track the current job execution:

  • URL : ws://[url]/api/jobs/socket/
  • Request Method: GET
  • Response codes: 101

First Frame:

  • Direction: Client -> Server
  • Payload:
    {command:"start"
    displayType:"TEXT"
    jobId:"1a393d70-4454-11e7-8504-ecb1d7462982"}
    

Second frame:

  • Direction: Server -> Client
  • Payload:
    {bestCandidateFitness:0
    bestCandidatesParams:[]
    executionId:"48951a10-446b-11e7-8504-ecb1d7462982"
    fitnessStandardDeviation:0
    generationNumber:0
    isTerminal:false
    jobId:"1a393d70-4454-11e7-8504-ecb1d7462982"
    meanFitness:0
    status:"RUNNING"}
    

Next frames:

  • Direction: Server -> Client
  • Payload:
    {bestCandidateFitness:10
    bestCandidatesParams:["BXTIKFBOTBOGO", "QONTVOMOFBCKE", "GQGCGJSOTHOPJ", "GIDXIS YTYOJJ", "QVMMWWCOOHCVE", "EG LOS DGQB E",…]
    executionId:"48951a10-446b-11e7-8504-ecb1d7462982"
    fitnessStandardDeviation:0.74105030568481
    generationNumber:6
    isTerminal:false
    jobId:"1a393d70-4454-11e7-8504-ecb1d7462982"
    meanFitness:12.253333333333334
    status:""}
    

Last frame:

  • Direction: Server -> Client
  • Payload:
    {bestCandidateFitness:0
    bestCandidatesParams:[]
    executionId:"48951a10-446b-11e7-8504-ecb1d7462982"
    fitnessStandardDeviation:0
    generationNumber:0
    isTerminal:true
    jobId:"1a393d70-4454-11e7-8504-ecb1d7462982"
    meanFitness:0
    status:"TERMINATED"}
    

7. Tutoriels

Un ensemble de tutoriels est disponible sur notre blog:

Un tutoriel vidéo est aussi disponible sur youtube.

8. Obtenir de l’aide

Pour obtenir de l’aide, vous pouvez:


geniowpDocumentation