Formation Java - environnement de simulation d'êtres vivants 2D
IRD - Jean-Marc Vanel

Les nouvelles en ordre chronologique inverse. Dernière mise à jour:

Exercices NEW - Solutions intranet Bondy : http://pc-ls2-75/solutions/2004/

Le projet EcoloSim sur sourgeforge - Site Status de sourceforge
Le forum
Open Discussion sur sf.net - Nightly CVS Tarball - accès Web à la base CVS, mis à jour avec délai : ecolosim
Liste de discussions par courrier électronique: (go to Subscribe/Unsubscribe/Preferences) : Discussions générales en Français
Copies d'écran:  random-agreg.jpgapp-random.jpg

2004-02-02

FAIT

2004-02-01

A FAIRE avant la livraison EcoloSim 0.1


 J'ai acheté le livre en Français sur Java avec l'environnement pédagogique BlueJ (Barnes et Kölling). Je l'utiliserai peut-être la prochaine séance. Des fichiers de projet BlueJ sont déjà dans le CVS.

Je suis enfin arrivé à des fonctionalités satisfaisantes avec l'édition des paramètres de la simulation avec BeanPeelerPane. C'est vraiment un exemple de ce qui arrive quand on ne fait pas assez de refactoring. Pour la suite, il faudra vraiment en faire.

Exercices pour mars


2004-01-29

Réglages de la Liste de discussions par courrier électronique

(go to Subscribe/Unsubscribe/Preferences) : Discussions générales en Français
Pour l'instant j'ai mis: Restrict posting privilege to list members? NO


Architecture: initialisation

Il semble qu'il y ait ces ingrédients principaux dans une simulation:
  1. les modèles, c'est à dire le comportement des individus (actuellement interface Individual);
  2. la population, alias "troupeau", c'est à dire la liste des individus avec leur comportement (classe implementant l'interface Individual) et leurs propriétés (paramètres);
  3. l'état initial, c'est à dire la valeur initiale pour la population de tout ce qui est susceptible de varier au cours du temps (au premier chef les coordonnées)
  4. l'avancement du temps, actuellement une boucle infinie avec un pas constant de 1
  5. le terrain, c'est à dire les valeurs possibles des coordonnées (donc a priori un sous-ensemble de R2); il doit offrir aux modèles Individal des services permettant de savoir si on se rapproche du bord; il pourrait contenir des ressources partagées par les modèles e.g. nourriture végétale

Fonctionalité
Implémentation actuelle
Remarque
comportement des individus interface Individual Passage au 3D facile, mais ajout de variables d'état autres pas encore expérimenté
population, alias "troupeau" IterativeSimulation;
DemoSimulationFactory, EditorSimulationFactory
peut-être mal nommée.
DemoSimulationFactory a été sorti de MultipleModelsApp, ça ne fait justement que l'initialisation de la population.
état initial
ESQUISSE':
Maintenant MultipleModelsApp.initCoord() ne fait que l'état initial (aléatoire à l'intérieur du terrain fixé par tailleX_, tailleY_), mais ce n'est pas "branchable".
C'est cette méthode qui lance la simulation :
MultipleModelsApp.setSimulation(IterativeSimulation simul)
avancement du temps IterativeSimulation
ESQUISSE': généralisation à DifferentialSimulation à implémenter; le point commun est d'avoir des coordonnées spatiales (mais autres variables d'état aussi) et de gérer le temps; une simulation itérative peut aussi avoir un pas variable adaptatif; on souhaite avoir dans l'application le moins parties dépendantes de cet aspect simulation itérative/simulation différentielle
terrain
A FAIRE: la première chose est de ne plus travailler en coordonnées graphiques



2004-01-28

FAIT


Enfin l'accès Web à la base CVS est mis à jour : ecolosim ! C'est la fin des perturbations sur le site sf.net.

Je crée la liste de discussions par courrier électronique:
(go to Subscribe/Unsubscribe/Preferences)
Discussions générales en Français


Initialisation - suite aux questions posées sur le forum sur sf.net

Initialisation aleatoire sur plusieurs densité ou fonctions de densités données. Ce que je veux obtenir est un ensemble d'individus (bestioles en l'occurence) avec de comportements différents en entrée.

Si c'est pour avoir 100 individus d'un certain modèle avec certains paramètres, puis 50 d'un autre modèle, etc, ça va être fait aujourd'hui avec l'éditeur des propriétés JavaBean, qui fonctionne avec des groupes (n individus ayant le même modèle et les mêmes paramètres).

