python中的社会选择理论

socialchoice的Python项目详细描述


社会选择:社会选择理论的图书馆

这个库实现social choice mechanisms

安装

SocialChoice在PYPI上,所以:

pip3 install socialchoice

一个最小的例子

在这里,我们提交了两张成对的选票,其中"a"击败了"b",而"c"输给了"b"。我们要计算此投票集的ranked pairs结果。

>>>fromsocialchoiceimportPairwiseBallotBox,Election>>>pairwise_ballots=PairwiseBallotBox([("a","b","win"),("c","b","loss")])>>>election=Election(pairwise_ballots)>>>election.ranking_by_ranked_pairs()['a','b','c']

一个稍微不那么简单的例子

让我们再次使用排名对来运行排名选择选举。

>>>fromsocialchoiceimportRankedChoiceBallotBox,Election>>>ranked_ballots=RankedChoiceBallotBox([[1,2,3,4],[1,{2,3},4]])>>>election=Election(ranked_ballots)>>>election.ranking_by_ranked_pairs()[1,2,3,4]

注意,领带是允许的-只需提交一个集合作为您的排名的一个元素,其中每一个将被视为领带。排名选择投票被转换成成对偏好,然后排名对可以运行的结果。

将成对投票转换为订购

假设您收集了来自多个投票者的成对投票,并且希望运行基于位置的方法,如Borda count。如果每一组成对投票都是可传递且完整的,这很容易实现——也就是说,选民有一致的偏好(如果A优先于B,B优先于C,选民也不喜欢C优先于A),并且他们为每个候选人配对提交了偏好。然后,您可以topologically sort他们的投票图,得到的候选人排序列表就是他们的排序。

但如果投票集是不及物的或不完整的呢?如果不及物,你会有循环,这意味着没有明确的顺序。如果不完整,输出将不包含每个候选项。两者都使得无法直接计算位置。但是,有一些方法可以使投票集具有传递性,或者在排序中填充空白。

下面是从循环中移除边的示例。

>>>fromsocialchoiceimport*>>>ballots=VoterTrackingPairwiseBallotBox([(1,2,"win",1),(2,3,"win",1),(3,1,"win",1)])>>>break_random_link=IntransitivityResolverFactory(ballots).make_break_random_link()>>>add_random_edges=IncompletenessResolverFactory(ballots).make_add_random_edges()>>>ballots.enable_ordering_based_methods(break_random_link,add_random_edges)>>>Election(ballots).ranking_by_borda_count()in[[1,2,3],[2,3,1],[3,1,2]]True

顾名思义,这可以通过断开随机链接来解决不及物性,然后通过添加随机边来确保输出的完整性。本例将一组不及物投票(1比2,2比3,3比1)解析为最后一行列出的三个顺序之一。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java SimpleCursorAdapter删除值   java结束while循环条件   java检查设备是否连接到特定网络   java组织。冬眠MappingException找不到逻辑名称为annotation getter的列   为什么java邮件中会抛出此异常?   加载SDK时发生java Eclipse错误   返回奇怪输出的Java数组   JavaXStream和对象类序列化   将枚举列表传递给namedQuery后出现java非法转换异常。Hibernate中的setParameter()   java Android studio不允许我在字符串上使用开关?   有没有办法从Java程序访问存储在Chrome中的cookie   java在枚举中构造实例而不修改枚举类   java Blackberry JDE FieldChangeListener   java修复错误:未报告的异常InterruptedException   java Spring数据JPA:findAll(具有规范和可分页)在计数查询中失败