new

publicité
Simulations 2D d'individus
J.M. Vanel
IRD 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 application
mkdir classes
# Compilation
javac -d classes numeric/*.java
# Vérification
ls -lR classes/
cd classes/
#Création de l'archive jar avec tous les fichiers récursivement
jar -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 application
sans 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 explicite
Avant: 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
●
Téléchargement