Si c'est pour avoir un continuum de paramètres (par exemple une proba. sur le rayon de visibilité, puis une répartition déterminée par programme sur la vitesse), je ne vois qu'une chose: c'est d'avoir une fenêtre de saisie pour un fragment de code Java qui va être compilé et exécuté dans l'application grâce à BeanShell que je vous ai montré.
Il pourrait y avoir des exemples de code pour les cas les plus usuels. L'inconvénient est que les messages d'erreur de BeanShell ne sont pas très agréables. Par contre on pourrait avoir une coloration syntaxique dans cette fenêtre de saisie.

Il me semble qu'on ne pourra jamais prévoir tous les cas d'initialisation, et qu'il faut renoncer à l'idée d'une application classique qui guide l'entrée des données de A à Z. Mais plutôt dans un esprit recherche, il faut pouvoir facilement programmer n'importe quelle initialisation.

Un autre idée est de laisser le système se stabiliser à partir de positions alétoires avant de commencer la vraie simlulation. Cette vraie simulation va commencer par un évènement tel que l'apparition d'un prédateur. C'est une notion de scénario.

Dans tous les cas le framework EcoloSim permet de programmer tout ce qu'on veut comme modèles, initialisations et scénarios et de les visualiser. De plus on peut  emballer son modèle complet (population, initialisations et scénarios) dans un objet JavaBean qui sera piloté par l'éditeur JavaBean générique. Ceci premettra de faire (ou faire faire ;-) des expérimentations même si on ne programme pas.

"Initialisation aleatoire sur une densité donnée" suppose qu'on a un domaine borné (et alors comment le définit-on?), ou alors que la simulation est périodique.

Je ne comprends pas "Initialisation aleatoire sur un nombre donne".

Pour l'Initialisation aléatoire avec une fonction de densité de probabilité, j'aimerais avoir une formulation et/ou un bout de code qui permet, à partir d'un tirage uniforme entre zéro et 1 fourni par Java, et d'une loi de proba. telle qu'une Gaussienne, d'obtenir un tirage répondant à la loi. Il y a un chapitre " 7 Random Numbers" dans "Numerical Recipes", et la solution est dans : 7.2 Transformation Method: Exponential and Normal Deviates 287 .

"Individus disposés en grille régulière" peut supposer que la simulation est périodique.


Je regarde les cours de probabilités :
Introduction aux Probabilités (EPFL Lausanne)
Probabilités et Statistique (INSA Lyon)
http://www.les-mathematiques.net/pages/lproba.php3
et l'aspect numérique des probabilités:
Dans "Numerical Recipies" : 7.2 Transformation Method: Exponential and Normal Deviates 287

Manuel d'analyse numérique

Si vous lisez l'anglais, "Numerical Recipies" (recettes numériques) est un classique, et il y a plein d'examples de code en C (le C ressemble pas mal à Java). Tout cela est disponible sur Internet:
http://www.numerical-recipes.com/nronline_switcher.html

2004-01-27

Toujours suite à la remarque de Laurent Bossavit:
Et il y a quelques questions de conception ... par exemple, la dépendance de ResultProcessor sur Graphics2D est malheureuse si on veut du MVC, et pas forcément 
nécessaire.
Dans le train je tournais ce problème dans ma tête. Et j'ai trouvé une solution:

Au lieu d'enregistrer un traiteur avec une API trop "anecdotique", on a un traiteur avec une méthode sans argument, telle que runProcessor(). Et c'est le traiteur qui va faire la boucle sur les individus. Et encore, s'il a besoin, car il peut juste surveiller une valeur par exemple. C'est donc à la fois plus souple et plus performant. On évite donc une contrainte sur l'API. Par contre, le point important reste: le contrat:
  1. l'application doit appeler TOUS les traiteurs APRES chaque pas de temps;
  2. les traiteurs ne modifient pas l'état des individus
Et sur le point 2, il y a du progrès à faire, ce n'est pas à l'épreuve des mauvaises manips...
A part ça, si le traiteur doit obtenir un contexte graphique ou autre, ce sera à partir de ses données propres qui lui auront été données directement par l'appli.

2004-01-26


2004-01-24


2004-01-23



ven jan 23 16:40

Le fameux "workaround" (correctif provisoire) pour pouvoir se connecter à CVS / sourceforge en mode modification (développeur) :

Workaround: It has been found that the user can
self-resolve the issue by changing their password and
waiting a small amount of time for the password change
to go through. Changing the password (even to the same
password as it is currently set) seems to fix the issue
for most users. The only thing to be aware of is that
the password should contain only letters and numbers to
ensure proper password interpretation on all systems.

To change your password, do the following:

1. Log into the SourceForge.net website
2. Click the 'Account Options' link
3. Click the '[Change Password]' link
4. Fill out the form and click on the 'Update' button

In the event that you should have questions or concerns
regarding the status of this issue, please send an
e-mail to 'moorman@sourceforge.net'. 

En regardant tout à l'heure le "Site Status de sourceforge
j'ai trouvé l'explication de nos problèmes avec CVS :

( 2004-01-15 13:16:00 - Project CVS Service, Project Shell Service )   There is an outstanding issue whereby upon user addition to a project or new project creation, the user is not given permission to CVS, shell and possibly the Compile Farm after they have opted in for access. We are currently investigating the cause of the issue, however a workaround is available from the SR link that follows. Support Requests: 875403

Je vais regarder le workaround qu'ils proposent. En attendant, continuez à utiliser CVS en "lecture seule".
Profitant que sf.net CVS marche, je mets à jour les sources :
==> Les 2 problèmes en suspens de la formation sont résolus.
J'ai créé un nouveau projet eclipse à partir de la même conguration CVS, c'était trop galère de mettre à jour l'ancien projet eclipse .

Je vous conseille de faire ça dans eclipse:

Open the preferences (Window > Preferences) and turn on the CVS label decorations (on page Workbench > Label Decorations and ensure CVS is checked).

