{ "cells": [ { "cell_type": "markdown", "id": "38540f80", "metadata": { "tags": [ "CSP", "medium", "Channel", "Intension", "Element", "complex" ] }, "source": [ "# Problem *Stable Marriage*" ] }, { "cell_type": "markdown", "id": "1122a39b", "metadata": {}, "source": [ "See [Wikipedia](https://en.wikipedia.org/wiki/Stable_marriage_problem/). \n", "Consider two groups of men and women who must marry. Consider that each person has indicated a ranking for her/his possible spouses. The problem is to find a matching between the two groups such that the marriages are stable.\n", "A marriage between a man $m$ and a woman $w$ is stable iff:\n", "- whenever $m$ prefers an other woman $o$ to $w$, $o$ prefers her husband to $m$\n", "- whenever $w$ prefers an other man $o$ to $m$, $o$ prefers his wife to $w$" ] }, { "cell_type": "markdown", "id": "f35246fa", "metadata": {}, "source": [ "In 1962, David Gale and Lloyd Shapley proved that, for any equal number $n$ of men and women, it is always possible to make all marriages stable, with an algorithm running in $O(n^2)$. Nevertheless, this problem remains interesting as it shows how a nice and compact model can be written." ] }, { "attachments": { "people.png": { "image/png": "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" } }, "cell_type": "markdown", "id": "8fd508af", "metadata": {}, "source": [ "Marrying People. Image from [freesvg.org](https://freesvg.org/group-of-men-and-women-silhouettes)\n", "\"People\"" ] }, { "cell_type": "markdown", "id": "9858c733", "metadata": {}, "source": [ "To build a CSP (Constraint Satisfaction Problem) model, we need first to import the library PyCSP$^3$:" ] }, { "cell_type": "code", "execution_count": 1, "id": "9a9af355", "metadata": {}, "outputs": [], "source": [ "from pycsp3 import *" ] }, { "cell_type": "markdown", "id": "f671a51b", "metadata": {}, "source": [ "Then, we need some data. Here, we have two arrays with the preferences of women and men. For example, wrankings[2][0] is the most preferred man by woman 2. " ] }, { "cell_type": "code", "execution_count": 2, "id": "c2061ba9", "metadata": {}, "outputs": [], "source": [ "wrankings = cp_array([[1,2,4,3,5], [3,5,1,2,4], [5,4,2,1,3], [1,3,5,4,2], [4,2,3,5,1]])\n", "mrankings = cp_array([[5,1,2,4,3], [4,1,3,2,5], [5,3,2,4,1], [1,5,4,3,2], [4,3,2,1,5]])" ] }, { "cell_type": "markdown", "id": "bd275e66", "metadata": {}, "source": [ "Note that we need to transform the lists of integers into more specific lists with the function *cp_array()* because, otherwise it is not possible to use a special object (here, an object Var) as an index of a list of integers in Python (and this is what we do later when posting some constraints). The good news is that when the data is loaded from a file (which is the usual case), all lists of integers have the specific type of list returned by cp_array(), and so, it is very rare to need to call this function explicitly." ] }, { "cell_type": "markdown", "id": "f5be5bb8", "metadata": {}, "source": [ "We define a few constants." ] }, { "cell_type": "code", "execution_count": 3, "id": "353e99ab", "metadata": {}, "outputs": [], "source": [ "n = len(wrankings)\n", "Men, Women = range(n), range(n)" ] }, { "cell_type": "markdown", "id": "4a8c9175", "metadata": {}, "source": [ "We start our CSP model by introducing two arrays $w$ and $h$ of $n$ variables. Although that one array would be technically sufficient to determine the marriages, introducing the two arrays will simplify our task of enforcing stability." ] }, { "cell_type": "code", "execution_count": 4, "id": "d6aa594e", "metadata": {}, "outputs": [], "source": [ "# x[m] is the wife of the man m\n", "x = VarArray(size=n, dom=Women)\n", "\n", "# y[w] is the husband of the woman w\n", "y = VarArray(size=n, dom=Men)" ] }, { "cell_type": "markdown", "id": "f4de342b", "metadata": {}, "source": [ "We can display the structure of the array, as well as the domain of the first variable (note that all variables have the same domain)." ] }, { "cell_type": "code", "execution_count": 5, "id": "e64456cb", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Array x: [x[0], x[1], x[2], x[3], x[4]]\n", "Array y: [y[0], y[1], y[2], y[3], y[4]]\n", "Domain of any variable: 0..4\n" ] } ], "source": [ "print(\"Array x: \", x)\n", "print(\"Array y: \", y)\n", "print(\"Domain of any variable: \", x[0].dom)" ] }, { "cell_type": "markdown", "id": "ebe6d1a4", "metadata": {}, "source": [ "Concerning the constraints, we start by posting a constraint *Channel* in order to ensure that marriages are equivalent from both points of view." ] }, { "cell_type": "code", "execution_count": 6, "id": "e78ec10d", "metadata": {}, "outputs": [], "source": [ "satisfy(\n", " # spouses must match\n", " Channel(x, y)\n", ");" ] }, { "cell_type": "markdown", "id": "99efd544", "metadata": {}, "source": [ "Interestingly, by calling the function *solve()*, we can check that the problem is satisfiable (SAT). We can also display the found solution. Here, we call the function *values()* that collects the values assigned to a specified list of variables." ] }, { "cell_type": "code", "execution_count": 7, "id": "c200b151", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Wifes: [0, 1, 2, 3, 4]\n", "Husbands: [0, 1, 2, 3, 4]\n" ] } ], "source": [ "if solve() is SAT:\n", " print(\"Wifes: \", values(x))\n", " print(\"Husbands: \", values(y))" ] }, { "cell_type": "markdown", "id": "8ed3efaf", "metadata": {}, "source": [ "On can observe that marriages are proposed, but preferences are certainly badly respected." ] }, { "cell_type": "markdown", "id": "6013a603", "metadata": {}, "source": [ "There is no reason for a man to have his wife changed with another woman if this woman prefers her husband to the man. We post a group of constraints *Intension* involving subexpressions corresponding to constraints *Element*." ] }, { "cell_type": "code", "execution_count": 8, "id": "c7257430", "metadata": {}, "outputs": [], "source": [ "satisfy(\n", " # whenever m prefers an other woman o to w, o prefers her husband to m\n", " (mrankings[m][o] >= mrankings[m][x[m]]) | (wrankings[o][y[o]] < wrankings[o][m]) \n", " for m in Men for o in Women\n", ");" ] }, { "cell_type": "markdown", "id": "c27a2f55", "metadata": {}, "source": [ "Similarly, there is no reason for a woman to have his husband changed with another man if this man prefers his wife to the woman. " ] }, { "cell_type": "code", "execution_count": 9, "id": "d69a8b89", "metadata": {}, "outputs": [], "source": [ "satisfy(\n", " # whenever w prefers an other man o to m, o prefers his wife to w\n", " (wrankings[w][o] >= wrankings[w][y[w]]) | (mrankings[o][x[o]] < mrankings[o][w]) \n", " for w in Women for o in Men\n", ");" ] }, { "cell_type": "markdown", "id": "eeebaed2", "metadata": {}, "source": [ "We can run again the solver." ] }, { "cell_type": "code", "execution_count": 10, "id": "e277b553", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Wifes: [1, 0, 4, 2, 3]\n", "Husbands: [1, 0, 3, 4, 2]\n" ] } ], "source": [ "if solve() is SAT:\n", " print(\"Wifes: \", values(x))\n", " print(\"Husbands: \", values(y))" ] }, { "cell_type": "markdown", "id": "3e7f0c9f", "metadata": {}, "source": [ "The reader can check that the marriages are stable." ] }, { "cell_type": "markdown", "id": "bb178d43", "metadata": {}, "source": [ "On can display the three possible solutions for this problem instance." ] }, { "cell_type": "code", "execution_count": 11, "id": "dff65802", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Solution 1\n", " Wifes: [1, 0, 4, 2, 3]\n", " Husbands: [1, 0, 3, 4, 2]\n", "Solution 2\n", " Wifes: [1, 2, 4, 0, 3]\n", " Husbands: [3, 0, 1, 4, 2]\n", "Solution 3\n", " Wifes: [3, 0, 1, 2, 4]\n", " Husbands: [1, 2, 3, 0, 4]\n" ] } ], "source": [ "if solve(sols=ALL) is SAT:\n", " for i in range(n_solutions()):\n", " print(\"Solution \", i+1)\n", " print(\" Wifes: \", values(x,sol=i))\n", " print(\" Husbands: \", values(y,sol=i))" ] }, { "cell_type": "markdown", "id": "73fd3ff9", "metadata": {}, "source": [ "Finally, we give below the model in one piece. Here the data is expected to be given by the user (in a command line)." ] }, { "cell_type": "raw", "id": "114818ad", "metadata": { "raw_mimetype": "text/x-python" }, "source": [ "from pycsp3 import *\n", "\n", "wr, mr = data # ranking by women and men\n", "n = len(wr)\n", "Men, Women = range(n), range(n)\n", "\n", "# x[m] is the wife of the man m\n", "x = VarArray(size=n, dom=Women)\n", "\n", "# y[w] is the husband of the woman w\n", "y = VarArray(size=n, dom=Men)\n", "\n", "satisfy(\n", " # spouses must match\n", " Channel(x, y),\n", "\n", " # whenever m prefers an other woman o to w, o prefers her husband to m\n", " [(mr[m][o] >= mr[m][x[m]]) | (wr[o][y[o]] < wr[o][m]) for m in Men for o in Women],\n", " \n", " # whenever w prefers an other man o to m, o prefers his wife to w\n", " [(wr[w][o] >= wr[w][y[w]]) | (mr[o][x[o]] < mr[o][w]) for w in Women for o in Men]\n", ")" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.12" } }, "nbformat": 4, "nbformat_minor": 5 }