MaDKit forum

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

You are not logged in.

#1 Re: HowTo » Adaptation bibliothèque utilisant la nouvelle version de MadKit » 2011-05-11 13:19:59

Alf

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

#2 Re: HowTo » Adaptation bibliothèque utilisant la nouvelle version de MadKit » 2011-04-27 16:09:21

Alf

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

#3 Re: HowTo » Adaptation bibliothèque utilisant la nouvelle version de MadKit » 2011-03-24 00:25:37

Alf

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

#4 Re: HowTo » Adaptation bibliothèque utilisant la nouvelle version de MadKit » 2011-03-23 11:49:56

Alf

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

#5 Re: HowTo » Adaptation bibliothèque utilisant la nouvelle version de MadKit » 2011-03-21 15:52:29

Alf

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

#6 Re: HowTo » Adaptation bibliothèque utilisant la nouvelle version de MadKit » 2011-03-16 10:24:16

Alf

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

#7 Re: HowTo » Adaptation bibliothèque utilisant la nouvelle version de MadKit » 2011-03-11 15:51:12

Alf

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

#8 Re: HowTo » Adaptation bibliothèque utilisant la nouvelle version de MadKit » 2011-03-11 14:24:17

Alf

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

#9 Re: HowTo » Adaptation bibliothèque utilisant la nouvelle version de MadKit » 2011-03-10 15:05:17

Alf

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

#10 Re: HowTo » Adaptation bibliothèque utilisant la nouvelle version de MadKit » 2011-03-01 15:37:08

Alf

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

#11 HowTo » Adaptation bibliothèque utilisant la nouvelle version de MadKit » 2011-03-01 11:12:53

Alf
Replies: 19

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

Board footer