我试图模拟我们有 5 台机器出现在 1 -> 3 -> 1 情况下的情况。即中间的3个并行操作以减少它们所花费的有效时间。
我可以通过创建一个值为 3 的 SimPy 资源来轻松模拟这一点,如下所示:
simpy.Resource(env, capacity=3)
Run Code Online (Sandbox Code Playgroud)
然而,在我的情况下,这三种资源中的每一种都略有不同,有时我希望能够使用其中的任何一种(当我操作时)或预订一个特定的(当我想清理时)。基本上这三台机器以不同的速度慢慢地变脏并且运行得更慢,我希望能够模拟这些,并且在一台机器太脏时也能进行清洁。
我尝试了几种模拟方法,但每次都遇到问题。
第一个是当它预订资源时,它也预订了 3 台机器(A、B、C)全局标志之一和一个标志本身来告诉它它正在使用哪台机器。这有效,但它并不干净,并且很难理解随处可见的巨大 if 语句发生了什么。
第二个是将其建模为三个独立的资源,然后尝试等待并使用以下内容请求 3 台机器中的一台:
reqA = A.res.request()
reqB = B.res.request()
reqC = C.res.request()
unitnumber = yield reqA | reqB | reqC
yield env.process(batch_op(env, name, machineA, machineB, machineC, unitnumber))
Run Code Online (Sandbox Code Playgroud)
但这不起作用,我无法找出最好的方法来看待产生一个选择。
模拟这种情况的最佳方法是什么。为了完整起见,这是我要找的:
到目前为止,这是我尝试将每个模型建模为单独资源的最新版本
class Machine(object):
def __init__(self, env, cycletime, cleantime, k1foul, k2foul):
self.env = env
self.res = simpy.Resource(env, 1)
self.cycletime = cycletime
self.cleantime …Run Code Online (Sandbox Code Playgroud) 我有一个包含多列的数据框,其中索引是时间戳,另外三个是阶段编号指示符,其余的只是数据.我想要做的是找到三个指标列属于同一阶段类型,其中包含一个数字列表.
So my data frame looks like this:
Index PhaseA PhaseB PhaseC DataCol
01/07/2013 00:00:00 400 415 425 1.2
01/07/2013 00:01:00 415 420 410 1.2
01/07/2013 00:02:00 415 423 415 1.2
01/07/2013 00:03:00 415 423 420 1.2
01/07/2013 00:04:00 415 423 423 1.2
01/07/2013 00:05:00 415 423 425 1.2
Run Code Online (Sandbox Code Playgroud)
因此,在这个简化的情况下,我正在寻找所有三个相位数值是415,423,427和432的值.这意味着我想在这个实例中得到的行是2分钟和4分钟.
我最好是寻找这个已经发生的日期和时间,以便我可以使用其他数据列进一步调查它.此外,这不太可能只是我必须这样做的时间,所以能够改变我感兴趣的数字和列将是好的.
到目前为止,我已经设法使用类似于以下代码:
df[ (df["PhaseA"] == (415))]
and then for multiple ones:
df[(df["PhaseA"] == (415))|(df["PhaseA"] == (420))]
Run Code Online (Sandbox Code Playgroud)
但是这会很快变得非常混乱,以后很难修改.
任何帮助将不胜感激,因为我对python和编程一般都比较新.