(voir l'aide en ligne : http://127.0.0.1:9788/help/topic/org.eclipse.platform.doc.user/gettingStarted/qs-64c_catch_mod.htm , en remplaçant le port 9788 par le bon chez vous)

Une fois que vous avez créé comme moi un nouveau projet eclipse, pour mettre à jour vos sources (avec les dernières améliorations de moi ou quelqu'un d'autre) dans votre projet eclipse, faire "update" avec le bouton droit sur le projet dans la perspective "Project explorer".
 

2004-01-22

On n'est pas seuls, mais il n'y a pas beaucoup de concurrence, il va falloir recruter ! Les résultat d'une recherche sur sf.net :

Search results for ecology simulation

Project Name Description Files Activity %
EcoloSim - Ecology Simulation Framework  EcoloSim is a Simulation Framework for simple spatial models in biology and ecology, in Java. Typical problems are behavior of a herd of cattle, growth of microbe cells and other populations.    57.88%
SLIE agent modelling software  The SLIE agent modelling software allows researchers in MAS (Multi-Agent Systems) to build simulations of MASes with a view to exploring design problems relating to scalability and robustness using techniques from ecology, biology and economics.   released files  
MOR_Project 4th Edition  FARPG engine, that use distributed computing to run simulations of ecology & economics (core & world engines), also planned are NN AI(NPC & politics thru leaders [co]interaction) & realistic rpg.sys in dev since 1996   released files  


Problème en suspens no 2 résolu (création / destruction d'individus : problème pour créer / détruire au milieu de la boucle sur la List) :
Il faut utiliser Iterator.remove() , et non List.remove() .
Même chose pour List.add() , on peut l'utiliser au milieu d'une boucle.


Les pages Web essentielles pour travailler avec Java

http://java.sun.com/docs/books/tutorial/index.html
Javadoc des classes de base: http://java.sun.com/j2se/1.4.2/docs/api/index.html


CVS SUR SOURCEFORGE NE MARCHE PAS aujourd'hui :-(

Ni avec eclipse ni en ligne de commande:
jmv@protea:/home/jmv/src/ecolosim-cvs-shell# cat co.sh
export CVS_RSH=ssh  
cvs -z3 -d:ext:developername@cvs.sourceforge.net:/cvsroot/ecolosim co
src
jmv@protea:/home/jmv/src/ecolosim-cvs-shell# source co.sh
ssh: connect to host cvs.sourceforge.net port 22: Connection refused
cvs [checkout aborted]: end of file from server (consult above messages if any)

En fait le service CVS chez sourceforge est souvent interrompu. Il y a des interruptions qui sont NORMALES et prévues (voir sur le site sf.net :  · Site Status ) :
Recent Updates » ( 2004-01-19 09:32:52 - Project CVS Service )   On Thursday, January 22, 2004 developer CVS services will be down for approximately 6 hours for some additional upgrades starting at 00:01.

Aujourd'hui pas d'interruption prévue, mais il y en a quand même !

Liens divers

Le Monde du Calcul Scientifique, une page de liens bien fournie!

Une intéressante bibliothèque Java mathématique et physique en open source:
J.A.D.E. - JavaTM Addition to Default Environment. - Javadoc: http://jade.dautelle.com/api/index.html

Java Numerics

gnu.org : Search the Free Software Directory: "simulation"

Documentation eclipse

2004-01-21

Un zip des derniers sources d'aujourd'hui se trouve ici, en attendant une livraison classique sur sf.net :
ecolosim.zip

Problèmes en suspens:
  1. édition des paramètres de la simulation avec BeanPeelerPane
  2. création / destruction d'individus : problème pour créer / détruire au milieu de la boucle sur la List

Après la séance j'ai montré à J.P. Treuil la documentation intégrée à eclipse. ATTENTION: ça ne marche pas avec Internet Explorer, ça marche avec Mozilla!

La devise de EcoloSim: le maximum dans le minimum de lignes de code! Flexibilité, généralité, netteté.

Exercice 10 : dessiner en mémoire (sur un bitmap) pour pouvoir avoir un rafraîchissement même si la fenêtre a été cachée

Exercice 9 : terminer la simulation. pouvoir appliquer un critère de terminaison de la simulation

Exercice 8 : équations différentielles. Analogue à Simulation, on aura une interface Java pour des modèles s'exprimant avec une équation différentielle ordinaire. Plus précisément, chaque individu élémentaire i sera représenté par un vecteur Xi dont les premières composantes seront les coordonnées spatiales. Le système différentiel sera:

dXi/dt = F(X, t) i=0, N-1

Où F est une fonction du vecteur X de tous les individus élémentaires.

Pour un individu élémentaire aussi bien que pour le système entier, on s'inspirera de l'interface ecolosim.numeric.FunctionRn1 pour créer DifferentialIndividual analogue à Individual. Pour la résolution, on utilisera ecolosim.numeric.RungeKutta .

Il faut aussi imaginer une interface DifferentialSimulation analogue à IterativeSimulation pour rassembler les modèles élémentaires et générer le système différentiel global à partir des modèles élémentaires. Cette interface DifferentialSimulation sera implementée par DifferentialSimulationImpl .

Enfin il faut une application graphique analogue à MultipleModelsApp, disons DifferentialModelsApp, qui va montrer les trajectoires.

Exercice 7 bis : initialisation avec de multiples modèles. Pour chacun des types de modèles disponibles, on permettra à l'utilisateur de saisir :

Exercice 7 : introduire BeanPeelerPane dans la fenêtre MultipleModelsApp pour éditer les propriétés du modèle

Exercice 6 : pouvoir modifier en temps réel l'effectif de la population. Pour cela on modifiera l'interface Individual:

public void runModel(IterativeSimulation population);

et on ajoutera dans IterativeSimulation :

public Individual[] getIndividuals();

Pour tester on implémentera 2 comportements:

  1. avec une certaine périodicité, les individus se dédoublent
  2. quand la distance entre 2 individus devient trop faible, un des deux mange l'autre

Exercice 5 : pouvoir lire un fichier tabulaire de positions initiales : on créera une classe utilitaire CSVBridge, avec une méthode :

Simulation createSimulation ( String fileName, Class modelClass)

On ajoutera un bouton "Read initial position" dans l'application MultipleModelsApp

Exercice 4 :

Créer un "emballage" (wrapper) autour de deux classes Individual qui va ajouter les vecteurs déplacements de ces 2 modèles.

On l'appelera VectorAddWrapperModel.

Pour tester on "ajoutera" SimpleAgregationModel et RandomSimpleModel .

Je suggère le squelette suivant où l'on peut "ajouter" un nombre quelconque de modèles :

package ecolosim.simu.models;
public class VectorAddWrapperModel implements Individual {
 public addDisplacement(Individual model) {
   //????
 }
}

Exercice 3 bis : créer une classe prédateur simple, SimplePredatorModel, qui suit le plus proche non-prédateur. On pourra utiliser une interface "marqueur" Predator.

Exercice 3 : raffiner la classe précédente pour faire un barycentre des animaux qui sont à l'intérieur d'un cercle de rayon R. Ce rayon R sera donné par une méthode setVisibilityRadius(double r) .

On l'appelera SimpleAgregationWithVisibilityModel.

Exercice 2 bis : Refactoring: pendant qu'on y est, dans l'application MultipleModelsApp, on remplacera :

Individual modeles[];

par :

IterativeSimulation simul = new IterativeSimulationImpl();

et on supprimera :

Displayer[] afficheurs;

en conséquence, dans afficherPoints() on appelera :

simul.process((Graphics2D)g);

NOTE: Si on veut créer des afficheurs personalisés en fonction du type de modèle et de ses propriétés, il convient de sous-traiter ça à un DisplayerManager.

2004-01-20

Exercice 2 : faire une classe qui modélise une attraction vers le barycentre du troupeau.

Suggestion:


Exercice 1 : faire une classe qui calcule un barycentre, qui sera utilisé ainsi :

Barycenter b = new Barycenter();
double v[] = {1, 2};
double w[] = {2, 1};
b.add(v, 1);
b.add(w, 1);
System.out.println(
b.getResult()[0] + ", " +
b.getResult()[1] );

Solution:
http://pc-ls2-75/solutions/2004/

package ecolosim.numeric;
/**
* @author Administrateur
* 20 janv. 2004
*/
public class Barycenter {
public void add(double v[], double coef){
//???????
}
public void clear(){
//??????
}
public double[] getResult(){
////?????
return null;
}
}

2004-01-19

Inscriptions de chacun d'entre nous à Sourceforge.

Exercice 1-2.: Séparer la méthode itérative dans une classe à part :

Exercice 1-1.: Appliquer une méthode itérative pour trouver le point fixe de la fonction x--->a/x .

2004-01-18



http://cvs.sourceforge.net/viewcvs.py/ecolosim/src/ecolosim/simu/apps/MultipleModelsApp.java?rev=1.1.1.1&view=markup
Je regarde pourquoi il y a un tracé fantôme du bouton dans la fenêtre graphique de MultipleModelsApp. Ce n'est pas un vrai bouton car en ajoutant
ComponentTree.makeFrame(j);
dans afficheFenetres() on a toute la hérarchie des composants AWT/Swing et on ne voit qu'un bouton.

J'essaye de remplacer
       public void paintComponent(Graphics g) {
par
       public void paint (Graphics g) {
Ca ne donne rien !

J'emploie alors les grands moyens: je mets un point d'arrêt dans AbstractButton.paintBorder

Thread [AWT-EventQueue-0] (Suspended (breakpoint at line 1235 in AbstractButton))
    JButton(AbstractButton).paintBorder(Graphics) line: 1235
    JButton(JComponent).paint(Graphics) line: 809
    JPanel(JComponent).paintChildren(Graphics) line: 647
    JPanel(JComponent).paint(Graphics) line: 817
    JLayeredPane(JComponent).paintChildren(Graphics) line: 647
    JLayeredPane(JComponent).paint(Graphics) line: 817
    JLayeredPane.paint(Graphics) line: 557
    JRootPane(JComponent).paintChildren(Graphics) line: 647
    JRootPane(JComponent).paintWithOffscreenBuffer(JComponent, Graphics, int, int, int, int, Image) line: 4802
    JRootPane(JComponent).paintDoubleBuffered(JComponent, Component, Graphics, int, int, int, int) line: 4748
    JRootPane(JComponent).paint(Graphics) line: 798
    GraphicsCallback$PaintCallback.run(Component, Graphics) line: 21
    GraphicsCallback$PaintCallback(SunGraphicsCallback).runOneComponent(Component, Rectangle, Graphics, Shape, int) line: 60
    GraphicsCallback$PaintCallback(SunGraphicsCallback).runComponents(Component[], Graphics, int) line: 97
    JFrame(Container).paint(Graphics) line: 1312
    RepaintArea.paint(Object, boolean) line: 177
    MFramePeer(MComponentPeer).handleEvent(AWTEvent) line: 405
    JFrame(Component).dispatchEventImpl(AWTEvent) line: 3678
    JFrame(Container).dispatchEventImpl(AWTEvent) line: 1627
    JFrame(Window).dispatchEventImpl(AWTEvent) line: 1606
    JFrame(Component).dispatchEvent(AWTEvent) line: 3477
    EventQueue.dispatchEvent(AWTEvent) line: 456
    EventDispatchThread.pumpOneEventForHierarchy(int, Component) line: 201
    EventDispatchThread.pumpEventsForHierarchy(int, Conditional, Component) line: 151
    EventDispatchThread.pumpEvents(int, Conditional) line: 145
    EventDispatchThread.pumpEvents(Conditional) line: 137
    EventDispatchThread.run() line: 100

Thread [AWT-EventQueue-0] (Suspended (breakpoint at line 1235 in AbstractButton))
    JButton(AbstractButton).paintBorder(Graphics) line: 1235 [local variables unavailable]
    JButton(JComponent).paint(Graphics) line: 809
    JButton(JComponent).paintWithOffscreenBuffer(JComponent, Graphics, int, int, int, int, Image) line: 4795
    JButton(JComponent).paintDoubleBuffered(JComponent, Component, Graphics, int, int, int, int) line: 4748
    JButton(JComponent)._paintImmediately(int, int, int, int) line: 4692
    JButton(JComponent).paintImmediately(int, int, int, int) line: 4495
    RepaintManager.paintDirtyRegions() line: 410
    SystemEventQueueUtilities$ComponentWorkRequest.run() line: 117
    InvocationEvent.dispatch() line: 178
    EventQueue.dispatchEvent(AWTEvent) line: 454
    EventDispatchThread.pumpOneEventForHierarchy(int, Component) line: 201
    EventDispatchThread.pumpEventsForHierarchy(int, Conditional, Component) line: 151
    EventDispatchThread.pumpEvents(int, Conditional) line: 145
    EventDispatchThread.pumpEvents(Conditional) line: 137
    EventDispatchThread.run() line: 100

Je pose la question dans news://fr.comp.lang.java


Comment configurer eclipse pour se brancher sur le serveur CVS de sourceforge pour pouvoir modifier les sources ?
Je suis parti de la recette eclipse+CVS dans cette page, et j'ai modifié ce qui est EN VERT.

Mr Hertel suggests
1. Start Eclipse
2. Open "CVS Repository Exploring" via the "Open a perspective" button
3. Rightclick on the "CVS Repositories" window and choose "New" and then "Repository Location"
4. First enter all the CVS configuration stuff now:
 Host: cvs.sourceforge.net
 Repository Path: /cvsroot/ecolosim
 User: jmvanel
 Password: ****
 Connection type: extssh
 Use Default Port and then click "Finish"
5. Now open the Repository, there you should see that HEAD folder. Open it.
6. There you should see a folder src . Rightclick on it and
 choose "Check out using "Project wizard" then
 give a name to the project ("ecolosim" or something)
 define the output path where the cvs data are exported to (should be Mes Documents\cvs-work\ecolosim or something)
 press "Next"
 press "Finish"
 
Done.
 
Go to the "Navigator View" of your project and edit your stuff now. When you're done, rightclick your project and
choose "Refresh" (just to be sure ;)).
 
Now you first update everything with "rightclick project" and "Team" / "Update"
Then you can check in all your changes with "Team" / "Commit"
Now I've got the CVS for Ecolosim on my linux box. All told this little adventure took about 2.5 hours, but there was a learning curve to take into account. Now hopefully other would be developers will find this helpful!



Je réfléchis à comment étendre le code actuel:

Commencé à mettre des choses dans un répertoire Web pour la nouvelle formation de demain:
http://jmvanel.free.fr/java/formation-ird3/
notamment la javadoc .

Utilisé Source-Navigator 5.2b1, c'est bien plus rapide que eclipse pour naviguer dans le source, comme son nom l'indique. Il fait C, C++, Java, Tcl, [incr tcl], FORTRAN, COBOL, et assembleur! C'est écrit en C et TCL/Tk (une autre façon d'écrire des IHM portables), et grâce à ça, il tourne sur Unix, Windows ou Mac.

2004-01-17

J'ai mis à jour le zip avec tous les sources Java:
 simu-animals.zip        17-Jan-2004 11:59    45k

HOWTO (comment faire): créer son modèle et le visualiser

  1. implémenter l'interface ecolosim.simu.base.Individual; pour cela le plus commode est d'étendre IndividualAbstract et d'implémenter runModel(), qui représente un pas de temps pour un individu. On pourra aussi bien sûr s'inspirer des modèles qui existent dans le paquetage ecolosim.simu.models.
  2. copier et modifier l'application MultipleModelsApp (mal nommée car telle quelle permet un seul modèle). Changer typeUniforme_ avec le nom du modèle créé en 1.
  3. éventuellement changer les réglages:  tailleX_, tailleY_, N
  4. à titre d'exercice, introduire dans l'application créée à l'étape 2. un formulaire de saisie pour le modèle, grâce à la classe ecolosim.beans.BeanPeelerPane; il faut avoir dans son modèle une ou plusieurs propriétés au sens JavaBean


Logiciels réutilisés

jfreechart
Regarder les examples dans la distribution dans src/org/jfree/chart/demo/ , par exemple ScatterPlotDemo.java

ant

exos :
(Horner+polynome aléatoire + courbe,
equations différentielles: système planétaire, chauffard homicide en présence de plusieurs proies; calculs proximité + interface

Logiciels à montrer:

2004-01-16

Le projet EcoloSim sur sourgeforge est actif ! Il y a:
Inscrivez vous comme développeurs sur sf.net . Je vous expliquerai lundi comment tout cela marche. En attendant, vous pouvez aller sur la page CVS dans le projet EcoloSim sur sourgeforge et :
Vous pouvez aussi utiliser les clients graphiques WinCVS ou jCVS, ou configurer eclipse pour accéder à la base CVS de notre projet.


2004-01-15

La recette pour télécharger sur le site sourceforge.net :

rsync --rsh=/usr/bin/ssh * \

jmvanel@shell.sourceforge.net:/home/groups/e/ec/ecolosim/htdocs

On peut aussi avoir un shell en faisant :

ssh -X jmvanel@shell.sourceforge.net

Je remplis la base CVS :

# cd /home/jmv/ird-import

# ls

ecolosim

# cvs -d:ext:jmvanel@cvs.sf.net:/cvsroot/ecolosim \

import -m "Initial import." src jmvanel start

Le contenu de mon répertoire ecolosim apparaîtra donc comme src/ecolosim dans la base CVS du projet EcoloSim.

Les infos de base pour utiliser les services d'hébergement Web, bases de données et shell de sourceforge.net :

https://sourceforge.net/project/admin/prweb.php?group_id=99483

Toute les doc. utilisateur et développeur sont là (appuyer sur GO) :

https://sourceforge.net/docman/index.php?group_id=1

Mon troisième projet sur sf.net !!!!!!!!!!!!!! http://sourceforge.net/projects/ecolosim/

EcoloSim is a Simulation Framework for simple spatial models in biology and ecology, in Java. Typical problems are behavior of a herd of cattle, growth of microbe cells and other populations.

2004-01-14

Lien: cours  « LOG220 - Concepts avancés en programmation orientée objet » : travaux pratiques sur Ant, Junit


Le projet est créé pour la formation IRD sur sourceforge (et servira plus encore j'espère):
http://sourceforge.net/projects/ecolosim/

EcoloSim is a Simulation Framework for simple spatial models in biology and ecology, in Java. Typical problems are behavior of a herd of cattle, growth of microbe cells and other populations.

Je vais pouvoir mettre les sources actuels sur la base de données de versionnement CVS Repository , et remplir le site Web du projet.

J'ai enfin  compilé une version du logiciel de J.P. Treuil.

2004-01-13

Je cherche un nom pour le projet à créer pour l'IRD sur sourceforge... Avec les ingrédients suivants que je cherche sur le Net:
Ce sera ecoloSim .

Une intéressante présentation Canadienne (Française) sur le sujet :
Multi-Agents Systems, Simulation & Soccer Server
NACSE - Northwest Alliance for Computational Science and Engineering : Ecological Simulation

Terminé une version de BeanPeeler - Generic JavaBean editor (entrée des données générique pour vos modèles).

2004-01-06

Je m'occupe en ce moment de faire une entrée des données générique pour vos modèles, pour de détails voir :
   http://jmvanel.free.fr/test/raptor/README.html

Exercices :
  1. faire une classe qui implémente  jmvanel.simu.base.ResultProcessor (qui représente une stratégie d'exploitation de résultats ) et qui dessine des courbes correspondant aux résultats; l'ajouter dans AppliLigneDeCommande pour tester
  2. faire une classe qui implémente jmvanel.simu.base.ResultProcessor et qui représente une accélération constante dirigée vers le centre de gravité du "troupeau"
  3. ajouter dans les propriétés du modèle  jmvanel.simu.models.RandomSimpleModel le nombre d'individus
  4. vérifier que l'écart en fonction du temps pour le modèle aléatoire jmvanel.simu.models.RandomSimpleModel est bien en racine de t; pour cela on pourra créer une classe  AjustementRacine qui implémente jmvanel.simu.base.ResultProcessor et qui sort pour chaque pas et chaque animal le couple (t, distance/racine(t)), où distance est la distance à la position initiale; on modifiera jmvanel.simu.apps.AppliLigneDeCommande.
Tout ceci se réfère aux classes développées pendant la formation. Je ne les ai pas (ou très peu) modifiées. Par contre je les ai réparties dans des paquetages appropriés. Je rappelle que tout ce code se trouve ici :
http://jmvanel.free.fr/java/formation-5jours/jmvanel/
http://jmvanel.free.fr/java/formation-5jours/numeric/

Je rappelle aussi que pour récupérer tout cela, il y a (par exemple) un bon aspirateur de site en ligne de commande avec Cygwin ou Linux:
wget --recursive http://jmvanel.free.fr/java/formation-5jours/

Cependant , pour vous faciliter la vie, en attendant le site sf.net, j'ai fait un ZIP:
http://jmvanel.free.fr/java/simu-animals.zip

2004-01-05

J'ai mis à jour
http://jmvanel.free.fr/java/formation-5jours/journal.sxi (format Open Office) et aussi en .ppt

J'ai ajouté ici (donc dans un package jmvanel/beans ) quelques classes que j'ai déjà utilisées dans un autre projet, qui montrent qu'il est possible de générer automatiquement à l'exécution un formulaire de saisie à partir d'une classe Java (pourvu qu'elle respecte les conventions de nommage JavaBeans). J'ai montré tout ça à Patrice :
http://jmvanel.free.fr/java/formation-5jours/jmvanel/beans/
Lancer la classe
jmvanel.beans.BeanPeelerPane


Nous allons utiliser le site Web sourceforge.net , un portail dédié aux projets en open source, pour loger les sources partagés de l'environnement de simulation d'êtres vivants 2D que nous avons créé lors de la formation. L'avantage est qu'il s'agit d'une infrastructure très commode et gratuite, qui permet le partage de code, l'archivage des documents et discussions. Alexander E.M. et E. Périer sont d'accord sur le principe de publier les sources sur Internet.
Je vais donc enregistrer un nouveau projet sur sourceforge.net . Si vous avez des idées sur le nom du projet (agents simulation, ... ) elles sont bienvenues. Cela va prendre 2 ou 3 jours pour que le projet soit activé sur le site. Je vous invite à vous inscrire comme développeurs sur sourceforge.net , c'est gratuit et rapide, il ne faut qu'une adresse de mail. C'est nécessaire pour pouvoir contribuer au développement commun.

Dans le but de favoriser une coopération internationale, E. Périer pense qu'il est bon que les noms de classes fonctions et variables soient en Anglais. Par contre on pourra faire des commentaires bilingues Français - Anglais .
A propos d'internationalisation je vous montrerai comment eclipse aide à internationaliser le source Java, c'est à dire restructurer légérement le source de façon à ce qu'on puisse facilement avoir un programme qui s'adapte à la langue de l'utilisateur.

2003-21-12

J'ai corrigé et amélioré la classe RungeKutta qui résoud un système d'équations différentielles ordinaires.
C'est tout à fait utilisable; cependant je n'arrive à obtenir que l'erreur soit bien d'ordre 4.

Par ailleurs j'ai mis tout ce qu'on a fait cette semaine ici:
http://jmvanel.free.fr/java/formation-5jours/

J'ai ajouté quelques commentaires dans les sources, et j'ai réparti les classes Java en paquetages:

J'ai créé la documentation Javadoc ici:
http://jmvanel.free.fr/java/formation-5jours/doc/index.html
Tout cela devrait faciliter l'appropriation par l'équipe de ces technologies. N'oubliez pas qu'en attendant la prochaine session de janvier je suis prêt à répondre à vos mails et appels téléphoniques (01 39 43 31 46). Je pars en vacances mardi matin pour une semaine environ.

J'ai mis à jour
http://jmvanel.free.fr/java/formation-5jours/journal.ppt
un journal de bord (incomplet certes) de la formation; on y trouvera à la fin quelques thèmes à faire sans moi ou avec moi la prochaine session.

J'ai aussi mis le dernier état que j'avais des paquetages COUCHE_* , CAMPAGNOLES et TROUPEAUX ( attention cela ne compile pas ).

Pour récupérer tout cela, il y a (par exemple) un bon aspirateur de site en ligne de commande avec Cygwin ou Linux:
wget --recursive http://jmvanel.free.fr/java/formation-5jours/

Bon Java, bon Noël et à bientôt
JMV


Site de J.M. Vanel
Java sur le site de J.M. Vanel
Examples From Java Examples in a Nutshell