2010-12-01 13 views
1

私は人工知能プログラムを開発して、リソースのための所定のスペースを探索しています。Repast restart issue

データを収集してファイルに出力するために、複数のシナリオを実行したいと思います。

私はguiで "multiple runs"オプションを使用しました.1つのモジュールの実行が終了すると(すべてのリソースが調査された)、stop()を実行します。問題は、モデルを2回目に実行しても正しく動作しない場合です。

私は、一度実行すると、再起動オプションが正しく動作しないため、終了することによってアプリケーションを強制終了する必要があることを意味します。

"再起動"することは何もありませんか?私は、アプリケーションを終了して、もう一度それを実行した場合、それはそれがより明確ですので、編集した完全

を動作するため:

私は火星に探査をシミュレートするためにRepastプラットフォームを使用しています。私は3種類のエージェント、スカウト、掘削、輸送をしています。彼らはタスクや他のものをスケジュールするためにそれらの間で通信します。

初めてシミュレーションを実行すると、すべてがスムーズに実行されます。そして、惑星のすべての鉱物資源が調査されたら、私はモデルを再始動し、データを収集できるように再試行します。

「再起動」オプションを使用すると、シミュレーションがうまく動作しないという問題があります。しかし、私が終了して(再起動しない)、再実行すると正常に動作します。事前に

Repast GUIの再起動オプションは、すべての手順をミスならば私が知りたいのですが..です

おかげ

PS:あなたたちはそれが絶対に必要だと思うなら、私はいくつかのコードを投稿することができます...プロジェクトはかなり大きいです。

+0

少し物事を明確にすることはできますか? –

+0

いくつかのコードがないと、私はあなたが良い答えを得るのではないかと疑います。 – Enrique

+0

Repastが何であるかわからないので、おそらく煙を吹いているだけですが...あなたのコードはGUIに縛られていなければなりませんか?同じ初期条件を使用して複数の異なるシミュレーションを実行し、結果にデータを収集したい場合は、ワーカースレッド上で舞台裏で行うことが理にかなっています。しかし、私が言ったように、私はおそらく私が何を言っているのか分からない。 – Bugmaster

答えて

0
  1. Thread.stop()メソッドを使用しないでください。これは推奨されていません。 Thread.stopは、本質的に安全でないため廃止予定です。スレッドを停止すると、ロックされているすべてのモニターのロックが解除されます。これらのモニターによって以前に保護されたオブジェクトのいずれかが不整合な状態にあった場合、他のスレッドはこれらのオブジェクトを不整合な状態で表示することがあります。そのような物体は損傷を受けていると言われている。破損したオブジェクト上で動作するスレッドは、明らかに動作するかどうかにかかわらず、任意に動作できます。チェックされていない他の例外とは異なり、ThreadDeathはスレッドを静かにkillします。したがって、ユーザーには、プログラムが破損している可能性があるという警告は表示されません。破損は、被害が発生した後、予期せぬ時間に現れることがあります。 Thread.stopのどのような使い方でも、より緩やかな終了を提供するコードに置き換えてください。

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

  1. (スレッドがいずれかの停止Thread.interrupt介し検討)またはキャンセルフラグ設定介し。 Java Concurrency in Practice、第7.1節を見てください。タスクのキャンセル。
+0

アドバイスをいただきありがとうございますが、私がThread.CurrentThread.interrupt()を使用すると、単にそれを無視するだけです...少なくとも何も起こりません。 バッチモードでバッチを実行しようとしています。 ありがとう –

+0

interrupt()は実際に割り込みを要求するスレッドのみを中断しません。したがって、run()メソッドにアクセスできる場合は、スレッドの中断ポリシーを考慮する必要があります。 – Alexandr