首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Repast :创建多种类型的自定义边的问题

Repast :创建多种类型的自定义边的问题
EN

Stack Overflow用户
提问于 2019-10-22 10:29:48
回答 1查看 58关注 0票数 2

只创建一条自定义边的原始解决方案如下:Repast Java: Creating a custom edge agent to schedule specific actions

1)。现在,我需要创建一种以上类型的自定义边来充当唯一代理(例如,在我的模型中,我有路由代理、供应链接代理、关系链接代理)。我需要重复链接中描述的上述过程吗?(例如,添加另一个具有不同名称的专用CustomEdgeCreator类和CustomEdge类),或者是否有更有效的方法?

2)。给出上面僵尸模型中的例子,我注意到通过CustomEdgeCreator方法创建自定义边缘并没有使边缘代理类在图形用户界面中可见,这不便于跟踪与边缘代理关联的相关属性。

它也不能从边缘代理执行数据收集。我将每条边的权重设置为2,但图表中显示的权重之和为0。

上述问题引出了一个重要的问题:边缘类与正常代理类有何不同?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-22 22:32:38

关于您的第一点:由于您将每个网络投影与一个特定的EdgeCreator实例相关联,因此可能会使EdgeCreator构造函数接受您希望该网络投影创建的链接类型。这可能会让事情变得更流畅一些。

在此处添加请求的示例:

代码语言:javascript
运行
复制
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;
    }

}

关于您的第二点:除非您将创建的边添加到上下文中,否则它不会显示为真正的代理。因此,在创建网络链接时,您可以将其添加到上下文中,它应该显示在代理表中并用于数据收集目的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58496344

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档