我的情况如下:
我们有一组特定的职位,每个职位都需要一个人填补。但是职位需要特定的技能。因此,假设职位为[],我们将拥有不同的技能,例如A,B,C,D。现在,职位[A,C]需要一个具有A和C技能的人。我们有很多人可供选择。每个人都有一套不同的技能,并且位于不同的位置。但是我们希望身体上最接近的人也具有获得职位所需的技能。
找到最佳解决方案的方法是什么?
您只需要解决一个典型的Maximum weight matching problem。
为每个位置创建节点,它们将是图形的第一部分。为每个人创建节点,它们将是图的第二部分。将每个位置[A,B]的边添加到同时具有技能A和B的所有人。
将位置到人的边缘的宽度定义为与人一样大的位置,并且位置位置彼此靠近-例如1 / distance(person, position)
或some_constant - distance(person, position)
。
然后,您可以使用任何解决上述问题的算法,然后进行匹配。