2010-12-01 2 views
1

Je développe un programme artificiel intelligent pour explorer un espace donné pour les ressources.Problème de redémarrage du repast

Je voudrais exécuter plusieurs scénarios afin de recueillir des données et la sortie vers un fichier.

J'ai utilisé l'option "plusieurs passages" dans l'interface graphique et je fais stop() quand un module est exécuté (toutes les ressources ont été explorées). Le problème est quand il exécute le modèle un deuxième tour, il ne fonctionne pas correctement.

Ce que je veux dire est que après avoir exécuté une fois que je dois toujours tuer l'application en sortant parce que l'option de redémarrage ne fonctionne pas correctement.

Y at-il quelque chose qui oublie « restart » à faire? Parce que si je quitte l'application et l'exécuter à nouveau, il fonctionne parfaitement

Edité donc il est plus clair:

J'utilise la plate-forme Repast afin de simuler une exploration vers Mars. J'ai 3 types d'agents, le dépistage, le creusement et le transport. Ils communiquent entre eux pour planifier des tâches et d'autres choses.

La première fois que je lance la simulation, tout se passe bien. Et lorsque toutes les ressources minérales de la planète ont été explorées, je redémarre le modèle et j'essaie à nouveau de collecter des données.

Le problème est, quand j'utilise l'option « redémarrer » la simulation ne fonctionne pas bien. Mais si je quitte (ne redémarre pas) et le réexécute cela fonctionne très bien.

Ce que je voudrais savoir est si l'option de redémarrage de l'interface graphique Repast manque toutes les étapes ..

Merci à l'avance

PS: Si vous les gars pensent qu'il est absolument nécessaire que je peux poster un code ... mais le projet est assez grand

+0

Pouvez-vous clarifier les choses un peu? –

+0

Sans code, je doute que vous obtiendrez de bonnes réponses. – Enrique

+0

Je n'ai aucune idée de ce qu'est le Repast, donc je suis probablement en train de souffler de la fumée ... mais ... votre code doit-il être lié à l'interface graphique?Si vous souhaitez exécuter plusieurs simulations différentes en utilisant les mêmes conditions initiales, puis collecter des données sur les résultats, il peut être judicieux de le faire en coulisses, sur un thread de travail. Mais, comme je l'ai dit, je ne sais probablement pas de quoi je parle. – Bugmaster

Répondre

0
  1. N'utilisez pas la méthode Thread.stop(). C'est obsolète. Thread.stop est obsolète car il est intrinsèquement dangereux. L'arrêt d'un thread le fait déverrouiller tous les moniteurs qu'il a verrouillés. (Les moniteurs sont déverrouillés lorsque l'exception ThreadDeath propage la pile.) Si l'un des objets précédemment protégés par ces moniteurs était dans un état incohérent, les autres threads peuvent voir ces objets dans un état incohérent. De tels objets sont dits endommagés. Les threads opérant sur des objets endommagés peuvent se comporter arbitrairement, de façon évidente ou non. Contrairement à d'autres exceptions non contrôlées, ThreadDeath tue les threads en silence; ainsi, l'utilisateur n'a aucun avertissement que le programme peut être corrompu. La corruption peut se manifester à un moment imprévisible après le dommage. Substituez toute utilisation de Thread.stop avec du code qui fournit une terminaison plus douce.

http://docs.sun.com/app/docs/doc/805-4031/6j3qv1of1?a=view

  1. Considérons fil d'arrêt, soit par l'intermédiaire d'Thread.interrupt() ou par la mise en drapeau annuler. Regardez Java Concurrency in Practice, Section 7.1. Annulation de tâche.
+0

Merci pour le conseil mais quand j'utilise Thread.CurrentThread.interrupt() repast l'ignore tout simplement ... au moins ça n'arrive à rien. Je vais essayer d'exécuter un groupe en mode batch. Merci –

+0

L'interruption() n'interrompt pas réellement le thread il demande seulement l'interruption. Vous devriez donc considérer la politique d'interruption pour le thread si vous avez accès à sa méthode run(). – Alexandr

Questions connexes