|
|
1
7
正如您所指出的,这是一个负载平衡问题。这不是一个真正的日程安排问题,因为您并没有试图最小化任何事情(总时间、并发工作人员的数量等)。没有特别的限制(工作持续时间、时间冲突、要匹配的技能集等),所以实际上您的问题归结为选择适当的权重函数。 你说有些情况你想避免,比如用户权重太接近。你能提供更多细节吗?例如,让分配的机会与当前的工作量成正比,由其他工人的工作量标准化,这有什么不对?您可以将其视为一系列不同长度的块(任务),打包到一组箱子(工人)中,在这些箱子中,您试图保持箱子的总高度尽可能均匀。
编辑:示例负载平衡函数根据您的评论,这里有一些简单函数的示例,可以为您提供不同的平衡行为。一个基本问题是,你想要的是确定性行为还是概率性行为。我将分别举几个例子。
1) 简单任务农场。 2) 保证公平的工作量。 如果工人以不同的速度工作,并且您不希望某些工人比其他工人做得更多,那么请跟踪每个工人已完成的+待处理的工作的数量。分配下一份工作以保持此数字均匀分布(快速工作的员工可获得免费休息)。 选择每个员工可以拥有的最大工作数量。每个工人的工作量都正常化为该数字。例如,如果每个工人的最大作业数为15,则在达到产能之前可以再添加50个作业。因此,对于每个工人来说,分配下一份工作的概率是
如果不想使用特定的最大阈值,可以使用当前挂起作业数最高的工作进程作为限制。在这种情况下,这是worker E,所以概率是
R 介于0和1之间,并将其与这些边界进行比较。所以如果 R R 4) 非线性归一化。 使用对数函数(而不是线性减法)对数字进行加权是获得非线性归一化的一种简单方法。你可以用它来扭曲概率,例如,使没有很多工作的工人更有可能得到更多的工作。 关键是,这样做的方法实际上是无限的。您使用的权重函数取决于您试图启用的特定行为。希望这能给你一些想法,作为一个起点。 |