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
Simulations 2D d'individus
J.M. VanelIRD 2003/12
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● 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
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
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
Restructurations de code (refactorings)
● Renommer RandomSimple : la classe a été rebaptisée AppliMultiplesModeles
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
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.
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)
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++;
Persistance
● Stocker un graphe d'objets avec XMLEncoder● Avantages / inconvénients● Autres solutions: Castor, XMLBeans
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
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
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,
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