当前位置: 首页 > 知识库问答 >
问题:

RepastJava:创建多种类型自定义边缘的问题

阳修永
2023-03-14

最初只创建一个自定义边缘的解决方案是:Repast Java:创建一个自定义边缘代理来安排特定的操作

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

2).给定Zombie模型中的上述示例,我注意到通过CustomEdgeCreator方法创建自定义边缘并没有使边缘代理类在GUI中可见,这不方便跟踪与边缘代理关联的相关属性。

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

以上问题引出了一个重要的问题:edge类与普通代理类有何不同?

共有1个答案

柳钟展
2023-03-14

关于第一点:由于将每个网络投影与特定的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;
    }

}

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

 类似资料:
  • 我有一个模型,在不同种类的其他代理(对象)之间有很多边(链接)。我想将这些边建模为代理,在那里我可以添加属性并安排操作。看看如何做这项工作的简单例子很有帮助? 更新:我按照您的说明运行模型时出错: 我认为它受到僵尸中这种方法的影响:(但我不知道哪里错了,因为错误消息没有提供具体的说明)

  • 本文向大家介绍neo4j 创建边缘,包括了neo4j 创建边缘的使用技巧和注意事项,需要的朋友参考一下 示例            

  • 该到你发挥创意的时间了。你已经知道了各种不同的 Puppet 资源类型: 包(package), 文件(file)、用户(user),等等。 通常情况下,你既可以组合使用这些内置资源类型做你需要做的一切, 又可以通过一个自定义 define 作为一种资源(以内置资源同样的方式)来使用 (参见第 4 章 书写更优质的配置清单 中有关 define 的内容)。 但是,如果你需要创建自己的资源类型,Pu

  • Youtrack上有几种类型,如OwnedField[1]、Group[1]等。 是否可以创建一个自定义类型,该类型具有自定义字段,如ownedField具有链接到用户的自定义字段? 我们希望将类似的行为应用于ownedField,其中,当您选择一个子系统字段(类型为ownedField)时,它会“自动”用与该子系统关联的用户填充问题的字段“受理人”。

  • 我正在使用一个简单的Gremlin RESTful服务器,并在POST请求中发送简单的命令。例如,如果我想创建边(以我的特定格式),我有以下模板: const nodeCommandFormat=“graph.addVertex('%s','%s','evid','%s');” ; 用这样的链式命令发送一个长字符串效果很好,所有的边都被创建了。我的问题是:为什么它不适用于边缘创建?直到现在,我尝试

  • 我正在尝试从woocommerce为预订表单创建一个自定义变量product type,它基于一组变量具有不同的定价。 我已成功添加自定义产品类型。但是,如何复制可变产品针对不同属性定价的相同选项。似乎找不到任何与可变产品类型相关的资源。