1

空間を表すために緯度と経度を使用して動作する単純なコンテキスト (地理パッケージ) に単純なエージェントがあります。エージェントは、モデルの 10 回目の反復で死亡することになっています。その後、コンテキストから削除されます。シミュレーションの 10 回目の反復で、エージェントは他の方法 (動き回るなど) の実行を停止するため、コンテキストからの削除/死亡に成功したと仮定しますが、シミュレーション表示からは削除されません (ただそこに座っているだけです)。 )。

ディスプレイに残っているのはなぜですか?また、死んだらディスプレイから削除するにはどうすればよいですか?

更新: リペースト表示コードにバグがありました。修正ファイルは、repast-interest@lists.sourceforge.net で Eric Tatara に連絡することで入手できますが、すべてのバグは次のリリース バージョンで削除される予定です。

public class Agent {
public Geography<Object> geography;
public Context<Object> context;
public int id;


public Agent (Context<Object>context, Geography<Object>geography) {
    this.geography= geography;
    this.context=context;   

}

public int getId() {
    return id;
}


public void setId(int id) {
    this.id = id;
}

@ScheduledMethod(start = 1, pick = 1, interval = 1)
public void otherMethods() {

}

@ScheduledMethod(start = 10, pick = 1, interval = 1)
public void die() {  
    Context context = ContextUtils.getContext(this);
    context.remove(this);

}

}
4

1 に答える 1

2

メソッドの地理からエージェントを削除する必要があるdie()と思います。

ディスプレイからのエージェントの削除を処理するrepast コードではProjection、削除はディスプレイに関連付けられたオブジェクトのイベントによってトリガーされますGeography。奇妙なことに、Geographyインターフェイスはメソッドを定義していませんが、クラスremove()に実装されています。実際には具象オブジェクトであるDefaultGeography可能性が高いため、メソッドに次の追加を試すことができます。GeographyDefaultGeographydie()

@ScheduledMethod(start = 10, pick = 1, interval = 1)
public void die() {  
    Context context = ContextUtils.getContext(this);
    context.remove(this);
    ((DefaultGeography) geography).remove(this);

}

ノート

  1. メソッドでコンテキストを取得していますが、die()を構築したときからすでにコンテキストへの参照を持っているAgentため、これはほぼ確実に冗長です。
  2. ディスプレイが実際に更新されるようにスケジュールされていることを確認する必要があります。デフォルトではそうですが、GUI の左側のナビゲーター ペインでディスプレイをダブルクリックし、Schedule Detailsタブをチェックして、ディスプレイが定期的に更新されていることを確認してください ( ではありませんONE_TIME) 。
于 2015-02-23T14:23:23.620 に答える