MaDKit forum

Welcome All !
Please, use explicit topic names when creating new threads. Thanks.

You are not logged in.

#1 2011-03-01 11:12:53

Alf
Member
Registered: 2011-03-01
Posts: 11

Adaptation bibliothèque utilisant la nouvelle version de MadKit

Bonjour à tous,

Actuellement, je suis en deuxième année de master, et je dois adapter une bibliothèque qui utilisait au départ la version 4.2.0 de MadKit et qui utilise maintenant la dernière version 5.0.0.7 pour la simulation d'agents. Savez vous si un change log a été écrit entre la version 4.2.0 et 5.0.0.7 ?

Sauriez vous m'indiquer à quoi fait référence : Community, dans la version 5.0.0.7 ? J'ai trouvé dans une présentation de MadKit, une information qui est la suivante :

- Incorpore (dans la dernière version) une notion de groupe de noyau, appelé "communauté".

De quoi parlent ils à propos de : groupe de noyau ?

L'interface : ReferenceableAgent semble avoir disparu ? Si tel n'est pas le cas, où puis-je la retrouver, sous quel nom (je travaille à partir de l'API) ?

Ou, pourrais-je trouver des informations correspondant à getKernel et getAddress à partir d'un AgentAddress ?

D'une manière générale, y a t'il une documentation qui pourrait m'aider dans cette tâche ?

Y a t'il moyen d'obtenir le code source des différentes versions de MadKit ?

Merci beaucoup par avance pour votre aide.

Bien cordialement,
ALF

Offline

#2 2011-03-01 14:30:56

fmichel
Administrator
From: Montpellier
Registered: 2009-03-24
Posts: 172
Website

Re: Adaptation bibliothèque utilisant la nouvelle version de MadKit

Bonjour,

il n'y a pas de change log détaillé mais plutôt une description succincte des nouveautés dans la javadoc de la classe MadKit.
Pour faire simple :
- l'api reste fondamentalement la même mais certaines signatures de méthodes ont changé. Notamment dans AbstractAgent où les méthodes renvoient pour la plupart un objet ReturnCode qui indique le type de résultat.
- de nouvelles primitives permettant de faire des reply.
- Communauté est simplement le niveau au dessus de groupe. Cela existait déjà mais elle pouvait avoir une valeur par défaut"public". Spécifier une communauté permet notamment de pouvoir lancer deux instances d'une même application (même organisation : mêmes groupes/rôles, avec des communautés différentes, de manière à ce qu'elles ne se parasitent pas. La communauté était aussi utilisée au niveau réseau pour décider quelles parties de l'organisation doivent être partagées, d'où la notion de groupes de noyaux.
- L'interface ReferenceableAgent n'existe plus : elle n'est plus nécessaire
- getKernelAddress n'est pour l'instant pas remise mais cela va venir. Dans quel cadre l'utilisez-vous ?
- d'une manière générale la javadoc devrait beaucoup aider en attendant une doc end-user friendly
- le code source de MadKit 4 est disponible sur sourceforge
- le code source de MadKit 5 sera bientôt disponible mais ne l'est pas encore.

Bonne migration !

Fabien

Offline

#3 2011-03-01 15:37:08

Alf
Member
Registered: 2011-03-01
Posts: 11

Re: Adaptation bibliothèque utilisant la nouvelle version de MadKit

Bonjour,

Merci pour votre réponse aussi rapide.

Je vais travailler avec les différents éléments de votre réponse. Je pense néanmoins que j'aurai encore quelques questions après intégration ;-)

A bientôt et encore merci.

Bien cordialement,
Alf

Offline

#4 2011-03-10 15:05:17

Alf
Member
Registered: 2011-03-01
Posts: 11

Re: Adaptation bibliothèque utilisant la nouvelle version de MadKit

Bonjour,

J'aurais quelques questions à propos de la migration que j'effectue :

Concernant getAddress(), getKernel() et getName(), savez vous à quelle date ces méthodes seront à nouveau présentes dans MadKit ? Nous utilisons ces méthodes dans la bibliothèque RAFALE-SP et pour l'instant, il me reste des erreurs à cause de l'absence de ces méthodes.

getAddress() nous permet de connaître l'identifiant du noyau et ainsi de savoir sur quel noyau tourne un agent.

Il y aurait également getLocalID() qui ne semble plus présent.

Merci d'avance pour votre aide et vos réponses.

ALF

Last edited by Alf (2011-03-10 15:43:26)

Offline

#5 2011-03-10 17:54:50

fmichel
Administrator
From: Montpellier
Registered: 2009-03-24
Posts: 172
Website

Re: Adaptation bibliothèque utilisant la nouvelle version de MadKit

Bonjour,

je vais remettre de ce pas getKernelAddress() dans AgentAddress. Mais pour les autres, pourriez-vous être plus précis sur leur localisation (classe) précise ?

Fabien

Offline

#6 2011-03-11 14:24:17

Alf
Member
Registered: 2011-03-01
Posts: 11

Re: Adaptation bibliothèque utilisant la nouvelle version de MadKit

Bonjour,

Merci bien pour votre réponse. Rencontrant certaines difficultés pendant la migration, je me permets de vous donner un petit état des lieux de ce qui bloque encore.

Pour ces méthodes là, je me réfère à votre réponse ci dessus et vous fait entièrement confiance ;-)

getAddress()    // Method in class madkit.kernel.AbstractAgent - Gets the agent's own agent address

getKernel()      //  Method in class madkit.kernel.AgentAddress

getName()      //  Method in class madkit.kernel.AgentAddress - Return current agent name

J'ai donc les erreurs suivantes que j'ai essayé de supprimer sans trop de succès :

getLocalID()    // getLocalID() - Method in class madkit.kernel.AgentAddress - The discriminating part of an AgentAddress. Voilà ce qu'indique l'API de MadKit 4.2.0. J'ai trouvé getID, mais je ne pense pas que ce soit la bonne solution.

update(AbstractAgent, boolean)    // Pour update, si cette méthode n'est pas replacée dans la 5.0.0.7, je pensais utiliser adding et remove dans un IF suivant l'état de boolean added, mais je ne suis pas sur que se soit correct, il existe peut être une autre/meilleure solution ? Normalement, update est sensé alimenter getAgentList(), mais je ne pense pas que ce soit le cas de adding et remove.

