问题标签 [event-simulation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1430 浏览

c - 使用二进制堆实现的优先级队列的事件驱动仿真

我需要模拟给定的一组任务的执行。这意味着您需要跟踪在任何给定时间点哪些任务处于活动状态,并在它们完成时将它们从活动列表中删除。

我需要使用优先级队列来解决这个问题,使用二进制堆来实现。

输入由一组按开始时间递增顺序给出的任务组成,每个任务都有一个相关的持续时间。第一行是任务数,例如

这意味着有 3 个任务。第一个从时间 2 开始,到 7 (2+5) 结束。第二个从 4 开始,到 27 结束。第三个从 7 开始,在 11 结束。

我们可以跟踪活动任务的数量:

我需要找到:

  1. 在任何给定时间的最大活动任务数(在这种情况下为 2)和
  2. 此处计算的整个持续时间的平均活动任务数为:

[ 0*(2-0) + 1*(4-2) + 2*(11-4) + 1*(27-11) ] / 27

我编写了以下代码以将时间值读入结构:

我想了解如何将其实现为堆优先级队列并从堆中获取必要的输出。

0 投票
1 回答
57 浏览

r - 用于创建具有容量的多个资源的 While 循环

我需要在 Simmer 模拟包中创建容量为 2 的 52 个资源。我试图通过使用为我创建这些资源的 while 循环来做到这一点,而不是自己创建每个资源。这个想法是我有一个如下所示的while循环。在每个循环中,应创建一个名为 Transport_vehicle1、Transport_vehicle2、...、Transport_vehicle52 的资源,容量为 2。

现在我不知道如何在我要创建的资源名称中插入数字 i

有人可以帮我吗?谢谢!

0 投票
1 回答
136 浏览

python - 如何使用 simpy 和 python 对多状态系统(具有多种状态的机器:工作、失败、工作不正常)进行建模?

我正在尝试对具有许多状态的机器进行建模,类似于马尔可夫链,但状态之间的转换是随机变量(从一个状态转移到另一个状态的时间)。我正在尝试使用 simpy 在 python 上执行此操作,但老实说我迷路了。如果有人使用 simpy 并知道如何进行,我将不胜感激!先感谢您,

0 投票
1 回答
169 浏览

c - 事件驱动模拟:将新事件插入优先级队列时,旧事件是否变得多余?

我在 C 中创建了一个基于二进制堆的优先级队列。我正在尝试创建一个离散事件模拟。

以下是我对事件模拟的理解:

假设我的优先级队列中有 10 个值,每个值代表一个事件。对于 PQ 中的每个值,程序将出列一个值并再插入 10 个值。换句话说,该程序正在为这 10 个事件进行新的计算。

但是 PQ 中的旧值会发生什么变化?由于每个事件都有新的值排队,以前的值不应该变得多余吗?不应该将它们从 PQ 中删除以使 PQ 不会变得太大吗?

0 投票
1 回答
475 浏览

python - 如何提高布朗运动蒙特卡罗模拟速度?

我想让我的代码运行得更快,以进行更多的迭代和运行。现在我的代码太慢了,但我不知道要改变什么来加快它。我首先编写了动力学蒙特卡罗模拟,然后将其编辑为布朗运动模拟。我当前的代码无法处理 10,000 次运行,每次运行 10,000 次迭代,这是必需的。

0 投票
1 回答
449 浏览

r - Simmer in R:基于队列长度和持续时间对服务器容量的变化进行建模

我正在尝试如下建模系统:

到达根据预定义的时间表生成,并且具有由数据帧提供的已知处理时间。在模拟开始时有一个容量等于 min_daemons 的服务器。到目前为止很简单,但 nxt 部分变得棘手:根据以下算法,此容量可以在整个模拟过程中的间隔 [min_daemons , max_daemons] 上变化:

如果在模拟过程中的任何时候,队列长度达到或超过 incr_count 的值,并且在 incr_delay 中保持在此水平或以上,则向主服务器添加一个额外的容量单位。这可能随时发生,只要容量不超过 max_daemons。

反之亦然。如果在任何时候,队列长度小于 decr_count,并且在 decr_delay 中保持在此级别或以下,则删除一个容量单位,可能会降至 min_daemons 级别。

当满足上述更改服务器容量的条件时,我为所有到达分支创建了一个轨迹。这样做的问题是容量的变化总是与到达事件相关联。我真正想要的是一个独立于到达轨迹的过程,它始终监控队列长度并进行适当的容量更改。

我考虑过使用某种虚拟到达过程来完成此操作,例如在模拟的每一秒,但我不确定是否可以防止虚拟到达与真实到达竞争服务器容量。

我需要做更多的调试来验证模拟是否按我的预期工作,但我完全理解这个模型是错误的。我希望该设计不会过多地损害其有效性,但我也希望获得有关如何设计更符合现实生活的东西的反馈。

0 投票
1 回答
80 浏览

r - 使用 simmer 包预加载队列

我想开始一个预加载队列的慢炖模拟。我想模拟制造车间的一天,队列中已经有几个工作,然后在白天将更多工作添加到队列中。这是我开始一天的工作代码,队列中没有任何内容。

如何使用 100 个作业预加载批处理步骤的队列?

0 投票
2 回答
213 浏览

anylogic - 版本 8 中是否可以使用 AnyLogic 结束任务抢占?

我在 AnyLogic 上运行一个仿真模型。我最近更新到版本 8 University 8.4.0。在我之前,我运行模拟没有问题。现在我在运行模拟一段时间后收到以下错误:

com.anylogic.libraries.processmodeling.ResourceUnitEndOfShiftTask cannot be cast to com.anylogic.libraries.processmodeling.ResourceUnitEntityServiceSubtask

我有意的建模选择是让员工在轮班结束时放弃他们正在做的事情。因此,对于模型中的三个资源池,我已将“班次结束”可能抢占字段设置为 True。但是,当我将这些更改为 false 时,模型运行时没有错误。有没有办法在 AnyLogic 版本 8 中完成任务抢占?

我试过谷歌搜索错误消息,但没有得到任何相关结果。我还尝试在 AnyLogic 文档中查找 ResourceUnitEndOfShiftTask 和 ResourceUnitEntityServiceSubtask,但找不到它们的任何条目。

*更新:我联系了 AnyLogic 支持(感谢 Felipe 的回答),是的,这是一个已知错误;将服务更改为不抢占其他任务暂时解决了该错误,但如果我希望任务能够抢占,这将是一个问题。

0 投票
1 回答
281 浏览

r - R Simmer:指定非标准路由算法时出现“无到达运行”错误

考虑下面指定的系统和路由算法: 系统图像。让我们首先定义一些在模拟中有用的属性:

现在,让我们定义路由算法和之后的轨迹。

我们可以尝试完全在克隆函数中表达路由算法,如下所示:

我们现在收到以下问题:

我认为这与在我的“if”和“else if”语句的条件下调用函数有关,尽管我不确定我到底做错了什么。

0 投票
1 回答
35 浏览

r - 如何实现系统中只有指定数量的事件(使用 simmer R 包)?

我只是想模拟一个机器维修系统。输入: 5 台触发停机事件的机器,2 名维修人员处理停机事件

注意:一旦机器停机(由于故障而无法工作),add_generator 函数将不再生成“停机事件”,因为机器已经停机/损坏(因此不能产生任何停机事件!)。

到目前为止,这是我的简单方法(它有效,但没有上述限制):

将不胜感激每一个提示如何做到这一点!谢谢, 安德烈亚斯