只创建一条自定义边的原始解决方案如下:Repast Java: Creating a custom edge agent to schedule specific actions
1)。现在,我需要创建一种以上类型的自定义边来充当唯一代理(例如,在我的模型中,我有路由代理、供应链接代理、关系链接代理)。我需要重复链接中描述的上述过程吗?(例如,添加另一个具有不同名称的专用CustomEdgeCreator类和CustomEdge类),或者是否有更有效的方法?
2)。给出上面僵尸模型中的例子,我注意到通过CustomEdgeCreator方法创建自定义边缘并没有使边缘代理类在图形用户界面中可见,这不便于跟踪与边缘代理关联的相关属性。
它也不能从边缘代理执行数据收集。我将每条边的权重设置为2,但图表中显示的权重之和为0。
上述问题引出了一个重要的问题:边缘类与正常代理类有何不同?
发布于 2019-10-22 14:32:38
关于您的第一点:由于您将每个网络投影与一个特定的EdgeCreator实例相关联,因此可能会使EdgeCreator构造函数接受您希望该网络投影创建的链接类型。这可能会让事情变得更流畅一些。
在此处添加请求的示例:
package jzombies;
import repast.simphony.space.graph.EdgeCreator;
import repast.simphony.space.graph.RepastEdge;
public class CustomEdgeCreator<E extends RepastEdge<T>, T> implements EdgeCreator<E, T> {
private Class<E> e;
public CustomEdgeCreator(Class<E> e) {
this.e = e;
}
@Override
public Class<E> getEdgeType() {
return e;
}
@Override
public E createEdge(T source, T target, boolean isDirected, double weight) {
try {
return e.getDeclaredConstructor(new Class[]{Object.class, Object.class, boolean.class, double.class}).newInstance(source, target, isDirected, weight);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
关于您的第二点:除非您将创建的边添加到上下文中,否则它不会显示为真正的代理。因此,在创建网络链接时,您可以将其添加到上下文中,它应该显示在代理表中并用于数据收集目的。
https://stackoverflow.com/questions/58496344
复制