println(String) // Concernant println, au départ, il était construit pour pouvoir envoyer des messages sur tout type d'IO, mode console, interface graphique etc... Maintenant, il semble pouvoir être utilisé uniquement pour les interfaces graphiques si j'ai bien compris, je pensais donc utiliser print(String) à la place, et il n'y aura plus d'affichage en mode console (c'est ce mode qui semblait être utilisé dans Rafale-SP en parallèle de l'utilisation d'une interface graphique pendant les simulations). print(String) ne semble pas convenir car l'erreur persiste.

getObject(Object)    // Method in class madkit.simulation.probes.ReflexiveProbe Voilà ce qu'indique l'API de MadKit 4.2.0. Par contre, la classe ReflexiveProbe ne semble plus présente dans la nouvelle version de MadKit.

setGUIObject(JPanel)  // Je n'ai pas encore regardé pour cette erreur

setGUIObject(SlaveSchedulerPanel)   // Idem pour celle ci.

Lorsque ces erreurs auront disparu, je tenterai de faire tourner un simulateur au dessus de MadKit et Rafale-SP pour tester mes adaptations. Veuillez m'excuser pour ce post un petit peu long.

Quoi qu'il en soit, merci beaucoup pour votre aide.

Bien cordialement,
ALF

Last edited by Alf (2011-03-11 14:51:51)

Offline

#7 2011-03-11 15:48:05

fmichel
Administrator
From: Montpellier
Registered: 2009-03-24
Posts: 172
Website

Re: Adaptation bibliothèque utilisant la nouvelle version de MadKit

OK merci pour ce post détaillé.
Je vais plancher dessus et produire une 5.0.0.8 provisoire dans le courant de la semaine prochaine.
Pour les méthodes qui ne réapparaitront pas, je vous donnerai des indications.

Fabien

PS: je vais déplacer ce fil sur le forum madkit5

Offline

#8 2011-03-11 15:51:12

Alf
Member
Registered: 2011-03-01
Posts: 11

Re: Adaptation bibliothèque utilisant la nouvelle version de MadKit

Ok, très bien, merci beaucoup.

Désolé, je savais pas ou mettre mon post au départ.

A bientôt alors... Bon courage et bon week-end !
ALF

Last edited by Alf (2011-03-11 15:54:33)

Offline

#9 2011-03-15 17:57:40

fmichel
Administrator
From: Montpellier
Registered: 2009-03-24
Posts: 172
Website

Re: Adaptation bibliothèque utilisant la nouvelle version de MadKit

Bonjour,


Vous trouverez à l'adresse suivante une nouvelle version du noyau :ici :

Voici les changements et commentaires :


- getAddress()    // Method in class madkit.kernel.AbstractAgent - Gets the agent's own agent address


Cette méthode n'existera plus, en tout cas pas tel quel. En fait, un agent a maintenant autant d'agentaddress que de positions dans l'organisation.
Par contre il est envisageable de rajouter une méthode qui donne l'agentaddress d'un agent dans un groupe/role. Quelque chose du genre, getSelfAgentAddress(String group, String role)
Pourriez-vous poster un exemple de la manière dont l'ancienne méthode est utilisée dans rafale-sp ? Il y a aussi peut-être aussi un autre moyen d'arriver à vos fins avec les nouvelles méthodes : notamment si elle était utilisée pour enlever l'agent de la liste renvoyée par getAgentsWithRole alors ce n'est plus la peine : cette méthode n'inclue plus l'agent qui l'utilise dans la liste résultat.


- getKernel()      //  Method in class madkit.kernel.AgentAddress


J'ai rajoutée cette méthode


- getName()      //  Method in class madkit.kernel.AgentAddress - Return current agent name

L'utilisation de getName sur AbstractAgent devrait pouvoir remplacer cette méthode dans tous les cas.

J'ai donc les erreurs suivantes que j'ai essayé de supprimer sans trop de succès :


- getLocalID()    // getLocalID() - Method in class madkit.kernel.AgentAddress - The discriminating part of an AgentAddress. Voilà ce qu'indique l'API de MadKit 4.2.0. J'ai trouvé getID, mais je ne pense pas que ce soit la bonne solution.

Je peux éventuellement mettre un getID() dans AbstractAgent : pourriez-vous poster une utilisation ?


- update(AbstractAgent, boolean)    // Pour update, si cette méthode n'est pas replacée dans la 5.0.0.7, je pensais utiliser adding et remove dans un IF suivant l'état de boolean added, mais je ne suis pas sur que se soit correct, il existe peut être une autre/meilleure solution ? Normalement, update est sensé alimenter getAgentList(),

En fait non, update "prévient" simplement qu'un agent a été ajouté à la liste pour un traitement éventuel.


Ici donc c'est simple mettre tout ce qui correspondait à true dans "adding" (qui correspond donc à update(a,true)) et inversement : plus besoin de if 

- println(String) // Concernant println, au départ, il était construit pour pouvoir envoyer des messages sur tout type d'IO, mode console, interface graphique etc...

La gestion des "print" a été grandement simplifié grâce à l'utilisation d'une variable de type java.util.logging.Logger : il faut utiliser logger.info("info") et le log est redirigé sur toutes les "handler" enregistré, les GUI données par défaut par madkit 5 par exemple. Pour que ce mécanisme puisse fonctionner sur une interface "maison" il suffit de créer un handler et de l'ajouter au logger d'un agent comme dans cet exemple :

        Handler handler = new StreamHandler(out, AgentLogger.agentFileFormatter){
            @Override
            public synchronized void publish(LogRecord record) {
                super.publish(record);
                flush();
            }
        };
        Logger logger = agent.getLogger();
        if (logger != null && logger.getLevel() != Level.OFF) {
            agent.setLogLevel(logger.getLevel());
        }
        else{
            agent.setLogLevel(Level.INFO);
        }
        handler.setLevel(agent.getLogger().getLevel());
        agent.getLogger().addHandler(handler);


Ceci dit, dans la grande majorité des cas vous ne devriez pas avoir besoin de cela : le mécanisme par défaut doit suffire : pour "avoir les prints redirigés" il suffit d'utiliser l'objet madkit.gui.OutputPanel quelque part. Pour aider la compréhension j'ai ajouté un tutoriel sous forme de codes source dans la distribution dans le dossier docs/tutorials


- getObject(Object)    // Method in class madkit.simulation.probes.ReflexiveProbe Voilà ce qu'indique l'API de MadKit 4.2.0. Par contre, la classe ReflexiveProbe ne semble plus présente dans la nouvelle version de MadKit.

En effet cette classe n'existe plus et est remplacée par madkit.simulation.PropertyProbe<A extends AbstractAgent,P> : dites moi si vous avez un problème pour cette migration.


