Python 根据首选选项列表为大多数人指定他们的第一选择

Python 根据首选选项列表为大多数人指定他们的第一选择,python,algorithm,grouping,preferences,Python,Algorithm,Grouping,Preferences,给出一个选项列表,比如说100个,列表中的每个人说30个必须按照他们希望分配给他们的顺序选择5个选项。我如何分配给每个人一个选择,确保尽可能多的人得到他们的首选或最高首选 每个选项都有一个可选择次数的可变限制,例如选项1可供3人使用,选项2可供1人使用,选项3至5等 我正在使用Python编写代码,但我对应该使用哪种算法感兴趣。我发现了一些关于稳定婚姻问题的建议,但这需要双方都有偏好,在我的例子中,只有人们有偏好。我发现的另一个问题是分配问题,但这需要有相同数量的人来选择,每个选择都是一个人做的

给出一个选项列表,比如说100个,列表中的每个人说30个必须按照他们希望分配给他们的顺序选择5个选项。我如何分配给每个人一个选择,确保尽可能多的人得到他们的首选或最高首选

每个选项都有一个可选择次数的可变限制,例如选项1可供3人使用,选项2可供1人使用,选项3至5等


我正在使用Python编写代码,但我对应该使用哪种算法感兴趣。我发现了一些关于稳定婚姻问题的建议,但这需要双方都有偏好,在我的例子中,只有人们有偏好。我发现的另一个问题是分配问题,但这需要有相同数量的人来选择,每个选择都是一个人做的,而且我的问题比其他问题的人有更多的选择,如果你唯一的限制是:

尽可能多的人得到了他们的首选或最高首选

我的建议是简单的分拣操作

你可以根据受欢迎程度要求进行排序,选择第一选择中的可用位置,然后第二选择和第三选择中的可用位置,依此类推。检查每个用户并指定第一选择(如果可用),然后标记他们或将他们从列表中删除。对所有尚未选择的用户重复第二选择、第三选择等操作


这种方法将是有利的,因为它通过优先选择那些选择了真正受欢迎或人口过多的选择的人来解释选择的不均匀分布。这种偏见会增加尽可能多的人至少得到一种选择的可能性。例如,选择前5名的人实际上会得到至少一个选择,否则他们可能没有机会。有两个不受欢迎的选择的人要求选择一个可用的地点这似乎与稳定的婚姻问题相似,但不完全相同。也许该算法会起作用,或者可以进行调整:


加载不同语言的代码。

您可以使用分配问题公式,例如,对于5次可用的选择,您可以添加5份副本,并且添加虚拟人员,使人员和选择的数量相等。

您可以将其建模为网络流问题。与

源节点、接收节点、每个人的节点和每个选择的节点。 源和每个有能力的人之间的边缘1 每个人和她选择的每个选项之间的优势,容量为1 每个选项与接收器之间的边,其容量等于可选择选项的最大次数。 然后为所有边指定权重

源和每个人之间的所有边的权重为0 每个选项和水槽之间的所有边的权重均为0 对于人员p和其任何选择c之间的每条边,按如下方式设置权重:n^5-rankp,c,其中rankp,c是c在p的有序列表中的位置。
最终在生成的网络中找到一个最大成本最大流量。

这似乎纯粹是一个算法问题,所以可能更适合于它?@John:你会接受答案吗?