Question

Je crée un Programme de modélisation basé sur des agents en Java.

J'essaie de déterminer la meilleure façon d'animer les agents. J'ai vu plusieurs exemples qui utilisent une grille, permettant à chaque agent d'occuper une seule cellule à la fois.

Je cherche quelque chose de plus lisse, où les agents peuvent "circuler" à travers la fenêtre dans toutes les directions.

Aucune suggestion?

Merci!

Éditer:

L'environnement sera simple et bidimensionnel. Il y aura n'importe où d'un agent à plusieurs centaines d'agents.

Je voudrais représenter les agents comme de petits cercles avec une sorte d'indication de direction (les spécificités ne sont pas pertinentes; le fait est que l'agent a besoin de la capacité de tourner).

Deuxième édition:

Je lis actuellement ce tutoriel: http://www.giosoft.net/development/java-asteroïds-tutorial.html

Il semble que cela m'aidera avec ce que j'essaie d'accomplir.

Était-ce utile?

La solution

Je ne peux pas dire ce que vous demandez vraiment. Peut-être que vous posez (ou censé poser) ces trois questions?

  1. "Pour mon modèle basé sur des agents, comment dois-je représenter mes agents dans l'espace?"

    Lorsque vous effectuez une modélisation basée sur des agents, vous devez concevoir votre simulation de manière logique pour votre domaine. Personne ici ne peut vous donner une réponse raisonnable quant aux choix spatiaux à faire à moins d'avoir une idée de votre domaine.

    Vous pouvez opter pour une visualisation 2 ou 3 dimensions. Vous voudrez peut-être utiliser l'espace toroïdal. Vous pouvez imposer une grille (par exemple, des dimensions X et Y discrètes) ou vous pouvez permettre un espace continu. Vous pourriez avoir certaines règles concernant la proximité (par exemple, un seul agent peut occuper un espace de grille à la fois). Vous voudrez peut-être aller avec un autre ensemble de règles.

    Encore une fois, la clé est de trouver un ensemble de règles qui ont du sens pour votre domaine. Je recommanderais de trouver l'ensemble le plus simple de règles qui créent toujours les types de comportement essentiels à votre modèle.

  2. "Quelles bibliothèques d'animation basées sur Java devrais-je considérer?"

    Une fois que vous avez décidé des aspects spatiaux de votre modèle basé sur l'agent, alors Vous serez prêt à décider quelles technologies utiliser pour l'afficher. C'est un sujet large, mais je vous recommande de jeter un œil à Traitement, PicColo2d, Javafx, Java 2D et Java 3D.

    En fait, cette question est un peu plus large que je ne l'ai dit ci-dessus. Vous allez probablement vous soucier de plus que de l'animation. Les modèles basés sur des agents peuvent être pilotés par des interfaces de ligne GUIS et / ou de commande. Si vous voulez une interface graphique, vous allez vouloir divers contrôles d'entrée afin que les paramètres du modèle puissent être réglés. Vous voudrez considérer, au moins, Swing et Javafx.

  3. "Quelles boîtes à outils ou bibliothèques dois-je utiliser pour m'aider à construire mon modèle basé sur l'agent?"

    La Comparaison Wikipedia des outils de modélisation basés sur des agents est la liste la plus complète que j'ai vue jusqu'à présent, mais cela peut vous submerger. D'après mon expérience, les collègues et les pairs ont tendance à graviter vers un ou plusieurs des éléments suivants: netlogo, simphonie de repast, anylogic ou maçon. Certaines personnes (y compris moi-même) trouvent souvent plus vite de rouler. Si vous empruntez cette voie, je vous recommande fortement de jeter un œil à des langages de haut niveau comme Ruby, Scala ou Python pour vous permettre de vous concentrer sur la logique du domaine au lieu des détails du langage de bas niveau.

Autres conseils

Vous voudrez peut-être jeter un œil LE MAÇON. Il s'agit d'une plate-forme Java open source pour la simulation multi-agents. Certaines démos (par exemple mav) montrent comment faire exactement ce que vous décrivez.

Repas est une autre plate-forme Java qui pourrait être une option.

Pour terminer, Netlogo rend ce que vous décrivez extrêmement facile. Bien qu'il soit possible d'intégrer Netlogo avec d'autres code Java, il a sa propre petite langue qui permette un développement très rapide.

