想象一下,您要求您的队友选举谁应该组织下一次烧烤。您的团队大约有 120 人,您想从 6 人中选择 3 人来完成这项工作。 120 人中每人最多可以投票给 3 人,按排名排列:第一最佳人是 X,第二最佳人 Y,第三最佳人是 Z。
最后,所有投票应汇总在排名结果列表中。
| Candidate | Voter 1 | Voter 2 | Voter 3 |
-------------------------------------------
| A | 1. Pos | | 2. Pos |
| B | 3. Pos | 1. Pos | 3. Pos |
| C | 2. Pos | 2. Pos | |
| D | | 3. Pos | |
| E | | | |
| F | | | 1. Pos |
-------------------------------------------
如果选民没有进行排名并且每张选票都是平等的,那么最好汇总结果。 B 得 3 票,A 和 C 各得 2 票。所有其他人获得的票数都较少。获胜者是:A、B 和 C。
我不知道有哪些算法可以聚合排名数据,也不知道结果应该是什么样子。 F 得到了 pos.1 的一票,这很好,但是 A 和 B 也得到了这样的一票。从我的角度来看,A 和 B 更好,因为他们获得了更多选票。但A比B好吗? A 获得第 2 次,但 B 获得 2 次第 3 次,哪个应该排名更高? 2 次 pos.2 是否比 1 次 pos.1 和 2 次 pos.3 更好?
听起来像是实现元搜索引擎排名算法。存在哪些算法?我应该使用什么算法?
正如您问“我应该使用什么?”我可以推荐一组称为“孔多塞方法”的方法,正如 Terje D. 提到的那样。如果您不想了解更多有关选举方法的复杂理论,我可以推荐其中一种孔多塞方法:“舒尔茨方法”(也称为:路径获胜者或击败路径获胜者)。这是例如被 Debian、KDE 和德国海盗党使用。
您可以使用此在线投票来获得问题的临时解决方案:https://modernballots.com/elections/qm65cnts/vote/
如果您想将其实施到您公司的网站(内联网或其他网站)中,我建议您为现有项目做出贡献。如果您是 PHP 开发人员,请查看:https://bitbucket.org/robla/electowidget/src/14581ac7a5f2/lib/methods/SchulzeMethod.php Electowidget 最初是 MediaWiki 的插件。也许这是一个很好的起点,也许您想做出一些更改以使其成为一个库。
也许就这样做:为每个第一名分配 3 分,为每个第二名分配 2 分,为每个第三名分配 1 分。然后检查哪些候选人得分最高。