Algorithm for allocating tables based on preferences, using simulated annealing
- An installation of Go: https://go.dev/dl/
go install github.com/mhbardsley/table-allocations@latest
- Create a JSON file to hold people, their preferences and table capacities. See
sample.json
as an example. (Note: the program will, by default, look for ainput.json
file)
table-allocations [flags]
- Note: there may be a small delay between running the program and getting the result (see below for inspecting flags to change speed/optimisation trade-off)
All flags are optional and most do not need touching. If you have not named your JSON file input.json
, you need to supply an -f
flag, e.g. table-allocations -f sample.json
will carry out the algorithm on the sample data.
Another useful flag is -m
, which specifies what is being optimised. There are three options: sum
, which will optimise the total number of preferences satisfied; count
, which will optimise the number of people with at least 1 satisfied preference; hybrid
(default), which aims to compromise between these. To choose sum
, for example, use table-allocations -m sum
.
For all other flags (which don't really need tweaking), you can run with the -h
flag, i.e. table-allocations -h
.