Par ailleurs si vous êtes résolument orienté objet,
il y a un outil pédagogique qui est une sorte d'Environnement de
Développement blueJ.org . Il
n'est pas très gourmand.
Il est fait par des universitaires.
Il y a un bouquin en Français qui va avec, que j'ai
acheté.
2004-02-08
Merci pour ces compliments.
Actually I would never have done anything without your code.
John Taylor wrote:
Salut Jean-Marc,
Well, I've finally made time to look at all your hard work - I'm
impressed, you've taken it further than I ever intended.
Maybe too far.
By this I mean that it's not a coherent set of features.
The problem of triggering updates of property editors to keep them
up-to-date with user input is not treated . I just did it for
enumerated properties, because I needed it in my application when the
enumerated property is actually the name of an implementing class . The
issue is that a setter *can* do several side-effects on a bean.
Probably in general it's not a good thing to have side-effects. But
look at my test-case of a person having children and a father. Doing a
setFather(p1) in a realistic implementation of class Person
would
change the "children" property on the p1 object. A generic Bean
editor
has no way of knowing what's hapenning so it has to rescan all beans at
each user modification and update input fields. As a consequence of
good practices for user interfaces, these consequences of user
modification should be highlighted.
Probably these systematic updates should be implemeted in a separate
low-priority Thread. Doing them in the User-Input thread is too fragile
and has allready lead me to call stack overflows.
Another use case with a more realistic implementation of class
Person.
When adding a new child by clicking on the "Create" button, the
"father" property of this new Person object is actually allready on the
screen, so a kind of hyperlink would be appropriate.
Other issues in the before mentioned package.html :
http://cvs.sourceforge.net/viewcvs.py/ecolosim/src/ecolosim/beans/package.html
I especially like the array nesting feature - very neat.
John
From: Jean-Marc Vanel
<jmvanel@users.sourceforge.net>
To: johndavidtaylor@users.sourceforge.net
CC: <jmvanel@users.sourceforge.net>
Subject: BeanPeelerPane
Date: Fri, 06 Feb 2004 02:09:21 -0800
Hello
I released my small simulation framework:
http://sourceforge.net/projects/ecolosim/
édité et versionné sur sf.net les diagrammes
de EcoloSim avec l'environnement
pédagogique BlueJ
2004-02-04
Enfin !
EcoloSim version 0.1 est sur sourceforge !
Il y a aussi beaucoup d'activité du côté de J.P.
Treuil et Patrice.
2004-02-03
J'ai des problèmes avec XMLEncoder (précédemment
j'avais utilisé Castor) pour sauver les données en XML.
Est-ce parce que je tente de sauver une propriété
indexée avec des valeurs déclarées comme une
interface ?
java.lang.IllegalArgumentException:
object is not an instance of declaring class at
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
........
Non! Je vois ce que c'est ! Il y avait dans Group, une des
classes à persister, une méthode : public
UnAutreType newInstance()
Et XMLEncoder a pensé que c'était pour instancer la
même classe Group, d'où le genre de message.
Le message suivant est une conséquence :
java.lang.RuntimeException:
failed to evaluate: <unbound>=Group.new(); at
java.beans.Encoder.getValue(Encoder.java:88) at
java.beans.Encoder.get(Encoder.java:186) at
java.beans.PersistenceDelegate.writeObject(PersistenceDelegate.java:97) at
java.beans.Encoder.writeObject(Encoder.java:55)
Et en effet on voit bien ça dans le source de
java/beans/XMLEncoder . Mais c'est TOTALEMENT NON DOCUMENTE' !!! :-(( .
Voilà bien ce qui se passe dans le monde JavaBeans ! On fait des
choses censées arranger les affaires dans certains cas. Mais
comme rien n'est spécifié précisément, on
obtient du pas fiable! JavaBeans ne marche vraiment bien qu'avec les
classes de Sun, de préférence Swing. Ma conclusion c'est
"vive l'orienté objet", qui est sémantiquement
très clair, et à bas ces conventions de nommage,
pompeusement nommées "Design Patterns".
Quand on a une propriété indexée, on a
potentiellement 4 méthodes attachées à la
propriété, ce qui fait 2^4=16 combinaisons suivant
qu'elles sont présentes ou pas. De plus, à
l'exécution, on peut avoir des valeurs null en argument ou en
retour pour ces 4 méthodes. Sans compter les
propriétés déclarées comme type interface.
Et puis il y a les propriétés qui sont des collections,
possiblement plus ou moins hétérogènes. Sans
compter les nouveaux nommages JavaBean avec addXXX et removeXXX ...
Alors que quand j'ai du code Java bien propre (sans dépendances
libraries), je peux l'avoir sans déperdition de
sémantique en C++, en Pascal, en Eiffel, etc (avec Alma par
exemple).
class Displayer: Enhancement: shows both trace and current
position
works fine without BufferedImage, except small refreshing
problems with BeanPeelerPane
J'ai implémenté le double-buffering de façon
"classique" , par l'utilisation de la classe BufferedImage, dans
laquelle on trace, puis on appelle Graphics.drawImage(), comme dans
"Advanced animation" dans Java examples in a Nutshell.
C'est versionné 1.14 dans CVS, classe MultipleModelsApp. En
changeant le membre usingBufferedImage_ on peut
brancher/débrancher ce double-buffering . Et j'ai fait des
mesures de performance. On le voit déjà à l'oeil,
mais le verdict est clair: le double-buffering est QUATRE FOIS PLUS
LENT!
Il me semble que c'est un souhait très naturel de pouvoir
exploiter le buffering *qui existe déjà* pour faire de la
rémanence. D'ailleurs ça marche, à part des
scories graphiques que je limite un peu en mettant les boutons au Sud.
Ca marche aussi si on met un JMenuBar, mais alors on peut plus avoir de
boutons, il faut forcément avoir des JMenu déroulants .
2004-02-01
A FAIRE avant la livraison EcoloSim 0.1
sauver et relire la
définition de la simulation (instance
de IterativeSimulationChoiceWrapper) en XML avec XMLEncoder
dans l'application principale IterativeSimulationChoiceWrapper,
supprimer l'appel à DemoSimulationFactory
effacement du
tracé quand on appuie sur "Restart"
si possible
résoudre le problème des boutons
fantômes; au moins, poser le problème sur le newsgroup
anglophone et à Ivan W.;
essayer Timer
vérifier que
tous les paramètres des modèles
sont bien accessibles en tant que propriétés JavaBean
idem pour les
paramètres des traiteurs de résultats
ajouter un LISEZMOI
et un README.
ajouter cible dist
dans build.xml
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
faire tourner training.AppletGetSize
quand est-ce que paint() est appelé?
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:
les modèles, c'est à dire le comportement des
individus (actuellement interface Individual);
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);
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)
l'avancement du temps, actuellement une boucle infinie avec un
pas constant de 1
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é
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
Corrigé les bugs de BeanPeelerPane, l'entrée des
données
générique (éditeur des
propriétés JavaBean)
Corrigé build.xml
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 .
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:
l'application doit appeler TOUS les traiteurs APRES chaque pas de
temps;
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
travaillé sur l'entrée des données
générique (é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); en fait l'entrée des données est un
point complexe: supposons qu'on veuille initialiser le troupeau avec
une certaine densité de probabilité, et pense que des cas
d'utilisation comme ça il y en a des tas !
encapsuler paramètres simulation
ajouter $HEADER$ dans tous les sources
remarque sur les test unitaires:
> Pas toujours facile de tester une appli. > graphique (je sais il y a /Abbot/<http://abbot.sourceforge.net/> Java > GUI Test Framework). Quand aux algos, même déterministes, il donnent > des résultats qui ne sont pas évidents à caractériser.
Remarque de Laurent Bossavit:
Comme tu l'avais évoqué, il y a moins de tests unitaires que je n'en attendrais. Ca peut compliquer le refactoring... Et il y a quelques questions de conception qui, je pense, seraient éclairées par une orientation test-first; par exemple, la dépendance de ResultProcessor sur Graphics2D est malheureuse si on veut du MVC, et pas forcément nécessaire.
> J'ai voulu avoir une seule interface pour tous les traitements de > données. Si c'est stocker des statistiques à chaque pas de pas, tout > simplement on ne tient pas compte de cet argument Graphics2D .
Mais si tu veux faire, par exemple, de la 3D ?
Je suis sensible à cet argument.
Et en plus EcoloSim est conçu pour pouvoir travailler en N
dimensions.
Mais comment faire pour:
- avoir des Traiteurs de Données branchables et
débranchables de façon uniforme
- éviter de vilains cast si on a besoin de contextes 2D, 3D, de
différents environnements graphiques ou pourquoi pas
réseau
Un modèle visiteur ?
2004-01-24
problème pour faire le javadoc avec les sources de J.P.
Treuil avec des identifiants avec des accents Français ==>
mis à jour la cible "javadoc" dans le build.xml
ajouté des explications dans le source: classes
IterativeSimulation etc
classe MultipleModelsApp : je prépare le terrain pour la
classe dérivée MultipleModelsAppWithEditor
j'éclate initCoords(): je sépare la
création du troupeau de l'initialisation aléatoire qui
est dans setDefaultIndividuals()
ajouté setSimulation(IterativeSimulation simul) qui
permet de fixer la Simulation qui ne sera plus initialisée en dur
classe MultipleModelsAppWithEditor : l'éditeur des
propriétés JavaBean apparait dans une autre fenêtre
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 :
DelegateWithReproduction : initialiser correctement les nouveaux
animaux, c'est à dire à côté du "parent"
MultipleModelsAppWithEditor : édition des
paramètres de la simulation avec l' éditeur
générique
BeanPeelerPane :
remarquer comment l'ajout de la fonction applicationSpecificControls( JPanel
container ) permet de réutiliser par héritage 90%
du code de MultipleModelsApp; MultipleModelsAppWithEditor est toute
petite maintenant
==> 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).
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 :
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.
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.
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
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
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 !
édition des
paramètres de la simulation avec
BeanPeelerPane
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 :
le nombre d'exemplaires
les propriétés du modèle
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:
avec une certaine
périodicité, les individus se
dédoublent
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:
étendre IndividualAbstract
utiliser la classe Barycenter
Exercice 1 : faire une classe qui calcule un barycentre, qui sera
utilisé
ainsi :
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:
initialisation des modèles
modèles de terrain avec obstacles
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:
HOWTO (comment faire): créer son modèle et le
visualiser
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.
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.
éventuellement changer les réglages:
tailleX_, tailleY_, N
à 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
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 :
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.
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:
simeco ecology simulation: RIEN avec ces trois, mais le nom est
largement pris
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
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"
ajouter dans les propriétés du modèle
jmvanel.simu.models.RandomSimpleModel le nombre d'individus
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.
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/
ajouté un premier programme pour la semaine prochaine en
dernière page en séparant ce qui est
générique Java et développement logiciel en
général, et ce qui est pour étendre notre
environnement de simulation d'êtres vivants 2D
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.
J'ai ajouté quelques commentaires dans les sources, et j'ai
réparti les
classes Java en paquetages:
jmvanel/formation/
jmvanel/simu/apps/
jmvanel/simu/base/
jmvanel/simu/models/
numeric/
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.