In [1]:
from __future__ import print_function
import numpy as np
In [2]:
from bocchan.matching import deferred_acceptance as bocchan
from keiikegami.deferred_acceptance import da3 as keiikegami
from mhanami.gs_one import deferred_acceptance as mhanami
from NlGG.matching import deferred_acceptance as NlGG
from tsuyoshi.da_algorithms import gale_shapley as tsuyoshi
from oyamad.matching import deferred_acceptance as oyamad
In [3]:
from oyamad.matching_tools import random_prefs
In [4]:
# Test case
m_unmatched = 3
m_prefs = [[0, 1, 2, m_unmatched],
[2, 0, 1, m_unmatched],
[1, 2, 0, m_unmatched],
[2, 0, 1, m_unmatched]]
f_unmatched = 4
f_prefs = [[2, 0, 1, 3, f_unmatched],
[0, 1, 2, 3, f_unmatched],
[2, f_unmatched, 1, 0, 3]]
# Unique stable matching
m_matched = [0, 1, 2, m_unmatched]
f_matched = [0, 1, 2]
In [5]:
bocchan(m_prefs, f_prefs)
Out[5]:
In [6]:
bocchan(f_prefs, m_prefs)
In [7]:
funcs = {#"bocchan": bocchan,
"keiikegami": keiikegami,
"mhanami": mhanami,
"NlGG": NlGG,
"tsuyoshi": tsuyoshi,
"oyamad": oyamad}
In [8]:
# Test case
m_unmatched = 3
m_prefs = [[0, 1, 2, m_unmatched],
[2, 0, 1, m_unmatched],
[1, 2, 0, m_unmatched],
[2, 0, 1, m_unmatched]]
f_unmatched = 4
f_prefs = [[2, 0, 1, 3, f_unmatched],
[0, 1, 2, 3, f_unmatched],
[2, f_unmatched, 1, 0, 3]]
# Unique stable matching
m_matched = [0, 1, 2, m_unmatched]
f_matched = [0, 1, 2]
for name, func in funcs.iteritems():
m_matched_computed, f_matched_computed = func(m_prefs, f_prefs)
msg = 'OK' if np.array_equal(m_matched_computed, m_matched) and \
np.array_equal(f_matched_computed, f_matched) \
else 'Failed'
print(name + ': ' + msg)
In [9]:
m, n = 50, 50
prop_prefs, resp_prefs = random_prefs(m, n)
funcs = {#"bocchan": bocchan,
"keiikegami": keiikegami,
"mhanami": mhanami,
"NlGG": NlGG,
"tsuyoshi": tsuyoshi,
"oyamad": oyamad}
for name, func in funcs.iteritems():
print(name)
%timeit func(prop_prefs, resp_prefs)
In [10]:
m, n = 50, 50
prop_prefs, resp_prefs = random_prefs(m, n)
prop_prefs_list, resp_prefs_list = prop_prefs.tolist(), resp_prefs.tolist()
funcs = {#"bocchan": bocchan,
"keiikegami": keiikegami,
"mhanami": mhanami,
"NlGG": NlGG,
"tsuyoshi": tsuyoshi,
"oyamad": oyamad}
for name, func in funcs.iteritems():
print(name)
if name == 'NlGG':
print('NA')
else:
%timeit func(prop_prefs, resp_prefs)
%timeit func(prop_prefs_list, resp_prefs_list)
In [11]:
m, n = 200, 200
prop_prefs, resp_prefs = random_prefs(m, n)
prop_prefs_list, resp_prefs_list = prop_prefs.tolist(), resp_prefs.tolist()
funcs = {#"bocchan": bocchan,
"keiikegami": keiikegami,
"mhanami": mhanami,
"NlGG": NlGG,
"tsuyoshi": tsuyoshi,
"oyamad": oyamad}
for name, func in funcs.iteritems():
print(name)
if name == 'NlGG':
print('NA')
else:
%timeit func(prop_prefs, resp_prefs)
%timeit func(prop_prefs_list, resp_prefs_list)
In [12]:
m, n = 500, 500
prop_prefs, resp_prefs = random_prefs(m, n)
prop_prefs_list, resp_prefs_list = prop_prefs.tolist(), resp_prefs.tolist()
funcs = {#"bocchan": bocchan,
#"keiikegami": keiikegami,
"mhanami": mhanami,
"NlGG": NlGG,
"tsuyoshi": tsuyoshi,
"oyamad": oyamad}
for name, func in funcs.iteritems():
print(name)
if name in ['NlGG', 'keiikegami']:
print('NA')
else:
%timeit func(prop_prefs, resp_prefs)
%timeit func(prop_prefs_list, resp_prefs_list)
In [13]:
m, n = 1000, 1000
prop_prefs, resp_prefs = random_prefs(m, n)
prop_prefs_list, resp_prefs_list = prop_prefs.tolist(), resp_prefs.tolist()
funcs = {#"bocchan": bocchan,
#"keiikegami": keiikegami,
#"mhanami": mhanami,
"NlGG": NlGG,
"tsuyoshi": tsuyoshi,
"oyamad": oyamad}
for name, func in funcs.iteritems():
print(name)
if name in ['NlGG', 'keiikegami', 'mhanami']:
print('NA')
else:
%timeit func(prop_prefs, resp_prefs)
%timeit func(prop_prefs_list, resp_prefs_list)
In [15]:
import platform
print(platform.platform())
In [16]:
import sys
print(sys.version)
In [17]:
import numpy
print(numpy.__version__)
In [18]:
import numba
print(numba.__version__)
In [ ]: