问题标签 [simpy]

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 投票
1 回答
1202 浏览

simulation - 如何让一个进程等待多个资源?

我目前正在使用 SimPy 对服务器进程进行建模和模拟,我希望该进程根据从何处接收到此消息来执行不同的操作。

SimPy 文档展示了如何等待多个事件:例如:yield event1 | 事件2

但是,我目前正在尝试等待多个商店提供资源。

场景如下: 服务器 S 正在等待来自各种渠道的消息。这些渠道中的每一个都可能具有不同的功能,这些功能会影响消息到达它所花费的时间。

这是有问题的代码:

其中 inchannel 是一个 Store 数组,用于对服务器的各种输入通道进行建模。

我遇到的问题是它似乎只接受来自其中一个频道的消息,无论它首先收到哪个频道。在它收到第一条消息后,它接受来自该通道的消息并忽略其他消息。

我还尝试了以下方法:

在这种情况下,它只接收来自 inchannel[0]

0 投票
1 回答
202 浏览

python - 如何为任务优先级建模?

我正在尝试模拟一堆共同属于同一个通用项目的任务。
任务具有持续时间和优先级(由必须在当前任务之前完成的任务列表表示)。

例如:

这意味着任务 A、C 和 D 可以同时执行,但任务 B 应该在任务 A 之后执行,任务 E 应该在任务 D 之后执行。

我写了这段代码:

Task 对象中的 Completed 属性,用于了解当前任务是否已完成或已完成。(我试图用一个没有不同结果的布尔值来做到这一点。)

taskB 将 taskA 作为先例任务。这意味着 taskB 应该在 taskA 完成之前启动,但这是我运行它时的输出:

我不明白为什么 taskB 无法运行。

-------------------------------------------------- -------------------------

解决了

我使用了“start_delayed”方法,该方法在 Simpy 的 simpy.util 模块中可用。根据当前任务是否有以前的任务要执行,每个任务的“动作”是简单的过程还是延迟的过程。
每个任务的延迟在 add_precedences 和 estimate_delays 中计算,但有必要将先前任务的持续时间与当前任务的先前任务相加。
这是最终代码:

在这种情况下,项目有 3 个任务('A'、'B'、'C'),这是树:

B 必须从时间开始:4(因为那是 A 的持续时间)。而C,必须从时间开始:9(因为那是B+A的持续时间)。
为了知道哪个任务已经完成,我创建了一个列表,每个任务都添加了自己的 id。如果它自己的 id 在该列表中,则每个任务都会从环境中删除。

0 投票
2 回答
421 浏览

python - 如何识别 SimPy 仿真中耗时的任务?

我想加快 SimPy 模拟(如果可能的话),但我不确定插入计时器以查看需要很长时间的最佳方法。

有没有办法做到这一点?

0 投票
2 回答
574 浏览

python - 简单; 如何合并未知数量的中断

我正在使用 python 和 simpy 进行模拟。在模拟中,一个实例(中断)可以被另一个实例(中断器)中断。我对每个中断使用嵌套的 try except 语句。如果我知道最大中断次数,嵌套的 try except 语句就可以工作。

问题是我不知道会发生多少次中断(可能是 1,2,3,...)。我不知道如何处理被中断次数未知的对象。

下面的代码适用于三个中断,但是如果包含第四个中断(由于三个嵌套的 try except 语句),则会发生故障。

是否可以使代码更通用,以便处理未知数量的中断?

任何帮助深表感谢。

代码:

输出:

使用的版本:

  • 蟒蛇:2.7.3
  • 简单:3.0.7
0 投票
0 回答
82 浏览

python - 现有python程序的评估/模拟

我实施了一个分布式监控解决方案,应该对其进行分析。因此,最好扩展监控代理的数量并评估每台主机(或网络)上产生的开销(CPU、内存、磁盘、网络)。不幸的是,我没有足够的物理节点。因此,我主要尝试使用mininet,但是我遇到了负面的计时和调度效果。此外,在仅在一台物理主机上进行仿真期间,很难调查主机上的 CPU 或内存使用情况。

因此,我尝试了 simpy。但我无法监控进程的 CPU、内存、磁盘和网络使用情况。有没有可能这样做?最好有一个不依赖于主机资源和正确时间的评估灵魂,就像模拟一样。但我不确定simpy是否是一个好的决定,或者这个工具如何提供这个。

0 投票
0 回答
91 浏览

python - 为什么我不能在 SimPy 中导入类

立即学习 SimPy。我正在使用第一个示例代码,链接https://simpy.readthedocs.org/en/latest/topical_guides/process_interaction.html

这部分代码是以交互方式编写的。我想将类 EV 放入一个名为 Ev.py 的单独 python 文件中(如下所示)。

ev.py

然后我导入文件。我这样运行它:

说到步骤:ev=Ev.EV(env),就说明有错误:

回溯(最近一次通话最后):

文件“stdin”,第 1 行,在模块中

TypeError:此构造函数不带参数

0 投票
2 回答
702 浏览

python - 将 Simpy 模拟时间链接到 Python 日历以执行工作日特定操作

我想用 SimPy 构建一个生产网络的仿真模型,包括以下关于时间的特性:

  • 工厂周一至周五工作(两班 8 小时)
  • 除周日外,重型卡车全天行驶
  • 轻型卡车在一周中的所有日子都在行驶,包括周日

为此,我想构造一个文档中给出的 BroadcastPipe 并结合超时使对象在它们不工作的日子里等待(对于植物来说,需要额外的逻辑来模拟班次)。这个 BroadcastPipe 只会计算天数(假设每天 24*60 分钟)然后说"It's Monday, everyone"。然后,对象(工厂、轻型和重型卡车)将单独处理这些信息并采取相应的行动。

现在,我想知道是否有一种优雅的方法可以将模拟时间链接到常规 Python Calender 对象,以便轻松访问一周中的几天。这对于银行假期和不同的开始日期等清晰度和增强功能很有用。你有什么建议如何做到这一点?(或关于如何更好地建模的一般建议?)。提前致谢!

0 投票
1 回答
230 浏览

simpy - SimPy 3 - 终止作业时中断

我的代码中有一个中断,有时可以工作,有时会给出以下错误消息。

RuntimeError: <Process(executeJobs) object at 0x7f3542880890> has terminated and cannot be interrupted.

我已检查该对象是否仍然存在,为什么我仍然收到此错误?

我也很高兴收到http://simpy.readthedocs.org/以外的任何其他资源,因为我已经多次阅读文档。

谢谢!

0 投票
1 回答
1009 浏览

python - 如何设置简单进程回调的优先级?

在 simpy 中触发进程的默认顺序似乎依赖于它们的创建顺序?我想明确地对流程进行排名,以便以精确的顺​​序触发它们,而不管它们是何时创建的。如果你需要一个例子,这里有一个包含 3 个过程的模拟:吃食物、补充盘子、取出盘子。该eat()过程触发plateEmpty事件,期望它被重新填充。但是,如果该removePlate()过程发生在之前refillPlate(),则无法进行重新填充。我希望重新填充总是首先发生。我可以强制执行的唯一方法是订购第 44 行和第 45 行。还有其他方法吗?

[PS:我知道优先资源,但这不是我想要的。]

0 投票
1 回答
1474 浏览

python - 环境简单错误

我已经安装了 Simpy,并且我使用 Python 3.5。我有同样的错误:

它让我可以导入 simpy,但是当我这样做env = simpy.Environment()时会打印此错误。

我已经尝试卸载它,重新安装,在终端中使用,在 Python 的 IDLE 中,在其他 IDLE 中......

整个代码是(来自教程):

然后错误弹出。

编辑(已解决):

我在同一个文件夹中有一个名为 simpy.py 的文件。我删除了它,现在可以完美运行。现在的代码是:

和输出: