我正在寻找一种数据类型,以帮助我在流动的时间内建模资源可用性
我从多个方面讨论过这个问题,但总是回到根本问题上来,即不知道一种数据类型可以随着时间的推移对像整数这样简单的东西进行建模
我可以将我的约会转换为时间序列事件(例如约会到达意味着-1可用性,约会离开意味着+1),但我仍然不知道如何处理这些数据,以便我可以提取出可用性大于零的时段
有人以注意力不集中为由投了接近票数的一票,但我的目标似乎很奇怪,所以我将尝试以图形方式解释这个问题。我试图推断一段时间内,活动作业的数量低于给定的容量
将已知并行容量范围(如9-6之间的3)和具有可变开始/结束的作业列表转换为可用时间的时间范围列表
对我来说,这个问题可以用一系列布尔值来表示。为了便于解释,让我们假设每个潜在工作的时间是15分钟的倍数。因此,从9点到6点,我们有135个“时间段”需要跟踪可用性。我们用布尔变量表示一个队列在一个时隙中的可用性:
False
如果该队列正在处理一个作业,True
如果该队列可用首先,我们为每个队列以及输出创建一个时隙列表。因此,每个队列和输出都有时隙tk,1<;=k<;=135.
然后,给定五个作业队列,qj,1<;=j<;=5,如果存在至少一个qj,其中索引k处的时隙列表为^{,则我们说tk在时间k处是“打开的”
我们可以在独立Python中实现这一点,如下所示:
然后,我们可以假设存在某个函数
dispatch (length)
,该函数将作业分配给可用队列,将queue[q]
中的适当插槽设置为False
最后,要更新输出,我们只需调用:
或者,为了提高效率:
然后,只要在
dispatch()
为新作业更新时隙i
到j
时调用update(i, j)
。这样,分派和更新是一个O(n)操作,其中n
是正在更改的时隙数,而不管有多少时隙这将允许您创建一个简单的函数,将人类可读的时间映射到时隙值的范围上,这将允许按照您的意愿使时隙变大或变小
您还可以很容易地扩展这个想法,使用pandas数据帧,其中每一列都是一个队列,允许您一次对每一行使用
Series.any()
来快速更新输出列希望听到关于这种方法的建议!也许我忽略了问题的复杂性,但我认为这是一个很好的解决方案
我会像你对待约会一样对待它。 将空闲时间建模为自己的约会。 对于每个结束约会,请检查是否有其他正在进行的约会,如果有,请跳过此处。 如果没有,请查找下一个开始约会(开始日期大于此结束日期的约会)
在你重复了所有的约会之后,你应该有一个反转的面具
我的方法是构建时间序列,但包括一个值设置为该期间可用性的可用性对象
以该值为值,根据开始/结束时间构建时间序列索引。可用性的开始时间为+值,结束时间为-值。而对于一个事件,正如你所说,它应该是-1或+1
然后按指数、总和和累积总和进行分组
获取:
熊猫中的示例代码:
最后返回:
相关问题 更多 >
编程相关推荐