Python 一个实际调度问题的Hopcroft-Karp算法的实现

Python 一个实际调度问题的Hopcroft-Karp算法的实现,python,algorithm,graph-algorithm,bipartite,Python,Algorithm,Graph Algorithm,Bipartite,我们有一个最大二部匹配问题,即M个人需要分配N个插槽,这样每个插槽至少有一个人,M个人的子集将在这N个插槽中各有一个,而其他人将有2个插槽分配给他们 例如:8个插槽,6个人。这些人中的4人每人只需要占用1个插槽,但其他2人每人占用2个插槽。因此,将分配所有8个插槽(4*1+2*2) 输入数据将反映M人中的哪一人将各占用1个插槽,哪一人将各占用2个插槽 到目前为止,我们使用了以下实现: 为了使问题进一步复杂化,每个用户都可以指出三种选择之一:首选、不首选但可用和冲突(不可用) 我们如何将插槽分配给

我们有一个最大二部匹配问题,即M个人需要分配N个插槽,这样每个插槽至少有一个人,M个人的子集将在这N个插槽中各有一个,而其他人将有2个插槽分配给他们

例如:8个插槽,6个人。这些人中的4人每人只需要占用1个插槽,但其他2人每人占用2个插槽。因此,将分配所有8个插槽(4*1+2*2)

输入数据将反映M人中的哪一人将各占用1个插槽,哪一人将各占用2个插槽

到目前为止,我们使用了以下实现:

为了使问题进一步复杂化,每个用户都可以指出三种选择之一:
首选
不首选但可用
冲突(不可用)

我们如何将插槽分配给人们,使大多数人获得首选插槽,然后是“首选但不可用插槽”,而没有人获得“不可用”?我们如何调整上述现有信息,以考虑到人们的这三种选择?此外,我们如何进一步反映一些人需要分配2个插槽


我们已经研究过了,但是他们只为人们提供了两种选择
可用
不可用

你必须有某种成本函数来最小化,否则它是非常广泛/模糊的。i、 e.更重要的是——一个人得到了一个首选的位置,或者有人避免了冲突,你会牺牲一个人分配的两个位置,而让两个人使用这些位置吗?等等。理想情况下,您希望一些目标函数最小化,如
成本=1*n_冲突+0.5*n_可用
谢谢,我们最终实现了一个目标成本函数,并找到了一个众所周知的算法来降低总体分配成本:
from hopcroftkarp import HopcroftKarp
graph = {'john': {12, 3, 5}, 'june': {5, 10, 8}, 'joe': {5, 3}}
HopcroftKarp(graph).maximum_matching(keys_only=True)
>> {'joe': 3, 'june': 5, 'john': 12}