/Switching-Gale-Shapley-with-a-Minimum-Quota

Gale-Shapley matching with additional NA column

Primary LanguagePython

This is a variant of the Gale/Shapley algorithm in python designed to address the Stable Marriage Problem. The variant here is that certain volunteer/job assignments are forbidden, Volunteers can have zero or more jobs, and every job gets a volunteer. Hosted as a AWS Lambda microservice at https://o9ktamo0f2.execute-api.us-east-1.amazonaws.com/dev/app/data

post a body like this:

[
    {
        "abe": [
            "abi",
            "eve",
            "cath",
            "ivy",
            "jan",
            "dee",
            "fay",
            "bea",
            "hope",
            "gay",
            "3"
        ],
        "bob": [
            "cath",
            "hope",
            "abi",
            "dee",
            "eve",
            "fay",
            "bea",
            "jan",
            "ivy",
            "gay",
            "3"
        ],
        "col": [
            "hope",
            "eve",
            "abi",
            "dee",
            "bea",
            "fay",
            "ivy",
            "gay",
            "cath",
            "jan",
            "4"
        ],
        "dan": [
            "ivy",
            "fay",
            "dee",
            "gay",
            "hope",
            "eve",
            "jan",
            "bea",
            "cath",
            "abi",
            "4"
        ],
        "ed": [
            "jan",
            "dee",
            "bea",
            "cath",
            "fay",
            "eve",
            "abi",
            "ivy",
            "hope",
            "gay",
            "5"
        ],
        "fred": [
            "bea",
            "abi",
            "dee",
            "gay",
            "eve",
            "ivy",
            "cath",
            "jan",
            "hope",
            "fay",
            "5"
        ],
        "gav": [
            "gay",
            "eve",
            "ivy",
            "bea",
            "cath",
            "abi",
            "dee",
            "hope",
            "jan",
            "fay",
            "6"
        ],
        "hal": [
            "abi",
            "eve",
            "hope",
            "fay",
            "ivy",
            "cath",
            "jan",
            "bea",
            "gay",
            "dee",
            "6"
        ],
        "ian": [
            "hope",
            "cath",
            "dee",
            "gay",
            "bea",
            "abi",
            "fay",
            "ivy",
            "jan",
            "eve",
            "7"
        ],
        "jon": [
            "abi",
            "fay",
            "jan",
            "gay",
            "eve",
            "bea",
            "dee",
            "cath",
            "ivy",
            "hope",
            "7"
        ]
    },
    {
        "abi": [
            "bob",
            "fred",
            "jon",
            "gav",
            "ian",
            "abe",
            "dan",
            "ed",
            "col",
            "hal",
            "7"
        ],
        "bea": [
            "bob",
            "abe",
            "col",
            "fred",
            "gav",
            "dan",
            "ian",
            "ed",
            "jon",
            "hal",
            "7"
        ],
        "cath": [
            "fred",
            "bob",
            "ed",
            "gav",
            "hal",
            "col",
            "ian",
            "abe",
            "dan",
            "jon",
            "6"
        ],
        "dee": [
            "fred",
            "jon",
            "col",
            "abe",
            "ian",
            "hal",
            "gav",
            "dan",
            "bob",
            "ed",
            "6"
        ],
        "eve": [
            "jon",
            "hal",
            "fred",
            "dan",
            "abe",
            "gav",
            "col",
            "ed",
            "ian",
            "bob",
            "5"
        ],
        "fay": [
            "bob",
            "abe",
            "ed",
            "ian",
            "jon",
            "dan",
            "fred",
            "gav",
            "col",
            "hal",
            "5"
        ],
        "gay": [
            "jon",
            "gav",
            "hal",
            "fred",
            "bob",
            "abe",
            "col",
            "ed",
            "dan",
            "ian",
            "4"
        ],
        "hope": [
            "gav",
            "jon",
            "bob",
            "abe",
            "ian",
            "dan",
            "hal",
            "ed",
            "col",
            "fred",
            "4"
        ],
        "ivy": [
            "ian",
            "col",
            "hal",
            "gav",
            "fred",
            "bob",
            "abe",
            "ed",
            "jon",
            "dan",
            "3"
        ],
        "jan": [
            "ed",
            "hal",
            "gav",
            "abe",
            "bob",
            "jon",
            "col",
            "ian",
            "fred",
            "dan",
            "3"
        ]
    }
]

to get this response

[
    [
        "jon",
        [
            "abi"
        ]
    ],
    [
        "bob",
        [
            "cath",
            "fay"
        ]
    ],
    [
        "ian",
        [
            "hope"
        ]
    ],
    [
        "dan",
        [
            "ivy"
        ]
    ],
    [
        "ed",
        [
            "jan"
        ]
    ],
    [
        "fred",
        [
            "bea"
        ]
    ],
    [
        "gav",
        [
            "gay"
        ]
    ],
    [
        "hal",
        [
            "eve"
        ]
    ],
    [
        "col",
        [
            "dee"
        ]
    ]
]