Match small groups of people for coffee, tea, or whatever
MIT License
A script to facilitate networking by matching people for meetups in small groups. Optimizing these groups in terms of overlapping schedules is a non-trivial matching problem. Currently in use by the Princeton Postdoc Council with more than 100 participants matched.
Setting up a meetup works as follows:
The overwhelming majority of participants prefers groups of three and a non-negligible fraction vetos groups of two. However, the number of participants is not always divisible by three. Therefore, for sufficiently large numbers of participants, up to two groups of four are added. For very low (< 5) participants, a single group of two might be added if permitted by the vetos.
If availabilities are surveyed in the sign-up form, then the groups are matched based on these availabilities. This means optimizing an objective function of the mutual availabilities of each group. More weight is given to avoiding groups of very low mutual availabilities.
This optimization problem reminds of the 3-dimensional version of the stable roommates problem, however the optimization goal does not necessarily lead to stable matches.
To be precise, the objective function is the tuple of number of removed people, number of groups with one joint availability, number of groups with two joint availabilities, etc. Lexicographically ordering is applied to the tuples, that is, (0, 1, 2, 3) < (0, 1, 3, 2)
, etc.
Currently, the optimization is performed by sampling the possibility space with heuristic weights:
To be precise, the weight from step 2 is currently chosen to be
where G represents the indices of the already added group members and A denotes the availabilities as a set. The numbers 5 and 3 have been heuristically chosen.
[^1]: For a recent matching with 50 participants, 200k trials were performed, but only 16 of them were built completely.
Clone this repository and run
pip3 install .
After your installation you should have a meetup-matcher
command in your path.
A very simple run looks like
meetup-matcher your-input.csv
for more information, see the documentation.
pip3 install -e .
gitmoji -i # npm install gitmoji
pre-commit install # pip3 install pre-commit
Your help is greatly appreciated! Suggestions, bug reports and feature requests are best opened as github issues. You are also very welcome to submit a pull request!
Bug reports and pull requests are credited with the help of the allcontributors bot.