El problema de los matrimonios estables y otros problemas de

Anuncio
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
Descargar