TRABAJO FIN DE GRADO Título El problema de los matrimonios estables y otros problemas de emparejamiento Autor/es Marina Blanco Peña Director/es Jesús María Aransay Azofra Facultad Facultad de Ciencias, Estudios Agroalimentarios e Informática Titulación Grado en Matemáticas Departamento Curso Académico 2014-2015 El problema de los matrimonios estables y otros problemas de emparejamiento, trabajo fin de grado de Marina Blanco Peña, dirigido por Jesús María Aransay Azofra (publicado por la Universidad de La Rioja), se difunde bajo una Licencia Creative Commons Reconocimiento-NoComercial-SinObraDerivada 3.0 Unported.᷉ Permisos que vayan más allá de lo cubierto por esta licencia pueden solicitarse a los titulares del copyright. © © El autor Universidad de La Rioja, Servicio de Publicaciones, 2015 publicaciones.unirioja.es E-mail: [email protected] Facultad de Ciencias, Estudios Agroalimentarios e Informática TRABAJO FIN DE GRADO Grado en Matemáticas El problema de los matrimonios estables y otros problemas de emparejamiento. Alumno: Marina Blanco Peña Tutores: Jesús María Aransay Azofra Logroño, Julio,2015 Trabajo fin de Grado Grado en Matemáticas El problema de los matrimonios estables y otros problemas de emparejamiento Marina Blanco Peña Memoria realizada bajo la dirección del Dr. D. Jesús Marı́a Aransay Azofra Facultad de Ciencias, Estudios Agroalimentarios e Informática Universidad de La Rioja Julio 2015 Resumen En este trabajo, se van a plantear y resolver varios problemas de emparejamiento que se describen en el primer capı́tulo (el problema de los matrimonios estables, el de los residentes/hospitales y el de los compañeros de habitación) junto con algunas de sus variantes más relevantes. A continuación en el segundo capı́tulo se presentarán una serie de algoritmos (que también serán implementados en Java) para resolver todas las variantes del problema de los matrimonios estables vistas en el capı́tulo anterior, junto con una adaptación de estos algoritmos para utilizarlos sobre el problema de los residentes/hospitales. El tercer y cuarto capı́tulos se centran en el estudio de las propiedades del problema del matrimonio estable. En particular, se analiza la estructura del espacio de soluciones del problema usando la teorı́a de retı́culos distributivos. También se exploran las relaciones del problema con la teorı́a de programación lineal (más concretamente programación entera binaria) y se comparan las caracterı́sticas de esta representación con los algoritmos propuestos en el Capı́tulo 2. iii Abstract The following essay brings up and solves several matching problems, which are described on first chapter: the stable marriage problem, the Hospital/Residents Problem and the Stable Roommates Problem, together with their most important variations. The second chapter continues showing a series of algorithms (also implemented with Java) to solve all the variations of the stable marriage problem, developed on the previous section, along with an adaptation of these algorithms to use them with the Hospital-Residents problem. Third and fourth sections of the dissertation are focused on the study of the characteristics of the stable marriage problem. The structure of the solution space of this problem using the distributive lattice theory is specially analyzed. The relationships between the problem and the linear programming theory (in particular the binary integer programming) are also explored. The attributes of this representation are compared as well with the algorithms on second chapter. v Índice general Resumen III Abstract V 1. Introducción 1.1. Historia del problema . . . . . . . . . . . 1.2. Problema de los matrimonios estables . . 1.2.1. Conceptos generales . . . . . . . . 1.2.2. Variantes . . . . . . . . . . . . . . 1.3. Problema de los residentes/hospitales . . . 1.3.1. Conceptos generales . . . . . . . . 1.4. Problema de los compañeros de habitación 1.4.1. Conceptos generales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1 2 2 4 4 4 5 5 2. Algoritmos de emparejamiento 2.1. Notación y algoritmo básico . . . . . . . . . . . . . . . . . . 2.1.1. Descripción e implementación del algoritmo . . . . . 2.1.2. Implementación del algoritmo en Java . . . . . . . . 2.2. Algoritmos para variantes del problema de emparejamiento 2.2.1. Listas completas con distinto cardinal . . . . . . . . 2.2.2. Listas incompletas . . . . . . . . . . . . . . . . . . . 2.3. Algoritmo para el problema residentes/hospitales . . . . . . 2.3.1. Tipos básicos y adaptación de las matrices . . . . . 2.4. Algoritmo de comprobación de estabilidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 7 7 9 12 12 13 13 13 18 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3. Análisis matemático del problema 3.1. Análisis del algoritmo de emparejamiento . . . . . . . . . . . . . 3.2. La estructura de retı́culo . . . . . . . . . . . . . . . . . . . . . . . 3.2.1. Resultados previos . . . . . . . . . . . . . . . . . . . . . . 3.2.2. El problema de emparejamiento definido como retı́culo distributivo . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.3. El retı́culo distributivo como problema de emparejamiento vii 21 21 23 24 28 33 viii ÍNDICE GENERAL 4. Programación lineal para problemas de emparejamiento 4.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.1.1. Variables necesarias . . . . . . . . . . . . . . . . . . 4.2. Planteamiento del problema . . . . . . . . . . . . . . . . . . 4.2.1. Restricciones de emparejamiento . . . . . . . . . . . 4.2.2. Restricciones de estabilidad . . . . . . . . . . . . . . 4.3. Resolución de las ecuaciones y análisis de los resultados . . 4.3.1. Resultado óptimo para mujeres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 41 42 42 42 43 44 45 A. Código java 47 A.1. Algoritmo Básico . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 A.2. Algoritmo con listas de distinto cardinal . . . . . . . . . . . . . . 49 A.3. Algoritmo para listas incompletas . . . . . . . . . . . . . . . . . . 50 Conclusiones 53 Bibliografı́a 55 Capı́tulo 1 Introducción 1.1. Historia del problema A mediados del siglo XIX, en Estados Unidos, habı́a una gran competencia en el momento que a los estudiantes de medicina les tocaba elegir hospital al que ir de residente. Al no estar regulado, los hospitales enviaban ofertas a los estudiantes en los que estaban interesados, sin fecha prefijada y en distinto orden cada hospital. Los estudiantes, por miedo a no conseguir mejores ofertas, aceptaban la primera oferta que se les presentaba. Esto ocasionaba bastantes problemas, ya que los estudiantes, por lo general, iban a un hospital en el que no estaban interesados o, tras aceptar las prácticas en un hospital, recibı́an una oferta de otro en el que estaban más interesados. Otro inconveniente de este sistema de reparto era que los hospitales hacı́an elecciones muy prematuras de sus residentes, esto es, que en lugar de que los estudiantes escogieran en último curso su hospital, los hospitales tratando de conseguir a sus residentes lo antes posible, realizaban sus ofertas cuando éstos estaban en sus primeros años de carrera, sin siquiera saber si al final de la carrera eran el perfil de alumno que ellos buscaban. Para regular esta situación, F. J. Mullin, decano de estudiantes de la facultad de medicina de la Universidad de Chicago, propuso la creación de un organismo intermedio, gracias al cual ningún estudiante recibiera ofertas directas de los hospitales. La idea era que cada estudiante en su último curso de estudios, enviara al organismo una lista de los hospitales a los que le gustarı́a ir (poniendo en primer lugar el hospital en el que más interesados estuvieran). Los hospitales debı́an realizar lo mismo, enviar una lista de los alumnos en los que estaban interesados a dicho organismo. La idea de este trabajo surge a raı́z de lo anterior, ya que Mullin necesitaba un algoritmo a la hora de emparejar a los estudiantes con los hospitales. ¿Cómo podrı́a conseguir un resultado beneficiando lo máximo posible a los estudiantes y a los hospitales? Tras varios años realizando algoritmos no del todo satisfactorios, en 1951, se diseñó el llamado NRMP (Programa Nacional de Em1 CAPÍTULO 1. INTRODUCCIÓN 2 parejamiento de Residentes) [3], que es el encargado de definir los algoritmos que se siguen utilizando actualmente. 1.2. Problema de los matrimonios estables El problema de los matrimonios estables es el problema “base” de los demás problemas y al que acudiremos para hacer una generalización de sus algoritmos o definir conceptos (por ejemplo a la hora de reolver el problema de los residentes/hospitales). D. Gale y L. Shapley (1962) [4] fueron los encargados de plantear y resolver el problema, y aplicarlo a otros ámbitos como el problema de los residentes/hospitales. Curiosamente, ellos no conocı́an el algoritmo NRMP de 1951. Este algoritmo ası́ como su aplicación al problema de los residentes/hospitales y otras variantes del problema aplicadas en contextos reales (como por ejemplo alumnos y escuelas en la región de Nueva York) les valió a LLoyd Shapley y Alvin Roth el premio Nobel de Economı́a en el año 2012 [8]. El planteamiento del problema es muy sencillo: Tenemos dos conjuntos: mujeres y hombres, y ambos son del mismo cardinal (hay el mismo número de mujeres que de hombres), y además cada uno tiene su propia lista de preferencias. La pregunta que debemos responder es: ¿Cuál es la mejor manera de emparejarlos para que todos queden satisfechos? Para tratar de resolver este problema debemos establecer una serie de conceptos que se detallan a continuación. 1.2.1. Conceptos generales Para plantear el problema, necesitaremos lo siguiente: Dos conjuntos disjuntos, mujeres (M ) y hombres (H), del mismo tamaño, (card(M ) = card(H) = n), y cuyos elementos denotaremos como: M = {m1 , . . . , mn } y H = {h1 , . . . , hn }. Una lista de preferencias para cada individuo. Es decir, cada persona hará una lista estrictamente ordenada (comenzando con la persona de sexo opuesto en la que está más interesada) en la que incluya a todas las personas de sexo opuesto. Es interesante observar que las listas de preferencias de mujeres y hombres, se pueden denotar por matrices n ∗ n, luego tendremos en nuestro caso dos matrices de preferencias (una para las mujeres y otra para los hombres). Una vez establecidos los conjuntos y las listas de preferencias, podemos comenzar a intentar resolver nuestro problema. Veamos algunos conceptos básicos más: Un emparejamiento E, es una correspondencia biyectiva (1:1) entre las mujeres y los hombres. 3 Sean mi y hj , una mujer y un hombre respectivamente. Se dice que mi y hj son pareja en E si en la correspondencia E han sido emparejados. Se denota como mi = pE (hj ) ó hj = pE (mi ). Diremos que mi y hj forman una pareja bloqueante en E o que bloquean el emparejamiento E si: • mi y hj no son pareja en E; • mi prefiere a hj antes que a pE (mi ) y hj prefiere a mi antes que a pE (hj ). Es decir, mi y hj preferirı́an ser pareja, en lugar de sus respectivas parejas obtenidas en E. Si en E hay al menos una pareja bloqueante, se dice que el emparejamiento E es inestable. En caso contrario, el emparejamiento es estable. Ejemplo 1.2.1. Sean Marı́a, Ana, Lucı́a el conjunto de mujeres y Carlos, Marco, Juan el conjunto de hombres y sean las matrices de preferencias las que se muestran a continuación. Obtener un emparejamiento estable M. Marı́a Ana Lucı́a Carlos Juan Juan Marco Marco Carlos Juan Carlos Marco Matriz de preferencias de las mujeres Carlos Marco Juan Ana Marı́a Marı́a Marı́a Ana Lucı́a Lucı́a Lucı́a Ana Matriz de preferencias de los hombres Antes de comenzar a resolver el problema nos pueden surgir varias preguntas. ¿Existe solución? ¿La solución es única? ¿La solución beneficia más a las mujeres que a hombres o es equilibrada?. . . Estas preguntas las resolveremos más adelante. De momento nos conformamos con saber que {(Marı́a,Carlos), (Ana,Marco), (Lucı́a,Juan)} es un emparejamiento estable. Ejemplo 1.2.2. Probar que E = {(Marı́a,Juan), (Ana,Marco), (Lucı́a,Carlos)} es un emparejamiento inestable. Para probar que es un emparejamiento inestable, basta ver que hay al menos una pareja que bloquea el emparejamiento. Vemos que el par (Marı́a,Carlos) es una pareja bloqueante ya que: No son pareja en E. Marı́a prefiere estar con Carlos que con Juan y Carlos prefiere estar con Marı́a que con Lucı́a. CAPÍTULO 1. INTRODUCCIÓN 4 1.2.2. Variantes El modelo establecido anteriormente tiene unas condiciones un tanto estrictas, ya que se exige que haya el mismo número de mujeres que de hombres, que cada uno de ellos incluya en su lista de preferencias a todas las personas de sexo opuesto. . . Por eso estudiaremos algoritmos para resolver distintas variaciones del problema: Los conjuntos (mujeres y hombres) tienen distinto cardinal. Las listas de preferencias pueden estar incompletas. 1.3. Problema de los residentes/hospitales Como hemos visto en el apartado de historia, el problema de residentes/hospitales ha dado mucho de qué hablar, por lo que vamos a estudiar el modo en el que Gale-Shapley construyeron un algoritmo para solucionarlo. Tenemos un conjunto de residentes R = {r1 , . . . , rm }, que deben hacer prácticas en algún hospital. Denotaremos el conjunto de hospitales como H = {H1 , . . . , Hn }. Por lo general, hay más residentes que hospitales, y cada hospital tiene un número de plazas. Además hay que tener en cuenta que el número de residentes que desean realizar prácticas, no debe sobrepasar el número total de las plazas que ofertan todos los hospitales. Por tanto, tendremos un emparejamiento E (N:1) entre los residentes y los hospitales y al igual que en el problema de los matrimonios estables, debemos obtener un emparejamiento que satisfaga a todas las partes. 1.3.1. Conceptos generales Los conceptos son muy similares a los vistos en el problema de los matrimonios estables aunque tienen alguna pequeña variación: Cada residente y cada hospital establecerá su lista de preferencias que no necesariamente será completa. Un emparejamiento se dice inestable, si existe un residente ri y un hospital Hj tales que cumplen las siguientes condiciones: • Hj está en la lista de ri y viceversa. • ri , o está desemparejado, o prefiere Hj al hospital con el que ha sido emparejado. • Hj , o no ha cubierto todas sus vacantes, o prefiere a ri como residente a uno de sus residentes asignados por E. Para transformar el problema a un problema de matrimonios estables para reutilizar sus algoritmos, y establecer un emparejamiento E(1:1), lo haremos del siguiente modo: 5 Cada hospital Hi , que tiene n plazas, lo consideraremos como n hospitales Hi1 , . . . , Hin los cuales tienen la misma lista de preferencias que Hi . Además, en las listas de los residentes, sustituimos el hospital Hi por el conjunto Hi1 , . . . , Hin , por lo que ahora, usando un algoritmo para el problema de emparejamiento con listas incompletas, podrı́amos resolver nuestro problema. Es importante notar que en el caso de listas incompletas, como veremos en el Capı́tulo 2, no siempre hay una solución estable al problema original. 1.4. Problema de los compañeros de habitación Imaginemos un campamento en el que tenemos que distribuir a un grupo de niños en habitaciones. En cada habitación irı́an dos niños, luego nuestro problema, al igual que en los anteriores, es ver cuál es el emparejamiento óptimo para distribuir a todos los niños. Vemos que sigue la misma idea que el problema de los matrimonios estables, pero la resolución es completamente distinta. En el problema de los matrimonios estables tenı́amos que establecer una relación E(1:1) entre dos conjuntos, mientras que en el problema de los compañeros de habitación, tenemos un único conjunto C = {c1 , . . . , cn } que debemos particionar en parejas disjuntas. 1.4.1. Conceptos generales Al igual que en los otros problemas, cada persona ci tiene su lista de preferencias, en la que incluye al resto de posibles compañeros ordenados, poniendo en primer lugar a la persona que más le gustarı́a tener por compañera. En este caso, al no tener más que un conjunto, tenemos una única matriz de preferencias a la que llamaremos tabla de preferencias. Sean ci y cj dos personas del conjunto C; un emparejamiento E se dice inestable si: ci y cj no son pareja en E. ci prefiere a cj antes que a pE (ci ) y cj prefiere a ci antes que a pE (cj ). Es decir, ci y cj preferirı́an ser pareja, en lugar de sus respectivas parejas obtenidas en E. Otro de los cambios que tenemos es que a veces no hay solución posible (lo probaremos más adelante) por lo que: Diremos que un problema es resoluble si admite un emparejamiento estable. En caso contrario, diremos que es irresoluble. Ejemplo 1.4.1. Eva, Iciar, Laura y Patricia, desean compartir piso. Disponemos dos pisos con dos habitaciones individuales cada uno (ver Figura 1). A partir de la tabla de preferencias especificada a continuación, estudiar la resolubilidad del problema, y en caso de ser resoluble, buscar un emparejamiento estable. CAPÍTULO 1. INTRODUCCIÓN 6 Eva Iciar Laura Patricia Iciar Laura Eva Eva Laura Eva Iciar Iciar Patricia Patricia Patricia Laura Matriz de preferencias (a) Piso 1 (b) Piso 2 Figura 1.1: Pisos a compartir por las estudiantes Para resolver nuestro problema, comenzaremos por Eva, que es la primera de nuestra lista. 1. Emparejamos a Eva con Iciar, que es el primero de su lista. Luego E={(Eva,Iciar),(Laura,Patricia)} es nuestra solución provisional. 2. Este emparejamiento es inestable, ya que Iciar prefiere a Laura como compañera antes que a Eva y Laura prefiere a Iciar en lugar de a Patricia, con lo cual lo ahora nuestra solución será E={(Laura,Iciar), (Eva,Patricia)} 3. Este emparejamiento sigue siendo inestable, ya que Eva prefiere a Laura que a Patricia y Laura prefiere a Eva que a su compañero actual, Iciar, luego ahora tenemos E={(Laura,Eva), (Iciar,Patricia)} 4. Nos vuelve a ocurrir lo mismo que en los casos anteriores. Iciar prefiere a Eva que a Patricia, y Eva prefiere a Iciar que a Laura, luego volvemos a la solución del punto 1. 5. Por lo que como ya hemos barrido todas las posibilidades, ya que en todos los casos uno de los individuos estaba en el emparejamiento con Patricia, podemos concluir que este problema es irresoluble. ¿Por qué ocurre esto? ¿Es porque nadie quiere compartir piso con Patricia? En realidad, es debido a que Patricia está en última posición y a que el resto de chicas se eligen entre ellas de manera combinada, es decir, que Eva elija a Iciar y Laura, Iciar a Laura y Eva y Laura a Eva e Iciar en ese orden. Capı́tulo 2 Algoritmos de emparejamiento 2.1. Notación y algoritmo básico En esta sección, además de establecer los algoritmos para resolver los problemas descritos anteriormente, vamos a programarlos en Java. Por tanto, teniendo en cuenta esto, debemos tener especial cuidado con los ı́ndices de las matrices, que como otros muchos lenguajes de programación, comienzan en 0. Vamos a comenzar con el algoritmo más básico, el del problema de listas de preferencias completas con el mismo cardinal que servirı́a para resolver el problema de la Sección 1.2. Por tanto, siendo n el número de mujeres (o de hombres) y siendo M M la matriz de preferencias de éstas, la matriz quedarı́a algo ası́: ⎤ ⎡ h01 ... h0(n−1) h00 ⎢ h10 h11 ... h1(n−1) ⎥ ⎥ ⎢ MM = ⎢ . ⎥ . .. . .. .. ⎦ ⎣ .. . h(n−1)0 h(n−1)1 ... h(n−1)(n−1) La matriz de preferencias de los hombres, M H será análoga a la de mujeres. 2.1.1. Descripción e implementación del algoritmo Vamos a ir describiendo el algoritmo poco a poco, dando una serie de ideas claves para éste. Los hombres comenzarán todos emparejados con una mujer imaginaria (una mujer no deseada) que más adelante denotaremos por Ω, la cual se añadirá la última en la lista de preferencias de cada hombre. Además, tanto los hombres como las mujeres pueden estar en dos estados: emparejados o libres; en concreto, las mujeres comienzan estando todas libres y se van emparejando ordenadamente una a una de tal manera que una vez emparejadas no vuelven a estar libres. 7 8 CAPÍTULO 2. ALGORITMOS DE EMPAREJAMIENTO En este caso se dice que son las mujeres las que hacen las proposiciones a los hombres. Cuando un hombre h soltero recibe una proposición por parte de una mujer, éste debe aceptarla automáticamente. En caso de que h esté comprometido con una mujer m1 y reciba una proposición de una mujer m2 , entonces elegirá entre m1 y m2 a la mujer que esté antes en su lista de preferencias. Cada mujer le envı́a una proposición a los hombres de su lista de preferencias, en orden de aparición, hasta conseguir estar comprometida. En caso de romperse un matrimonio, la mujer, que es la que se queda libre, continuará con su lista de preferencias, enviando proposiciones, hasta conseguir una nueva pareja. El algoritmo termina cuando todos los componentes están emparejados. Hay que tener en cuenta que el algoritmo puede adoptar dos versiones. Una versión orientada a mujeres en las cuales las mujeres comienzan las proposiciones y la contraria, una versión orientada a hombres (más adelante, en la Sección 3.1 veremos que según qué versión del algoritmo ejecutemos, por lo general obtenemos distintos resultados). En este caso, con la descripción que hemos visto, se va a trabajar con la versión orientada a mujeres en todo el trabajo. Con todas las ideas que tenemos, una versión básica del algoritmo de GaleShapley siguiendo la presentada por Donald Knuth en [2] y realizando ciertas modificaciones de notación quedarı́a ası́: Algoritmo 1 Algoritmo de Gale-Shapley 1: n ← no de mujeres 2: k ← no de parejas ya formadas 3: M ← mujer pretendiente 4: h ← hombre al que se pretende 5: Ω ← mujer imaginaria 6: k ← 0 7: mientras que k < n hacer 8: M ←k 9: mientras que M = Ω hacer 10: h ← mejor elección restante de la lista de M (1) 11: si h prefiere a M que a su pareja actual (2) entonces 12: emparejar M con h 13: M ← pareja anterior de h (3) 14: fin si 15: si M = Ω entonces 16: retirar a h de la lista de preferencias de M (4) 17: fin si 18: fin mientras que 19: k ←k+1 20: fin mientras que Este algoritmo se ve que es bastante genérico, y simplemente sirve para dar una idea general. Además, vemos que identificamos a las mujeres y a los 9 hombres con valores de tipo entero, aunque en el Capı́tulo 1 no era ası́, esto es porque para programarlo simplifica mucho las funciones. Veamos reutilizando el Ejemplo 1.2.1, cómo lo pasamos a enteros: Ejemplo 2.1.1. Obtener las matrices de preferencias en formato de enteros, para las matrices del Ejemplo 1.2.1 Vemos que Marı́a, Ana y Lucı́a pasan a ser las mujeres 0, 1, y 2 respectivamente. Del mismo modo Carlos, Marco y Juan pasan a ser los hombres 0, 1 y 2. Por lo que las listas de preferencia cambiando cada mujer y cada hombre por su respectivo entero, nos quedan del siguiente modo: 0 1 2 0 2 2 1 1 0 2 0 1 Matriz de preferencias de las mujeres 0 1 2 1 0 0 0 1 2 2 2 1 Matriz de preferencias de los hombres Aunque en el ejemplo se haya puesto una primera columna indicando, en el caso de las mujeres, la mujer a la que pertenece la lista de preferencias, en el Algoritmo 1 no existe y por tanto en el programa tampoco. Vamos a comenzar la programación del algoritmo traduciendo las expresiones marcadas a un lenguaje un poco más matemático, usando matrices y operaciones con ellas. 2.1.2. Implementación del algoritmo en Java Antes de implementar el algoritmo, vamos a establecer los siguientes tipos básicos o variables: n: número de mujeres y de hombres. M M : matriz de preferencias de mujeres ( su implementación en Java, será con una variable de tipo int [n,n]). M H: matriz de preferencias de hombres (int [n,n]). V M : vector de mujeres (int[n]). Este vector indica con quién está emparejada cada mujer, es decir V M [j] indica la pareja de la mujer j. Se guarda la posición de M M en la que está la pareja de M . Por ejemplo, V M [2] = 3 indica que la mujer 2, está emparejada con el hombre que en su lista de preferencias está en la posición 3, es decir, que la mujer 2 está con M M [2, 3]. V H: vector de hombres, similar a V M pero en lugar de almacenar la posición de MH, V H[i] guarda la mujer con la que el hombre i está emparejado. Por ejemplo, V H[4] = 1 nos indica que el hombre 4 está emparejado con la mujer 1. 10 CAPÍTULO 2. ALGORITMOS DE EMPAREJAMIENTO Las mujeres comenzarán todas eligiendo primero al hombre que tienen en la posición 0, luego el vector V M estará formado por n ceros. Del mismo modo, los hombres comenzarán casados con la mujer imaginaria o −1, por lo que el vector V H tendrá n valores −1. Con estos datos, veamos cómo modelamos las operaciones marcadas en el Algoritmo 1: Lı́nea 10: (1) h ← mejor elección restante de la lista de M . Teniendo en cuenta que el vector V M almacena la pareja actual de M y que al estar al comienzo del algoritmo aún no se la hemos asignado, esta operación se traduce ası́: h ← M M [M, V M [M ]] Lı́nea 11: (2) h prefiere a M que a su pareja actual. Para comprobar esto, debemos mirar en la matriz de preferencias quién se encuentra antes, es decir, si la primera aparición es M o su pareja actual. Se puede hacer comprobándolo en la matriz directamente con una operación auxiliar, o ya que la matriz M H sólo la vamos a utilizar para esto, generar una nueva matriz P [n, n + 1] (incluimos a la mujer imaginaria en la primera columna de la matriz) que evalúe la preferencia de M para h, es decir, que adopte los siguientes valores: ⎧ ⎨ 0 si M = −1, 1 si M es la última opción, P [h, M + 1] = ⎩ n si M es su primera opción Veamos un ejemplo de cómo pasar M H a P : Ejemplo 2.1.2. Sea M H la matriz de preferencias de los hombres dada en el Ejemplo 2.1.1, obtener la matriz P correspondiente. La matriz P será una matriz de n filas y n + 1 columnas ya que incluimos a la mujer Ω. La columna 0 tendrá valor 0 para todos los hombres ya que es la columna de Ω. El valor de P [0, 1], es decir, el correspondiente al hombre 0 y la mujer 0, será 2, ya que comenzando por la derecha la lista de preferencias del hombre 2, ésta se encuentra la segunda. Realizando lo mismo para todos los valores de M H tenemos la siguiente matriz P . ⎛ 0 P =⎝ 0 0 2 3 3 3 2 1 ⎞ 1 1 ⎠ 2 (2.1) Luego usando esta matriz tenemos que la operación (2) queda: P [h, M + 1] > P [h, V H[h] + 1] Lı́nea 13: (3) Emparejar M con h ; M ← pareja anterior de h. Esta operación, es muy sencilla y simplemente consiste en intercambiar los valores V H[h] y M. 11 Lı́nea 16: (4) Retirar a h de la lista de preferencias de M . Para ello asignamos a V M [M ] el siguiente valor de su lista de preferencias, es decir, el que está en la posición V M [M ] + 1. V M [M ] ← V M [M ] + 1 Por tanto el código Java para generar la matriz P a partir de la matriz M H quedarı́a algo ası́: public static int[][] GetPreferencias(int[][] MH) { int[][] P = new int[MH.length][MH[0].length + 1]; for (int i = 0; i < P.length; i++) { P[i][0]=0; for (int j = 1; j < P[0].length; j++) { P[i][j]=MH[0].length -BuscarPos(MH,i,j-1); } } return P; } // Funcion BuscarPos, nos indica en la matriz MH la posicion // en la fila en la que esta el objeto j private static int BuscarPos(int [][] MH,int fila, int j){ int l=0; for (int i = 0; i < MH[0].length; i++) { if (MH[fila][i]==j){ l=i; } } return l; } Por lo que utilizando estas dos funciones, los tipos básicos definidos anteriormente, y la traducción de las cuatro operaciones, obtenemos el algoritmo de emparejamiento de Gale-Shapley en Java, que se puede comparar con el algoritmo en pseudocódigo presentado en Algoritmo 1. public static int[] emparejar(int[][] MM, int[][] MH) { int M; int h; int[] VM = new int[MM.length]; //Emparejamos a todas las mujeres con su primera opcion. for (int i = 0; i < MM.length; i++) { VM[i] = 0; } //Emparejamos a todos los hombres con la mujer -1 CAPÍTULO 2. ALGORITMOS DE EMPAREJAMIENTO 12 int[] VH = new int[MH.length]; for (int i = 0; i < MH.length; i++) { VH[i] = -1; } int[][] P = GetPreferencias(MH); int k = 0; while (k < MM.length) { M = k; while (M != -1) { h = MM[M][VM[M]]; if ((P[h][M + 1] > P[h][VH[h] + 1])) { int t = VH[h]; VH[h] = M; M = t; } if (M != -1) { VM[M] = VM[M] + 1; } } k++; } return VM; } Una vez obtenido V M , que es lo que nos devuelve nuestro programa en Java, debemos ver cómo interpretamos dicho resultado. Cada mujer M estará emparejada con el hombre M M [M, V M [M ]]. En el Apéndice A.1 se puede encontrar el código completo del algoritmo y además una función para interpretar el resultado obtenido y mostrarlo por pantalla. 2.2. 2.2.1. Algoritmos para variantes del problema de emparejamiento Listas completas con distinto cardinal Recordemos un poco de qué iba este problema. Nos encontramos con dos conjuntos, mujeres M y hombres H los cuales tienen sus listas de preferencias completas, pero |M | = |H|. En este problema se dan dos casos. Sea nm el número de mujeres, y sea nh el número de hombres, tenemos: CASO 1: nh > nm Podemos utilizar el Algoritmo 1, con la peculiaridad de que habrá hombres que queden solteros o casados con la mujer imaginaria. CASO 2: nh < nm Al tener más mujeres que hombres, se dará el caso de que alguna mujer barra su lista de preferencias hasta el final, y no quede emparejada con ningún 13 hombre. En este caso debemos hacer una pequeña modificación al Algoritmo 1. La modificación consiste en comprobar si se ha llegado al final de la lista de preferencias y en caso afirmativo, emparejar a esa mujer con un hombre imaginario al que denotaremos como Ψ. Es interesante notar que el algoritmo ası́ obtenido seguirá funcionando correctamente para el caso de las listas de mujeres y hombres de igual longitud. Se puede ver el código completo con la modificación en los métodos necesarios en el Apéndice A.2. 2.2.2. Listas incompletas Imaginemos un problema en el cual tengamos las listas de preferencias incompletas, es decir, que dados una mujer M y un hombre h, la mujer M no incluya al hombre h en su lista. Esto quiere decir que prefiere quedarse soltera (o casada con Ψ) que emparejada con h. La forma de resolver este caso particular a partir del Algortimo 1 es muy sencilla, basta con añadir entre las instrucciones 10 y 11 la siguiente condición, incluyendo dentro de la condición si, las instrucciones 11 − 17: 1: 2: si h tiene a M en su lista de preferencias entonces Hacer instrucciones 11- 17 3: si no 4: retirar a h de la lista de preferencias de M 5: fin si En este caso el emparejamiento obtenido podrı́a dejar tanto a hombres como a mujeres solteros, dependiendo de la lista de preferencias que establezcan. Se puede ver el código completo con la modificación en los métodos necesarios en el Apéndice A.3. 2.3. Algoritmo para tes/hospitales el problema residen- Hemos visto en la Sección 1.3 que el problema de los residentes/hospitales, es un problema de emparejamiento similar al problema de los matrimonios estables con listas incompletas, con la salvedad de que cada hospital oferta una cantidad de plazas disponibles, es decir, que un hospital puede estar emparejado con más de un residente dependiendo del número de plazas que oferte. Veamos cómo podemos programar este problema, aprovechando el algoritmo de emparejamiento para listas incompletas. 2.3.1. Tipos básicos y adaptación de las matrices Vamos a suponer que realizamos un algoritmo orientado a residentes, es decir, que dada M R la matriz de preferencias de los residentes, queremos transformar 14 CAPÍTULO 2. ALGORITMOS DE EMPAREJAMIENTO esta matriz en la matriz de mujeres M M . El caso orientado a hospitales es análogo. Sea nh el número de hospitales y nr el número de residentes, entonces contaremos con los siguientes tipos básicos: M R: matriz de preferencias de residentes. M hos: matriz de preferencias de hospitales. V P : vector de plazas. Este vector nos indica el número de plazas que hay disponibles en cada hospital. Tendrá la siguiente forma: (2.2) V P = N0 N1 . . . Nnh −1 Donde Ni indica el número de plazas del hospital Hi . Vamos a comenzar transformando la matriz M hos en la matriz M H correspondiente. La idea consiste en convertir los nh hospitales en No + N1 + · · · + N(nh −1) hospitales (hombres), ya que como Ni nos indica el número de plazas para el hospital Hi , entonces el número de hospitales resultantes, será la suma de las plazas de cada hospital. Para conseguirlo simplemente construimos una nueva matriz, en la cual comenzando por el hospital H0 , repetimos su fila de preferencias N0 veces, realizando esta operación con todos los hospitales. El fragmento de código programado en Java nos quedará del siguiente modo: public static int[][] Hospital_Hombres(int[][] Mhos,int[] VP){ //Contamos el numero de filas que va a tener nuestra //nueva matriz, es decir, sumamos N_0+N_1+...+ N_{n-1} int f = 0; for (int i = 0; i < VP.length; i++) { f = f + VP[i]; } int[][] MH = new int[f][Mhos[0].length]; int fMH = 0; //Indica la fila de MH en la que copiamos //Para cada hospital for (int i = 0; i < Mhos.length; i++) { //Copiamos su fila de preferencias N_i veces for (int j = 0; j < VP[i]; j++) { System.arraycopy(Mhos[i], 0, MH[fMH], 0, Mhos[i].length); fMH++; } } return MH; } Con esta idea vemos que el hospital H0 ha pasado a ser los hospitales 0, . . . , N0 −1, que el hospital H1 ha pasado a ser los hospitales N0 , . . . , N0 +N1 −1 y en general, que el hospital Hi ha pasado a ser los hospitales (N0 + · · · + Ni−1 ), . . . , (N0 + · · · + Ni − 1). Más adelante lo ilustraremos con un ejemplo. 15 Ahora, modificar M R para conseguir M M no es difı́cil, ya que debemos cambiar en la matriz M R cada hospital Hi por sus correspondientes hospitales (N0 + · · · + Ni−1 ), . . . , (N0 + · · · + Ni − 1). Para simplificarlo un poco, creamos el siguiente vector auxiliar, que nos indicará para cada hospital los nuevos hospitales que le corresponden. El vector tendrá la siguiente forma: aux = HN0 HN1 . . . HNnh −1 = 0 N0 N0 + N1 . . . N0 + N1 + · · · + Nnh −2 (2.3) donde HN0 = 0, HN1 = N0 , . . . , HNnh −1 = N0 + N1 + · · · + Nnh −2 . Con lo que usando este vector, cambiaremos el hospital Hi por los hospitales HNj , . . . , HNj+1 −1. El siguiente fragmento de código expresa el cálculo de este vector en Java: private static int[] GetAux(int[] VP) { int[] aux = new int[VP.length]; aux[0] = 0; for (int i = 1; i < aux.length; i++) { aux[i] = aux[i - 1] + VP[i - 1]; } return aux; } Como la matriz M M que vamos a obtener tiene suficientes columnas como para albergar a todos los hospitales, es posible que bastantes columnas no sean necesarias para ciertos residentes, por lo que dichas columnas las completamos con el valor −1 que es el que representa al hospital imaginario. Con la idea que hemos recogido en todo el apartado, una versión del algoritmo para convertir M R en M M en Java nos queda del siguiente modo: public static int[][] Residentes_Mujeres(int[][] MR, int[] VP) { int[] aux = GetAux(VP); int n = 0; //Contamos el numero de nuevos hospitales. for (int i = 0; i < VP.length; i++) { n = n + VP[i]; } //Creamos la matriz MM con las mismas filas que MR // y n columnas. int[][] MM = new int[MR.length][n]; //Para cada residente for (int i = 0; i < MR.length; i++) { int l = 0; //y para cada hospital for (int j = 0; j < MR[0].length; j++) { int h = MR[i][j]; /Comprobamos que no es el hospital no deseado CAPÍTULO 2. ALGORITMOS DE EMPAREJAMIENTO 16 if (h != -1) { / for (int k = 0; k < VP[h]; k++) { MM[i][l] = aux[h] + k; l++; } } else { //En caso de serlo lo copiamos MM[i][l] = -1; l++; } } //Ademas en caso de que nos queden huecos en MM, //los rellenamos de -1 while (l < n) { MM[i][l] = -1; l++; } } return MM; } Ahora, para resolver el problema utilizamos el algoritmo para listas incompletas de la Sección 2.2.2 con las matrices M M y M H obtenidas y con ello, tendremos un emparejamiento estable entre los residentes y los nuevos hospitales obtenidos. Nos queda entender este resultado, volviendo a los hospitales originales. Tenemos un vector V M y debemos obtener a partir de él un V R que nos muestre el resultado del emparejamiento. Este V R nos indicará, para cada residente, el hospital con el que está emparejado. En los comentarios del propio algoritmo se encuentra explicado cómo funciona. public static int[] transformarEmparejamiento(int[] VM, int[][] MM, int[] VP) { int[] VR = new int[VM.length]; int[] aux = GetAux(VP); for (int i = 0; i < VM.length; i++) { //Para cada residente int h = MM[i][VM[i]]; //Obtenemos su pareja boolean b = false; int j = 0; //Y como cada indice del vector indica el hospital, //buscamos el indice j en el que h>= aux[j] //pero que h < aux[j+1] while ((j < aux.length) && (!b)) { if (h < aux[j]) { b = true; } else { j++; 17 } } VR[i] = j - 1; } return VR; } Veamos un ejemplo de un problema completo de residentes y hospitales, resuelto paso a paso. Ejemplo 2.3.1. Dadas las siguientes matrices M hos (matriz de preferencias de hospitales), M R (matriz de preferencias de los residentes), y el vector V P (vector de plazas de los hospitales), obtener un emparejamiento estable usando el algoritmo orientado a residentes. ⎡ 1 ⎢0 ⎢ M hos = ⎣ 2 0 2 1 1 1 3 2 0 3 ⎤ 0 3⎥ ⎥ 3⎦ 2 VP = 1 ⎡ 0 ⎢2 ⎢ MR = ⎣ 0 1 2 2 1 1 1 3 3 2 3 1 2 ⎤ 3 0⎥ ⎥ −1⎦ −1 Veamos cómo interpretamos estas matrices. Tenemos por ejemplo, que el hospital 1 tiene como lista de preferencias la segunda fila de la matriz M hos y V P nos indica que oferta 2 plazas. De igual modo tenemos que el residente 3, tiene como lista de preferencias la cuarta fila de M R y que además, al no haber elegido todos los hospitales disponibles, la matriz queda rellenada al final por el valor −1. Usando nuestros algoritmos Java, obtenemos la siguientes matrices MH y MM: ⎡ 1 ⎢0 ⎢ ⎢0 MH = ⎢ ⎢2 ⎢ ⎣2 0 2 1 1 1 1 1 3 2 2 0 0 3 ⎤ 0 3⎥ ⎥ 3⎥ ⎥ 3⎥ ⎥ 3⎦ 2 ⎡ 0 1 2 3 ⎢3 4 1 2 ⎢ MM = ⎣ 0 5 1 2 1 2 5 3 4 5 −1 4 ⎤ 5 0⎥ ⎥ −1⎦ −1 La transformación lo que ha hecho ha sido convertir cada hospital en diferentes hospitales dependiendo de su número de plazas. En la Tabla 2.1 vemos en la columna“hombres” los nuevos hospitales. Ahora aplicamos el algoritmo de emparejamiento para listas incompletas (ver Sección 2.2.2), que nos da el siguiente resultado: VM = 1 0 0 1 CAPÍTULO 2. ALGORITMOS DE EMPAREJAMIENTO 18 Hospital 0 1 2 3 Plazas 1 2 2 1 Hombres 0 1,2 3,4 5 Tabla 2.1: Conversión hospitales-hombres Estamos trabajando en términos de mujeres-hombres, luego el resultado que hemos obtenido es relativo a ellos. Esto quiere decir que la mujer 0, está con el hombre que se encuentra en la posición 1 de su lista de preferencias (el hombre 1). . . Luego de momento tenemos el siguiente emparejamiento: (0, 1), (1, 3), (2, 0), (3, 2) Nos queda volver al problema de los residentes/hospitales. Lo podemos hacer utilizando la función ya programada en Java en esta sección (transformarEmparejamiento(int[] VM, int[][] MM, int[] VP)) que sólo cambia en el emparejamiento anterior usando la Tabla 2.1 los valores de la columna hombres, por el valor de la columna hospital. Haciendo este cambio, el resultado del problema ya en términos de residentes/hospitales es el siguiente: (0, 1), (1, 2), (2, 0), (3, 1) Vemos que el residente 0 irá al hospital 1, el residente 1 al hospital 2. . . 2.4. Algoritmo de comprobación de estabilidad Al igual que vimos en la Sección 1.2 la definición de emparejamiento estable, ahora vamos a programar un algoritmo, que, dado un emparejamiento y dos matrices de preferencias, nos indique si el emparejamiento es o no estable. Se trata de comprobar, una por una, si hay o no parejas bloqueantes usando la definición dada en la Sección 1.2.1. En [1] podemos encontrar una versión de este algoritmo pero como parece muy escueta, se propone una un poco más completa en Algoritmo 2. Tenemos que tener en cuenta que pM nos indica la posición en que está la pareja de M en su matriz de preferencias. La idea del algoritmo se basa en comprobar que todos los hombres que están en alguna posición antes que pM prefieren a sus parejas antes que a M . Si esto ocurre nos encontramos ante un emparejamiento inestable ya que hemos encontrado una pareja bloqueante. Vamos a programar el algoritmo en Java. Para ello necesitaremos, además de V M que es el resultado que nos proporciona nuestro algoritmo, un nuevo vector V H, similar al explicado en la Sección 2.1.2 en el nos guarde para cada hombre i, su pareja V H[i] en lugar de la posición que esta ocupa en la lista de preferencias como ocurre en V M ya que esto nos resulta más útil para programar nuestro 19 Algoritmo 2 Algoritmo de comprobación de estabilidad 1: n ← no de mujeres 2: M ← mujer que se comprueba 3: pM ← pareja de M 4: h ← hombre que M prefiere a pM 5: M ← 0 6: mientras que M < n hacer 7: h←0 8: mientras que h < pM hacer 9: si h prefiere a M que a su pareja actual entonces 10: devolver false 11: si no 12: h←h+1 13: fin si 14: fin mientras que 15: k ←k+1 16: fin mientras que 17: devolver true algoritmo. A continuación se muestra la programación de esta función auxiliar en Java. private static int[] getVH(int[][] MM, int[][] MH, int[] VM) { int[] VH = new int[MH.length]; //Emparejamos a todos los hombres con -1, ya que en caso //de no tener pareja no aparecera en VM for (int i = 0; i < MH.length; i++) { VH[i] = -1; } //Asignamos cada hombre, con la mujer que esta emparejado for (int j = 0; j < VM.length; j++) { if(VM[j]!=-1){ VH[MM[j][VM[j]]] = j; } } return VH; } Debemos tener un aspecto en cuenta, y es que en Java, es preferible tener un único punto de salida del algoritmo en lugar de tener varios. Esto es, devolver un único valor. Por ello guardamos en una variable booleana el valor true, y en caso de que se cumpla la condición si, entonces cambiaremos dicho valor a false. A esto hay que añadir una nueva condición al mientras que h < pM , y es que además de eso, el valor de la variable booleana, debe seguir siendo true. A partir del Algoritmo 2 y utilizando nuestra nueva función auxiliar, se CAPÍTULO 2. ALGORITMOS DE EMPAREJAMIENTO 20 puede determinar el siguiente algoritmo, que viene detallado paso por paso en comentarios: public static boolean esEstable(int[][] MM, int[][] MH, int[] VM){ int[][] P = AlgoritmoBasico.GetPreferencias(MH); int[] VH = getVH(MM, MH, VM); //En principio el emparejamiento es estable, hasta que //se encuentre una pareja bloqueante. boolean b = true; int M = 0; //Para cada mujer y mientras no haya parejas bloqueantes while ((M < VM.length) && (b)) { //Miramos si todos los hombres que estan en la lista //de preferencias de M antes que su pareja, prefieren //a sus parejas que a M for (int j = 0; j < VM[M]; j++) { //Sea h el hombre de la posicion j de la mujer M int h = MM[M][j]; if (P[h][M + 1] > P[h][VH[h] + 1]) { //En caso de preferir a M que a su pareja, //tenemos una pareja bloqueante, y por tanto, //el emparejamiento es inestable. b = false; } } M++; } return b; } Capı́tulo 3 Análisis matemático del problema 3.1. Análisis del algoritmo de emparejamiento Hemos visto en la Sección 1.2 el Algoritmo 1, el cual está dirigido a listas completas del mismo tamaño (n). Pero no hemos probado que el algoritmo realmente funcione, es decir, que siempre devuelva un resultado y que dicho resultado sea un emparejamiento estable. En esta sección, vamos a trabajar con este problema estudiando el algoritmo y ciertas propiedades que cumple. También vamos a ver que el conjunto de emparejamientos estables forma una estructura de retı́culo, con la cual se puede trabajar para obtener una solución al problema a partir de otras dos. Comencemos con unos teoremas para caracterizar el algoritmo de emparejamiento: Teorema 3.1.1. Dada una determinada instancia del problema de emparejamiento, el algoritmo de Gale-Shapley (Algoritmo 1) siempre finaliza, y en el momento que lo hace, las parejas constituidas forman un emparejamiento estable. Demostración. Vamos a probarlo en tres partes: Se produce un emparejamiento, esto es, todas las mujeres acaban emparejadas con un hombre y viceversa. Es una idea muy similar al principio del palomar. Supongamos que una mujer es rechazada por el último hombre de su lista. Teniendo en cuenta que un hombre en caso de estar soltero no puede rechazar a una mujer, esto quiere decir que todos los hombres están emparejados. Esto es imposible, ya que por definición del algoritmo una mujer únicamente puede estar emparejada con un hombre y por tanto al haber el mismo número de mujeres que de hombres entonces al menos un hombre tiene que estar sin pareja. El algoritmo finaliza. La única condición para finalizar es que el algoritmo no sufra bucles (otra posible condición serı́a que no contenga llamadas recursivas 21 22 CAPÍTULO 3. ANÁLISIS MATEMÁTICO DEL PROBLEMA infinitas, pero en este caso no hay llamadas recursivas), pero está claro que no es ası́ ya que si una mujer es rechazada por un hombre, esta mujer nunca vuelve a hacerle una proposición, con lo que el número de iteraciones no puede ser superior a n2 siendo n el número de mujeres y de hombres, por lo que el algoritmo termina. Se obtiene un emparejamiento estable, es decir, en el emparejamiento no hay ninguna pareja bloqueante. Sea E el emparejamiento generado por el algoritmo y supongamos que una mujer m prefiere a un hombre h en lugar de a pE (m). Esto quiere decir que h la ha rechazado durante la ejecución del algoritmo debido a que estaba emparejado con otra mujer a la que prefiere. Por tanto h y m no forman una pareja bloqueante y concluimos que el emparejamiento obtenido es estable. Ası́ que el Algoritmo 1 nos proporciona siempre un emparejamiento estable. Este emparejamiento cumple ciertas propiedades que vamos a necesitar para elaborar la construcción del retı́culo de emparejamientos estables, por lo que las veremos previamente en esta sección. Por ejemplo, ¿el algoritmo siempre produce el mismo resultado?, o en el caso de que una mujer elija antes que otra, ¿el resultado será diferente?. El siguiente teorema sirve para responder estas cuestiones. Teorema 3.1.2. Todas las ejecuciones del algoritmo de Gale-Shapley (con las mujeres como pretendientes), nos devuelven el mismo resultado de emparejamiento, en el cual todas las mujeres obtienen la mejor pareja que podrı́an conseguir en cualquier otro emparejamiento (es decir, se obtiene un emparejamiento óptimo para las mujeres). Demostración. Supongamos que en una ejecución arbitraria del algoritmo obtenemos el emparejamiento E, y que en contradicción con el teorema hay otro emparejamiento estable E y una mujer m tal que m prefiere h = pE (m) a h = pE (m). Entonces, durante la ejecución del algoritmo h ha debido rechazar a m (ya que preferı́a a cierta mujer m que a m). Luego es claro que (m , h ) forman una pareja bloqueante en E ya que h prefiere a m que a m y m prefiere a h que a la pareja que tiene en M (por el algoritmo, m a elegido a h antes que al resto de hombres de su lista de preferencias). Por tanto, m no puede tener una pareja mejor que h ya que durante el algoritmo el resto de hombres la han ido rechazando porque prefieren a otras mujeres. En definitiva, como cada mujer obtiene la mejor pareja de entre todos los emparejamientos estables posibles, entonces el algoritmo siempre nos devuelve el mismo resultado de emparejamiento. Definición 3.1.1. Dado E un emparejamiento estable, se dice que el emparejamiento es óptimo para mujeres, si en cualquier otro emparejamiento en el que una mujer mejore su pareja, entonces dicho emparejamiento es inestable. Del mismo modo, un emparejamiento se dice óptimo para hombres si en cualquier otro emparejamiento en el que un hombre tenga una pareja mejor, entonces ese emparejamiento es inestable. 23 El emparejamiento óptimo para mujeres no suele dar el mismo resultado que el óptimo para hombres, aunque podrı́a ocurrir. En el caso de que esto ocurra, no existe ningún otro emparejamiento. Esto es consecuencia del siguiente corolario: Cololario 3.1.1. Sea E un emparejamiento óptimo para mujeres, entonces cada hombre quedará emparejado con la peor pareja de las que podrı́a tener en todos los emparejamientos estables posibles. Demostración. Supongamos que el corolario es falso. Sea E0 el emparejamiento óptimo para mujeres, y supongamos que hay un emparejamiento estable E y un hombre h el cual prefiere m = pE0 (h) a m = pE (h). Entonces (m, h) bloquea E ya que m prefiere h = pE0 (m) a h = pE (m) (E0 es óptimo para mujeres y por tanto h es la mejor pareja que puede obtener). Por lo que E0 es “pésimo” para hombres. Los anteriores resultados muestran la relevancia que tiene en el problema de emparejamientos estables quiénes hacen las proposiciones (bien mujeres u hombres) ya que los proponentes van a obtener siempre su solución óptima, mientras que la otra parte va a obtener una solución estable pero pésima. Con todas estas propiedades ya vistas, podemos comenzar a trabajar con la estructura de retı́culos, para ver otros resultados relacionados con el problema de emparejamiento. 3.2. La estructura de retı́culo En la mayorı́a de los casos, el problema de emparejamiento tiene más de una solución. En estos casos, es interesante estudiar la relación que hay entre las diferentes soluciones. Vamos a ver que el conjunto de soluciones forman un retı́culo distributivo. Comencemos con unos conceptos previos. Se dice que una persona prefiere un emparejamiento E a otro E si en su lista de preferencias la pareja que tiene en E se encuentra antes que la pareja que tiene en E . En el caso de que tenga la misma pareja en ambos emparejamientos, se dice que le es indiferente un emparejamiento a otro. También veremos conceptos relacionados con el orden parcial, los retı́culos y los retı́culos distributivos, por lo que veamos también la definición de todos estos conceptos. Definición 3.2.1. Un orden parcial es una relación binaria R sobre un conjunto X que es reflexiva, antisimétrica, y transitiva. Un retı́culo es un conjunto (C) parcialmente ordenado, en el cual cada pareja de elementos tienen una cota superior o supremo y una cota inferior o ı́nfimo. Un elemento s de un conjunto parcialmente ordenado C se dice que es un máximo de un subconjunto A ⊆ C si ∀a ∈ A , s ≥ a. El elemento s será el supremo de A si s es un máximo de A y además ∀t ∈ A si t es un máximo de A, entonces s ≤ t. Del mismo modo, un elemento i de un conjunto parcialmente CAPÍTULO 3. ANÁLISIS MATEMÁTICO DEL PROBLEMA 24 ordenado C se dice que es un mı́nimo de un subconjunto A ⊆ C si ∀a ∈ A , i ≤ a. Además el elemento i será un ı́nfimo de A si es un mı́nimo de A e i ≥ j para todos los mı́nimos j ∈ A. Con todo esto, pasamos a la definición de retı́culo distributivo, con la que vamos a trabajar durante toda la sección. Definición 3.2.2. Un retı́culo se denomina retı́culo distributivo si dados a, b, c ∈ C, se cumplen las leyes distributivas: a ∧ (b ∨ c) = (a ∧ b) ∨ (a ∧ c) a ∨ (b ∧ c) = (a ∨ b) ∧ (a ∨ c) 3.2.1. Resultados previos El siguiente teorema nos da un resultado muy importante para nuestro estudio. Desde el punto de vista de retı́culos quiere decir que o bien dos emparejamientos son indiferentes para una pareja en concreto, o bien un miembro mejora su pareja y el otro la empeora de un emparejamiento a otro. De aquı́ es de donde más adelante vamos a poder definir el orden parcial entre emparejamientos estables. Teorema 3.2.1. Sean E y E dos emparejamientos estables y supongamos que m y h están emparejados en E pero no en E . Entonces uno de los dos prefiere el emparejamiento E a E mientras que el otro prefiere E a E. Demostración. Sean M y H los conjuntos de mujeres y de hombres respectivamente que prefieren E, y sean M y H los que prefieren E . Tenemos que m y h son pareja en E pero no lo son en E , por lo que a ninguno de los dos les es indiferente un emparejamiento al otro. Supongamos que ambos prefieren E a E . Entonces como m y h no son pareja en E , forman una pareja bloqueante en E , ya que m prefiere h a su actual pareja (m ∈ M ) y h prefiere a m que a su actual pareja (h ∈ H). Por tanto, cada mujer m ∈ M , tiene su pareja en el conjunto H . Con lo que |M | ≤ |H |. Del mismo modo, en M no puede haber parejas tales que m ∈ M y h ∈ H, ya que también formarı́an una pareja bloqueante, por lo que |M | ≤ |H|. Como |M | + |M | = |H| + |H | = n entonces |M | = |H| y |M | = |H | y por tanto cada mujer m ∈ M está emparejada con un hombre h ∈ H y viceversa. Como consecuencia de este teorema se sigue directamente el siguiente corolario: Cololario 3.2.1. Sean E y E dos soluciones de un determinado problema de emparejamiento, entonces el número de personas que prefieren E (a E ) es igual al número que prefiere E (a E). 25 Denotemos como E al conjunto de todos los emparejamientos estables de un problema de emparejamiento. En este conjunto de emparejamientos podemos establecer una relación de dominancia entre ellos. Sean E, E ∈ E, se dice que E domina a E desde el punto de vista de las mujeres (y se denota como E E ) si todas las mujeres prefieren E a E o les es indiferente un emparejamiento a otro. Es decir, si todas las mujeres tienen en E una pareja al menos tan buena como en E . Además, se dice que E domina estrictamente a E (y se denota como E ≺ E ) si E E y E = E . También se puede establecer esta relación de dominación desde el punto de vista de los hombres. Se puede deducir del Teorema 3.2.1 el siguiente corolario: Cololario 3.2.2. E domina a E desde el punto de vista de los hombres si y sólo si E domina a E desde el punto de vista de las mujeres. Por tanto, la relación de dominación orientada a hombres es la inversa de y la denotaremos por . Como durante todo el trabajo hemos trabajado con los algoritmos orientados a mujeres, en este apartado utilizaremos la relación . A continuación se presenta un teorema que sirve para encaminarnos a probar que el conjunto de emparejamientos forman una estructura de retı́culo. Teorema 3.2.2. El conjunto E junto con la relación (E, ) es un conjunto parcialmente ordenado. Demostración. Vamos a demostrar el teorema usando la definición de orden parcial vista en la Sección 3.2 aplicada a nuestro conjunto concreto: Un orden parcial es una relación binaria () sobre un conjunto E que es reflexiva, antisimétrica, y transitiva, es decir, para cualesquiera E1 , E2 , y E3 en E se tiene que: E1 E1 (propiedad reflexiva) obvio, ya que si E1 = E1 ⇒ E1 E1 Si E1 E2 y E2 E1 entonces E1 = E2 (propiedad antisimétrica). Tenemos que todas las mujeres prefieren o les es indiferente E1 a E2 (E1 E2 ) y que todas las mujeres prefieren o les es indiferente E2 a E1 (E2 E1 ), por lo que deducimos que a todas las mujeres les es indiferente E1 a E2 y por tanto E1 = E2 . Si E1 E2 y E2 E3 entonces E1 E3 (propiedad transitiva). En este caso, todas las mujeres prefieren E2 a E3 y además, prefieren E1 a E2 , luego todas prefieren E1 a E3 . Luego como satisface todas las propiedades de orden parcial, el par (E, ) es un conjunto parcialmente ordenado. Los siguientes lemas, van a servir de pie para demostrar que (E, ) es un retı́culo distributivo. 26 CAPÍTULO 3. ANÁLISIS MATEMÁTICO DEL PROBLEMA Lema 3.2.1. Dado un problema de emparejamiento y sean E y E dos emparejamientos estables distintos. Si emparejamos a cada mujer con su mejor pareja de entre las parejas de E y E , entonces el resultado obtenido también es un emparejamiento estable. Demostración. Vamos a probar primero que de verdad se produce un emparejamiento y tras ello que el emparejamiento obtenido es un emparejamiento estable. Se obtiene un emparejamiento, es decir, no hay dos mujeres emparejadas con el mismo hombre. En caso de que una mujer m y otra mujer m reciban la misma pareja h, esto es que (m, h) son pareja en E y que (m , h) son pareja en E , entonces m prefiere E a E y m prefiere E a E (si no, m se quedarı́a con su pareja de E en lugar de con h y lo mismo ocurre con m ). Aplicando el Teorema 3.2.1 sobre la pareja (m, h), tenemos que h prefiere el E ya que m preferı́a E. Del mismo modo aplicamos el Teorema 3.2.1 sobre la pareja (m , h) que nos dice que h prefiere E ya que m preferı́a E . Por lo que nos acabamos de encontrar con una contradicción y por ello no hay dos mujeres emparejadas con el mismo hombre. Supongamos que el emparejamiento obtenido (E ) no es estable, es decir que al menos hay una pareja (m, h) que bloquea el emparejamiento. Esto quiere decir que m y h no son pareja en E y que desearı́an estar juntos, luego m prefiere a h en lugar de a pE (m) y a pE (m) y del mismo modo h prefiere a m en lugar de a pE (h) y a pE (h). Veamos los dos casos posibles: h tiene a pE (h) como pareja en E . Entonces, en E, como h prefiere a m que a su pareja de E y m prefiere a h que a su pareja de E, ya que en E m ha escogido a la que más prefiere entre E y E , entonces (m, h) forman una pareja bloqueante en E, que es un emparejamiento estable con lo que hemos llegado a una contradicción. Con el mismo razonamiento que en el otro caso, podemos ver que la pareja (m, h), si bloquea el emparejamiento E , entonces bloquea E y se vuelve a llegar a una contradicción. Por lo que al no haber parejas bloqueantes, el emparejamiento obtenido es un emparejamiento estable. Vamos a darle una notación al emparejamiento obtenido en el Lema 3.2.1, que nos va a proporcionar un par de operaciones que nos servirán para trabajar con los emparejamientos (en la Figura 3.1 se pueden ver las operaciones representadas gráficamente): E ∧ E es un emparejamiento en el cual cada mujer se queda con la pareja a la que más desea de entre pE (m) y pE (m), que es el emparejamiento definido en el Lema 3.2.1. Con respecto a la relación de dominación definida, es fácil comprobar que E ∧ E E y E ∧ E E . 27 Figura 3.1: Representación gráfica de E ∨ E y de E ∧ E ∧E∈C E ( por simplificar lo denotaremos ∧C ) es un emparejamiento en el cual cada mujer se queda con la pareja que más desea de entre todos los emparejamientos del conjunto C. E ∨ E es un emparejamiento en el cual cada mujer se queda la peor pareja de entre pE (m) y pE (m). Es fácil ver que E E ∨ E y E E ∨ E . ∨E∈C E ( por simplificar lo denotaremos ∨C ) es un emparejamiento en el cual cada mujer se queda con el hombre que menos desea de entre todos los emparejamientos del conjunto C. Cololario 3.2.3. En el emparejamiento E ∧ E , cada hombre obtiene la peor pareja que tiene entre E y E . Del mismo modo, en el emparejamiento E ∨ E , cada hombre obtiene la mejor pareja que tiene entre E y E . Demostración. Aplicando el Teorema 3.2.1, vemos que dados (m, h) mujer y hombre, que son pareja en E ∧ E , como m ha elegido el emparejamiento que más le satisface, entonces h prefiere el otro emparejamiento, y por tanto ha obtenido la peor pareja de entre E y E . Probar que ocurre lo opuesto en E ∨ E es análogo. Gracias a las definiciones y al corolario que acabamos de probar, podemos buscar una manera para denotar al emparejamiento óptimo para mujeres. Sea E el conjunto de todos los emparejamientos estables, tenemos que ∧E será el emparejamiento óptimo para mujeres y del mismo modo ∨E el óptimo para hombres. En slgunod textos es posible encontrar las definiciones de , ∧ y ∨ de manera dual a como las hemos presentado aquı́ (por ejemplo, ver [6]). Lema 3.2.2. Dado un problema de emparejamiento, sean E y E dos emparejamientos diferentes. Si obtenemos un nuevo emparejamiento en el cual cada mujer se queda con su peor pareja entre la pareja que tiene en E y la de E , entonces el resultado obtenido es un emparejamiento estable (que es el que hemos denotado como E ∨ E ). CAPÍTULO 3. ANÁLISIS MATEMÁTICO DEL PROBLEMA 28 Demostración. Si cada mujer recibe la peor pareja de entre E y E entonces por el Teorema 3.2.1, cada hombre recibe la mejor pareja de entre E y E por lo que hemos obtenido el emparejamiento E ∨ E . Con los anteriores resultados, tenemos ya definidas las operaciones ∨ y ∧ que nos van a permitir definir la estructura (E, ) de retı́culo distributivo. 3.2.2. El problema de emparejamiento definido como retı́culo distributivo Hemos visto en la Sección 3.2 la definición genérica de supremo e ı́nfimo. En nuestro caso concreto las operaciones ≤ y ≥ quedarán definidas por la relación de dominación entre emparejamientos y respectivamente. Vamos a probar a continuación que el conjunto de emparejamientos estables forma un retı́culo distributivo. Teorema 3.2.3. Dada una instancia del problema de emparejamientos estables, el conjunto parcialmente ordenado (E, ), forma un retı́culo distributivo donde E ∧ E es el supremo de E y E y E ∨ E el ı́nfimo. Demostración. Vamos a comenzar probando que (E, ) es un retı́culo, es decir, que para cada par de elementos hay un ı́nfimo y un supremo. Es obvio que E ∧ E E y que E ∧ E E , por lo que E ∧ E es un máximo de E y E . Sea E ∗ un emparejamiento estable tal que satisface que E ∗ E y que E ∗ E, es decir, que todas las mujeres tienen en E∗ una pareja igual o mejor a la que tiene en E y en E , por lo que E∗ E ∧ E . Por tanto, tenemos que E ∧ E es el supremo de E y E . Probar que E ∨ E es el ı́nfimo de E y E es completamente análogo. Como el conjunto parcialmente ordenado (E, ) tiene supremo e ı́nfimo para cada par de elementos, entonces (E, ) es un retı́culo. Veamos que se cumple la primera ley distributiva que se describe en la Definición 3.2.2, es decir, que se cumplan U = a∧(b∨c) y V = (a∧b)∨(a∧c). Dados E, E y E tres emparejamientos estables, y sea m una mujer que tiene en cada emparejamiento pE (m), pE (m) y pE (m) como parejas. Entonces se pueden dar tres casos: pE (m) = pE (m) = pE (m) = h. Este caso es obvio ya que m quedará emparejada con h en U y en V . pE (m) = pE (m) = h, pE (m) = pE (m). Entonces tenemos que desde el punto de vista de m, E ∧ E = E ∨ E = E . Sustituyendo en U y en V tenemos: U = E ∧ (E ∨ E ) = E ∧ E V = (E ∧ E ) ∨ (E ∧ E ) = (E ∧ E ) ∨ (E ∧ E ) = E ∧ E Luego en ambos casos, m quedará emparejada con el hombre que prefiera entre h y pE (m). 29 pE (m) = pE (m) = pE (m). Supongamos que para m, E E E , es decir, que prefiere pE (m) a pE (m) y pE (m) a pE (m). U = E ∧ (E ∨ E ) = E ∧ E = E V = (E ∧ E ) ∨ (E ∧ E ) = E ∨ E = E Por tanto, como todos los hombres tienen la misma pareja en U y en V entonces U = V y queda probada la primera ley distributiva. Para probar que la segunda ley, basta ver que es análoga a la primera. Utilizando la primera ley distributiva y que (E ∨ E ) ∧ E = (E ∧ E ) ∨ E = E (muy sencillo de probar) tenemos: (E ∨ E ) ∧ (E ∨ E ) = ((E ∨ E ) ∧ E) ∨ ((E ∨ E ) ∧ E ) = E ∨ ((E ∨ E ) ∧ E ) = E ∨ ((E ∧ E ) ∨ (E ∧ E )) = (E ∨ (E ∧ E )) ∨ (E ∧ E ) = E ∨ (E ∧ E ) Donde en la primera y la tercera igualdad hemos usado la ley distributiva ya probada y en la segunda y la quinta igualdad la propiedad (E ∨ E ) ∧ E = (E ∧ E ) ∨ E = E. Cololario 3.2.4. El retı́culo distributivo que forma el conjunto (E, ) tiene un supremo y un ı́nfimo que quedan definidos como ∧E y ∨E respectivamente, es decir, corresponde con los emparejamientos óptimo para mujeres y óptimo para hombres. Vamos a comenzar a ilustrar todos estos conceptos con un par de ejemplos completos en los que veremos la estructura que forma el conjunto de soluciones. Comenzamos continuando con el ejemplo presentado en la Sección 1.2 y del cual también vimos las soluciones con el algoritmo en Java. Ejemplo 3.2.1. Obtener el retı́culo distributivo de (E, ) utilizando las matrices de preferencias dadas en el Ejemplo 1.2.1. Pasando las matrices a enteros y eliminando la primera columna (la que indica en el caso de las mujeres, a qué mujer pertenece la lista de preferencias) ya que la información es redundante, nos quedan las siguientes matrices: 0 1 2 2 1 0 2 0 1 Matriz de preferencias de las mujeres 1 0 2 0 1 2 0 2 1 Matriz de preferencias de los hombres Vamos a introducir un poco de notación, para ver cómo denotamos a cada nodo del retı́culo. Recordemos que los pares (mi , hj ) van a denotar que la mujer mi está emparejada con el hombre hj . En este caso, la etiqueta h0 h1 h2 indica para cada mujer i, el hombre hi con el que está emparejada. 30 CAPÍTULO 3. ANÁLISIS MATEMÁTICO DEL PROBLEMA Figura 3.2: Retı́culo distributivo de (E, ) Comenzamos el retı́culo calculando el supremo y el ı́nfimo, que coincide con el emparejamiento óptimo para mujeres y para hombres respectivamente. ∧E = ((0, 0), (1, 1), (2, 2)) = 012 ∨E = ((0, 1), (1, 0), (2, 2)) = 102 Vemos que la peor y la mejor pareja de la mujer 2 es el hombre 2 por lo que en este caso, 2 no podrá estar emparejada con nadie más. Por ello, no hay ningún otro emparejamiento posible. En la Figura 3.2 se puede ver el retı́culo correspondiente. Ejemplo 3.2.2. Para las matrices de preferencias dadas a continuación, obtener el retı́culo distributivo que forman todos los emparejamientos estables y expresarlo gráficamente. 0 3 1 4 1 4 3 2 2 5 4 1 1 4 3 5 4 3 1 5 5 2 3 4 Matriz de preferencias 5 0 3 0 2 1 de 2 5 0 2 0 0 las mujeres 2 5 3 2 5 4 Matriz de 5 3 1 2 3 0 0 4 1 5 1 4 0 2 3 1 0 3 preferencias 4 4 5 0 1 2 de 0 1 2 3 4 5 los hombres Al igual que en el ejemplo anterior, vamos a calcular el emparejamiento óptimo para mujeres y el óptimo para hombres utilizando el algoritmo de GaleShapley programado en Java. En este caso nos quedan los siguientes: ∧E = 042135 ∨E = 421053 Para calcular el resto de emparejamientos debemos restringir un poco las matrices de preferencias, ya que hay muchı́simas combinaciones posibles. Por ello vamos a ir eliminando de cada lista de preferencias los hombres o las mujeres con 31 los que cada persona nunca puede estar emparejado. En este caso vamos a aplicar dos pasos que para nuestro problema concreto será suficiente. Aunque en todo caso se hable de mujeres durante el problema, las operaciones las aplicaremos a ambas matrices. Para cada mujer, como hemos calculado su mejor y su peor pareja, los hombres que sean mejores y peores respectivamente no pueden pertenecer a ningún matrimonio estable. Por ejemplo, para la mujer 0, cuya lista de preferencias completa es (031452) su mejor pareja es el hombre 0 y su peor pareja es el hombre 4 por lo que en ningún emparejamiento estable puede estar emparejada con el hombre 5 ni con el 2. Realizando esto para todas las filas de las matrices de emparejamiento, nos queda lo siguiente, donde hemos marcado en rojo los hombres con los que cada mujer no puede estar emparejada en un emparejamiento estable: 0 3 1 4 1 4 3 2 2 5 4 1 1 4 3 5 4 3 1 5 5 2 3 4 Matriz de preferencias 5 0 3 0 2 1 de 2 5 0 2 0 0 las mujeres 2 5 3 2 5 4 Matriz de 5 3 1 2 3 0 0 4 1 5 1 4 0 2 3 1 0 3 preferencias 4 4 5 0 1 2 de 0 1 2 3 4 5 los hombres Lo siguiente que vamos a hacer para todas las listas de preferencias se ve muy claro en el siguiente ejemplo: la mujer 0 no puede quedar emparejada con el hombre 5, por lo que la podemos quitar de la lista de preferencias del hombre 5. Realizando esto para todas las listas, las matrices de emparejamiento nos quedan del siguiente modo: 0 3 1 4 1 4 3 2 2 5 4 1 1 4 3 5 4 3 1 5 5 2 3 4 Matriz de preferencias 5 0 3 0 2 1 de 2 5 0 2 0 0 las mujeres 2 5 3 2 5 4 Matriz de 5 3 1 2 3 0 0 4 1 5 1 4 0 2 3 1 0 3 preferencias 4 4 5 0 1 2 de 0 1 2 3 4 5 los hombres Con lo cual, cada mujer sólo podrá estar emparejada con los hombres que no están de color rojo. Vamos a reescribir las matrices eliminándolos aunque nos queden listas de preferencias de distintos tamaños. 0 4 2 1 3 5 4 3 5 4 5 2 Matriz de preferencias de las mujeres 2 4 5 3 1 0 CAPÍTULO 3. ANÁLISIS MATEMÁTICO DEL PROBLEMA 32 Emparejamiento 042135 042153 045132 041532 031452 034152 024135 024153 021435 021453 431052 421035 421053 VM 010010 010032 011011 013311 023131 022031 032010 032032 033110 033132 323431 333410 333432 ¿Es estable? SI NO SI NO NO SI NO SI NO NO SI NO SI Tabla 3.1: Posibles emparejamientos 3 2 1 5 0 4 0 3 5 1 2 3 Matriz de preferencias de los hombres 2 4 3 2 1 5 Tenemos todos los posibles emparejamientos en la Tabla 3.1, donde la primera columna indica el emparejamiento, la segunda el vector V M (definido en la Sección 2.1.2) correspondiente a dicho emparejamiento y necesario para utilizar el programa Java de comprobación de estabilidad (Algoritmo 2), cuyo resultado se refleja en la tercera columna. Nos quedamos con los emparejamientos estables, que los denotaremos del siguiente modo: E0 = ∧E = 042135 E1 = 045132 E2 = 034152 E3 = 024153 E4 = 431052 E5 = ∨E = 421053 Sabiendo que E3 ∨ E4 = ∨E y que E3 ∧ E4 = E2 , tenemos el retı́culo distributivo de (E, ) el cual queda como puede verse en la Figura 3.3. En [1, Sección 1.3.2] podemos encontrar técnicas de conteo que nos ayudan a establecer unas cotas del número de emparejamientos estables posibles. 33 Figura 3.3: Retı́culo distributivo de (E, ) 3.2.3. El retı́culo distributivo como problema de emparejamiento En [2] Donald Knuth deja abierto el problema de probar que cualquier retı́culo distributivo puede ser originado como el espacio de soluciones de un problema de matrimonios estables. En esta sección, con la ayuda del artı́culo referenciado en [6] se va a dar una prueba de ello. Recordemos que un emparejamiento es que otro si cada mujer tiene al menos una pareja igual o mejor en el primero que en el segundo. Para esta sección debemos introducir la definición de un nuevo concepto. Sea R un retı́culo distributivo, y sea x ∈ R. Definimos como Rx un nuevo retı́culo haciendo una copia de todos los elementos x y colocándolos inmediatamente encima de los originales. De un modo más formal, sea V un conjunto disjunto a R con un elemento vy ∈ V correspondiente a una copia de cada y x, entonces Rx es la ordenación parcial en R ∪ V dada por: Si w, z ∈ R, entonces w z en Rx si y sólo si w z en L. Si w ∈ R y vz ∈ V , entonces w vz en Lx si y sólo si w z en L. vw vz si y sólo si w z. vw z para cualquier w, z. En la Figura 3.4 tenemos un ejemplo en el que se muestra un retı́culo R con su correspondiente Rx2 calculado. 34 CAPÍTULO 3. ANÁLISIS MATEMÁTICO DEL PROBLEMA (a) R (b) Rx2 Figura 3.4: Retı́culo distributivo R y su correspondiente Rx2 Con la ayuda de los dos siguientes lemas, vamos a probar el teorema que nos demostrará que todo retı́culo distributivo es el conjunto de emparejamientos estables de un cierto problema de emparejamiento. Lema 3.2.3. Si tenemos un conjunto S de retı́culos, el cual incluye un retı́culo de un elemento e incluye un retı́culo isomorfo a Rx para todo R ∈ S, x ∈ R, entonces todo retı́culo distributivo finito es isomorfo a un retı́culo de S. Demostración. Sea M un retı́culo distributivo finito. ¿Es M isomorfo a un retı́culo de S? Vamos a realizar la prueba aplicando inducción sobre el tamaño de M . Si |M | = 1, entonces M es isomorfo al retı́culo de S de un elemento. Si |M | > 1, por hipótesis de inducción, sabemos que es cierto para todo N con |N | < |M |. Sea z el mayor elemento de M que no es unión de dos elementos diferentes (puede darse el caso de que z no esté únicamente determinado, en cuyo caso elegirı́amos z como cualquiera de los elementos que cumplen esa propiedad. Es interesante observar que en [6] no tienen en cuenta esta particularidad) y sea w el elemento unión de todos los elementos z. Es claro que z = w. A continuación vamos a definir una serie de conjuntos: N = {y | y z}. Por inducción, como |N | < |M | y N es un subretı́culo de M , entonces N es un retı́culo distributivo que preserva intersecciones y uniones. Z = {y | y z} W = {y | y ∧ y z}(⊆ N ). Vamos a buscar otra manera de escribir el conjunto Z. Tenemos por definición de z que z w y que z es el mayor elemento del retı́culo que no es unión de dos elementos, luego el conjunto Z está formado por z y por elementos que son unión de dos elementos. 35 En el caso Z = {z}, tenemos que z = z ∨ v con v = ∧N (no necesariamente tenemos que tomar este valor v). Es claro que v ≺ z, ya que z es el mayor elemento y entonces al menos hay un elemento menor ya que |M | > 1. El otro caso posible es Z = {z, a0 , . . . , an }. El elemento z lo podemos expresar igual que en el caso anterior. Los elementos ai z pueden denotarse como unión de dos elementos (z, bi ), los cuales, además de tener un ı́nfimo (z ∧ bi ) por definición de retı́culo distributivo también tendrán un supremo (z ∨ b) que podemos tomar como valor v. Veamos que el valor bi de ai = z ∨ bi debe estar contenido en N . Supongamos que bi ∈ N . Entonces bi ∈ Z con lo que lo podemos expresar como bi = z ∨ bj , luego ai = z ∨ z ∨ bj . Como z ≺ bj , entonces ai = bj . Por lo tanto la única manera de expresar ai como unión de dos elementos, es tomando z y un elemento bi ∈ N . En ambos casos, se ve fácilmente que z = z∨w, con lo que como los elementos ai cumplen que ai z y ai = z ∨ bi entonces tenemos que bi w y por tanto, los elementos de Z se pueden expresar como unión de z con un elemento de N . Z = {z ∨ bi | bi ∈ W } Además, con lo que acabamos de ver tenemos que si u1 ∨ z = u2 ∨ z = z entonces u1 ∨ w = u2 ∨ w. Definamos la siguiente aplicación: f: W u −→ −→ Z z∨u Tenemos que f es un isomorfismo entre W y Z. Usando la definición que hemos visto antes del lema, se puede ver que N w = N ∪ W y como M = N ∪ Z y sabemos que W es isomorfo a Z, entonces M = V ∪ W = N w . Por tanto, por hipótesis de inducción, como |N | < |M | entonces N es un retı́culo distributivo isomorfo a un retı́culo de S. Como M es isomorfo a N w y N es isomorfo a un retı́culo de S, entonces por definición de S, N w también está en S y por lo tanto M es isomorfo a un retı́culo de S. En la Figura 3.5 podemos ver un ejemplo de la demostración de este lema. Es bastante claro el isomorfismo, ya que z = z ∨ w y a = z ∨ b. Lema 3.2.4. Dados n hombres y n mujeres para los cuales el retı́culo que corresponde al conjunto de matrimonios estables es R y sea x ∈ R, entonces hay 2n hombres y 2n mujeres con matrices de preferencias tales que el conjunto de matrimonios estables de este nuevo problema corresponde con Rx . Demostración. Sea R el conjunto de todos los emparejamientos estables posibles para las mujeres m0 , . . . , mn−1 y los hombres h0 , . . . hn−1 . Denotemos como x el emparejamiento en el cual cada mi está emparejada con hi , ∀i = 0, . . . , n − 1 y asumamos que este emparejamiento es estable (esto es por simplicidad en la demostración. Tomando x cualquier emparejamiento y realizando listas de preferencia análogas a las que se muestran a continuación el resultado sigue siendo cierto). Vamos a ver que el conjunto de matrimonios estables correspondientes a las 2n mujeres m0 , . . . , mn−1 ; m0 , . . . , mn−1 y a los hombres 36 CAPÍTULO 3. ANÁLISIS MATEMÁTICO DEL PROBLEMA Figura 3.5: Ejemplo ilustrativo del Lema 3.2.3 h0 , . . . , hn−1 ; h0 , . . . , hn−1 con las siguientes listas de preferencias, es isomorfo a Lx . mi : Tomamos la lista de preferencias de mi . Copiamos todos los hombres que prefiere a hi sin incluir hi . Tras ellos añadimos hi y hi+1 en ese orden y finalizar arbitrariamente. mi : Comenzamos la lista con hi y hi . Completamos la lista con las preferencias de mi saltando el elemento hi y rellenamos los huecos restantes arbitrariamente. hi : En la lista de preferencias original de hi , para mj pondremos mj inmediatamente después para todo j. Por ejemplo, si la lista de preferencias de h1 es m0 , m1 , entonces la nueva lista de preferencias queda m0 , m0 , m1 , m1 . hi : Como primera elección tendrá mi−1 . Su segunda elección será mi seguida de mi . El resto de la lista es arbitraria. NOTA: En el caso de que i + 1 > n − 1 entonces i + 1 = 0 y si i − 1 < 0, entonces i − 1 = n − 1. Antes de comenzar a realizar la prueba del lema, vamos a ver una serie de caracterı́sticas que estas nuevas listas de preferencias cumplen: 1. Si cierta mi queda emparejada con hi+1 , entonces hi (el cual mi prefiere) debe estar emparejado con mi−1 (ya que se pueden dar dos opciones, que hi esté emparejado con mi , lo cual nos crea una pareja bloqueante (mi , hi ), o que hi esté emparejado con mi lo cual no es posible, ya que mi está emparejada con hi+1 ). Por tanto, mi debe estar emparejada con hi+1 para todo i. 2. hi es la primera elección de mi , por tanto, hi debe quedar emparejado con mi−1 (cumpliendo 1), mi o mi y nunca accederá a la parte “aleatoria” de su lista. 37 3. mi debe obtener al menos a alguien tan bueno como hi+1 (ya que hemos visto en 1 que de no ser ası́ tendrı́amos una pareja bloqueante y el emparejamiento no serı́a estable). 4. Luego por 3, si mi no obtiene como pareja hi ni hi+1 , entonces mi quedará emparejada con hi . 5. Si mi prefiere hj a hj , mi no obtendrá a hj (ya que hj prefiere a la mujer mi a mi ). En el caso de que mi quedara emparejada con hj , por (4) tenemos que mi quedarı́a emparejada con hi o con hi+1 con lo que mi y hj forman una pareja bloqueante. Este conjunto de observaciones implican que nadie queda asignado con la parte arbitraria de su lista de preferencias. Los elementos hi no tienen parte aleatoria y los hi hemos visto en la observación que nunca la alcanzan. Las mujeres mi tampoco pasan a la parte aleatoria, ya que hi tiene como primera opción mi−1 y la última opción de mi antes de la parte aleatoria es hi+1 . Con las mujeres mi nos ocurre prácticamente lo mismo, ya que en el caso de no quedar emparejada con hi esto significa que una mujer mi o mi−1 está emparejada con él, por lo que como mi tiene en su lista de preferencias a todos los hombres hj , entonces quedará emparejada con uno de ellos. Es más, dado un emparejamiento estable del problema de tamaño 2n, podemos obtener un emparejamiento estable para el problema de tamaño n (es decir, un elemento de R), dando a cada hi su pareja del problema 2n eliminando la comilla en caso de ser necesario. De manera inversa, si y ∈ R, tenemos su correspondiente emparejamiento estable para el problema de tamaño 2n en el cual mi es reemplazado por mi si y sólo si mi está emparejada con hi o con alguien peor (según las listas de preferencias de 2n) en y. Si y x en el correspondiente problema 2n hay dos emparejamientos estables correspondientes con y. Uno en el cual cada mi queda emparejada con hi y otro en el que mi está emparejada con hi+1 . Los emparejamientos en los cuales cada mi está con mi+1 corresponde con el V en la definición de Rx . Vamos a ver un ejemplo de la construcción de las matrices de tamaño 2n que se realiza durante la demostración. Retomamos el Ejemplo 1.2.1 con sus matrices de preferencias correspondientes: 0 1 2 2 1 0 2 0 1 Matriz de preferencias de las mujeres 1 0 2 0 1 2 0 2 1 Matriz de preferencias de los hombres Recordemos que en este problema las soluciones eran E0 = 012 y E1 = 120, luego sea R el retı́culo distributivo correspondiente al espacio de soluciones, vamos a tratar de obtener RE1 utilizando la construcción detallada en la demostración del lema. 38 CAPÍTULO 3. ANÁLISIS MATEMÁTICO DEL PROBLEMA En el nuevo problema de emparejamiento, tendremos además de las mujeres del primer problema, a las mujeres 0 , 1 y 2 . Lo mismo ocurre con los hombres y sus listas de preferencias son las que se dan a continuación, donde (. . . ) nos indica la parte aleatoria de la matriz: 0’ 1’ ... 2 1’ 2’ ... 2’ 0’ ... 0’ 0 1 2 . . . 1’ 1 2 0 . . . 2’ 2 0 1 . . . Matriz de preferencias de las mujeres 1 1’ 0 0’ 2 2’ 0 0’ 1 1’ 2 2’ 0 0’ 2 2’ 1 1’ 2 0 0’ . . . 0 1 1’ . . . 1 2 2’ . . . Matriz de preferencias de los hombres Resolviendo el problema, tenemos los siguientes emparejamientos estables: E0 = 0 1 2012 , E1 = 0 1 2 102, E2 = 1 2 0 012 y E3 = 1 2 0 102. En la Figura 3.6 podemos ver claramente la correspondencia entre ambos retı́culos (Los emparejamientos E2 y E3 son los que forman el conjunto V ). (a) R (b) RE0 Figura 3.6: Retı́culo distributivo R y su correspondiente RE0 A partir de los dos lemas que acabamos de ver y probar, obtenemos el siguiente teorema, el cual nos da la respuesta a la pregunta de si todo algoritmo distributivo tiene un problema de emparejamiento asociado. Teorema 3.2.4. Si R es un retı́culo distributivo finito con m elementos, entonces hay un conjunto de hombres y mujeres tal que el retı́culo de sus emparejamientos estables es isomorfo a R. Es más, el no de mujeres (= al número de hombres) n es ≤ 2m . Demostración. Vamos a realizar la prueba por inducción, en |R| = m. Para m = 1 el teorema es obvio que se cumple (basta tomar una única mujer y un sólo hombre). 39 Supongamos que el resultado es cierto para m − 1 y veamos que también se cumple para m. Sea R un retı́culo distributivo tal que |R | = m − 1. Para R hay un conjunto de n mujeres (n ≤ 2m−1 ) y hombres tal que su retı́culo de emparejamientos estables es isomorfo a R . Aplicando el Lema 3.2.4, podemos construir un retı́culo distributivo Lx tomando x el emparejamiento óptimo para hombres. Como x es el ı́nfimo del retı́culo completo, entonces |Lx | = m. Además, el retı́culo distributivo está asociado con un problema de emparejamiento para 2n mujeres y 2n hombres. Por tanto acabamos de encontrar un conjunto de 2n ≤ 2m mujeres y de 2n hombres asociado al retı́culo distributivo R de tamaño m. Gracias a este resultado, demostrado por Blair [6] en 1984 y al Teorema 3.2.3, hemos visto como todo retı́culo distributivo finito es isomorfo al conjunto de soluciones de un problema de matrimonios estables. Algunos trabajos posteriores (por ejemplo [9]) han definido cotas inferiores a 2n en el número de mujeres (o de hombres) que hacen falta para construir el retı́culo. Capı́tulo 4 Programación lineal para problemas de emparejamiento Hemos visto algoritmos para resolver problemas de emparejamiento en el Capı́tulo 2 para diferentes casos y también hemos dado una demostración formal de uno de estos algoritmos en el Capı́tulo 3. En este capı́tulo vamos a resolver un problema de emparejamiento utilizando la programación lineal y el Algoritmo del Simplex, pero no se va a dar ninguna prueba formal de que este método sea efectivo. Únicamente se va a ilustrar este método con un ejemplo para ver otra manera de resolver el mismo problema. 4.1. Introducción Al igual que en otras secciones, vamos a resolver el Ejemplo 1.2.1 utilizando la programación lineal. Necesitaremos las matrices de preferencias escritas con números enteros, las cuales las podemos encontrar ya transformadas en el Ejemplo 2.1.1. Dichas matrices eliminando la primera columna son las que se muestran a continuación: 0 1 2 2 1 0 2 0 1 Matriz de preferencias de las mujeres 1 0 2 0 1 2 0 2 1 Matriz de preferencias de los hombres Lo que queremos obtener es, al menos, un emparejamiento estable para estas matrices de preferencias. Ya hemos visto en el Ejemplo 3.2.1 que este problema sólo tiene dos soluciones o emparejamientos estables posibles, por lo que veamos con este método qué resultados obtenemos. 41 CAPÍTULO 4. PROGRAMACIÓN LINEAL PARA PROBLEMAS DE EMPAREJAMIENTO 42 4.1.1. Variables necesarias Para cada posible pareja (i, j) necesitaremos una variable booleana (xi,j ), la cual indicará si la mujer i está emparejada con el hombre j. Es decir, dado un emparejamiento E: 0 si i y j no son pareja en E xi,j = 1 si i y j están emparejados en E Por tanto, es bastante claro que dado un problema de emparejamiento con n mujeres y n hombres, necesitaremos n2 variables. En nuestro caso concreto, como tenemos 3 mujeres, vamos a necesitar 9 variables. En la sección que viene a continuación veremos cómo relacionar estas variables para obtener un emparejamiento estable. 4.2. Planteamiento del problema El planteamiento consiste en buscar una serie de ecuaciones para relacionar las variables. Tenemos dos tipos de restricciones: las restricciones de emparejamiento y las restricciones de estabilidad. Comencemos con las restricciones de emparejamiento. 4.2.1. Restricciones de emparejamiento La idea de estas restricciones es que cada mujer y cada hombre tienen una única pareja del sexo opuesto. Por ejemplo, la siguiente ecuación nos indica que la mujer 0 debe estar emparejada con el hombre 0, el hombre 1 o el hombre 2 y que debe estar emparejada exactamente con un hombre. x0,0 + x0,1 + x0,2 = 1 (4.1) De un modo similar obtenemos las siguientes 5 ecuaciones: x1,0 + x1,1 + x1,2 = 1 (4.2) x2,0 + x2,1 + x2,2 = 1 (4.3) x0,0 + x1,0 + x2,0 = 1 (4.4) x0,1 + x1,1 + x2,1 = 1 (4.5) x0,2 + x1,2 + x2,2 = 1 (4.6) Por tanto, para n mujeres y n hombres, obtendremos n + n = 2n ecuaciones que representan las restricciones de emparejamiento. En este caso hemos obtenido 6 ecuaciones. Estas ecuaciones escritas de modo genérico son las siguientes (la 43 primera ecuación corresponde a la restricción de emparejamiento para mujeres y la segunda a la de hombres): n−1 xi,j = 1 para i ∈ {0, . . . , n − 1} j=0 n−1 xi,j = 1 para j ∈ {0, . . . , n − 1} i=0 4.2.2. Restricciones de estabilidad Las restricciones de estabilidad se basan en la idea de la definición de emparejamiento estable. Recordemos la definición que vimos en la Sección 1.2: Un emparejamiento se dice inestable si al menos hay una pareja bloqueante. Diremos que mi y hj forman una pareja bloqueante en E o que bloquean el emparejamiento E si: mi y hj no son pareja en E; mi prefiere a hj antes que a pE (mi ) y hj prefiere a mi antes que a pE (hj ). Es decir, mi y hj preferirı́an ser pareja, en lugar de sus respectivas parejas obtenidas en E. Por ejemplo, tenemos que la mujer 0 prefiere al hombre 0 que al hombre 1, y que el hombre 1 prefiere a la mujer 0 que al resto de mujeres, por tanto, para que el emparejamiento sea estable pueden darse dos posibilidades: 0 y 0 son pareja 0 está emparejada con 1 Otra forma de expresar esto mismo es que en cualquier emparejamiento en el que la mujer 0 esté emparejada con 2 y que el hombre 1 esté emparejado con 1 o con 2, entonces dicho emparejamiento es inestable. Por tanto la ecuación que nos expresa esto queda del siguiente modo: x0,1 + x0,2 + x1,1 + x2,1 ≤ 1 (4.7) Veamos que esta ecuación expresa justo lo que querı́amos. En el caso de que x0,1 = 1 entonces el resto de variables son 0 y por tanto el emparejamiento serı́a estable. Si x0,1 = 0, entonces por la ecuación 4.5 sabemos que x1,1 + x2,1 = 1 y la única manera de violar la condición es que x0,2 = 1 que quiere decir que la mujer 0 y el hombre 1 forman una pareja (ambos prefieren estar juntos a sus parejas). Siguiendo esta misma idea, obtenemos las siguientes ecuaciones: x0,0 + x0,1 + x0,2 + x2,0 ≤ 1 (4.8) 44 CAPÍTULO 4. PROGRAMACIÓN LINEAL PARA PROBLEMAS DE EMPAREJAMIENTO x0,2 + x2,2 + x1,2 ≤ 1 (4.9) x1,2 + x1,1 + x1,0 ≤ 1 (4.10) x1,1 + x1,0 + x2,1 ≤ 1 (4.11) x1,0 + x0,0 + x2,0 ≤ 1 (4.12) x2,2 + x2,0 + x2,1 ≤ 1 (4.13) x2,0 + x2,1 ≤ 1 (4.14) x2,1 ≤ 1 (4.15) Por lo que vemos que hay n2 ecuaciones que se corresponden con las restricciones de estabilidad, que en este caso son 9 ecuaciones. Entonces, sumando a las ecuaciones que nos expresan las restricciones de emparejamiento, tenemos 15 ecuaciones en total. Vemos que hay varias que son redundantes y que no aportan información nueva con lo que al final hay menos ecuaciones que el número que acabamos de indicar. Teniendo en cuenta que hk > hj indica a los hombres que están en una posición de la lista de preferencias mayor que la de hj y lo mismo con la desigualdad mk > mi , tenemos la siguiente ecuación genérica para todas las ecuaciones anteriores: xi,j + {k|hk >hj } 4.3. xi,k + xk,j ≤ 1 ∀i, j {k|mk >mj } Resolución de las ecuaciones y análisis de los resultados La utilidad principal de este método de resolución es obtener todas las soluciones estables de un problema de emparejamiento. Para ello debemos ir dando valores a las variables hasta obtener los emparejamientos estables que tenga el problema. Es interesante notar que hasta ahora no habı́amos visto una forma algorı́tmica concreta de calcular todas las soluciones. El Algoritmo 1 encuentra la solución óptima para hombres y en el Ejemplo 3.2.2 vimos una forma de obtener las soluciones más intuitiva que metódica. Volvamos a nuestro problema. Tenemos que encontrar todos los conjuntos de valores xm,h que satisfagan las 15 ecuaciones. 45 Supongamos que x0,0 = 1. Nos queda lo siguiente: ⎧ x0,1 = x0,2 = x1,0 = x2,0 = 0 ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪x1,1 + x1,2 = 1 ⎪ ⎨x + x = 1 2,2 1,2 ⎪x1,1 + x2,1 = 1 ⎪ ⎪ ⎪ ⎪ ⎪ x2,1 + x2,2 = 1 ⎪ ⎪ ⎩ x2,2 + x2,1 + x1,2 ≤ 1 Vemos que x1,2 = 1 no puede ser ya que llegamos a una contradicción por lo que x1,2 = 0 y entonces x2,2 = x1,1 = 1 y x1,2 . Regresando al Ejemplo 3.2.1, se ve que el resultado obtenido es el emparejamiento 012, el emparejamiento óptimo para mujeres. Ahora vamos a estudiar x0,0 = 0. Suponiendo que x0,1 = 0 con las ecuaciones 4.7, 4.8, 4.9 y 4.3 llegamos a una contradicción. Luego en el caso x0,1 = 1 con las ecuaciones obtenemos que x1,0 = x2,2 = 1 y el resto de las variables valen 0 por lo que hemos obtenido el emparejamiento 012 que vimos en el Ejemplo 3.2.1, que era el emparejamiento óptimo para hombres. Barriendo todas las opciones posibles, hemos obtenido los mismos resultados que cuando realizamos el ejemplo en el Capı́tulo 3. La principal desventaja de este método es que hay demasiadas variables y por ello demasiadas restricciones. Por ejemplo, si tomamos un problema de tamaño n = 10, necesitaremos 100 variables y 20 + 100 restricciones. 4.3.1. Resultado óptimo para mujeres En este capı́tulo estamos trabajando con programación lineal, concretamente con programación entera binaria, ya que los valores de las variables únicamente pueden ser 0 o 1. En todos los problemas de programación lineal, tenemos una función a maximizar o en su problema dual, una función a minimizar. Esta función es la que nos va a dar el resultado óptimo para mujeres. Vamos a ver con todo lo que sabemos hasta ahora si podemos obtenerla intuitivamente. Recordando los teoremas y lemas estudiados en la Sección 3.2, vimos que el emparejamiento óptimo para mujeres era el valor supremo del retı́culo distributivo. En este caso, va a ser igual; debemos buscar una función a maximizar que involucre a las variables xi,j . Reutilizando la idea de la matriz P de la Sección 2.1.2, vamos a construir la siguiente matriz de pesos, Q del siguiente modo: Q[m, h] = n ∗ xm,h 1 ∗ xm,h si h es la primera opción, si h es su última opción que en el ejemplo que estamos haciendo nos quedarı́a la siguiente matriz: 46 CAPÍTULO 4. PROGRAMACIÓN LINEAL PARA PROBLEMAS DE EMPAREJAMIENTO ⎛ 2 ∗ x0,0 Q = ⎝ 1 ∗ x1,0 1 ∗ x2,0 1 ∗ x0,1 2 ∗ x1,1 3 ∗ x2,1 ⎞ 3 ∗ x0,2 3 ∗ x1,2 ⎠ 2 ∗ x2,2 Maximizando el valor de la suma de todos estos valores sujeto a las 15 condiciones anteriores, obtenemos los valores xi,j que nos darán el emparejamiento óptimo para mujeres. Es bastante obvio gracias al estudio anterior, que si minimizamos el valor de esta suma, obtendremos los valores xi,j correspondientes al emparejamiento óptimo para hombres. Anexo A Código java A.1. Algoritmo Básico package Emparejamiento; /* Algoritmo para listas completas con el mismo cardinal. Se → incluyen ademas diversas funciones auxiliares como → GetPreferencias que nos devuelve la matriz P, y → mostrarEmparejamiento, que nosmuestra por consola el → emparejamientoformado. */ public class AlgoritmoBasico { public static int[] emparejar(int[][] MM, int[][] MH) { int M; int h; int[] VM = new int[MM.length]; //Emparejamos a todas las mujeres con su primera opcion. for (int i = 0; i < MM.length; i++) { VM[i] = 0; } //Emparejamos a todos los hombres con la mujer imaginaria int[] VH = new int[MH.length]; for (int i = 0; i < MH.length; i++) { VH[i] = -1; } int[][] P = GetPreferencias(MH); int k = 0; while (k < MM.length) { M = k; 47 ANEXO A. CÓDIGO JAVA 48 while (M != -1) { h = MM[M][VM[M]]; if ((P[h][M + 1] > P[h][VH[h] + 1])) { int t = VH[h]; VH[h] = M; M = t; } if (M != -1) { VM[M] = VM[M] + 1; } } k++; } return VM; } public static int[][] GetPreferencias(int[][] MH) { int[][] P = new int[MH.length][MH[0].length + 1]; for (int i = 0; i < P.length; i++) { P[i][0] = 0; for (int j = 1; j < P[0].length; j++) { P[i][j] = MH[0].length - BuscarPos(MH, i, j - 1); } } return P; } private static int BuscarPos(int[][] MH, int fila, int j) { int l = 0; for (int i = 0; i < MH[0].length; i++) { if (MH[fila][i] == j) { l = i; } } return l; } public static void mostrarEmparejamiento(int[][] MM, int[] → VM) { for (int i = 0; i < VM.length; i++) { System.out.println("(" + i + "," + MM[i][VM[i]] + → ")"); } } } 49 A.2. Algoritmo con listas de distinto cardinal package Emparejamiento; public class AlgDistintoCardinal { public static int[] emparejar(int[][] MM, int[][] MH) { int M; int h; int[] VM = new int[MM.length]; //Emparejamos a todas las mujeres con su primera opcion. for (int i = 0; i < MM.length; i++) { VM[i] = 0; } //Emparejamos a todos los hombres con la mujer imaginaria int[] VH = new int[MH.length]; for (int i = 0; i < MH.length; i++) { VH[i] = -1; } int[][] P = AlgoritmoBasico.GetPreferencias(MH); int k = 0; while (k < MM.length) { M = k; while (M != -1) { if (VM[M] < MM[0].length) { h = MM[M][VM[M]]; if ((P[h][M + 1] > P[h][VH[h] + 1])) { int t = VH[h]; VH[h] = M; M = t; } if (M != -1) { VM[M] = VM[M] + 1; } } else { VM[M] = -1; M = -1; } } k++; } return VM; } public static void mostrarEmparejamiento(int[][] MM, int[] → VM) { ANEXO A. CÓDIGO JAVA 50 for (int i = 0; i < VM.length; i++) { if (VM[i] != -1) { System.out.println("(" + i + "," + MM[i][VM[i]] + → ")"); } else { System.out.println("(" + i + ",-1)"); } } } } A.3. Algoritmo para listas incompletas package Emparejamiento; public class AlgListasIncompletas { public static int[] emparejar(int[][] MM, int[][] MH) { int M; int h; int[] VM = new int[MM.length]; //Emparejamos a todas las mujeres con su primera opcion. for (int i = 0; i < MM.length; i++) { VM[i] = 0; } //Emparejamos a todos los hombres con la mujer imaginaria int[] VH = new int[MH.length]; for (int i = 0; i < MH.length; i++) { VH[i] = -1; } int[][] P = AlgoritmoBasico.GetPreferencias(MH); int k = 0; while (k < MM.length) { M = k; while (M != -1) { if (VM[M] < MM[0].length) { h = MM[M][VM[M]]; if (AlgListasIncompletas.amorMutuo(MH, M, h)) → { if ((P[h][M + 1] > P[h][VH[h] + 1])) { int t = VH[h]; VH[h] = M; M = t; } 51 if (M != -1) { VM[M] = VM[M] + 1; } } else { VM[M] = VM[M] + 1; } } else { VM[M] = -1; M = -1; } } k++; } return VM; } private static boolean amorMutuo(int[][] MH, int M, int h) { boolean b = false; int i = 0; while (!b) { if (MH[h][i] == M) { b = true; } i++; } return b; } //La funcion mostrar emparejamiento es la misma que la de → AlgDistintoCardinal.java } Conclusiones En este trabajo, se ha estudiado un problema práctico que surgió en el siglo XIX y que tras encontrar un algoritmo que lo solucione sirvió de ayuda a los futuros residentes de hospitales de EEUU. Hemos buscado algoritmos que lo resuelvan y hemos visto un análisis matemático de su construcción. También hemos ido un paso más allá, viendo que el conjunto de soluciones (matrimonios estables), forma una estructura de retı́culo distributivo con la que podemos trabajar. En resumen, hemos resuelto un mismo problema de varios modos diferentes, analizando diversas demostraciones y dando una visión propia de ellas completándolas y dando ejemplos de su uso práctico. El problema que se ha estudiado es bastante extenso y puede aplicarse a varios campos de uso: asignación de alumnos a prácticas, distribución de niños en colegios . . . , por lo que podrı́a dar pie a otro futuro trabajo. 53 Bibliografı́a [1] D. Gusfield y R. W. Irving. (1989). The Stable Marriage Problem: Structure and Algorithms. MIT Press. [2] D. E. Knuth. (1997). Stable Marriage and Its Relation to Other Combinatorial Problems : An Introduction to the Mathematical Analysis of Algorithms. American Mathematical Soc. [3] A. E. Roth. (February 19, 2003). The origins, history, and design of the resident match. JAMA, the Journal of the American Medical Association 289, no. 7 : 909–912. [4] D. Gale y L. Shapley. (Jan, 1962). College Admissions and the Stability of Marriage. The American Mathematical Monthly,Vol. 69 No. 1 , 9-15. [5] N. Jacobson. (1985). Basic Algebra I, Second Edition. W H Freeman & Co (Sd); 2 Sub edition [6] C. Blair. (1984). Journal of combinatorial theory. Series A 37, 353-356 [7] V. J. Sethuraman y C.P. Teo. (1998). Linear Programming Brings Marital Bliss. Mathematical Medley, Singapore Mathematical Society 25, 2 [8] L. S. Shapley y A. E. Roth. (2012). Stable matching: Theory, evidence, and practical design. http://www.nobelprize.org [9] D. Gusfield, R. W. Irving, P. Leather y M. Saks. ( March 1987). Every finite distributive lattice is a set of stable matchings for a small stable marriage instance.Journal of Combinatorial Theory, Series A Volume 44, Issue 2, Pages 304–309 55