Master d'Informatique Spécialité ANDROIDE
Année 2019-2020

Modélisation et Simulation Multi-Agents (MOSIMA)

TME 4 - Calibration et analyses d'une MOSIMA

Responsable : Jean-Daniel Kant

Retour au site de l'UE

Ce TME porte sur la calibration et l'analyse d'une simulation multi-agents. On travaillera en Java sous Eclipse, sur une version étendue du modèle proie-prédateur, codé en Java sous Repast 3 (source du code, article de référence).

(article p. 6) model ‘‘Wild West’’ using REPAST (http://repast. sourceforge.net). This model includes three types of agents: grass, which grows in a sinusoidal ‘‘seasonal’’ pattern at a rate chosen by the user, female and male buffalos that eat the grass, and cowgirls and cowboys who eat the buffalos. Buffaloes are killed by the cowboys. Humans die when they reach their ‘‘natural death’’ age (randomly set for each agent at the birth time), or when they lack food.

1. Installation et premières simulations

Télécharger, dans votre workspace Eclipse, le package contenant le code du TME 4 (auteur : O.Goudet).

1.1 Créer un Java projet « Projet_Calibration_M2 » sous Eclipse. Ajouter la librairie (click droit sur projet -> Build Path-> Configure Build Path-> Add external jar) repast.jar qui se trouve dans lib/Repast-3.1/RepastJ

1.2 Vérifiez que le JRE 1.8 est bien installé dans votre Eclipse, et que cette librairie est bien dans le build path du projet calibration.

Si JRE 1.8 n'est pas installée :

  1. Download and install Linux version of Java SE Development Kit 8
  2. Under Eclipse -> Preferences -> Java -> Installed JREs, click Add, select Mac OS X VM, then click Next.
  3. Enter "/Library/Java/JavaVirtualMachines/1.8.0.jdk/Contents/Home" as the JRE home directory, enter something reasonable like "Java SE 8" as the JRE name, and then click Finish. (Note that you won't be able to navigate to the "../Contents/Home" folder. You will have to type it in manually.)
  4. After adding the new JRE to the list of Eclipse installed JREs, check the box next to the new JRE that you just added and then click OK.
  5. Now under Eclipse -> Preferences -> Java -> Compiler, select 1.8 from the "Compiler compliance level" dropdown and click Ok.

1.3 Package Model_PredatorPrey -> Run Faites tourner le simulateur en changeant les paramètres (tutoriel interface). Notez vos observations. Quels jeux de paramètres permettent la survie des 3 espèces ?

2. Essai d'une calibration CMA-ES

2.1 Analyse du Package Model_Calibration_CMAES -> Main_CMAES.java-> Run

Algorithmes codés (cliquez sur les liens pour des détails) : recuit simulé, CMA-ES (wiki , article), GDE et PSO (Particle Swarm Optimization)

  1. Examinez le Main_CMAES : on a comme paramètres principaux :
  2. La fonction de fitness définie dans Model_PredatorPrey -> ParallelSimuLauncher.java
    fitness = Math.pow((meanRatePreysOverPredators - FitnessTargets.ratePreysOverPredatorsTarget)/FitnessTargets.ratePreysOverPredatorsTarget, 2)+
    Math.pow((meanRatePreyEaten - FitnessTargets.ratePreyEatenTarget)/FitnessTargets.ratePreyEatenTarget, 2);

    et
    Les valeurs cibles de la fitness sont dans : Model_Calibration -> FitnessTargets.java
  3. => Que pensez-vous du choix de ces valeurs ? Auriez-vous d'autres cibles à suggérer ?

  4. Les paramètres sont définis dans Model_Calibration -> Parameters.java: espace (min et max), valeurs par défaut

  5. Les options d'affichage sont dans Model_Calibration ->OptionResults.jav a (à mettre à false en cas de gros batchs pour gagner du temps).

2.2 Quels sont les effets des paramètres de la calibration NbCalib et NbSimus a priori ? Faites tourner quelques calibrations CMA-ES, en les faisant varier pour vérifier vos intuitions. Notez les résultats.

2.3 Changez les valeurs de cibles et vérifier que l'algorithme se cale bien dessus.

3. Comparaison de méthodes de calibration

On se propose ici de comparer 2 méthodes de calibration : CMA-ES et GDE.

3.1 Ecrire une classe Comparison dans Model_Calibration qui à partir d'un nombre NbCalib = le nombre d'itérations de l'algorithme de calibration et NbSimus = nbre de replications (simulations moyennées) pour obtenir un résultat de calibration, fait tourner successivement le CMA-ES et GDE, en gardant fitness et définition des paramètres identiques au 2.

3.2 On fixera NbCalib=10 et NbSimus = 20 (à augmenter ou diminuer selon la puissance de votre machine).Faites tourner Comparison avec de recueillir les statistiques suivantes, pour chaque méthode, que l'on affichera ensuite dans un tableau pour comparer

    => Que est le meilleur algorithme selon vous ? Pourquoi ?

3.3 Sensibilité aux paramètres de calibration. Pour chaque méthode (CMA-ES et GDE), on fait varier un paramètre de la méthode de calibration (sigma_init pour CMA-ES entre [0,1] par pas=0,1 ; PNI pour GDE entre [0, 100] par pas =10) et pour chaque méthode , on calcule le nombre d'itérations moyen et le taux d'échec. On stocke chaque résultat dans un fichier (format csv), on recueille les résultats dans un tableur et on trace les courbes correspondantes. Analysez les résultats.

4. Pour aller plus loin...

4.1 Signatures individuelles de 3 paramètres du modèle proie-prédateurs. Choisir 3 paramètres, obtenus à partir de la meilleure calibration trouvée précédemment (en 3.3) et écrire une classe SensiParams pour effectuer une analyse de sensibilité autour de ces points :

=> on fait varier le paramètre (+/- 5 valeurs autour de la valeur calibrée = 10 points) et pour chaque point , on calcule le nombre d'itérations moyen et le taux d'échec. On stocke chaque résultat dans un fichier (format csv), on recueille les résultats dans un tableur et on trace les courbes correspondantes. Analysez les résultats.

4.2 Courbe précision - rapidité. On peut voir le problème de calibration sous deux angles :

    => Ecrire une Classe Precision_Speed qui
  1. fait varier un taux de précision sur [0,1] (pas =0,1) et enregistre en CSV le nombre moyen d'itérations pour chaque méthode (CMA-ES et GDE).
  2. fait varier un nombre d'itérations entre [0 et 100] (pas= 10) et enregistre en CSV le taux de précision pour chaque méthode (CMA-ES et GDE).
  3. => Faites tourner cette classe, recueillir les résultats dans un tableur, tracez les courbes, concluez.

4.3 Ajout de Cibles. Ajouter 1 ou 2 cibles de votre choix, implémenter et tester avec CMA-ES

4.4 Méta-calibration Il s'agit d'automatiser le procédé vu en 3.3. Ecrire une classe MetaCalibration qui fait tourner une méthode de calibration de votre choix afin de trouver automatiquement les meilleurs paramètres d'une méthode de calibration. Une calibration de la calibration en quelque sorte...