我正在寻找一种投票算法,根据多数票数和投票数来选出获胜者。
现实生活中的例子:
我们公司有一个谷物棒。我们有3种不同谷物的空间。我们 我想让我们的员工就他们想要的谷物投票。
我们 不想根据受欢迎程度严格挑选前3名获胜者 因为可能有少数员工只能吃1个 特别谷物(无论出于何种原因),我们想给他们 特殊津贴。
鉴于以下投票结果,以下是我们希望算法给出的结果。
我正在寻找一种能够进行此类排名的算法。如果你至少可以提供我正在寻找的名称那将是一个很大的帮助,因为我可以更好地搜索它。 :)
谢谢!
答案 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种谷物,以便去除所有其他谷物产生的图表
连接(每个人都会吃至少一种选定的谷物),
最大化每个人的最低/平均程度(最大化最小/平均幸福感)
您可以将此视为Maximum Coverage Problem。在这种情况下,您设置c
,其中C1,C2,...,Cm
是喜欢麦片Ci
的人群。例如,按照表格中列出的顺序拍摄谷物和人物,你有
i
让C1 = {1,5}
C2 = {2}
C3 = {1,4,5}
C4 = {3,5}
为人数,以便n
是Ci
的子集。目标是找到{1,2,...,n}
集合,以便最大化联合的基数。如果存在多种解决方案,请选择最小化交叉点基数的方法(最小化一个人占主导地位的数量)或最大化最不频繁元素重复的次数(最大化最不快乐的人的幸福感)。
对于此示例,覆盖所有元素的最小k
为k
,并且它提供唯一解k=3
。
然而,你看一下,你有一个NP问题,但有一些已知的算法可以解决它们(查看维基百科文章以获取参考资料)。