Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Repast聚合数据集,但在Repast Simphony中分别针对每个实例_Java_Simulation_Mean_Repast Simphony - Fatal编程技术网

Java Repast聚合数据集,但在Repast Simphony中分别针对每个实例

Java Repast聚合数据集,但在Repast Simphony中分别针对每个实例,java,simulation,mean,repast-simphony,Java,Simulation,Mean,Repast Simphony,我正在使用框架进行模拟。假设我有以下课程: public class Generator { private String name; private Random random; public Generator(String name) { this.name = name; this.random = new Random(); } public double getValue() { retur

我正在使用框架进行模拟。假设我有以下课程:

public class Generator {

    private String name;
    private Random random;

    public Generator(String name) {
        this.name = name;
        this.random = new Random();
    }

    public double getValue() {
        return random.nextDouble();
    }

}
然后,我创建该类的几个实例,将它们添加到上下文并运行模拟:

public class Builder implements ContextBuilder<Object> {

    @Override
    public Context build(Context<Object> context) {
        context.add(new Generator("Gen1"));
        context.add(new Generator("Gen2"));
        context.add(new Generator("Gen3"));

        return context;
    }

}
如果我使用Method Data Source
Generator.getValue
创建新的聚合(平均)数据集并重复每个勾号,我会得到一个大的值列表:

Tick,Mean
1,0.365
2,0.456
3,0.728
4,0.091
...
其中,每个值都是平均值,但所有生成器的指定刻度值的平均值,而不是一个生成器的所有刻度值的平均值。有没有什么方法可以使用Repast Simphony做到这一点

编辑:当我想使用自定义数据源时,添加
类生成器实现AggregateDataSource
和添加方法:

@Override
public String getId() {
    return name;
}

@Override
public Class<?> getDataType() {
    return Double.class;
}

@Override
public Class<?> getSourceType() {
    return Generator.class;
}

@Override
public Object get(Iterable<?> objs, int size) {
    return 7.0; // Not mean, only mock value for testing.
}

@Override
public void reset() {
    // TODO Auto-generated method stub
}
@覆盖
公共字符串getId(){
返回名称;
}
@凌驾
公共类getDataType(){
返回Double.class;
}
@凌驾
公共类getSourceType(){
返回生成器.class;
}
@凌驾
public Object get(Iterable objs,int size){
返回7.0;//不是平均值,仅用于测试的模拟值。
}
@凌驾
公共无效重置(){
//TODO自动生成的方法存根
}
出现错误:


我认为您可以通过定义自定义聚合数据源来实现这一点。您可以通过“自定义数据源”选项卡添加一个,提供一个实现AggregateDataSource的类

在get()方法中,迭代所有生成器对象,并按名称获取平均值。每个生成器都需要AggregateDataSource实现。如果您使用一些静态变量,您可能可以对其进行编码,这样您只需迭代一次,就可以获得该刻度的所有生成器的平均值。不过,在你让它工作之前,我会一直这样做

更新:


您应该为CustomDataSource创建一个不同的类以避免混淆。get中的iterable应该允许您迭代生成器的所有实例。另外,当您需要提供完全限定名称时——包+类名——例如x.y.MyCustomDataSource

您是在模拟结束时为每个实例寻找一个值(即平均值),还是在模拟结束时为每个实例寻找一个运行平均值?@J.Ozik我在模拟结束时为每个实例寻找一个值(平均值)。谢谢。我尝试了AggregateDataSource,但出现了错误。我在我的原始帖子末尾添加了更多细节。要将该类用作自定义数据源,我还需要执行其他步骤吗?您需要使用完全限定名--包名+类名。
@Override
public String getId() {
    return name;
}

@Override
public Class<?> getDataType() {
    return Double.class;
}

@Override
public Class<?> getSourceType() {
    return Generator.class;
}

@Override
public Object get(Iterable<?> objs, int size) {
    return 7.0; // Not mean, only mock value for testing.
}

@Override
public void reset() {
    // TODO Auto-generated method stub
}