每个工作应具有a)重要性b)分配状态(分配的工人数量)
然后,工人可以决定每次都能获得最高“报酬”的工作。奖励由重要性除以分配的工人数除以他需要投资的时间(步行和完成工作)来计算。如果您的工人可以专门从事工作(例如砍柴),他们实际上会更喜欢他们可以有效完成的任务。如果只能在适当的时候继续工作,则当然应该只分配工作(例如,必须提供所需的资源)。
避免长时间取消某些工作(例如,因为工作距离很远)。重要性应随时间增加。在收获的情况下,重要性还应取决于目前有/需要多少类型的资源(例如,生产单位除以给定时期内请求的单位)。
为避免工人迅速改变工作,如果奖励显着提高(达到给定阈值),则只允许他们改变当前的工作。在计算每时间的奖励值时,您也可以将成本增加一倍,用于首次步行。此外,您应该让彼此而不是同时重新计算工人的最佳工作。
此外,在计算的奖励中添加一些随机性。这将使工人更好地分配给不同的工作(这样,他们不仅会“全力以赴”从事同一工作)。但是,通过依次重新计算一个工人的下一个最佳工作并调整已经分配的工人数量,已经减少了这种影响(同一工作上的更多工人减少了预期的报酬)。
如果您的工作只能分配给一个工人,则可能需要对算法进行一些调整。在这种情况下,请执行以下操作:工人选择每次获得的最高报酬的工作(重要性除以所需的个人时间)。如果另一个工人每次都能以更高的预期报酬来从事相同的工作,那么他将开始当前分配的工人。然后,新的“失业”工人试图找到另一份工作。在您的示例中,可能是这样的:
- “ C”具有非常高的重要性。甚至工人1距离更远,工人1仍将自己分配给“ C”。
- 工人2被分配到下一个,并且每次获得的“ C”(步行较少)的报酬更高。因此它将工人1踢下了工作,并将其自己分配给“ C”。这并没有花费时间,因为我们仍处于相同的仿真时间范围内。因此,用户将看不到作业的这种重新分配。
- 然后,工人1正在寻找另一份工作。工人1不会将工人2从“ C”中踢出来,因为每次的报酬都不是更好。因此,他被分配为“ A”或“ B”(取决于重要性)。同样,这仍在相同的仿真时间段内。