什么是“让每个人都开心”的投票算法?

时间:2011-12-14 20:30:51

标签: algorithm voting

我正在寻找一种投票算法,根据多数票数和投票数来选出获胜者。

现实生活中的例子:

  

我们公司有一个谷物棒。我们有3种不同谷物的空间。我们   我想让我们的员工就他们想要的谷物投票。

     

我们   不想根据受欢迎程度严格挑选前3名获胜者   因为可能有少数员工只能吃1个   特别谷物(无论出于何种原因),我们想给他们   特殊津贴。

鉴于以下投票结果,以下是我们希望算法给出的结果。

Vote scenario and desired outcome

我正在寻找一种能够进行此类排名的算法。如果你至少可以提供我正在寻找的名称那将是一个很大的帮助,因为我可以更好地搜索它。 :)

谢谢!

3 个答案:

答案 0 :(得分:6)

没有一个完美的投票系统 - 见http://en.wikipedia.org/wiki/Arrow%27s_impossibility_theorem。已经有各种尝试通过弯曲规则来解决这个问题,包括http://en.wikipedia.org/wiki/Range_voting

接近范围投票的一个想法是给每个人12票并允许他们按照自己的意愿分配。看看你的例子,如果你假设有多个选择的人平均分配他们的12张票 - 12x1或6x2或4x3或3x4 - 那么我认为你得到了你想要的结果,Lucky Charms获得总共10票和其他一切得到的不仅仅是这个。

答案 1 :(得分:2)

如果谷物的数量很少,您可以将问题视为子集覆盖问题,并蛮力地找到哪种配置可以提供最“快乐”

var max_happyness = -INF
for every subset {c1, c2, c3} of C:
    max_hapyness = max(max_happyness, happyness(i1,i2,i3))

你仍然有定义合适的幸福感功能的问题。例如,您可以选择一个幸福度函数,作为第一优先级计算吃任何食物的人数。然后作为第二优先考虑喜欢两种谷物的人数,然后是那些喜欢三种谷物等的人。

优点:如果您可以定义幸福度函数,则可以获得最佳结果。

缺点:您必须能够定义幸福感功能。

答案 2 :(得分:2)

您可能需要考虑Hall's marriage theorem和/或assignment problem的概括。

这种范例的想法是创建一个二分图,其中节点是人和谷物,如果p投票给{{1},则人c和谷物p之间存在优势}}。目标是选择3种谷物,以便去除所有其他谷物产生的图表

  1. 连接(每个人都会吃至少一种选定的谷物),

  2. 最大化每个人的最低/平均程度(最大化最小/平均幸福感)

  3. 您可以将此视为Maximum Coverage Problem。在这种情况下,您设置c,其中C1,C2,...,Cm是喜欢麦片Ci的人群。例如,按照表格中列出的顺序拍摄谷物和人物,你有

    i

    C1 = {1,5} C2 = {2} C3 = {1,4,5} C4 = {3,5} 为人数,以便nCi的子集。目标是找到{1,2,...,n}集合,以便最大化联合的基数。如果存在多种解决方案,请选择最小化交叉点基数的方法(最小化一个人占主导地位的数量)或最大化最不频繁元素重复的次数(最大化最不快乐的人的幸福感)。

    对于此示例,覆盖所有元素的最小kk,并且它提供唯一解k=3

    然而,你看一下,你有一个NP问题,但有一些已知的算法可以解决它们(查看维基百科文章以获取参考资料)。