跳转到主要内容

投票算法的Python库。

项目描述

简介

关于投票箱

投票箱是一个尝试实现有用投票方法的Python库。

该项目是在ULS-SIG上讨论自我组织对象网格时进行的对话和实验的结果。

依赖项

当前实现依赖于以下附加软件和/或库

  • Python

  • zope.interface

  • sphinx

  • repoze.sphinx.autointerface

附加信息

有关以下信息,请参阅章节(或者,如果您在工作目录中阅读此文件,请参阅./docs子目录)

  • 安装

  • 使用

安装

开发

如果您想为投票箱开发或使用我们正在工作的最新代码,您可以从源代码安装。您需要安装bzr,然后只需执行以下操作

$ bzr branch lp:ballotbox
$ cd ballotbox
$ sudo python setup.py install

简单安装

您可以使用setuptools的easy_install脚本来将投票箱安装到您的系统上

$ sudo easy_install ballotbox

手动下载

您可以通过访问以下URL从Python包索引手动下载源代码压缩包

http://pypi.python.org/pypi/ballotbox

您需要解压缩和gzip源代码,进入源代码目录,然后您可以执行常规操作

$ sudo python setup.py install

检查源代码

一旦安装,只要您在系统上安装了Twisted,并且trial脚本在您的PATH中,您就可以通过在任何地方执行以下操作来测试源代码

$ trial ballotbox

这将运行测试套件,并报告任何单元测试的成功和失败。

使用

以下是API使用的快速介绍。此示例中使用的投票方法是简单多数。简单多数规则投票主要用于二进制决策。以下是一些仅涉及两个选择的示例

>>> from ballotbox.ballot import BallotBox
>>> from ballotbox.singlewinner.simple import MajorityRuleVoting

>>> bb = BallotBox(method=MajorityRuleVoting)
>>> bb.batch_votes([("alice", 10000), ("bob", 5000)])
>>> bb.get_winner()
[(10000, 'alice')]

>>> bb = BallotBox(method=MajorityRuleVoting)
>>> bb.batch_votes([("bob", 5000), ("carol", 5001)])
>>> bb.get_winner()
[(5001, 'carol')]

此方法在平局时崩溃,并且不保证可以与超过两个选择一起工作

>>> bb = BallotBox(method=MajorityRuleVoting)
>>> bb.batch_votes([("alice", 8000), ("carol", 8000)])
>>> bb.get_winner()
[]

不会返回结果。对于超过两个候选人的边缘情况也是如此

>>> bb = BallotBox(method=MajorityRuleVoting)
>>> bb.batch_votes([("alice", 5000), ("bob", 4000), ("carol", 3000)])
>>> bb.get_winner()
[]

待办事项

实现

[完成] 将标准类转换为使用接口。然后,在投票方法中,不再通过继承来实现它们,而是实现它们。这将使 zope.interface 成为依赖项。

[完成] 从 txULS/soom 复制多文档测试文件测试套件的代码到这里。

[完成] 添加一个新的 docs/methods 目录和每个投票方法对应的文件。

[进行中] 完成实现单胜选投票方法。

实现多胜选投票方法。

实现代理和随机投票方法。

研究基于距离的投票

  • 特别是,基于一组偏好定义候选人的度量空间

  • 然后计算平方和的平方根,得到 n 维距离

测试

[进行中] 为每个投票方法添加文档测试。

添加一个测试源分发的 make 目标。

  • 创建一个临时目录。

  • 在那里解包分发。

  • 运行针对该目录的单元测试和文档测试。

文档

  • 将大写文档文件改为小写(除标准文件如 README、TODO 等)。

  • 更新 sphinx 配置文件以使用 ballotbox.meta。

  • 在生成的文档中添加侧边栏链接。

  • 自动生成 API 文档的 ReST 文件。

    • 驱动此逻辑的代码应放在 ballotbox.util.docs 中。

    • 添加一个 make 目标,导入并调用适当的函数以生成 API 文档。

更改

版本 0.1

  • ballotbox 的第一个版本。

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面