基于等级的最佳会议地点



这听起来像是一个非常普遍的问题。也许甚至有一个网站可以为我解决它?如果没有,我相信一定有一些 python 库和几行代码会有所帮助。

假设我有 10 个人和 5 个可能的会议地点。如何找到最佳会议地点?我知道人们的偏好,例如,人员 1 会将从最佳到最差的位置排名为:位置 D、位置 A、位置 C;人员 2 - 位置 B、位置 A、位置 D、位置 C;等等。请注意,排名可能不包括所有 5 个位置,换句话说 - 我将如何处理缺少的排名?

我将如何在 Python 中对其进行编码以找到最佳解决方案?或者,也许我可以使用在线服务来解决这个问题?

谢谢!

如果它们只是排名而不是加权,这是孔多塞投票的一个例子。Schulze方法的伪代码看起来在这里。

加法

只需在Google上搜索"Python Condorcet" - 许多结果都带有免费代码。

加法2

github上首先列出的项目名称:

Bradbeattie/python-vote-core

半径/孔多塞

以及堆栈交换代码审查:https://codereview.stackexchange.com/questions/42359/condorcet-voting-method-in-oop-python

上述维基百科链接的相关引文:

实现舒尔茨方法的唯一困难步骤是计算最强的路径强度。然而,这是图论中一个众所周知的问题,有时被称为最宽路径问题。因此,计算强度的一种简单方法是弗洛伊德-沃歇尔算法的变体。以下伪代码说明了该算法。

# 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 乘以投票者数量成正比。

最新更新