1 / 70

Pareto Optimality in House Allocation Problems

David Abraham Computer Science Department Carnegie-Mellon University. Pareto Optimality in House Allocation Problems. Katar í na Cechl á rov á Institute of Mathematics PJ Saf á rik University in Ko š ice. David Manlove Department of Computing Science University of Glasgow. Kurt Mehlhorn

eloftus
Download Presentation

Pareto Optimality in House Allocation Problems

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. David Abraham Computer Science Department Carnegie-Mellon University Pareto Optimality in House Allocation Problems Katarína Cechlárová Institute of Mathematics PJ Safárik University in Košice David Manlove Department of Computing Science University of Glasgow Kurt Mehlhorn Max-Planck-Institut fűr Informatik Saarbrűcken Supported by Royal Society of Edinburgh/Scottish Executive Personal Research Fellowship and Engineering and Physical Sciences Research Council grant GR/R84597/01

  2. House Allocation problem (HA)  • Set of agents A={a1, a2, …, ar} • Set of houses H={h1, h2, …, hs} • Each agent ai has an acceptable set of houses Ai H • ai ranks Ai in strict order of preference • Example: • a1 : h2 h1 • a2 :h3h4 h2 • a3 : h4h3 • a4 : h1h4 • Let n=r+s and let m=total length of preference lists a1 finds h1 and h2 acceptable a3 prefers h4 to h3

  3. Applications • House allocation context: • Large-scale residence exchange in Chinese housing markets • Yuan, 1996 • Allocation of campus housing in American universities, such as Carnegie-Mellon, Rochester and Stanford • Abdulkadiroğlu and Sönmez, 1998 • Other matching problems: • US Naval Academy: students to naval officer positions • Roth and Sotomayor, 1990 • Scottish Executive Teacher Induction Scheme • Assigning students to projects

  4. The underlying graph • Weighted bipartite graph G=(V,E) • Vertex set V=AH • Edge set:{ai,hj}E if and only if ai findshjacceptable • Weight of edge {ai,hj} is rank of hjinai’spreference list • Example • a1 : h2 h1 • a2 :h3h4 h2 • a3 : h4h3 • a4 : h1h4 a1  h1 2 1 a2 h2  3 1 a3 2 h3  2 1 1 a4 h4  2

  5. Definition of a matching • A matching M is a subset of A×H such that: • if(ai, hj)Mthenai findshjacceptable • each agent belongs to at most one pair in M • each house belongs to at most one pair in M • Example • a1 : h2 h1 • a2 :h3h4h2 • a3 : h4h3 • a4 : h1h4 a1  h1 M(a1)=h1 a2 h2  a3 h3  M={(a1, h1), (a2, h4), (a3, h3)} a4 h4 

  6. Maximum matchings • In many applications we wish to match as many agents as possible • A maximum matching is a matching with largest size • Example • Some maximum matchings are “better” than others! • a1 : h2 h1 • a2 :h3h4 h2 • a3 : h4h3 • a4 : h1h4 • a1 : h2h1 • a2 :h3h4 h2 • a3 : h4h3 • a4 : h1h4

  7. Pareto optimal matchings • A matchingM1 is Pareto optimal if there is no matching M2 such that: • Some agent is better off in M2 than in M1 • No agent is worse off in M2 than in M1 • Example • M1 is not Pareto optimal since a1 and a2 could swap houses – each would be better off • M2 is Pareto optimal • a1 : h2 h1 • a2 :h1h2 • a3 : h3 • a1 : h2h1 • a2 : h1h2 • a3 : h3 M1 M2

  8. Testing for Pareto optimality • A matchingM is maximal if there is no agent a and house h, each unmatched in M, such that a finds h acceptable • A matching M is trade-in-free if there is no matched agent a and unmatched house h such that a prefers h to M(a) • A matching M is coalition-free if there is no coalition, i.e. a sequence of matched agents a0 ,a1 ,…,ar-1 such that ai prefers M(ai) toM(ai+1) (0ir-1) • a1 : h2 h1 • a2 :h3h4 h2 • a3 : h4h3 • a4 : h1h4 • Proposition: M is Pareto optimal if and only if M is maximal, trade-in-free and coalition-free Mis not maximal due to a3 and h3

  9. Testing for Pareto optimality • A matchingM is maximal if there is no agent a and house h, each unmatched in M, such that a finds h acceptable • A matching M is trade-in-free if there is no matched agent a and unmatched house h such that a prefers h to M(a) • A matching M is coalition-free if there is no coalition, i.e. a sequence of matched agents a0 ,a1 ,…,ar-1 such that ai prefers M(ai) toM(ai+1) (0ir-1) • a1 : h2 h1 • a2 :h3h4 h2 • a3 : h4h3 • a4 : h1h4 • Proposition: M is Pareto optimal if and only if M is maximal, trade-in-free and coalition-free Mis not trade-in-free due to a2 and h3

  10. Testing for Pareto optimality • A matchingM is maximal if there is no agent a and house h, each unmatched in M, such that a finds h acceptable • A matching M is trade-in-free if there is no matched agent a and unmatched house h such that a prefers h to M(a) • A matching M is coalition-free if there is no coalition, i.e. a sequence of matched agents a0 ,a1 ,…,ar-1 such that ai prefers M(ai+1) toM(ai) (0ir-1) • a1 : h2 h1 • a2 :h3h4 h2 • a3 : h4h3 • a4 : h1h4 • Proposition: M is Pareto optimal if and only if M is maximal, trade-in-free and coalition-free a1 h1 Mis not coalition-free due to a1, a2, a4 a2 h2 a3 h3 a4 h4

  11. Testing for Pareto optimality • A matchingM is maximal if there is no agent a and house h, each unmatched in M, such that a finds h acceptable • A matching M is trade-in-free if there is no matched agent a and unmatched house h such that a prefers h to M(a) • A matching M is coalition-free if there is no coalition, i.e. a sequence of matched agents a0 ,a1 ,…,ar-1 such that ai prefers M(ai+1) toM(ai) (0  i  r-1) • a1 : h2 h1 • a2 :h3h4 h2 • a3 : h4h3 • a4 : h1h4 • Lemma:M is Pareto optimal if and only if M is maximal, trade-in-free and coalition-free

  12. The envy graph • Straightforward to check a given matching M for the maximality and trade-in-free properties in O(m) time • To check for the existence of a coalition: • Form the envy graph of M, denoted by G(M) • Vertex for each matched agent • Edge from ai to aj if and only if ai prefers M(aj) toM(ai) • Example • a1 : h2 h1 • a2 :h3h4 h2 • a3 : h4h3 • a4 : h1h4 • M admits a coalition if and only if G(M) has a directed cycle • Theorem: we may check whether a given matching M is Pareto optimal in O(m) time a2 a1 a4

  13. Finding a Pareto optimal matching • Simple greedy algorithm, referred to as the serial dictatorship mechanism by economists for each agent a in turn if a has an unmatched house on his list match a to the most-preferred such house; else report a as unmatched; • Theorem: The serial dictatorship mechanism constructs a Pareto optimal matching in O(m) time • Abdulkadiroğlu and Sönmez, 1998 • Example • a1 : h1 h2h3 • a2 : h1h2 • a3 : h1h2

  14. Finding a Pareto optimal matching • Simple greedy algorithm, referred to as the serial dictatorship mechanism by economists for each agent a in turn if a has an unmatched house on his list match a to the most-preferred such house; else report a as unmatched; • Theorem: The serial dictatorship mechanism constructs a Pareto optimal matching in O(m) time • Abdulkadiroğlu and Sönmez, 1998 • Example • a1 : h1h2h3 • a2 : h1h2 • a3 : h1h2

  15. Finding a Pareto optimal matching • Simple greedy algorithm, referred to as the serial dictatorship mechanism by economists for each agent a in turn if a has an unmatched house on his list match a to the most-preferred such house; else report a as unmatched; • Theorem: The serial dictatorship mechanism constructs a Pareto optimal matching in O(m) time • Abdulkadiroğlu and Sönmez, 1998 • Example • a1 : h1h2h3 • a2 : h1h2 • a3 : h1h2

  16. Finding a Pareto optimal matching • Simple greedy algorithm, referred to as the serial dictatorship mechanism by economists for each agent a in turn if a has an unmatched house on his list match a to the most-preferred such house; else report a as unmatched; • Theorem: The serial dictatorship mechanism constructs a Pareto optimal matching in O(m) time • Abdulkadiroğlu and Sönmez, 1998 • Example • a1 : h1h2h3 • a2 : h1h2 • a3 : h1h2 M1={(a1,h1), (a2,h2)}

  17. Finding a Pareto optimal matching • Simple greedy algorithm, referred to as the serial dictatorship mechanism by economists for each agent a in turn if a has an unmatched house on his list match a to the most-preferred such house; else report a as unmatched; • Theorem: The serial dictatorship mechanism constructs a Pareto optimal matching in O(m) time • Abdulkadiroğlu and Sönmez, 1998 • Example • a1 : h1h2h3 • a2 : h1h2 • a3 : h1h2 M1={(a1,h1), (a2,h2)} • a1 : h1 h2h3 • a2 : h1h2 • a3 : h1h2

  18. Finding a Pareto optimal matching • Simple greedy algorithm, referred to as the serial dictatorship mechanism by economists for each agent a in turn if a has an unmatched house on his list match a to the most-preferred such house; else report a as unmatched; • Theorem: The serial dictatorship mechanism constructs a Pareto optimal matching in O(m) time • Abdulkadiroğlu and Sönmez, 1998 • Example • a1 : h1h2h3 • a2 : h1h2 • a3 : h1h2 M1={(a1,h1), (a2,h2)} • a1 : h1 h2h3 • a2 : h1h2 • a3 : h1h2

  19. Finding a Pareto optimal matching • Simple greedy algorithm, referred to as the serial dictatorship mechanism by economists for each agent a in turn if a has an unmatched house on his list match a to the most-preferred such house; else report a as unmatched; • Theorem: The serial dictatorship mechanism constructs a Pareto optimal matching in O(m) time • Abdulkadiroğlu and Sönmez, 1998 • Example • a1 : h1h2h3 • a2 : h1h2 • a3 : h1h2 M1={(a1,h1), (a2,h2)} • a1 : h1 h2h3 • a2 : h1h2 • a3 : h1h2

  20. Finding a Pareto optimal matching • Simple greedy algorithm, referred to as the serial dictatorship mechanism by economists for each agent a in turn if a has an unmatched house on his list match a to the most-preferred such house; else report a as unmatched; • Theorem: The serial dictatorship mechanism constructs a Pareto optimal matching in O(m) time • Abdulkadiroğlu and Sönmez, 1998 • Example • a1 : h1h2h3 • a2 : h1h2 • a3 : h1h2 M1={(a1,h1), (a2,h2)} • a1 : h1 h2h3 • a2 : h1h2 • a3 : h1h2 M2={(a1,h3), (a2,h2), (a3,h1)}

  21. Related work • Rank maximal matchings • Matching M is rank maximal if, in M • Maximum number of agents get their first-choice house; • Subject to (1), maximum number of agents get their second-choice house; etc. • Irving, Kavitha, Mehlhorn, Michail, Paluch, SODA 04 • A rank maximal matching is Pareto optimal, but need not be of maximum size • Popular matchings • Matching M is popular if there is no other matching M’such that: • more agents prefer M’ to M than prefer M to M’ • Abraham, Irving, Kavitha, Mehlhorn, SODA 05 • A popular matchingis Pareto optimal, but need not exist

  22. Related work (cont) • Take underlying weighted bipartite graph G • The weight of a matching M in G is the sum of the weights of the edges contained in M • where AM is the set of agents who are matched in M • ranka(h) is the rank of h in a’s preference list • Find a maximum cardinality minimum weight matching M in G • M is Pareto optimal • For if not there exists a matching M′ such that • ranka(M′(a)) ranka(M(a))for allaAM • ranka(M′(a))< ranka(M(a))for someaAM • so M′contradicts the minimum weight property of M • A maximum cardinality minimum weight matching may be found in O(nmlog n) time • Gabow and Tarjan, 1989

  23. Faster algorithm for finding a maximum Pareto optimal matching • Three-phase algorithm with O(nm) overall complexity • Phase 1 – O(nm) time • Find a maximum matching in G • Classical O(nm) augmenting path algorithm • Hopcroft and Karp, 1973 • Phase 2 – O(m) time • Enforce trade-in-free property • Phase 3 – O(m) time • Enforce coalition-free property • Extension of Gale’s Top-Trading Cycles (TTC) algorithm • Shapley and Scarf, 1974

  24. Phase 1 • a1 : h4h5h3h2h1 • a2 : h3h4h5h9h1h2 • a3 : h5h4h1h2h3 • a4 : h3h5h4 • a5 : h4h3h5 • a6 : h2h3h5h8h6h7h1h11h4h10 • a7 : h1h4h3h6h7h2h10h5h11 • a8 : h1h5h4h3h7h6h8 • a9 : h4 h3h5h9 • Maximum matching M in G has size 8 • M must be maximal • No guarantee that M is trade-in-free or coalition-free

  25. Phase 1 • a1 : h4h5h3h2h1 • a2 : h3h4h5h9h1h2 • a3 : h5h4h1h2h3 • a4 : h3h5h4 • a5 : h4h3h5 • a6 : h2h3h5h8h6h7h1h11h4h10 • a7 : h1h4h3h6h7h2h10h5h11 • a8 : h1h5h4h3h7h6h8 • a9 : h4 h3h5h9 • Maximum matching M in G has size 9 • M must be maximal • No guarantee that M is trade-in-free or coalition-free

  26. Phase 1 Mnot coalition-free • a1 : h4h5h3h2h1 • a2 : h3h4h5h9h1h2 • a3 : h5h4h1h2h3 • a4 : h3h5h4 • a5 : h4h3h5 • a6 : h2h3h5h8h6h7h1h11h4h10 • a7 : h1h4h3h6h7h2h10h5h11 • a8 : h1h5h4h3h7h6h8 • a9 : h4 h3h5h9 • Maximum matching M in G has size 9 • M must be maximal • No guarantee that M is trade-in-free or coalition-free Mnot trade-in-free

  27. Phase 2 description • For each house h, maintain a list Lh , initially containing those pairs (a,r) such that: • a is a matched agent who prefers h to M(a) • r is the rank of h in a’s list • Maintain a stack S of unmatched houses h whose list Lh is nonempty • Each matched agent a maintains a pointer curra to the rank of M(a) • Example • a1 : h4h5h3h2h1 • a2 : h3h4h5h9h1h2 • a3 : h5h4h1h2h3 • a4 : h3h5h4 • a5 : h4h3h5 • a6 : h2h3h5h8h6h7h1h11h4h10 • a7 : h1h4h3h6h7h2h10h5h11 • a8 : h1h5h4h3h7h6h8 • a9 : h4 h3h5h9 Lh6=(a6 , 5), (a7 , 4), (a8 , 6) Lh7=(a6 , 6), (a7 , 5), (a8 , 5) Lh8=(a6 , 4) Lh10=(a7 , 7) Lh11=(a6 , 8) S=h6 , h7 curra6=10 curra7=9

  28. Phase 2 description while S is nonempty pop a house h from S; remove the first pair (a,r) from the head of Lh; if r < curra// a prefers h to M(a) let h’= M(a); remove (a,h’) from M and add (a,h) to M; curra := h; h := h’; push h onto the stack if Lh is nonempty; • a1 : h4h5h3h2h1 • a2 : h3h4h5h9h1h2 • a3 : h5h4h1h2h3 • a4 : h3h5h4 • a5 : h4h3h5 • a6 : h2h3h5h8h6h7h1h11h4h10 • a7 : h1h4h3h6h7h2h10h5h11 • a8 : h1h5h4h3h7h6h8 • a9 : h4 h3h5h9 Lh6=(a6 , 5), (a7 , 4), (a8 , 6) Lh7=(a6 , 6), (a7 , 5), (a8 , 5) Lh8=(a6 , 4) Lh10=(a7 , 7) Lh11=(a6 , 8) S=h6 , h7 curra6=10 curra7=9

  29. Phase 2 example while S is nonempty pop a house h from S; remove the first pair (a,r) from the head of Lh; if r < curra// a prefers h to M(a) let h’= M(a); remove (a,h’) from M and add (a,h) to M; curra := h; h := h’; push h onto the stack if Lh is nonempty; • a1 : h4h5h3h2h1 • a2 : h3h4h5h9h1h2 • a3 : h5h4h1h2h3 • a4 : h3h5h4 • a5 : h4h3h5 • a6 : h2h3h5h8h6h7h1h11h4h10 • a7 : h1h4h3h6h7h2h10h5h11 • a8 : h1h5h4h3h7h6h8 • a9 : h4 h3h5h9 Lh6=(a6 , 5), (a7 , 4), (a8 , 6) Lh7=(a6 , 6), (a7 , 5), (a8 , 5) Lh8=(a6 , 4) Lh10=(a7 , 7) Lh11=(a6 , 8) S=h6 , h7 curra6=10 curra7=9

  30. Phase 2 example while S is nonempty pop a house h from S; remove the first pair (a,r) from the head of Lh; if r < curra// a prefers h to M(a) let h’= M(a); remove (a,h’) from M and add (a,h) to M; curra := h; h := h’; push h onto the stack if Lh is nonempty; • a1 : h4h5h3h2h1 • a2 : h3h4h5h9h1h2 • a3 : h5h4h1h2h3 • a4 : h3h5h4 • a5 : h4h3h5 • a6 : h2h3h5h8h6h7h1h11h4h10 • a7 : h1h4h3h6h7h2h10h5h11 • a8 : h1h5h4h3h7h6h8 • a9 : h4 h3h5h9 Lh6=(a6 , 5), (a7 , 4), (a8 , 6) Lh7=(a7 , 5), (a8 , 5) Lh8=(a6 , 4) Lh10=(a7 , 7) Lh11=(a6 , 8) S=h6 , h10 curra6=6 curra7=9

  31. Phase 2 example while S is nonempty pop a house h from S; remove the first pair (a,r) from the head of Lh; if r < curra// a prefers h to M(a) let h’= M(a); remove (a,h’) from M and add (a,h) to M; curra := h; h := h’; push h onto the stack if Lh is nonempty; • a1 : h4h5h3h2h1 • a2 : h3h4h5h9h1h2 • a3 : h5h4h1h2h3 • a4 : h3h5h4 • a5 : h4h3h5 • a6 : h2h3h5h8h6h7h1h11h4h10 • a7 : h1h4h3h6h7h2h10h5h11 • a8 : h1h5h4h3h7h6h8 • a9 : h4 h3h5h9 Lh6=(a6 , 5), (a7 , 4), (a8 , 6) Lh7=(a7 , 5), (a8 , 5) Lh8=(a6 , 4) Lh10=(a7 , 7) Lh11=(a6 , 8) S=h6 , h10 curra6=6 curra7=9

  32. Phase 2 example while S is nonempty pop a house h from S; remove the first pair (a,r) from the head of Lh; if r < curra// a prefers h to M(a) let h’= M(a); remove (a,h’) from M and add (a,h) to M; curra := h; h := h’; push h onto the stack if Lh is nonempty; • a1 : h4h5h3h2h1 • a2 : h3h4h5h9h1h2 • a3 : h5h4h1h2h3 • a4 : h3h5h4 • a5 : h4h3h5 • a6 : h2h3h5h8h6h7h1h11h4h10 • a7 : h1h4h3h6h7h2h10h5h11 • a8 : h1h5h4h3h7h6h8 • a9 : h4 h3h5h9 Lh6=(a6 , 5), (a7 , 4), (a8 , 6) Lh7=(a7 , 5), (a8 , 5) Lh8=(a6 , 4) Lh10= Lh11=(a6 , 8) S=h6 , h11 curra6=6 curra7=7

  33. Phase 2 example while S is nonempty pop a house h from S; remove the first pair (a,r) from the head of Lh; if r < curra// a prefers h to M(a) let h’= M(a); remove (a,h’) from M and add (a,h) to M; curra := h; h := h’; push h onto the stack if Lh is nonempty; • a1 : h4h5h3h2h1 • a2 : h3h4h5h9h1h2 • a3 : h5h4h1h2h3 • a4 : h3h5h4 • a5 : h4h3h5 • a6 : h2h3h5h8h6h7h1h11h4h10 • a7 : h1h4h3h6h7h2h10h5h11 • a8 : h1h5h4h3h7h6h8 • a9 : h4 h3h5h9 Lh6=(a6 , 5), (a7 , 4), (a8 , 6) Lh7=(a7 , 5), (a8 , 5) Lh8=(a6 , 4) Lh10= Lh11=(a6 , 8) S=h6 , h11 curra6=6 curra7=7

  34. Phase 2 example while S is nonempty pop a house h from S; remove the first pair (a,r) from the head of Lh; if r < curra// a prefers h to M(a) let h’= M(a); remove (a,h’) from M and add (a,h) to M; curra := h; h := h’; push h onto the stack if Lh is nonempty; • a1 : h4h5h3h2h1 • a2 : h3h4h5h9h1h2 • a3 : h5h4h1h2h3 • a4 : h3h5h4 • a5 : h4h3h5 • a6 : h2h3h5h8h6h7h1h11h4h10 • a7 : h1h4h3h6h7h2h10h5h11 • a8 : h1h5h4h3h7h6h8 • a9 : h4 h3h5h9 Lh6=(a6 , 5), (a7 , 4), (a8 , 6) Lh7=(a7 , 5), (a8 , 5) Lh8=(a6 , 4) Lh10= Lh11= S=h6 curra6=6 curra7=7

  35. Phase 2 example while S is nonempty pop a house h from S; remove the first pair (a,r) from the head of Lh; if r < curra// a prefers h to M(a) let h’= M(a); remove (a,h’) from M and add (a,h) to M; curra := h; h := h’; push h onto the stack if Lh is nonempty; • a1 : h4h5h3h2h1 • a2 : h3h4h5h9h1h2 • a3 : h5h4h1h2h3 • a4 : h3h5h4 • a5 : h4h3h5 • a6 : h2h3h5h8h6h7h1h11h4h10 • a7 : h1h4h3h6h7h2h10h5h11 • a8 : h1h5h4h3h7h6h8 • a9 : h4 h3h5h9 Lh6=(a7 , 4), (a8 , 6) Lh7=(a7 , 5), (a8 , 5) Lh8=(a6 , 4) Lh10= Lh11= S=h7 curra6=5 curra7=7

  36. Phase 2 example while S is nonempty pop a house h from S; remove the first pair (a,r) from the head of Lh; if r < curra// a prefers h to M(a) let h’= M(a); remove (a,h’) from M and add (a,h) to M; curra := h; h := h’; push h onto the stack if Lh is nonempty; • a1 : h4h5h3h2h1 • a2 : h3h4h5h9h1h2 • a3 : h5h4h1h2h3 • a4 : h3h5h4 • a5 : h4h3h5 • a6 : h2h3h5h8h6h7h1h11h4h10 • a7 : h1h4h3h6h7h2h10h5h11 • a8 : h1h5h4h3h7h6h8 • a9 : h4 h3h5h9 Lh6=(a7 , 4), (a8 , 6) Lh7=(a7 , 5), (a8 , 5) Lh8=(a6 , 4) Lh10= Lh11= S=h7 curra6=5 curra7=7

  37. Phase 2 example while S is nonempty pop a house h from S; remove the first pair (a,r) from the head of Lh; if r < curra// a prefers h to M(a) let h’= M(a); remove (a,h’) from M and add (a,h) to M; curra := h; h := h’; push h onto the stack if Lh is nonempty; • a1 : h4h5h3h2h1 • a2 : h3h4h5h9h1h2 • a3 : h5h4h1h2h3 • a4 : h3h5h4 • a5 : h4h3h5 • a6 : h2h3h5h8h6h7h1h11h4h10 • a7 : h1h4h3h6h7h2h10h5h11 • a8 : h1h5h4h3h7h6h8 • a9 : h4 h3h5h9 Lh6=(a7 , 4), (a8 , 6) Lh7=(a8 , 5) Lh8=(a6 , 4) Lh10= Lh11= S= curra6=5 curra7=5

  38. Phase 2 example while S is nonempty pop a house h from S; remove the first pair (a,r) from the head of Lh; if r < curra// a prefers h to M(a) let h’= M(a); remove (a,h’) from M and add (a,h) to M; curra := h; h := h’; push h onto the stack if Lh is nonempty; • a1 : h4h5h3h2h1 • a2 : h3h4h5h9h1h2 • a3 : h5h4h1h2h3 • a4 : h3h5h4 • a5 : h4h3h5 • a6 : h2h3h5h8h6h7h1h11h4h10 • a7 : h1h4h3h6h7h2h10h5h11 • a8 : h1h5h4h3h7h6h8 • a9 : h4 h3h5h9 Lh6=(a7 , 4), (a8 , 6) Lh7=(a8 , 5) Lh8=(a6 , 4) Lh10= Lh11= S= curra6=5 curra7=5

  39. Phase 2 termination • Once Phase 2 terminates, matching is trade-in-free • Data structures may be initialised in O(m) time • Main loop takes O(m) time overall • Phase 2 is O(m) • Coalitions may remain…

  40. Phase 2 termination • Once Phase 2 terminates, matching is trade-in-free • Data structures may be initialised in O(m) time • Main loop takes O(m) time overall • Phase 2 is O(m) • Coalitions may remain… • Example • a1 : h4h5h3h2h1 • a2 : h3h4h5h9h1h2 • a3 : h5h4h1h2h3 • a4 : h3h5h4 • a5 : h4h3h5 • a6 : h2h3h5h8h6h7h1h11h4h10 • a7 : h1h4h3h6h7h2h10h5h11 • a8 : h1h5h4h3h7h6h8 • a9 : h4 h3h5h9

  41. Phase 3 description • Elimination of coalitions • Repeatedly finding and eliminating coalitions takes O(m2) time • Cycle detection in G(M) takes O(m) time • O(m) coalitions in the worst case • Faster method: extension of TTC algorithm • An agent matched to his/her first-choice house cannot be in a coalition • Such an agent can be removed from consideration • Houses matched to such agents are no longer exchangeable • Such a house can be removed from consideration • This rule can be recursively applied until either • No agent remains (matching is coalition-free) • A coalition exists, which can be found and removed

  42. Phase 3 description • Build a path P of agents (represented by a stack) • Each house is initially unlabelled • Each agent a has a pointer p(a) pointing to M(a) or the first unlabelled house on a’s preference list (whichever comes first) • Keep a counter c(a) for each agent a (initially c(a)=0) • This represents the number of times a appears on the stack • Outer loop iterates over each matched agent a such that p(a)M(a) • Initialise P to contain agent a • Inner loop iterates while P is nonempty • Pop an agent a’ from P • If c(a’)=2 we have a coalition (CYCLE) • Remove by popping the stack and label the houses involved • Else if p(a’)=M(a’) we reach a dead end (BACKTRACK) • Label M(a’) • Else add a’’ wherep(a’)=M(a’’)to the path (EXTEND) • Push a’ and a’’ onto the stack • Increment c(a’’)

  43. Phase 3: example Agent counter House label • a1 : h4h5h3h2h1 • a2 : h3h4h5h9h1h2 • a3 : h5h4h1h2h3 • a4 : h3h5h4 • a5 : h4h3h5 • a6 : h2h3h5h8h6h7h1h11h4h10 • a7 : h1h4h3h6h7h2h10h5h11 • a8 : h1h5h4h3h7h6h8 • a9 : h4 h3h5h9 a1 1 h1 a2 0 h2 a3 0 h3 a4 0 h4 a5 0 h5 a6 0 h6 a7 0 h7 a8 0 h8 a9 0 h9 a1 P=a1

  44. Phase 3: example Agent counter House label • a1 : h4h5h3h2h1 • a2 : h3h4h5h9h1h2 • a3 : h5h4h1h2h3 • a4 : h3h5h4 • a5 : h4h3h5 • a6 : h2h3h5h8h6h7h1h11h4h10 • a7 : h1h4h3h6h7h2h10h5h11 • a8 : h1h5h4h3h7h6h8 • a9 : h4 h3h5h9 a1 1 h1 a2 0 h2 a3 0 h3 a4 1 h4 a5 0 h5 a6 0 h6 a7 0 h7 a8 0 h8 a9 0 h9 a4 a1 EXTEND P=a1,a4

  45. Phase 3: example Agent counter House label • a1 : h4h5h3h2h1 • a2 : h3h4h5h9h1h2 • a3 : h5h4h1h2h3 • a4 : h3h5h4 • a5 : h4h3h5 • a6 : h2h3h5h8h6h7h1h11h4h10 • a7 : h1h4h3h6h7h2h10h5h11 • a8 : h1h5h4h3h7h6h8 • a9 : h4 h3h5h9 a1 1 h1 a2 0 h2 a3 1 h3 a4 1 h4 a5 0 h5 a6 0 h6 a7 0 h7 a8 0 h8 a9 0 h9 a4 a1 EXTEND a3 P=a1,a4 , a3

  46. Phase 3: example Agent counter House label • a1 : h4h5h3h2h1 • a2 : h3h4h5h9h1h2 • a3 : h5h4h1h2h3 • a4 : h3h5h4 • a5 : h4h3h5 • a6 : h2h3h5h8h6h7h1h11h4h10 • a7 : h1h4h3h6h7h2h10h5h11 • a8 : h1h5h4h3h7h6h8 • a9 : h4 h3h5h9 a1 1 h1 a2 0 h2 a3 1 h3 a4 1 h4 a5 1 h5 a6 0 h6 a7 0 h7 a8 0 h8 a9 0 h9 a4 a1 EXTEND a3 P=a1,a4 , a3 , a5  a5

  47. Phase 3: example Agent counter House label • a1 : h4h5h3h2h1 • a2 : h3h4h5h9h1h2 • a3 : h5h4h1h2h3 • a4 : h3h5h4 • a5 : h4h3h5 • a6 : h2h3h5h8h6h7h1h11h4h10 • a7 : h1h4h3h6h7h2h10h5h11 • a8 : h1h5h4h3h7h6h8 • a9 : h4 h3h5h9 a1 1 h1 a2 0 h2 a3 1 h3 a4 2h4 a5 1 h5 a6 0 h6 a7 0 h7 a8 0 h8 a9 0 h9 a4 a1 EXTEND a3 P=a1,a4 , a3 , a5 ,a4 a5

  48. Phase 3: example Agent counter House label • a1 : h4h5h3h2h1 • a2 : h3h4h5h9h1h2 • a3 : h5h4h1h2h3 • a4 : h3h5h4 • a5 : h4h3h5 • a6 : h2h3h5h8h6h7h1h11h4h10 • a7 : h1h4h3h6h7h2h10h5h11 • a8 : h1h5h4h3h7h6h8 • a9 : h4 h3h5h9 a1 1 h1 a2 0 h2 a3 1 h3 a42 h4 a5 1 h5 a6 0 h6 a7 0 h7 a8 0 h8 a9 0 h9 a4 a1 CYCLE a3 P=a1,a4, a3 , a5 a5

  49. Phase 3: example Agent counter House label • a1 : h4h5h3h2h1 • a2 : h3h4h5h9h1h2 • a3 : h5h4h1h2h3 • a4 : h3h5h4 • a5: h4h3h5 • a6 : h2h3h5h8h6h7h1h11h4h10 • a7 : h1h4h3h6h7h2h10h5h11 • a8 : h1h5h4h3h7h6h8 • a9 : h4 h3h5h9 a1 1 h1 a2 0 h2 a30h3 a40 h4 a50h5 a6 0 h6 a7 0 h7 a8 0 h8 a9 0 h9 a4 a1 CYCLE a3 P=a1,a4, a3 , a5 a5

  50. Phase 3: example Agent counter House label • a1 : h4h5h3h2h1 • a2 : h3h4h5h9h1h2 • a3 : h5h4h1h2h3 • a4 : h3h5h4 • a5: h4h3h5 • a6 : h2h3h5h8h6h7h1h11h4h10 • a7 : h1h4h3h6h7h2h10h5h11 • a8 : h1h5h4h3h7h6h8 • a9 : h4 h3h5h9 a1 1 h1 a2 0 h2 a3 0 h3 a4 0 h4 a5 0 h5 a6 0 h6 a7 0 h7 a8 0 h8 a9 0 h9 a1 P=a1

More Related