问题标签 [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.
c - 使用二进制堆实现的优先级队列的事件驱动仿真
我需要模拟给定的一组任务的执行。这意味着您需要跟踪在任何给定时间点哪些任务处于活动状态,并在它们完成时将它们从活动列表中删除。
我需要使用优先级队列来解决这个问题,使用二进制堆来实现。
输入由一组按开始时间递增顺序给出的任务组成,每个任务都有一个相关的持续时间。第一行是任务数,例如
这意味着有 3 个任务。第一个从时间 2 开始,到 7 (2+5) 结束。第二个从 4 开始,到 27 结束。第三个从 7 开始,在 11 结束。
我们可以跟踪活动任务的数量:
我需要找到:
- 在任何给定时间的最大活动任务数(在这种情况下为 2)和
- 此处计算的整个持续时间的平均活动任务数为:
[ 0*(2-0) + 1*(4-2) + 2*(11-4) + 1*(27-11) ] / 27
我编写了以下代码以将时间值读入结构:
我想了解如何将其实现为堆优先级队列并从堆中获取必要的输出。
r - 用于创建具有容量的多个资源的 While 循环
我需要在 Simmer 模拟包中创建容量为 2 的 52 个资源。我试图通过使用为我创建这些资源的 while 循环来做到这一点,而不是自己创建每个资源。这个想法是我有一个如下所示的while循环。在每个循环中,应创建一个名为 Transport_vehicle1、Transport_vehicle2、...、Transport_vehicle52 的资源,容量为 2。
现在我不知道如何在我要创建的资源名称中插入数字 i
有人可以帮我吗?谢谢!
python - 如何使用 simpy 和 python 对多状态系统(具有多种状态的机器:工作、失败、工作不正常)进行建模?
我正在尝试对具有许多状态的机器进行建模,类似于马尔可夫链,但状态之间的转换是随机变量(从一个状态转移到另一个状态的时间)。我正在尝试使用 simpy 在 python 上执行此操作,但老实说我迷路了。如果有人使用 simpy 并知道如何进行,我将不胜感激!先感谢您,
c - 事件驱动模拟:将新事件插入优先级队列时,旧事件是否变得多余?
我在 C 中创建了一个基于二进制堆的优先级队列。我正在尝试创建一个离散事件模拟。
以下是我对事件模拟的理解:
假设我的优先级队列中有 10 个值,每个值代表一个事件。对于 PQ 中的每个值,程序将出列一个值并再插入 10 个值。换句话说,该程序正在为这 10 个事件进行新的计算。
但是 PQ 中的旧值会发生什么变化?由于每个事件都有新的值排队,以前的值不应该变得多余吗?不应该将它们从 PQ 中删除以使 PQ 不会变得太大吗?
python - 如何提高布朗运动蒙特卡罗模拟速度?
我想让我的代码运行得更快,以进行更多的迭代和运行。现在我的代码太慢了,但我不知道要改变什么来加快它。我首先编写了动力学蒙特卡罗模拟,然后将其编辑为布朗运动模拟。我当前的代码无法处理 10,000 次运行,每次运行 10,000 次迭代,这是必需的。
r - Simmer in R:基于队列长度和持续时间对服务器容量的变化进行建模
我正在尝试如下建模系统:
到达根据预定义的时间表生成,并且具有由数据帧提供的已知处理时间。在模拟开始时有一个容量等于 min_daemons 的服务器。到目前为止很简单,但 nxt 部分变得棘手:根据以下算法,此容量可以在整个模拟过程中的间隔 [min_daemons , max_daemons] 上变化:
如果在模拟过程中的任何时候,队列长度达到或超过 incr_count 的值,并且在 incr_delay 中保持在此水平或以上,则向主服务器添加一个额外的容量单位。这可能随时发生,只要容量不超过 max_daemons。
反之亦然。如果在任何时候,队列长度小于 decr_count,并且在 decr_delay 中保持在此级别或以下,则删除一个容量单位,可能会降至 min_daemons 级别。
当满足上述更改服务器容量的条件时,我为所有到达分支创建了一个轨迹。这样做的问题是容量的变化总是与到达事件相关联。我真正想要的是一个独立于到达轨迹的过程,它始终监控队列长度并进行适当的容量更改。
我考虑过使用某种虚拟到达过程来完成此操作,例如在模拟的每一秒,但我不确定是否可以防止虚拟到达与真实到达竞争服务器容量。
我需要做更多的调试来验证模拟是否按我的预期工作,但我完全理解这个模型是错误的。我希望该设计不会过多地损害其有效性,但我也希望获得有关如何设计更符合现实生活的东西的反馈。
r - 使用 simmer 包预加载队列
我想开始一个预加载队列的慢炖模拟。我想模拟制造车间的一天,队列中已经有几个工作,然后在白天将更多工作添加到队列中。这是我开始一天的工作代码,队列中没有任何内容。
如何使用 100 个作业预加载批处理步骤的队列?
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 的回答),是的,这是一个已知错误;将服务更改为不抢占其他任务暂时解决了该错误,但如果我希望任务能够抢占,这将是一个问题。
r - R Simmer:指定非标准路由算法时出现“无到达运行”错误
考虑下面指定的系统和路由算法: 系统图像。让我们首先定义一些在模拟中有用的属性:
现在,让我们定义路由算法和之后的轨迹。
我们可以尝试完全在克隆函数中表达路由算法,如下所示:
我们现在收到以下问题:
我认为这与在我的“if”和“else if”语句的条件下调用函数有关,尽管我不确定我到底做错了什么。
r - 如何实现系统中只有指定数量的事件(使用 simmer R 包)?
我只是想模拟一个机器维修系统。输入: 5 台触发停机事件的机器,2 名维修人员处理停机事件
注意:一旦机器停机(由于故障而无法工作),add_generator 函数将不再生成“停机事件”,因为机器已经停机/损坏(因此不能产生任何停机事件!)。
到目前为止,这是我的简单方法(它有效,但没有上述限制):
将不胜感激每一个提示如何做到这一点!谢谢, 安德烈亚斯