IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

programmation orientée agent et weakreference


Sujet :

Langage Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 147
    Par défaut programmation orientée agent et weakreference
    J'ai un objet Word, composé d'objets Agent.
    De temps en temps, les agents disparaissent (meurent) : dès ce moment l'objet World n'entretient plus aucune référence sur l'agent disparu.

    Mais comme les agents entretiennent des relations entre eux, certains agents peuvent avoir des références sur l'agent disparu. Ainsi, un agent peut 'mourir' pour le monde réel, mais survivre dans la mémoire d'autres agents.

    Pour le détruire vraiment, il faut faire le tour de chacun des agents pour l'éliminer chez chacun. D'une part on peut oublier une référence (avec une structure plus complexe que celle donnée en exemple) d'autre part ce n'est pas cohérent dans un framework où l'on cherche à modéliser des agents autonomes : la disparition d''un agent ne doit pas dépendre des autres agents, elle doit s'imposer à eux, comme une évidence externe, au moment où ils chercheront à entrer à nouveau en relation.

    Ce qu'il faut donc c'est que seul le monde entretienne une strong reference sur chaque agent, et que les agents entre eux n'entretiennent des relations que par des références indirectes.

    J'ai pensé aux weakreference que je n'ai jamais utilisé. Est-ce la solution à mon pb ?
    Existe-t-il d'autres outils ?

  2. #2
    Inactif  
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    885
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 885
    Par défaut
    Salut,

    pas forcément, tu pourrais voir les choses ainsi :

    lorsqu'un agent meurt (via une méthode de celui-ci je suppose ? Si non, mieux vaut en rajouter une), il averti ses collègues de son décès imminent, déclenchant (de leur côté) le nettoyage des référence vers notre regretté agent.
    Du coup, l'agent que tu veux dézinguer ne sera plus référencé par personne, et pourra être fauché par the grand holly ramasse miette.
    Snif.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 147
    Par défaut
    Oui c'est comme ça que je procède actuellement.
    Ca marche d'un point de vue POO, mais ce n'est pas satisfaisant d'un point de vue POAgent, pour les raisons que j'ai exposées plus haut.
    Donc je maintiens ma question : est-ce que les weakreferences sont adaptées à mon pb, ou existe-t-il des outils plus spécifiques ?

  4. #4
    Membre Expert
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Par défaut
    j'ai pas tout compris (mais j'ai la g*** de bois ce matin).
    est-il possible d'avoir un système d'identification des agents et un service qui fait le lien identification/agent.
    au travers d'une référence faible tu peux:
    - récupérer l'agent qui n'a pas disparu
    - sinon demander au service d'annuaire de le resusciter ...

    ça c'est une utilisation classique des références faibles (par exemple imageen méoire)

    enusite on peut faire plus difficile: avec une queue de référence tu peux lancer des notifications à toutes les entités enregistrées et intéressées par la mort de l'agent. Il y a des tas de possibilités (et des codes pas évidents en particulier avec les "PhantomReference" ) ... un petit scenario?

    merci

  5. #5
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Les WeakReference peuvent être une solution.
    Mais tu devrais plutôt réfléchir en terme d'agent. Tu as de multiples techniques pour faire communiquer des agents. Tu devrais revoir la conception de la communication : tableau noir (l'agent va lire de temps en temps si une information l'intéresse), messages à poster (il donne une lettre au facteur, avec une adresse, et le facteur se débrouille pour trouver le bon agent).
    Il est dommage, d'un point de vue agent, d'avoir des "références fortes" entre les agents.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 147
    Par défaut
    Les métaphores tableau noir et facteur sont satisfaisantes tant que les interactions que l'on cherche à modéliser sont des échanges d'information.

    Mais parce que certaines des interactions à modéliser sont des interactions physiques directes (par exemple quand un agent Employee fait appel à la méthode work() de l'agent Employer, ça ne passe pas par la poste) je craindrais en utilisant de telles métaphores d'obscurcir le modèle.

  7. #7
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Je ne connais pas tes contraintes projets, mais d'un point de vue conceptuel, un agent doit être autonome. On lui demande de faire quelque chose, et il le fait selon son envie, son temps, ses contraintes....
    Ce que tu décris me fais plus penser à la des acteurs qu'à des agents.
    Un chef demande à son employé de faire quelque chose. Le chef va donc poster son message "travail au lieu de buller" dans la boite de l'employé. L'employé regarde sa liste de message quand il le souhaite, selon la manière qu'il a été créé. Lorsqu'il lit le message, s'il considère que jouer au démineur est plus intéressant que travailler, alors il peut ignorer le message, le temporiser....
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 147
    Par défaut
    Scuse, j'ai raté ta réponse.

    Citation Envoyé par dinobogan Voir le message
    Je ne connais pas tes contraintes projets, mais d'un point de vue conceptuel, un agent doit être autonome. On lui demande de faire quelque chose, et il le fait selon son envie, son temps, ses contraintes....
    L'important pour moi c'est contraintes.

    Je suis tout à fait d'accord avec ce que tu dis de l'autonomie de l'agent (sous réserve de garder à l'esprit que cette autonomie ne pourra en fait qu'être simulée). Mais cette autonomie est limitée par le milieu dans lequel est plongé l'agent, et qui s'impose à lui.

    Ta conception de l'agent-travailleur correspond à l'agent-programmeur (ou plus généralement à l'agent-employé) = il reçoit des informations, il renvoie des informations. Il pourrait même ne pas se rendre au bureau et bosser de chez lui via le net. Ses contraintes sont uniquement morales (trade off entre l'envie de glander et la crainte du chef). Tes métaphores postales fonctionnent bien.

    Or je modélise l'agent-ouvrier = il reçoit des matières premières, les consomme et dépense sa force de travail dans la production de produits finis. Il doit se rendre à l'usine, il doit entrer en relation directe avec les machines. Ses contraintes ne sont pas seulement morales, elles sont aussi physiques.

    C'est la modélisation de la partie "physique" du modèle qui me pose problème. Mes agents interagissent non seulement par l'échange de messages mais aussi par l'échange d'objets physiques (= d'objets devant respecter des contraintes fortes de création, d'existence et de destruction). Les agents sont eux-même des objets physiques.

    Bien sûr, je pourrais quand même utiliser systématiquement la métaphore postale. Mais il serait tellement plus clair de le laisser entrer en contact direct avec les objets qu'il manipule. Sauf que, avec des références fortes, ces objets peuvent persister après avoir été consommés, et cela est incompatible avec le caractère "physique" des objets modélisés.

    Comme alternative aux références faibles, j'ai pensé aussi à la notion de proxy : les agents n'entreraient pas réellement en relation avec l'objet, mais seulement son proxy. Seul le proxy aurait une référence forte sur l'objet lui-même. Il suffirait de détruire cette référence pour être certain de la destruction universelle et irrévocable de l'objet. Méthode applicable non seulement aux objets mais aussi aux agents.

    Mais une référence faible n'est-elle pas une sorte de proxy ?

Discussions similaires

  1. Réponses: 0
    Dernier message: 16/12/2012, 10h24
  2. Programmation orienté agent sous MATLAB
    Par welbiz dans le forum MATLAB
    Réponses: 1
    Dernier message: 14/05/2010, 07h45
  3. Programmation Orientée Aspect - votre avis
    Par Alec6 dans le forum Débats sur le développement - Le Best Of
    Réponses: 70
    Dernier message: 09/07/2009, 11h19
  4. [POO] apprendre la programmation orientée objet
    Par Invité dans le forum Langage
    Réponses: 5
    Dernier message: 10/12/2005, 11h33
  5. [DEBUTANT] Conseil sur la programmation orienté objet
    Par etiennegaloup dans le forum Langage
    Réponses: 7
    Dernier message: 27/05/2005, 12h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo