#投票 #投票 #选举 #计票 #IRV #命令行 #命令行界面

ranked_voting

即时运行投票算法(库和命令行界面)的工业级实现

1 个不稳定版本

0.3.0 2022年10月25日

#238 in 科学

Apache-2.0

80KB
1K SLoC

timrcv - 使排名选择投票变得简单快捷

经过实战检验的排名选择投票算法的命令行投票计票器,也称为备用投票(英国)、单一可转让投票(澳大利亚)和即时运行投票。

timrcv可以快速简单地从记录的选票中计算选举结果。它实现了多种即时运行算法(见配置部分)。它速度快,资源占用少,支持Windows、MacOS和Linux(见下载部分)。它可以读取来自所有流行来源(Microsoft Forms、Google Forms、Qualtrics、CSV)以及所有商业供应商(ES& S、Dominion、NIST CDF)的投票数据。timrcv生成的结果可以用RCVis快速以各种格式可视化。

如果您想使用timrcv,请查看下载说明和快速入门以开始使用。

timrcv是用Rust编程语言重新实现RCVTab的清洁室实现。它支持相同的配置文件和输入,具有明显更快的优点(观察到速度提高了8倍-50倍)。请注意,与RCVTab不同,timrcv尚未经过审计。对于官方计票需求,请考虑使用RCVTab

下载

发行版页面下载最新版本。提供了Windows、MacOS和Linux的预编译版本。

许可证

timrcv使用Apache 2.0许可证。

快速入门

要开始使用,假设您有一个包含以下选票记录的文件(example.csv)。每行对应一个选票,A、B、C和D是候选人

A,B,,D
A,C,B,
B,A,D,C
B,C,A,D
C,A,B,D
D,B,A,C

每一行代表一条记录的投票。第一行 A,B,,D 表示该选民优先选择了候选人A,其次是B作为第二选择,最后是D作为最后一个选择。

使用默认选项进行投票非常简单

timrcv --input example.csv

输出

[ INFO  ranked_voting] run_voting_stats: Processing 6 votes
[ INFO  ranked_voting] Processing 6 aggregated votes
[ INFO  ranked_voting] Candidate: 1: A
[ INFO  ranked_voting] Candidate: 2: B
[ INFO  ranked_voting] Candidate: 3: C
[ INFO  ranked_voting] Candidate: 4: D
[ INFO  ranked_voting] Round 1 (winning threshold: 4)
[ INFO  ranked_voting]       2 B -> running
[ INFO  ranked_voting]       2 A -> running
[ INFO  ranked_voting]       1 C -> running
[ INFO  ranked_voting]       1 D -> eliminated:1 -> B, 
[ INFO  ranked_voting] Round 2 (winning threshold: 4)
[ INFO  ranked_voting]       3 B -> running
[ INFO  ranked_voting]       2 A -> running
[ INFO  ranked_voting]       1 C -> eliminated:1 -> A, 
[ INFO  ranked_voting] Round 3 (winning threshold: 4)
[ INFO  ranked_voting]       3 A -> running
[ INFO  ranked_voting]       3 B -> eliminated:3 -> A, 
[ INFO  ranked_voting] Round 4 (winning threshold: 4)
[ INFO  ranked_voting]       6 A -> elected
[ INFO  ranked_voting]         undeclared candidates: 

timrcv 支持许多选项(输入和输出格式、候选人验证、计票过程配置等)。有关更多详细信息,请参阅下面的配置部分。

格式

以下格式被支持

  • ess ES& S公司
  • dominion Dominion公司
  • cdf NIST CDF

ess

使用Excel表格记录的ES& S格式的投票。

dominion

使用Dominion公司格式的投票。

cdf

使用NIST公共数据格式的投票。

注意

  • 目前只支持JSON标记(不支持XML)
  • 只支持一次选举

msforms

使用排名小部件时Microsoft Forms的结果。请参阅tests目录中的示例。

msforms_likert

使用“Likert”输入时Microsoft Forms的结果。请参阅tests目录中的示例。您的表单应格式如下

选择1 选择2 ...
候选人A x
候选人B x
...

在此示例中,此投票将候选人B标记为第一选择,然后候选人A作为第二选择。

在此情况下,选择和候选人的名称都是强制性的。请参阅msforms_likert配置文件的示例。

msforms_likert_transpose

使用“Likert”输入且候选人在第一行的Microsoft Forms的结果。请参阅tests目录中的示例。您的表单应格式如下

候选人A 候选人B ...
第一选择 x
第二选择 x
...

在此示例中,此投票将候选人B标记为第一选择,然后候选人A作为第二选择。

在此情况下,选择和候选人的名称都是强制性的。请参阅msforms_likert_transpose配置文件的示例。

csv

简单的CSV读取器。每个列(按顺序)被视为一个选择。标题中的选择名称不重要。

id,count,choice 1,choice 2,choice 3,choice 4
id1,20,A,B,C,D
id2,20,A,C,B,D

“id”和“count”列是可选的。第一行的标题是可选的。

csv_likert

按候选人排序的简单CSV读取器。此格式也由Qualtrics调查创建。文件应如下所示

id,count,A,B,C,D
id1,20,1,2,3,
id2,20,1,3,2,4

“id”和“count”列是可选的。候选人名称必须都是一列,并在CSV文件的第一行中定义。下面的数字是该候选人在每张选票上的排名(或空,如果该候选人未排名)。

配置

timrcv 包含合理的默认值,但用户可能希望应用特定的规则(例如,如何处理空白选择)。程序接受一个JSON配置文件,该文件遵循RCVTab程序的规范

有关更多详细信息,请参阅完整文档。请注意,并非所有选项都受支持。欢迎在此领域贡献力量。

贡献

欢迎贡献。对于文档的贡献总是受欢迎的。特别欢迎提供过去选举示例的贡献,特别是对于使用即时决选投票的非美政治体系(例如澳大利亚、新西兰)。

通常情况下,如果其他算法或排序选择投票算法的变体适用于现实生活中的选举案例,则会考虑它们。如果您有无法使用timrcv处理的过去选举数据集,请提交一个错误报告以开启讨论。

依赖项

约0.9-1.5MB
约33K SLoC