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

Repast Simphony:将全局行为调度为具有随机间隔的泊松过程

夏才
2023-03-14

我有一个功能模型,我想强迫一个随机代理在不同的时间间隔内改变状态,模型为泊松到达过程。我根据FAQ设置了一个全局行为,在Build()中包含一个如下所示的块(其中a和b在parameters.xml中外部化):

ISchedule schedule = RunEnvironment.getInstance().getCurrentSchedule();
ScheduleParameters arrival = ScheduleParameters.createPoissonProbabilityRepeating(a, b, 1);
schedule.schedule(arrival , this, "arrivalEvent");

然后我有一个上下文方法,看起来像这样:

public void arrivalEvent() {
    // stuff
    double tick = RunEnvironment.getInstance().getCurrentSchedule().getTickCount();
    System.out.println("New arrival on tick: " + tick);
}

这似乎是有效的,除了它从调试文本中显示在所有重复上对b使用相同的值。是否有办法让每个重复使用新的随机绘制?或者有其他(更好的)方法来实现这一点?

共有1个答案

邹涵畅
2023-03-14

如果您希望b每次都有所不同,一种方法是在arrivalEvent本身中重新安排arrivalEvent。最清晰的方法是将arrivalEvent实现为实现IAction的类。

public class ArrivalEvent implements IAction {
    
    private Poisson poisson;
    
    public ArrivalEvent(Poisson poisson) {
        this.poisson = poisson;
    }
    
    public void execute() {
        // execute whatever the actual arrival event is
        
        
        // reschedule
        double next = poisson.nextDouble() + RunEnvironment.getInstance().getCurrentSchedule().getTickCount();
        RunEnvironment.getInstance().getCurrentSchedule().schedule(ScheduleParameters.createOneTime(next, 1), this);
    }
}

并第一次安排它,比如

Poisson poisson = RandomHelper.getPoisson();
double next = poisson.nextDouble();
RunEnvironment.getInstance().getCurrentSchedule().schedule(ScheduleParameters.createOneTime(next, 1), new ArrivalEvent(poisson));

尼克

 类似资料:
  • 我如何将它转换成一个‘美国/纽约’时区感知气流DAG,它将以同样的方式运行? 我在前面问了一个关于Airflow中的时区感知DAG的问题,但在答案或Airflow文档中,我不清楚如何从具有和的的DAG跳转,该DAG模仿cronjob。 我目前正尝试将DAG与文件一起使用,如下所示:

  • 问题内容: 我需要模拟泊松等待时间。我发现了许多模拟到达次数的示例,但是在给定平均等待时间的情况下,我需要模拟一次到达的等待时间。 我一直在寻找这样的代码: 但这是到达的次数,不是到达的时间。 效率优于准确性,这是因为功耗比时间更重要。我使用的语言是Java,如果该算法仅使用Random类中可用的方法,那将是最好的选择,但这不是必需的。 问题答案: 到达之间的时间是指数分布,您可以使用以下公式生成

  • 我试图生成8个范围内的随机数,例如1到100。我生成的很好,但我需要生成随机数,所有生成的随机数和最小-最大范围值之间的特定差异被排除。假设在1到100中,我必须生成2,12,22,32,42,52,62,72的数字。不管怎样,我都可以生成这样的随机数。 提前谢谢。

  • 我正在创建一个这样的流程实例: 它总是返回一个processInstance,但有时(看似随机)返回的流程实例在数据库中不存在: 我还记录了Mariadb查询,我注意到实例不存在的时间;数据库中没有记录插入查询,因此没有插入流程实例,然后删除。 这些问题在迁移到activiti6后开始出现。此外,我正在使用activiti spring boot starter basic

  • 问题内容: 这是关于日期的另一个SQL问题。’‘ 我正在使用PHP和Postgres构建日历应用程序,以显示跨越数天,数周甚至数月的事件。每个事件都有一个开始日期和一个结束日期,按范围选择它们不是问题。但是,如果Postgres可以在每周的第一天拆分多周的活动,这对我很有用。有人告诉我可以使用和来完成此操作,但是我对SQL的理解还不够好。 问题是:可以做到这一点,精确的查询是什么样的?目前我正在使

  • 我必须调用RESTendpoint(使用Java)来检索响应。这些配置包括 totalTimeAvailableToCheck=15秒,NoOfAttempts=3,intervalInAttempts=3秒。 因此,假设每隔3秒就会调用一个endpoint。如果我得到了所需的响应,那么完成执行,否则,每隔3秒继续尝试,接下来的3次尝试。主线程上所有这些的总等待时间不应超过15秒。因为resten