这听起来像是一个非常普遍的问题。也许有一个网站可以为我解决它?如果没有,我肯定必须有一些python库和几行代码才能提供帮助。
假设我有10个人和5个可能的会议地点。我如何找到最佳会议地点?我知道人们的偏好,例如,人员1会将位置从最佳到最差排列为:位置D,位置A,位置C;人2 - 位置B,位置A,位置D,位置C;等等。请注意,排名可能不包括所有5个位置,换句话说 - 我将如何处理缺失的排名?
我如何在Python中编写代码以找到最佳解决方案?或者也许我可以使用在线服务来解决这个问题?
谢谢!
答案 0 :(得分:2)
如果它们仅排名且未加权,则这是Condorcet vote的示例。 Schulze方法的伪代码看起来是here。
ADDITION
只需在Google上搜索" Python Condorcet" - 使用免费代码显示许多结果。
附加2
github上首次列出的项目名称:
StackExchange代码评论: https://codereview.stackexchange.com/questions/42359/condorcet-voting-method-in-oop-python
前面提到的维基百科链接的相关引文:
实施Schulze方法的唯一困难步骤是计算最强的路径优势。然而,这是图论中的一个众所周知的问题,有时被称为最宽的路径问题。因此,计算强度的一种简单方法是Floyd-Warshall算法的变体。以下伪代码说明了算法。
# Input: d[i,j], the number of voters who prefer candidate i to candidate j.
# Output: p[i,j], the strength of the strongest path from candidate i to candidate j.
for i from 1 to C
for j from 1 to C
if (i ≠ j) then
if (d[i,j] > d[j,i]) then
p[i,j] := d[i,j]
else
p[i,j] := 0
for i from 1 to C
for j from 1 to C
if (i ≠ j) then
for k from 1 to C
if (i ≠ k and j ≠ k) then
p[j,k] := max ( p[j,k], min ( p[j,i], p[i,k] ) )
该算法是有效的,并且具有与C3成比例的运行时间,其中C是候选者的数量。 (这并不考虑计算d [,]值的运行时间,如果以最直接的方式实施,则需要的时间与选民数量的C2倍成比例。)