- setGUIObject(JPanel)  // Je n'ai pas encore regardé pour cette erreur

Cette méthode ne sera pas remplacée : soit l'agent prend une GUI par défaut donnée par MK au lancement (un launch avec true), soit il la gère de A à Z : par exemple en fermant la frame dans le end 


- setGUIObject(SlaveSchedulerPanel)   // Idem pour celle ci.

Celle-là est une surcouche de MK dans rafale-sp : elle devrait être simple à virer étant donné la précédente remarque.


Voilà. Sinon, prenez bien le temps de regarder la javadoc car certaines méthodes ont été remaniées et peuvent éventuellement résoudre le problème directement comme celui de getAgentsWithRoles par exemple

Lorsque ces erreurs auront disparu, je tenterai de faire tourner un simulateur au dessus de MadKit et Rafale-SP pour tester mes adaptations. Veuillez m'excuser pour ce post un petit peu long.

Pas de problème : mieux vaut un post long et précis que l'inverse, donc n'hésitez pas.

Fabien

Offline

#10 2011-03-16 10:24:16

Alf
Member
Registered: 2011-03-01
Posts: 11

Re: Adaptation bibliothèque utilisant la nouvelle version de MadKit

Bonjour,

Mille merci pour tout ce travail effectué aussi rapidement ! Merci également pour toute l'aide que vous m'apportez !

Maintenant, il faut que je "digère" tout ça et que j'effectue toutes les modifs dans Rafale-SP. Je répondrai aux questions que vous posez pour certaines méthodes qui posent problème dès que possible.

Vous souhaitant une bonne journée.

Bien cordialement,
ALF

Offline

#11 2011-03-21 15:52:29

Alf
Member
Registered: 2011-03-01
Posts: 11

Re: Adaptation bibliothèque utilisant la nouvelle version de MadKit

Bonjour,

Suite à votre réponse, voici quelques nouvelles questions :

- pour getAddress()    // Method in class madkit.kernel.AbstractAgent - Gets the agent's own agent address
Je serais partant pour l'ajout de la méthode : getSelfAgentAddress(String group, String role) qui je pense, me serait bien utile.
getAddress renvoyait des informations pour la construction de messages, voici quelques portions de code ou elle est présente :
---------------------
public final void setFace(ActiveMobile f, Environment env)
    {
        f.setAddress(this.getAddress());
        isAutorizedToMove=false;
    }
---------------------
        String msgString="<root><MobileImageCreation>" +
                "<Name>" +this.getName()+"</Name>" +
                "<Class>"+this.getClass().getName()+"</Class>" +
                "<Address>"+"mka:"+this.getAddress().toString()+"</Address>" +
                "<Environment>"+"mka:"+this.getEnvironment().toString()+"</Environment>";