Entre 2000-2006, j'ai travaillé chez Tryllian, une entreprise néerlandaise spécialisée dans les systèmes multi-agents. L'entreprise n'est pas active maintenant.

La première idée chez Tryllian a été de construire un appareil de recherche basé sur des agents (appelé Gossip). Cela avait une application client graphique avec un certain nombre d'agents circulaires aux couleurs vives avec des yeux mignons. Chaque agent avait un écart dans son dos dans lequel un «sac à dos» pouvait être traîné. Le sac à dos peut contenir une requête de recherche et un certain nombre de résultats de recherche (URL, documents, images, etc.). Pour faire une recherche, l'utilisateur a dû faire glisser un agent avec un sac à dos préparé sur le «portail vers Internet» qui était une sorte de porte d'atterrissage avec un fond étoilé comme vous le voyez dans les films de science-fiction. L'agent serait ensuite «téléporté» sur le serveur Tryllian où il serait dirigé vers un «sujet» par un «Butler-Agent» qui vivait sur le serveur. Dans la pièce, il pourrait interagir avec d'autres agents et échanger des intérêts de recherche et des résults. On dirait que vous pouvez toujours télécharger des potins ici.

Here's what the Gossip client looked like

Plus tard, Tryllian a décidé de développer un kit de développement d'agent (ADK) avec lequel on pourrait créer des applications d'agent comme les potins plus facilement. Il offrait un modèle basé sur les tâches pour le comportement des agents de programmation. Votre agent obtiendrait beaucoup d'événements (agentstarted, etc.) et dans les événements, les gestionnaires pourraient ajouter des tâches qui à leur tour obtiendraient également des événements (taskstarted, etc.) et pourraient planifier des comportements plus complexes (éventuellement sous forme de sous-tâches). L'API a été vraiment bien réalisée.

La caractéristique clé de l'ADK était à mon avis la mobilité du code qu'elle offrait; Non seulement les agents pourraient voyager entre les chambres virtuelles de leur local (environnement d'exécution de l'agent), mais pourrait également se rendre à un autre serveur. Cela impliquait la sérialisation de classe et une solution multi-classiques qui était assez révolutionnaire à l'époque (nous avons aimé penser). Cette fonctionnalité a permis des conceptions où vous apportez le code aux données au lieu de devoir faire passer des données (pomper les données est toujours une caractéristique principale de la plupart des systèmes d'entreprise que je connais). Par exemple, Tryllian a développé une application d'audit distante qui a permis aux analistes de la société d'audit de coder les règles d'audit dans un agent et de l'envoyer en toute sécurité au serveur de son client pour surveiller les processus.

Je vais m'arrêter avant que cette réponse ne commence à obtenir vraiment long (-;

C'est probablement un peu plus que ce que vous cherchez à réaliser en ce moment. Si vous pouvez formuler vos questions un peu plus spécifiquement, je pourrais donner des conseils sur la façon de configurer votre système multi-agents (comment modéliser la messagerie entre les agents est également un sujet très intéressant BTW - oh désolé, j'ai dit que je m'arrêterais. ..).

Quel serait le but de votre système multi-agents? Que ferait un agent? Serait-il fonctionner sur une seule machine ou distribué? Les agents seraient-ils codés en dur, configurables ou complètement dynamiques dans leur comportement / règles?

Une dernière suggestion: un point de départ raisonnable pour penser à la modélisation d'agents simples est sens du sens qui est généralement associé aux robots.

Edit: réponse à votre commentaire

Le modèle d'agent Tryllian se concentre davantage sur la messagerie que sur l'interaction serrée avec un environnement physique simulé. En regardant l'exemple du site que vous avez publié, il semble que les performances soient assez cruciales, surtout lorsque le nombre d'agents augmente. Vous n'exploiteriez pas les points forts de l'agent Tryllian: mobilité du code, programmation basée sur les tâches, généricité, donc je pense que ce ne serait pas le meilleur outil pour une simulation comme celle-ci.

Vous mentionnez une approche «grid» par rapport à une approche «douce». Je pense que dans une simulation informatique, vous devrez toujours représenter la taille des agents, les coordonnées, la vitesse et la direction dans une sorte de système discret de coordonnées. Il y aura donc toujours une sorte de grille, mais vous pouvez rendre les «cellules» plus petites pour la rendre plus fluide.

Peut-être y a-t-il des ressources utiles dans le domaine de jeu? (sprites, détection de collision, etc.)

Bonne chance et amusez-vous bien!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top