Py-school-match
Py-school-match is an open-source Python package that implements multiple matching algorithms in order to assign students to schools.
It provides multiple algorithms ready to use:
Top Trading Cycles (TTC)
Deferred acceptance with multiple tie-breaking (DAMTB)
Deferred acceptance with single tie-breaking (DASTB)
Stable improvement cycles (SIC)
Deferred Acceptance with multiple tie-breaking, plus stable cycles (MSIC)
Deferred Acceptance with single tie-breaking, plus non-stable cycles (NSIC)
Py-school-match is designed specifically for the student-to-school assignation problem. Because of this, you can focus on evaluating different settings and algorithms, without the need to adapt or develop a complete solution.
Sample code
import py_school_match as psm
# Creating three students.
st0 = psm.Student()
st1 = psm.Student()
st2 = psm.Student()
# Creating a criteria. This means 'vulnerable' is now a boolean.
vulnerable = psm.Criteria('vulnerable', bool)
# Assigning st1 as vulnerable
student_vulnerable = psm.Characteristic(vulnerable, True)
st1.add_characteristic(student_vulnerable)
# Creating three schools, each with one seat available.
sc0 = psm.School(1)
sc1 = psm.School(1)
sc2 = psm.School(1)
# Defining preferences (from most desired to least desired)
st0.preferences = [sc0, sc1, sc2]
st1.preferences = [sc0, sc2, sc1]
st2.preferences = [sc2, sc1, sc0]
# Creating a lists with the students and schools defined above.
schools = [sc0, sc1, sc2]
students = [st0, st1, st2]
# Defining a ruleset
ruleset = psm.RuleSet()
# Defining a new rule from the criteria above.
rule_vulnerable = psm.Rule(vulnerable)
# Adding the rule to the ruleset. This means that a 'vulnerable' student has a higher priority.
# Note that rules are added in order (from higher priority to lower priority)
ruleset.add_rule(rule_vulnerable)
# Creating a social planner using the objects above.
planner = psm.SocialPlanner(students, schools, ruleset)
# Selecting an algorithm
algorithm = psm.SIC()
# Running the algorithm.
planner.run_matching(algorithm)
# inspecting the obtained assignation
for student in students:
print("Student {} was assigned to School {}".format(student.id, student.assigned_school.id))
Installation
Dependencies
graph-tool (>= 2.27)
User installation
pip install py-school-match
Or you can clone the repo and install it:
git clone https://github.com/igarizio/py-school-match
cd py-school-match
python setup.py install
Remember to first install graph-tool.
Development
How to cite?
Insert citation here.
Metadata
Release files for py-school-match 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| py-school-match-0.2.0.tar.gz | 15.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| py_school_match-0.2.0-py2-none-any.whl | Python 2 | none | any | Details |
Total release size: 43.7 kB
Release files / py-school-match-0.2.0.tar.gz
| Download URL | py-school-match-0.2.0.tar.gz |
|---|---|
| Size | 15.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
53afb5d04a2b6114dffc01d5cefc7a3a7059c25ba7b76a2fe22e54c60b40b2da
|
|
BLAKE2b-256 checksum How to use checksums |
19a9341964233bc40046b5010b60daf8032d922c93da55b7722318d04cf90972
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/1.12.1 pkginfo/1.4.2 requests/2.18.4 setuptools/39.1.0 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.6.5
|
Release files / py_school_match-0.2.0-py2-none-any.whl
| Download URL | py_school_match-0.2.0-py2-none-any.whl |
|---|---|
| Size | 28.5 kB |
| Tags | Python 2 |
|
SHA-256 checksum How to use checksums |
e6785c4b85ca5e01a781ceda2738fa00d45e3503f0158b37dd7e730bc2f44cd1
|
|
BLAKE2b-256 checksum How to use checksums |
c745bb344f9ff722a265ee4fc3bac394a8cf243d16a0eae5ec8afec1676f42d5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/1.12.1 pkginfo/1.4.2 requests/2.18.4 setuptools/39.1.0 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.6.5
|