问题标签 [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.
r - 关于get_mon_arrivals的R simmer包问题
我目前正在学习如何在 R 中使用 simmer 包来模拟流程。我正在尝试使用 get_mon_arrivals 函数收集有关我已构建的模拟的信息。
我注意到运行此功能有些奇怪 - 当我运行时:
我得到了 2 个不同的表 - 正如预期的那样,第一个仅包含已完成客户的行,而第二个包含未完成客户的行,这些客户已生成但模拟在他们设法完成轨迹之前结束.
但如果我反过来写,意思是:
在这两种情况下,我都得到了完全相同的表格。我知道这并不重要,但我真的很想了解它为什么这样做。我知道我可以通过第一个选项轻松解决它,但我是一个喜欢了解他所做的事情的人。非常感谢您的帮助
arrays - ruby - 计算超市排队的时间
所以假设超市的自助结账台有一个队列。我正在尝试编写一个函数来计算所有客户结帐所需的总时间!
输入:
客户:代表队列的正整数数组。每个整数代表一个客户,其值是他们结账所需的时间。
n:一个正整数,结账台数。
输出:
该函数应返回一个整数,即所需的总时间。例子:
只有一个队列服务于许多收银台,队列的顺序永远不会改变。队列中的最前面的人(数组/列表中的第一个元素)一旦空闲就进入直到它。我试过这个,但它不能正常工作,我不知道如何让下一个人进入,直到它打开。
例如,测试
. 谢谢 :-)
python - SimPy - 无限运行时错误
我观察到 SimPy 事件调度的一些“奇怪”行为。
当一个 nan 值被用作env.timeout
方法中的延迟时,它有时会覆盖方法until = XXX
内部的参数env.run
。
我已经概述了一个最小的示例,以显示这种不一致的行为。如果您运行所有 3 个测试用例,您将看到测试 2 永远运行。
查看源代码,似乎是超时和调度之间的一些交互,但没有比这更进一步。
问:有人可以帮我理解,为什么until
当按特定顺序在timout
方法中输入空值时,参数会被覆盖?
python - 如何在模拟中识别对象(Python Simpy)
我正在使用 python 开发一个模拟。我研究了其他网站,但是,我还没有找到我要找的东西。我对以Resource
特定(可识别)方式从数组启动的方式感兴趣。我提供了我一直在运行的一个模拟的代码。
这个想法是我想生成多台洗衣机(从一个阵列并形成一个阵列),然后可以一个一个地选择它们。例如,我想生成washingmachine1
,washingmachine2
等。这样,我可以在必要时引用特定的元素,例如,我可以将特定的客户分配给washingmachine4
. 有人知道这样做的方法(以简单有效的方式)吗?非常感谢您的帮助。最好的
python - 无法在 SIMPY 中触发两个事件(python 中的模拟)
最近我了解了 SIMPY,我认为它可以为我的工作提供一些信息并提供决策背景非常有帮助。请注意,我对使用 python 编程很陌生,我知道基础知识,但我正在学习。
问题: 我正在一个集装箱码头工作,我们有三种移动方式:
- 从相关船只移动(大约每 120 秒产生一次移动。)
- 与仓库相关的移动(大约每 960 秒产生一次移动。)
- 与门相关的移动(大约每 800 秒产生一次移动。)
所有这些动作都以所描述的间隔同时“生成”。船只和仓库都有自己的运输工具。但是,上述所有步骤的目的地都是相同的。容器堆栈采用 FIFO 原则(先进先出),一次可以处理四个移动。一个动作大约需要 270 秒。
我想要实现的是通过更改资源量(船舶和仓库的运输次数以及闸门移动)来查看对集装箱堆内业务的影响。
我得到了适用于其中一个流程(VESSEL)的基本模拟,我现在正在尝试添加仓库流程,但是我被卡住了。当我使用下面的代码时,只会生成来自容器的移动:
上述代码的输出是:
然而,所需的输出将是:
我认为问题出在两个 while True 语句中,但我无法弄清楚如何正确处理这个问题。我一直在使用谷歌(可能不知道找到答案的正确术语)但没有成功。
r - R Simmer - 根据队列大小在罐子之间重新分配资源
我有一个慢炖 DES 的工作示例,用于简单的门诊服务。有高优先级和低优先级的患者,每个患者都有一个专门的诊所。高优先级诊所每天有 5 个时段,低优先级诊所每天有 1 个时段。这是测试代码:
我的问题是,在没有高优先级诊所插槽需求的日子里(或者不是所有 5 个都需要),有没有办法告诉 simmer 将其余插槽释放给低优先级资源?例如,高优先级诊所看到 2 名患者,但剩余的 3 个插槽被添加到低优先级诊所并通过 4 名患者?
然后,诊所需要在第二天恢复正常容量,但我认为我可以使用时间表而不是固定优先级来做到这一点。
我认为答案在于使用信号,但我无法理解它们。我还考虑过将两个诊所合并为一个锅,并使用优先级分配给更高优先级的患者。但这意味着我们可能会有几天看到零低优先级患者,这是不太可能的。
任何帮助都感激不尽!
python - 我可以使用 simpy 进行基于代理的模拟吗?
我知道 simpy 是一个基于过程的离散事件模拟框架。我有几个代理可能同时做不同的事情。我仍然可以使用 simpy 来模拟我的代理吗?例如,一辆汽车到达停车场。那么驱动程序就存在了。走到一个购物中心的入口处,进入。一些购物者可能会同时离开。也可以有几辆汽车同时到达停车场。当一个事件触发时,该事件使用env.timeout(time)
时间来执行。但是,这会增加环境的模拟时钟。因此,对于所有代理?有没有办法模拟这种情况?你能建议我一个模拟框架/库来模拟这种情况吗?
根据@Michael 的回答进行编辑:我确实使用env.process
. 这些进程中的 While 循环函数env.timeout
为代理创建提供了收益,并且还使用env.process(foo(A,B,C))
. 在这些过程中,我有几个yield env.process
. 他们里面又多了一些yield env.process
。我在用yield
在后面的功能上,因为代理必须等待事件完成。所有代理都在使用一些共享资源和存储或等待一些代理到达。不同类型的代理之间也存在一些关联。因此,我使用外部字典来存储有关代理、资源和商店的所有信息。我得到了一些有趣的结果,让我想到我是否使用正确的库或代码结构来实现我想做的事情。阅读@Michael的回答后,我相信我走在正确的轨道上。我可以启动多个代理创建过程,它们可以同时工作。
anylogic - 对anylogic中的不同任务使用相同的服务块
我目前正忙于一家医院的一个项目。我需要创建一个模拟模型来复制医院的流程。我对医院的一个柜台或服务台有疑问。服务台的工作人员需要执行两项不同的任务,具体取决于患者的类型。如何对服务块进行编程以执行两个不同的任务?现在,在这里输入图像描述我已经使用同一个工作人员将块分成两个不同的块。还有另一种方法可以解决这个问题吗?
r - R simmer:选择服务器的自定义逻辑
我正在建立一个simmer
通过无人机运送疫苗的模拟。仿真部分的伪代码是:
- 在一个地理区域中生成 N 个“需求点”,代表需要疫苗的位置。做成一个数据框。将到达时间添加为数据框列。添加优先级列 - 先到先得。
- 使用 kmeans 聚类在整个地理范围内查找 K 个无人机站点位置
- 生成一个 N x K 矩阵,表示从每个无人机站点到每个请求点的行程时间
在模拟中,疫苗交付是到达,无人机是资源(服务器容量 1,无限队列容量)。我希望模拟使用这个资源选择逻辑:
- 当到达发生时,确定哪些无人机可用。其中,选择旅行时间矩阵确定的旅行时间最短的无人机。
- 如果当前使用了所有无人机,则新来的人将被放入一个共同的队列中。每当有任何无人机可用时,公共队列中的到达优先,队列中最早到达的优先。这可能意味着疫苗不是从最近的无人机站运送的。
- 一旦到达
seize_selected
选定的无人机,timeout
对于旅行时间,然后release_selected
是该无人机。
我正在尝试调整使用 simmer 包(或替代方案)调度资源时使用路由逻辑中的逻辑,但未按预期工作。
任何帮助表示赞赏。对我来说真正棘手的部分是将到达的人排成一个共同的队列,然后选择最快的无人机。
我当前的模拟代码是: