In [7]:
# Males' preference orders over females [0, 1, 2] and unmatched
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]]
# Females' preference orders over males [0, 1, 2, 3] and unmatched
f_unmatched = 4
f_prefs = [[2, 0, 1, 3, f_unmatched],
[0, 1, 2, 3, f_unmatched],
[2, f_unmatched, 1, 0, 3]]
In [8]:
for i in range(len(m_prefs)):
m_prefs[i].reverse()
print m_prefs
single = range(len(m_prefs))
x = single[-1]
print single
print x
In [9]:
range(len(m_prefs))
Out[9]:
In [18]:
arg1 = []
arg1.append(1)
arg1
Out[18]:
In [11]:
[-1 for z in f_prefs]
Out[11]:
In [3]:
def deferred_acceptance(arg1, arg2):
import numpy as np
single = np.argsort(arg1)
pair = np.argsort(arg2)
for i in len(pair):
pair[i] = -1
while len(single)>0:
x = single.pop()
y = arg1[x].pop()
if pair[y] != -1:
if arg2[y].index(pair[y]) < arg2[y].index(x):
single.insert(0, pair[y])
pair[y] = x
else:
single.insert(0, x)
else:
pair[y] = x
arg1 = np.argsort(pair)
arg2 = pair
In [4]:
def test_male_proposal(f):
m_matched_computed, f_matched_computed = \
deferred_acceptance(self.m_prefs, self.f_prefs)
assert_array_equal(m_matched_computed, self.m_matched)
assert_array_equal(f_matched_computed, self.f_matched)
In [6]:
deferred_acceptance(self.m_prefs, self.f_prefs)
In [ ]: