解决匹配游戏的包。

matching的Python项目详细描述


https://img.shields.io/pypi/v/matching.svghttps://coveralls.io/repos/github/daffidwilde/matching/badge.svg?branch=masterhttps://travis-ci.com/daffidwilde/matching.svg?branch=masterhttps://img.shields.io/badge/code%20style-black-000000.svghttps://zenodo.org/badge/119597240.svg

用于解决匹配游戏的软件包。

一个匹配博弈是由两组博弈者定义的。一组中的每个玩家都有一个 排名偏好列表中的那些,目的是找到一些 两盘之间的映射使得没有一对选手不高兴。这个 术语“映射”和“不快乐”的上下文依赖于 正在进行的特定游戏,但主要与 配对

matching中,我们处理三种类型的匹配游戏:

  • 稳定婚姻问题
  • 住院医师分配问题(HR);
  • 学生分配问题。

使用播放器

对于所有这些游戏,matching使用一个Player类来表示 “申请”党成员,即居民和学生。对于HR和SA, 有特定的类来表示Hospital,^{tt5}的角色$ 和Supervisor

对于SM实例,我们需要两个Playerinstances列表–一个用于 每一方详细说明他们的偏好。

考虑以下在二部图上表示的问题。

./img/stable_marriage.png

我们在这个游戏中按照以下方式构建玩家:

>>> from matching import Player
>>> suitors = [Player(name="A"), Player(name="B"), Player(name="C")]
>>> reviewers = [Player(name="D"), Player(name="E"), Player(name="F")]
>>> (A, B, C), (D, E, F) = suitors, reviewers
>>> A.set_prefs([D, E, F])
>>> B.set_prefs([D, F, E])
>>> C.set_prefs([F, D, E])
>>> D.set_prefs([B, C, A])
>>> E.set_prefs([A, C, B])
>>> F.set_prefs([C, B, A])

然后为了解决这个匹配游戏,我们使用StableMarriage类, 喜欢这样:

>>> from matching.games import StableMarriage
>>> game = StableMarriage(suitors, reviewers)
>>> game.solve()
{A: E, B: D, C: F}

这种匹配并不是一个标准的python字典,尽管它在很大程度上看起来 表现得像一个它实际上是Matching类的一个实例:

>>> matching = game.matching
>>> type(matching)
matching.matching.Matching

这个类似字典的对象主要用作一个教学设备,它可以简化 在找到解决方案后处理匹配的过程

使用词典

对于更大的游戏实例,直接创建玩家(如上所述)可以是 不合理的乏味另一种方法是创建一个游戏实例 来自python字典。例如,考虑以下HR实例:

有五个居民——艾达、山姆、乔、吕克、丹尼——申请在三点工作 医院:慈悲,城市,将军。每家医院都有两个职位 玩家之间的偏好如下:

./img/hospital_resident.png

这些信息可以通过一些字典来表达,例如:

>>> resident_prefs = {
...     "A": ["C"],
...     "S": ["C", "M"],
...     "D": ["C", "M", "G"],
...     "J": ["C", "G", "M"],
...     "L": ["M", "C", "G"],
... }
>>> hospital_prefs = {
...     "M": ["D", "J"],
...     "C": ["D", "A", "S", "L", "J"],
...     "G": ["D", "A", "J", "L"],
... }
>>> capacities = {hosp: 2 for hosp in hospital_prefs}

然后,类似地,使用HospitalResident类来解决这个游戏,但是 实例是使用create_from_dictionaries类方法创建的:

>>> game = HospitalResident.create_from_dictionaries(
...     resident_prefs, hospital_prefs, capacities
... )
>>> game.solve()
{M: [L, S], C: [D, A], G[J]}

尽管在这里传递了字符串字典,但匹配显示了 matching玩家:

>>> matching = game.matching
>>> for hospital in matching:
...     print(type(hospital))
<class 'matching.players.hospital.Hospital'>
<class 'matching.players.hospital.Hospital'>
<class 'matching.players.hospital.Hospital'>

这是因为create_from_dictionaries创建了 玩家先上课,然后把他们传给游戏班。使用字典,比如 这是一种创建大型游戏的有效方法,但它确实需要 每队球员的名字必须是唯一的

联系一下!

我希望这个软件包有用,可以在这里联系我(或者在twitter上: @daffidwilde)有任何问题或 建议。欢迎光临

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

推荐PyPI第三方库


热门话题
java将firebase数据放在JTable中   java如何使用ApacheWicket制作类似IOS的滑动开关?   java正在尝试查找漏洞!anon对pmap意味着什么?   java抽象与抽象类和接口   java日期+天数计算器   java查找数组中3个数字的最小乘积[代码错误?]   有没有办法创建一个标签,这样当编译器运行时,它会用java中的语句替换这个标签   无法解析java变量   Java Swing中正确的ModelViewController模式   java将数据推送到设备的最佳方式是什么?   java我可以在线程池中运行后台任务吗?   java如何将excel工作表复制到同一工作簿?   java如何在groovy spock中模拟新的class()调用   spring自动部署java(守护程序或web)应用程序工具   java使JTabbedPane居中,而不是实际的选项卡   java如何使这些简单而美丽?   java如何有选择地重写类的函数   如何将wkhtmltopdf集成到我的java Web应用程序中?   java Infinispan操作模式   拼图65java拼图。整数溢出可能发生在涉及负数减法、int.Max_值等的计算中。如何避免这种情况?