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()我认为,您需要在您的方法中从地理位置中删除您的代理。

处理从显示中删除代理的就餐代码中,Projection删除是由与显示关联的对象中的事件触发的- 在您的情况下为Geography. 奇怪的是,Geography接口没有定义remove()方法,而是在DefaultGeography类中实现了一个。您可能Geography实际上是一个DefaultGeography具体的对象,因此您可以尝试在您的die()方法中添加以下内容:

@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 回答