我构建了一个应用程序,该应用程序实现了与任务分配类似的功能。我认为效果很好,直到最近才发现解决方案不是最佳的。详细来说,机器和任务之间的每个可能对都有一个得分表,通常机器的数量比任务的数量少得多。我使用了硬/中/软规则,其中软规则是根据分数表中每个作业的分数递增的。
但是,当我在运行1-2小时后查看结果时,我发现在未分配的任务中,有许多比当前分配更好的选择(如果分配了,则得分会更高)。基准报告表明,总的软评分在一个小时内达到稳定水平,然后停留在该评分水平。
我检查了规则的逻辑-如果软规则运行正常,它最终应该找到一种分配方法,该方法可以实现最高的总软得分,而满足其他硬/中规则,不是吗?
我一直在尝试各种事情,例如调整算法参数,缩放分数表等,但没有一个能提供最佳解决方案。
答案 0 :(得分:0)
一个问题是您可能会遇到得分陷阱(请参阅文档)。在这种情况下,请使您的约束得分更细粒度以应对该问题。
如果不是这种情况,并且您陷入了局部最优,那么我就不会对算法参数玩太多了-它们可能会解决这个问题,但是您会过拟合在该数据集上。
相反,找出可能使您获得该局部最优值的最小移动,并向全局最优值迈近一步。将这种动作添加为自定义动作。例如,如果正常的交换动作无济于事,但是您看到了通过进行3次交换动作来达到此目的的方法,然后实施该动作。