我有一个正常的分配问题,我想将工人与工作相匹配。但是有几种工作,每种都有一定数量的职位。因此,例如,我需要 10,000 名建筑工人、5,000 名焊工等。当然,每个工人对同一种工作的每个职位都有相同的偏好。
我目前的方法是使用匈牙利算法并扩展矩阵列来解决这个问题。因此,例如,它将有 10,000 个构建器柱、5,000 个焊工等。当然,对于 O(n 3 ) 和这么大的矩阵,获得结果可能需要一段时间。
匈牙利算法是否有任何变体,或者不同的算法,它使用了一个事实,即可以有多个连接到一个作业节点?还是应该研究蒙特卡洛或遗传搜索树算法?
编辑:
Sascha 提出的正式描述:
为工人设置 W,为工作设置 J,为偏好设置权重函数,为可用工作数量设置函数
所以我想最小化的功能是:
在哪里
约束将是:
和
正如 Yay295 所问的,如果它在普通消费者机器上运行一两天就可以了。现在有 50k 工人,有 10 种工作,总共 50k 个工作。因此,在我现在使用的匈牙利算法的情况下,矩阵是 50k x 50k(扩展),对于带有附加约束的 LP,矩阵是 50k x 10 ,而矩阵中的偏好值将从 0-100 变化。