15
Simulations 2D d'individus J.M. Vanel IRD 2003/12

Simulations 2D d'individus

  • Upload
    tamira

  • View
    15

  • Download
    0

Embed Size (px)

DESCRIPTION

J.M. Vanel IRD 2003/12. Simulations 2D d'individus. Etat des lieux. On a généralisé la notion de modèle, qui sait se calculer, qui représente un être vivant qui se déplace en 2D On a une notion d'afficheur qui fait une exploitation des résultats en temps réel. Aller plus loin - modèles. - PowerPoint PPT Presentation

Citation preview

Page 1: Simulations 2D d'individus

Simulations 2D d'individus

J.M. VanelIRD 2003/12

Page 2: Simulations 2D d'individus

Etat des lieux

● On a généralisé la notion de modèle, qui sait se calculer, qui représente un être vivant qui se déplace en 2D

● On a une notion d'afficheur qui fait une exploitation des résultats en temps réel

Page 3: Simulations 2D d'individus

Aller plus loin - modèles● Avoir plusieurs modèles

– Avoir différents exemplaires de RandomSimpleModel dans la même simulation (changer la méthode initCoord() )

– Avoir différentes classes qui implémentent l'interface Modele2DIndividu, avec des fonctionalités supplémentaires

● Multiplication des individus● Mort des individus

– Dans la classe principale, ne plus stocker dans un tableau mais dans un ArrayList

● Comportement déterministe, e.g. Tendance grégaire– Avoir des calculs auxiliaires sur le « troupeau », par exemple le

centre de gravité● Les modèles élementaires, tels que RandomSimpleModel,

doivent connaître le « troupeau » ==> interface SuperModele● prédateurs

– Combiner réglages différents et implémentations différentes

Page 4: Simulations 2D d'individus

Aller plus loin - exploitation des résultats

● Interface ExploitationResultats qui va généraliser Afficheur● Implémenter des ExploitationResultats tels que:

● Traçage de courbes brutes● Post-traitements (moyennes, écarts types)

● Organiser la classe principale pour pouvoir brancher (et débrancher) des exploitation de résultats

Page 5: Simulations 2D d'individus

Accéder au même objet avec plusieurs types

● Modele2DIndividu mm = new RandomSimpleModel();Object o = mm;RandomSimpleModel rm = (RandomSimpleModel)mm;

● mm , o , et rm sont 3 références pointant vers le même objet

Page 6: Simulations 2D d'individus

Restructurations de code (refactorings)

● Renommer RandomSimple : la classe a été rebaptisée AppliMultiplesModeles

Page 7: Simulations 2D d'individus

Emballer et exécuter notre applicationmkdir classes# Compilationjavac -d classes numeric/*.java# Vérificationls -lR classes/cd classes/#Création de l'archive jar avec tous les fichiers récursivementjar -cvf numeric.jar *# Exécution : on nomme la classe à exécuter:java -classpath numeric.jar numeric/TestRungeKutta

# Variante où on nomme la classe à exécuter:c:/j2sdk1.4.2_02/bin/jar.exe -cvfm numeric.jar '..\manifest.txt' *# manifest.txt contient ceci: Main-Class: numeric.TestRungeKutta# ATTENTION: il faut éditer manifest.txt avec un éditeur non Windows# pour les fins de ligne# REMARQUE: quand utilise cygwin il y a jar (et java) de Cygwin, # distincts de ceux de Sun

Page 8: Simulations 2D d'individus

Exécuter notre applicationsans machine virtuelle sous Linux ou

Cygwin

gcj --main=TestSimple TestSimple.java ./a.exe

Remarque: pour l'instant, il n'y a pas suffisamment de classes pour IHM disponibles avec gcj, cela serait pour du calcul pur.

Page 9: Simulations 2D d'individus

Programme de vendredi● Runge Kutta

● Écriture sur fichiers

● Chaînes de caractères: split() et StringBuffer

● XML

– XMLEncoder– DOM, Xpath (comment parcourir et exploiter)

● Rétro-ingéniérie UML (analyser du code Java avec ArgoUML)

● Avancer sur notre appli. de simulation: pouvoir brancher des traitement de résultats et des modélisations

● Montrer les techniques JavaBeans et introspection (génériquement parcourir des objets)

Page 10: Simulations 2D d'individus

Modèle expliciteAvant: modèle caché dans des syntaxes non-standard

while(population.next()) { idIndiv = population.nextElement(); //-------------------------------- budget=(Nombre) budgets.val(idIndiv); position = positions.val(idIndiv); ressource = (Nombre)ressources.val(position); effectif = (Nombre)effectifs.val(position); //-------------------------------- charge = effectif.divi(surface); if(ressource.isInférieur(charge)) {

budget.moins(1.0); } else{

budget.plus(1.0); }

}

Après : modèle dans une syntaxe C/C++/Java standard

for (Iterator individu = population.iterator(); iter.hasNext();) {double budget = individu.budget;double ressource = individu.position.ressource;double effectif = individu.position.effectif;

// THE modèle !double charge = effectif / surface;if ( ressource < charge )

budget--;else

budget++;

Page 11: Simulations 2D d'individus

Persistance

● Stocker un graphe d'objets avec XMLEncoder● Avantages / inconvénients● Autres solutions: Castor, XMLBeans

Page 12: Simulations 2D d'individus

Fait par J.M. Vanel avant session janvier

● Valider la classe RungeKutta solveur d'équations différentielles ordinaires;

● Compiler avec gcj; mesurer les gains de performance par rapport à une JVM

Page 13: Simulations 2D d'individus

Thèmes Java/développement proposés pour janvier

● Configurer et mettre à jour eclipse● Partager du code et gérer les modifications/versions

avec CVS + sourceforge.net● Réutiliser des bibliothèques externes: exemple

JFreechart, PtPlot de Ptolemy (traçage de courbes)● Javadoc (documentation automatique de code Java)● Gestion des dépendances entre paquetages● internationalisation à l'aide d'eclipse

Page 14: Simulations 2D d'individus

Environnement modélisation - reste à faire

● Séparer traitement fichiers CSV dans une classe à part

● Introduire IterativeSimulationImpl dans un programme graphique tel que AppliMultiplesModeles, comme on a fait en introduisant

IterativeSimulationImpl dans AppliLigneDeCommande

● concevoir un pont entre objets métiers et le solveur d'équations différentielles ordinaires

● Sauver et relire les données de simulation avec XMLEncoder et XMLDecoder

● Brancher l'éditeur générique JavaBeans dans AppliMultiplesModeles pour pouvoir saisir les paramètres de modèles

● Pouvoir configurer l'éditeur générique JavaBeans pour avoir des Sliders en plus ou à la place des champs de saisie

● Écrire un modèle superposant une tendance aléatoire avec une tendance grégaire

● Trouver une solution de traçage de courbes avec (OpenOffice trop long à l'exécution)

● Renommer run() de Model en runModel() pour ne pas interférer avec le run() de Runnable()

● Comprendre pourquoi il y a une image fantôme du bouton dans le programme graphique AppliMultiplesModeles,

Page 15: Simulations 2D d'individus

Développement environnement simulation Geodes

● Gestion de terrain: proximité, obstacles, champs scalaires, etc

● Intégrer modèles de Patrice et Fadia● Multiplication, division, mort des individus