---------------------
        if(canDoAction&&autoMoveAgent&&!isAllreadyMoved)
        {
            String host=this.getEnvironment().getKernel().getHost();
            if(!(this.getAddress().getKernel().getHost().equals(host)))
            {
                 ...
---------------------
        String message="<root><MobileImageCreation><AgentAddress>"+"mka:"+mob.getAddress().toString()+"</AgentAddress></MobileImageCreation></root>";
---------------------

- Il semble impossible d'accéder aux méthodes de KernelAgent, donc partout ou est utilisé getKernel, l'erreur persiste, Eclipse indique : "The type KernelAddress is not visible". En ouvrant la déclaration de la classe KernelAgent dans Éclipse, j'ai pu voir que cette classe est déclarée "final", ce qui semble empêcher son utilisation en dehors de la bibliothèque (Même si normalement, ce n'est pas "final" qui doit empêcher quelque chose).

- getLocalID est utilisé pour construire l'URL qui correspond à l'adresse d'un agent, voici une ligne de code qui l'utilise :

protected void createMobileOnAgentFactory(Mobile currentMobileToCreate)
    {
        /*Bug de madkit*/
        AgentAddress tmp=currentMobileToCreate.getEnvironmentAddress();
        String agtAdd="mka:"+tmp.getName()+","+tmp.getLocalID()+"@"+tmp.getKernel().toString();
        ...
donc oui, je veux bien, si vous pouvez l'ajouter, la méthode getID, du moment qu'elle renvoie le même type d'information (String).

"- getName()      //  Method in class madkit.kernel.AgentAddress - Return current agent name (MadKit 4.2.0)

L'utilisation de getName sur AbstractAgent devrait pouvoir remplacer cette méthode dans tous les cas."
Malheureusement, ça ne semble pas être le cas, car j'ai toujours getName en erreur dans Eclipse. Ou alors, je m'y prends mal et dans ce cas je passe devant la solution sans toutefois la voir. (Voir l'exemple d'utilisation dans la portion de code ci-dessous).

- Concernant Update, je n'ai malheureusement pas compris votre explication (ne cherchez pas, ça vient de moi ;-) et comme la pression monte du côté de mes encadrants pour que la migration soit terminée pour la fin de semaine, j'ai écrit ce code en attendant :

public void update(AbstractAgent theAgent, boolean added) {

    // super.update(theAgent, added);    // original code
    if(added == true)                    // modified code
            super.adding(theAgent);        // modified code
        ...

- la méthode getHost ainsi que toString de la classe KernelAddress semblent absentes dans la version 5.0.0.8 de MadKit. Est-ce voulu ? 

"- getObject(Object)    // Method in class madkit.simulation.probes.ReflexiveProbe Voilà ce qu'indique l'API de MadKit 4.2.0. Par contre, la classe ReflexiveProbe ne semble plus présente dans la nouvelle version de MadKit.

En effet cette classe n'existe plus et est remplacée par madkit.simulation.PropertyProbe<A extends AbstractAgent,P> : dites moi si vous avez un problème pour cette migration."

Effectivement, j'ai un problème, je ne sais pas trop comment remplacer cette méthode car je n'ai pas trouvé de méthode me permettant de renvoyer d'objet de type Object. Je pensais créer la méthode getObject et utiliser des méthodes issues de PropertyProbe. Pensez vous que ce soit une solution envisageable ? Voici une portion de code ou est utilisée getObject :

    public void initialize() {
        // findFields();     // Original code
        super.initialize(); // New code <-- A terminer, manque d'autres fonctions ?

        locations = new Vector();
        Vector enviMobiles = new Vector();
        // Iterator it = getAgentsIterator(); // Original code
        Iterator it = getCurrentAgentsList().iterator();
        System.out.println("pouet");
        while (it.hasNext()) {
            System.out.println("pouet pouet");
            enviMobiles.add(getObject(it.next()));    // Original code
        }
         ...

- Concernant setGUIObject(GUI); j'ai remplacé cette méthode par setGUI(GUI);  Je sais que ce n'est pas la bonne solution et que ça ne fonctionnera pas s'il y a un changement look and feel de l'interface (GUI). Il faut que je continue de regarder pour une autre solution.

- Pour la methode setGUIObject(SlaveSchedulerPanel) je n'ai pas de solution pour l'instant car elle est utilisée de cette manière :

    public final void activate()
    {
        /*
         * We have to create super group of scheduler
         */
        createGroup(null,SCHEDULER_GROUP,true,null);
        requestRole(SCHEDULER_GROUP, SCHEDULER_ROLE,null);
        SlaveSchedulerPanel pan=new SlaveSchedulerPanel();
        pan.setSchedulerAgent(this);
        JFrame frame=new JFrame();
        frame.setContentPane(pan);
        frame.setVisible(true);
        frame.pack();
        this.setGUIObject(pan);
        createPlace();
        postActivate();
    }

- Sinon, y a t'il un moyen de récupérer le code source de la version 5.0.0.8 ? Je pense que cela pourrait m'aider pour corriger plus facilement les erreurs.

Merci d'avance une nouvelle fois pour votre aide précieuse.

Bien cordialement,
ALF

Last edited by Alf (2011-03-21 17:13:44)

Offline

#12 2011-03-22 13:26:34

fmichel
Administrator
From: Montpellier
Registered: 2009-03-24
Posts: 172
Website

Re: Adaptation bibliothèque utilisant la nouvelle version de MadKit

Bonjour,

Alf wrote:

Bonjour,

Suite à votre réponse, voici quelques nouvelles questions :

- pour getAddress()    // Method in class madkit.kernel.AbstractAgent - Gets the agent's own agent address
Je serais partant pour l'ajout de la méthode : getSelfAgentAddress(String group, String role) qui je pense, me serait bien utile.
getAddress renvoyait des informations pour la construction de messages, voici quelques portions de code ou elle est présente :
---------------------
public final void setFace(ActiveMobile f, Environment env)
    {
        f.setAddress(this.getAddress());
        isAutorizedToMove=false;
    }

Le problème est qu'uen méthode du type getSelfAgentAddress risque de ne pas être consistent sur tout la durée du programme car l'agentaddress est
maintenant tout sauf un identifiant unique. je ne sais pas de quelle type est ActiveMobile mais si c'est un agent il n'y a plus de setAddress. Si c'est un Message, setaddess ne sert à rien
car ce paramètre est initialisé pendant l'envoi. Pour résumer, s'il s'agit d'avoir un identifiant unique, utiliser la méthode hashCode() de AbstractAgent. Par ailleurs, plutôt que de
passer par l'agentAddress pour avoir la KernelAddress, j'ai mis la méthode directement dans la classe AbstractAgent : getKernelAddress.

Alf wrote:

---------------------
        String msgString="<root><MobileImageCreation>" +
                "<Name>" +this.getName()+"</Name>" +
                "<Class>"+this.getClass().getName()+"</Class>" +
                "<Address>"+"mka:"+this.getAddress().toString()+"</Address>" +
                "<Environment>"+"mka:"+this.getEnvironment().toString()+"</Environment>";
---------------------
        if(canDoAction&&autoMoveAgent&&!isAllreadyMoved)
        {
            String host=this.getEnvironment().getKernel().getHost();
            if(!(this.getAddress().getKernel().getHost().equals(host)))
            {
                 ...
---------------------
        String message="<root><MobileImageCreation><AgentAddress>"+"mka:"+mob.getAddress().toString()+"</AgentAddress></MobileImageCreation></root>";
---------------------

- Il semble impossible d'accéder aux méthodes de KernelAgent, donc partout ou est utilisé getKernel, l'erreur persiste, Eclipse indique : "The type KernelAddress is not visible". En ouvrant la déclaration de la classe KernelAgent dans Éclipse, j'ai pu voir que cette classe est déclarée "final", ce qui semble empêcher son utilisation en dehors de la bibliothèque (Même si normalement, ce n'est pas "final" qui doit empêcher quelque chose).

Cette classe est maintenant public donc vous pouvez faire getHost, etc.

Alf wrote:

- getLocalID est utilisé pour construire l'URL qui correspond à l'adresse d'un agent, voici une ligne de code qui l'utilise :

protected void createMobileOnAgentFactory(Mobile currentMobileToCreate)
    {
        /*Bug de madkit*/
        AgentAddress tmp=currentMobileToCreate.getEnvironmentAddress();
        String agtAdd="mka:"+tmp.getName()+","+tmp.getLocalID()+"@"+tmp.getKernel().toString();

Si, Mobile est de type AbstractAgent, les lignes précédentes deviennent par exemple:

String agtAdd= getEnvironment.getName()+"@"+getKernelAddress(); ou encore String agtAdd= hashCode()+"@"+getKernelAddress(); qui donne l'identifiant unique de l'agent sur le réseau : plus de rapprot avec l'agentAddress

Alf wrote:

        ...
donc oui, je veux bien, si vous pouvez l'ajouter, la méthode getID, du moment qu'elle renvoie le même type d'information (String).

hashCode donne en fait le même résultat que ce qu'on attend d'un getID

Alf wrote:

   
"- getName()      //  Method in class madkit.kernel.AgentAddress - Return current agent name (MadKit 4.2.0)

L'utilisation de getName sur AbstractAgent devrait pouvoir remplacer cette méthode dans tous les cas."
Malheureusement, ça ne semble pas être le cas, car j'ai toujours getName en erreur dans Eclipse. Ou alors, je m'y prends mal et dans ce cas je passe devant la solution sans toutefois la voir. (Voir l'exemple d'utilisation dans la portion de code ci-dessous).

Pas trouver de code, mais pour faire simple : pas de getName sur agentAddress mais directement sur l'agent.

Alf wrote:

   
- Concernant Update, je n'ai malheureusement pas compris votre explication (ne cherchez pas, ça vient de moi ;-) et comme la pression monte du côté de mes encadrants pour que la migration soit terminée pour la fin de semaine, j'ai écrit ce code en attendant :

public void update(AbstractAgent theAgent, boolean added) {

    // super.update(theAgent, added);    // original code
    if(added == true)                    // modified code
            super.adding(theAgent);        // modified code
        ...

C'est un peu ça.
en fait;
    if(added == true)                    // modified code
            adding(theAgent);        // modified code
        else
                removing(theAgent)

Du coup update ne sert à rien.

Alf wrote:

   
- la méthode getHost ainsi que toString de la classe KernelAddress semblent absentes dans la version 5.0.0.8 de MadKit. Est-ce voulu ?

C'était du à la visibilité de KernelAddress, c'est bon maintenant.

Alf wrote:

   
"- getObject(Object)    // Method in class madkit.simulation.probes.ReflexiveProbe Voilà ce qu'indique l'API de MadKit 4.2.0. Par contre, la classe ReflexiveProbe ne semble plus présente dans la nouvelle version de MadKit.

En effet cette classe n'existe plus et est remplacée par madkit.simulation.PropertyProbe<A extends AbstractAgent,P> : dites moi si vous avez un problème pour cette migration."

Effectivement, j'ai un problème, je ne sais pas trop comment remplacer cette méthode car je n'ai pas trouvé de méthode me permettant de renvoyer d'objet de type Object. Je pensais créer la méthode getObject et utiliser des méthodes issues de PropertyProbe. Pensez vous que ce soit une solution envisageable ? Voici une portion de code ou est utilisée getObject :

    public void initialize() {
        // findFields();     // Original code
        super.initialize(); // New code <-- A terminer, manque d'autres fonctions ?

        locations = new Vector();
        Vector enviMobiles = new Vector();
        // Iterator it = getAgentsIterator(); // Original code
        Iterator it = getCurrentAgentsList().iterator();
        System.out.println("pouet");
        while (it.hasNext()) {
            System.out.println("pouet pouet");
            enviMobiles.add(getObject(it.next()));    // Original code
        }
         ...

Là il faudrait que je vois le code complet de cette probe

Alf wrote:

   
- Concernant setGUIObject(GUI); j'ai remplacé cette méthode par setGUI(GUI);  Je sais que ce n'est pas la bonne solution et que ça ne fonctionnera pas s'il y a un changement look and feel de l'interface (GUI). Il faut que je continue de regarder pour une autre solution.

- Pour la methode setGUIObject(SlaveSchedulerPanel) je n'ai pas de solution pour l'instant car elle est utilisée de cette manière :

    public final void activate()
    {
        /*
         * We have to create super group of scheduler
         */
        createGroup(null,SCHEDULER_GROUP,true,null);
        requestRole(SCHEDULER_GROUP, SCHEDULER_ROLE,null);
        SlaveSchedulerPanel pan=new SlaveSchedulerPanel();
        pan.setSchedulerAgent(this);
        JFrame frame=new JFrame();
        frame.setContentPane(pan);
        frame.setVisible(true);
        frame.pack();
        this.setGUIObject(pan);
        createPlace();
        postActivate();
    }

Vous pouvez maintenat écrire cela  :

    @Override
    public void setupFrame(JFrame frame) {
        SlaveSchedulerPanel pan=new SlaveSchedulerPanel();
        pan.setSchedulerAgent(this);
        frame.add(pan);
                frame.validate();
    }

et enlever cela de activate :
        SlaveSchedulerPanel pan=new SlaveSchedulerPanel();
        pan.setSchedulerAgent(this);
        JFrame frame=new JFrame();
        frame.setContentPane(pan);
        frame.setVisible(true);
        frame.pack();
        this.setGUIObject(pan);

setGUIObject ne sert plus à rien.

Alf wrote:

   
- Sinon, y a t'il un moyen de récupérer le code source de la version 5.0.0.8 ? Je pense que cela pourrait m'aider pour corriger plus facilement les erreurs.

La nouvelle version du noyau est là MadKit-5.0.0.8.zip
Les sources ici : MadKit-5_src.zip

Mais je ne suis pas sûr que les sources vous aident beaucoup dans la mesure où il s'agit surtout de changer en fonction de la nouvelle api : il ne faudrait pas faire des modifications qui empêcheraient rafale sp d'être compatible avec les futures release de MadKit...

Bon courage

Offline

#13 2011-03-23 11:49:56

Alf
Member
Registered: 2011-03-01
Posts: 11

Re: Adaptation bibliothèque utilisant la nouvelle version de MadKit

Bonjour,

Merci beaucoup pour votre réponse très détaillée qui m'aide beaucoup ! j'ai pu supprimer quelques erreurs.

Néanmoins, je rencontre encore des soucis avec plusieurs méthodes :

Il me reste actuellement quatre types d'erreurs :

- getAddress (présente 4 fois, je pense que c'est celle là qui sera la plus difficile à résoudre)
- getHost (présente 7 fois)
- getName (présente 7 fois)
- getObject(Object) (présente 2 fois dans la même classe)

- pour getAddress, j'ai deux types d'erreurs, pour la portion de code :

public final void setFace(ActiveMobile f, Environment env)
    {
        f.setAddress(this.getAddress());
        isAutorizedToMove=false;
    }

J'ai commenté la ligne f.setAddress(this.getAddress()); si j'ai bien compris vos explications.

Pour les trois autres erreur avec getAddress, je pense faire un amalgame entre AgentAddress et AbstractAgent, donc, je ne vois pas comment corriger cette erreur. Pour moi, getAddress renvoyait l'adresse d'un agent, y a t'il une autre solution pour obtenir l'adresse de l'agent ? J'avoue qu'à force, je m'y perds un peu. En fait j'en ai besoin pour créer les messages de communication.

- getHost est toujours en erreur, j'ai cherché partout de mon coté, je ne trouve pas trace de la méthode, ni dans la javadoc, ni dans le code source, mais cela vient peut être de moi. Et comme je ne peux pas voir ce qu'il y a dans madkit-5.0.0.8.jar, j'espère que ce n'est pas moi qui passe à côté... Pourriez vous vérifier de votre côté que cette méthode est bien présente dans le .jar ?

- au niveau de getName, j'ai pu corriger quelques erreurs grâce à vos indications, effectivement, j'ai oublié de mettre le code annoncé dans mon précédent post, oups, sorry ! Je répare ça de suite :

Dans les classes GISScheduleAgentFactory.java, GISScheduledMobileAgent.java :

List<AgentAddress> addrs=this.getAgentsWithRole(Environment.ENVIRONMENT_COMMUNITY,Environment.ENVIRONMENT_GROUP, Environment.ENVIRONMENT_ROLE);
        for(int i=0;i<addrs.size();i++)
        {
            if(addrs.get(i).getName().equals(agentName)&&addrs.get(i).getKernelAddress().getHost().equals(agentKernelName))
            {
                mob.setEnvironment(addrs.get(i));
                
            }
        }

    public String getFactoryName(String host)
    {
        List<AgentAddress> allplace=this.getAgentsWithRole(GISAgentFactory.GIS_AGENT_FACTORY_COMMUNITY, GISAgentFactory.GIS_AGENT_FACTORY_GROUP,GISAgentFactory.GIS_AGENT_FACTORY_ROLE);
        Place[] res=new Place[allplace.size()];
        for(int i=0;i<allplace.size();i++)
            if(host.equals(allplace.get(i).getKernelAddress().getHost()))
                return allplace.get(i).getName();
        return null;
    }

Dans la classe ThreadedAgentPlaceSelector.java :

    public Place[] getPlaces() {
        List<AgentAddress> allplace=this.getAgentsWithRole(GISAgentFactory.GIS_AGENT_FACTORY_COMMUNITY, GISAgentFactory.GIS_AGENT_FACTORY_GROUP,GISAgentFactory.GIS_AGENT_FACTORY_ROLE);
        Place[] res=new Place[allplace.size()];
        for(int i=0;i<allplace.size();i++)
            res[i]=new Place(allplace.get(i),allplace.get(i).getName());
        return res;
    }

    public MobileAgent[] getMobileAgent() {
        List<AgentAddress> allGisAgent=this.getAgentsWithRole(GISAgent.GISAGENT_COMMUNITY, GISAgent.GISAGENT_GROUP,GISAgent.GISAGENT_Role);
        MobileAgent[] mobiles=new MobileAgent[allGisAgent.size()];
        for(int i=0;i<allGisAgent.size();i++)
            mobiles[i]=new MobileAgent(allGisAgent.get(i),allGisAgent.get(i).getName());
        return mobiles;
    }

- concernant getObject(Object), voici le code de cette probe :

package GISTool.GISControl;

import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Vector;

import madkit.kernel.AbstractAgent;
import madkit.simulation.PropertyProbe;
import GISTool.GISEnvironment.EnvObject;
import GISTool.GISEnvironment.Location;

//public class MobileLocationProbe extends ReflexiveProbe
public class MobileLocationProbe extends PropertyProbe {
    Vector<Location> locations;                    // Frd: Ajout de <Location>

    public MobileLocationProbe(String group, String role) {
        super(null, group, role, "activeMobilesName");
    }

    public MobileLocationProbe(String community, String group, String role) {
        super(community, group, role, "activeMobilesName");
    }

    /**
     * initialize method
     */
    public void initialize() {
        // findFields();     // Original code
        super.initialize(); // New code <-- A terminer, manque d'autres fonctions ?

        locations = new Vector<Location>();        // Frd: Ajout de <Location>
        Vector enviMobiles = new Vector();
        // Iterator it = getAgentsIterator();    // Original code
        Iterator it = getCurrentAgentsList().iterator();
        System.out.println("pouet");
        while (it.hasNext()) {
            System.out.println("pouet pouet");
            enviMobiles.add(getObject(it.next()));    // Original code
        }

        for (int i = 0; i < enviMobiles.size(); i++) {

            // System.out.println(enviMobiles.get(i).getClass());
            Hashtable temps = (Hashtable) enviMobiles.get(i);
            Enumeration it2 = temps.elements();
            while (it2.hasMoreElements()) {
                locations.add(((EnvObject) it2.nextElement()).getLocation());
            }
        }
    }

    /**
     * update the number of agents in its environment
     * 
     * @param theAgent
     * @param added
     */
    public void update(AbstractAgent theAgent, boolean added) {

        // super.update(theAgent, added);    // original code
        if(added == true)                    // modified code
            super.adding(theAgent);            // modified code
        else                                // modified code
            super.removing(theAgent);        // modified code
        
        locations = new Vector<Location>();    // Frd: Ajout de <Location>
        Vector enviMobiles = new Vector();
        Iterator it = getCurrentAgentsList().iterator();
        while (it.hasNext()) {
            System.out.println("pouet pouet");

            enviMobiles.add(getObject(it.next()));
        }
        for (int i = 0; i < enviMobiles.size(); i++) {
            Hashtable temps = (Hashtable) enviMobiles.get(i);
            Enumeration it2 = temps.elements();
            while (it2.hasMoreElements()) {
                locations.add(((EnvObject) it2.nextElement()).getLocation());
            }
        }
    }

    public Vector getLocations() {
        return locations;
    }
}

Sinon, à un moment dans le code, j'utilise getAgentWithRole qui me renvoie une liste d'AgentAddress, connaissez vous une méthode qui me permettrait de récupérer l'agent ou le nom de l'agent à partir d'un AgentAddress ?

Merci une nouvelle fois pour tout ça...

Bien cordialement,
ALF

Last edited by Alf (2011-03-23 12:03:37)

Offline

#14 2011-03-23 14:35:44

fmichel
Administrator
From: Montpellier
Registered: 2009-03-24
Posts: 172
Website

Re: Adaptation bibliothèque utilisant la nouvelle version de MadKit

bonjour,

Pour getHost : j'avais oublié de la rendre public, donc ça doit être bon maintenant.

pour getName : essayer de remplacer les appels à getName sur les address par un simple toString (en fait, c'est bien un nom unique qui est produit par toString)

Par exemple

    public String getFactoryName(String host)
    {
        List<AgentAddress> allplace=this.getAgentsWithRole(GISAgentFactory.GIS_AGENT_FACTORY_COMMUNITY,GISAgentFactory.GIS_AGENT_FACTORY_GROUP,GISAgentFactory.GIS_AGENT_FACTORY_ROLE);
        for(AgentAddress adr : allplace){
                if(host.equals(adr.getKernelAddress().getHost()))
                return adr.toString();
        return null;
    }

Pour

public final void setFace(ActiveMobile f, Environment env)
    {
        f.setAddress(this.getAddress());
        isAutorizedToMove=false;
    }

Commenter la ligne dépend du type de ActiveMobile et de ce que fait setAddress dans ce contexte. A priori, c'est là que va rester un problème...


Pour la probe, si le but est simplement de faire fonctionner getLocation, il est possible que vous puissiez remplacer tout le code par ce qui suit :

public class MobileLocationProbe extends PropertyProbe<AbstractAgent,Location> {
    
    public MobileLocationProbe(String group, String role) {
        super(null, group, role, "activeMobilesName");
    }

    public MobileLocationProbe(String community, String group, String role) {
        super(community, group, role, "activeMobilesName");
    }

    
    public Vector<Location> getLocations() {
        return new Vector(getAllProperties());
    }

}

Tout ça devrait faire avancer les choses.
Mêmes urls que la dernière fois pour le nouveau noyau

Offline

#15 2011-03-24 00:25:37

Alf
Member
Registered: 2011-03-01
Posts: 11

Re: Adaptation bibliothèque utilisant la nouvelle version de MadKit

Bonjour,

Merci beaucoup pour votre réponse qui effectivement a bien arrangé les choses, en fait, cette fois, getHost fonctionne à merveille !!! Il me reste 10 erreurs à corriger réparties entre getAddress et getName.

- Au niveau de getName : j'utilise getAgentsWithRole qui me renvoie une liste d'AgentAddress, et la méthode getAgent dans AgentAddress qui me permettrait d'utiliser getName pour récupérer le nom de l'agent est non visible car définie comme : "final", ne devrait elle pas être en "final public" ?

- Pour getAdresse, je sèche totalement. J'ai besoin de l'adresse de l'agent pour ecrire mon message du type ci-dessous sachant que this est un objet hérité d'AbstractAgent:
     

          String msgString="<root><MobileImageCreation>" +
                "<Name>" +this.getName()+"</Name>" +
                "<Class>"+this.getClass().getName()+"</Class>" +
                "<Address>"+"mka:"+this.getAddress().toString()+"</Address>" +
                "<Environment>"+"mka:"+this.getEnvironment().toString()+"</Environment>";

Quoi qu'il en soit, un grand merci à vous pour toute votre aide.

Bien cordialement,
ALF

Offline

#16 2011-03-25 17:10:42

fmichel
Administrator
From: Montpellier
Registered: 2009-03-24
Posts: 172
Website

Re: Adaptation bibliothèque utilisant la nouvelle version de MadKit

Alf wrote:

Bonjour,

Merci beaucoup pour votre réponse qui effectivement a bien arrangé les choses, en fait, cette fois, getHost fonctionne à merveille !!! Il me reste 10 erreurs à corriger réparties entre getAddress et getName.

- Au niveau de getName : j'utilise getAgentsWithRole qui me renvoie une liste d'AgentAddress, et la méthode getAgent dans AgentAddress qui me permettrait d'utiliser getName pour récupérer le nom de l'agent est non visible car définie comme : "final", ne devrait elle pas être en "final public" ?
ALF

Et non surtout pas ! Toute l'idée de la prog agent est que les agents ne s'échangent pas leurs références : sinon, on va avoir des appels objet.
Pour remplacer le getName de getaddress, utilisez toString() (sur agentaddress) à la place.

Alf wrote:

- Pour getAdresse, je sèche totalement. J'ai besoin de l'adresse de l'agent pour ecrire mon message du type ci-dessous sachant que this est un objet hérité d'AbstractAgent:
     

          String msgString="<root><MobileImageCreation>" +
                "<Name>" +this.getName()+"</Name>" +
                "<Class>"+this.getClass().getName()+"</Class>" +
                "<Address>"+"mka:"+this.getAddress().toString()+"</Address>" +
                "<Environment>"+"mka:"+this.getEnvironment().toString()+"</Environment>";

en première approche, à remplacer par

          String msgString="<root><MobileImageCreation>" +
                "<Name>" +this.getName()+"</Name>" +
                "<Class>"+this.getClass().getName()+"</Class>" +
                "<Address>"+"mka:"+this.getName().toString()+"</Address>" +
                "<Environment>"+"mka:"+this.getEnvironment().toString()+"</Environment>";

Tout ça risque de poser des problèmes d'identification mais ce n'est pas grave : je verrais ça directement avec Nicolas

Fabien

Offline

#17 2011-04-27 16:09:21

Alf
Member
Registered: 2011-03-01
Posts: 11

Re: Adaptation bibliothèque utilisant la nouvelle version de MadKit

Bonjour,

Cela fait un petit moment que j'ai terminé l'adaptation de MadKit avec Rafale-SP, je suis actuellement en train d'essayer de faire fonctionner une évolution du simulateur Sworm (qui s'appelle MarsConquest (l'équivalent de Sworm mais avec la dimension Z en moins)). MarsConquest permet à des robots de faire l'analyse des roches se trouvant sur Mars pour ensuite transmettre les résultats à la Base.

J'aurais aimé savoir de manière précise comment font les agents pour communiquer entre eux depuis deux groupes différents.

Au niveau de getName, pourrier faire comme pour getHost, c'est à dire le rendre public ? Car je rencontre exactement le même problème que pour getHost, donc je suppose que la solution doit être la même ;-)   (voir anciens posts ci-dessus)

Y a t'il un moyen d'avoir la liste des agents pour un groupe/rôle donné car getAgentsWithRôle exclu le caller (idem pour getAgentWithRole) ? Pour avoir la liste complète des agents, il faut faire parti soit d'un autre groupe, soit être dans un autre rôle et interroger le groupe visé. Cela aura pour conséquence de devoir créer un agent qui interroge des groupes/rôles pour obtenir cette information.

Pour finir, y a t'il une nouvelle version de MadKit que je pourrais utiliser dans mon projet (avec les sources qui vont avec ;-)   ?

Merci d'avance pour votre réponse

Bien cordialement,
ALF

Last edited by Alf (2011-05-03 13:02:43)

Offline

#18 2011-05-11 09:38:22

fmichel
Administrator
From: Montpellier
Registered: 2009-03-24
Posts: 172
Website

Re: Adaptation bibliothèque utilisant la nouvelle version de MadKit

Bonjour,

Alf wrote:

Bonjour,

Cela fait un petit moment que j'ai terminé l'adaptation de MadKit avec Rafale-SP, je suis actuellement en train d'essayer de faire fonctionner une évolution du simulateur Sworm (qui s'appelle MarsConquest (l'équivalent de Sworm mais avec la dimension Z en moins)). MarsConquest permet à des robots de faire l'analyse des roches se trouvant sur Mars pour ensuite transmettre les résultats à la Base.

J'aurais aimé savoir de manière précise comment font les agents pour communiquer entre eux depuis deux groupes différents.

Il faut qu'ils le fassent par l'intermédiaire d'un agent qui se trouvent dans les deux groupes, ou alors envoyer un message au manager du groupe. Dans ce dernier cas il n'y a pas besoin de faire partie du groupe. Ainsi si vous avez beaucoup de messages à faire transiter, il est probable que cela veuille dire que vous avez besoin de créer un groupe spécifique à ces agents : cela structure l'organisation et donc votre application.

Alf wrote:

Au niveau de getName, pourrier faire comme pour getHost, c'est à dire le rendre public ? Car je rencontre exactement le même problème que pour getHost, donc je suppose que la solution doit être la même ;-)   (voir anciens posts ci-dessus)

getName de quelle classe ?

Alf wrote:

Y a t'il un moyen d'avoir la liste des agents pour un groupe/rôle donné car getAgentsWithRôle exclu le caller (idem pour getAgentWithRole) ? Pour avoir la liste complète des agents, il faut faire parti soit d'un autre groupe, soit être dans un autre rôle et interroger le groupe visé. Cela aura pour conséquence de devoir créer un agent qui interroge des groupes/rôles pour obtenir cette information.

Oui je vais voir ça. Pourriez-vous me donner le contexte d'utilisation ? N'y-a-t-il pas moyen de faire autrement ?

Alf wrote:

Pour finir, y a t'il une nouvelle version de MadKit que je pourrais utiliser dans mon projet (avec les sources qui vont avec ;-)   ?

Oui la 5.0.0.9 est en ligne. Je mettrai les sources en ligne prochainement.

Bon courage

Offline

#19 2011-05-11 13:19:59

Alf
Member
Registered: 2011-03-01
Posts: 11

Re: Adaptation bibliothèque utilisant la nouvelle version de MadKit

Bonjour,

Merci beaucoup pour votre réponse, je vous ai devancé de quelques instant à propos de la dernière version que j'ai téléchargé sur le site de MadKit. Je viens de découvrir votre réponse à l'instant.

Je viens de lire le rapport de Vincent Pradeilles et Gaëlle Hisler. Il est bien écrit et très intéressant, si seulement je l'avais eu en début de stage ;-) Par contre, j'ai eu un grand doute quand j'ai lu que deux agents issues de groupes différents ne pouvaient pas communiquer entre eux. Par défaut, c'est vrai, puisqu'avec Rafale-SP j'ai eu le même message d'erreur, mais par contre cela reste possible en utilisant un agent spécifique (le manager du groupe que l'on aura savamment créé d'après votre dernière réponse).

Au niveau de getName, j'ai été obligé de créer la rustine avec le code suivant pour avoir accès à getName :

package madkit.kernel;

public class AgentAddressEncap {

    private AgentAddress aga;
    
    public AgentAddressEncap(AgentAddress aga){
        this.aga = aga;
    }
    
    public AbstractAgent getAgent(){
        return aga.getAgent();
    }
}

Je l'utilise ensuite de cette manière :

    //==================== Original code ========================    
//    public Place[] getPlaces() {
//        AgentAddress[] allplace=this.getAgentsWithRole(GISAgentFactory.GIS_AGENT_FACTORY_GROUP,GISAgentFactory.GIS_AGENT_FACTORY_ROLE);
//        Place[] res=new Place[allplace.length];
//        for(int i=0;i<allplace.length;i++)
//            res[i]=new Place(allplace[i],allplace[i].getName());
//        return res;
//    }
    //================== End original code ========================
    
    public Place[] getPlaces() {
        List<AgentAddress> allplace=this.getAgentsWithRole(GISAgentFactory.GIS_AGENT_FACTORY_COMMUNITY, GISAgentFactory.GIS_AGENT_FACTORY_GROUP,GISAgentFactory.GIS_AGENT_FACTORY_ROLE);
        
        System.out.println("Recuperation factory : " + allplace.size());
        
        Place[] res=new Place[allplace.size()];
        ArrayList<AgentAddressEncap> allplaceEncap = new ArrayList<AgentAddressEncap>();    
        for(int i=0;i<allplace.size();i++){
            allplaceEncap.add(new AgentAddressEncap(allplace.get(i)));
        }
        for(int i=0;i<allplace.size();i++)
            res[i]=new Place(allplace.get(i),allplaceEncap.get(i).getAgent().getName());
        return res;
    }

Normalement, c'est un problème de droit d'accès sur la fonction getName qui est en droit "package" par défaut et pas en droit "public", mais peut être que c'est volontaire ?

En lisant l'API de MadKit 5, il est indiqué que l'on est passé de l'organisation A/G/R à C/G/R, mais à plein d'endroits, je vois sur le site A/G/R, je m'y perds un peu, est-ce que A/G/R est toujours d'actualité (car c'est un concept, peut être et qu'on peut continuer de l'employer lorsqu'on l'évoque ?)

Sinon, l'adaptation de Rafale-SP avec MadKit 5 fonctionne bien, le simulateur MarsConquest fonctionne correctement avec ces deux "sous couches".

Merci d'avance pour votre réponse.

Bien cordialement,
Alf

Offline

#20 2011-05-12 10:44:17

fmichel
Administrator
From: Montpellier
Registered: 2009-03-24
Posts: 172
Website

Re: Adaptation bibliothèque utilisant la nouvelle version de MadKit

Bonjour,

Alf wrote:

Normalement, c'est un problème de droit d'accès sur la fonction getName qui est en droit "package" par défaut et pas en droit "public", mais peut être que c'est volontaire ?
Alf

Oui c'est tout à fait volontaire, mais ici comme apparemment c'est pour avoir un identifiant, je pense qu'il est possible d'utiliser tout simplement la méthode toString d'AgentAddress directement sans besoin de hack. Au pire je pense au final ajouter une méthode getAgentName() dans la classe AgentAddress : il peut être déduit du toString mais ce sera plus simple.

Alf wrote:

En lisant l'API de MadKit 5, il est indiqué que l'on est passé de l'organisation A/G/R à C/G/R, mais à plein d'endroits, je vois sur le site A/G/R, je m'y perds un peu, est-ce que A/G/R est toujours d'actualité (car c'est un concept, peut être et qu'on peut continuer de l'employer lorsqu'on l'évoque ?)
Alf

AGR reste LE modèle. CGR (communauté,Groupe,Rôle) n'est qu'une représentation de la localisation dans l'implémentation particulière d'AGR qu'est MadKit.

Alf wrote:

Sinon, l'adaptation de Rafale-SP avec MadKit 5 fonctionne bien, le simulateur MarsConquest fonctionne correctement avec ces deux "sous couches".

Tant mieux. Reste à trouver les éventuels bugs wink

Offline

Board footer