We were approached to co-construct a system to optimize bookings in real time for an event planning company.

We built a system that maximizes the number of people at a restaurant. We also constructed a recommender system to help them accommodate customers: when a restaurant becomes full, you might want to refuse one group to be able to accept another, bigger group at a later time. The overall result was an increase of around 20% in the number of customers.

The following image depicts a fictive restaurant with 12 tables (one per row) during a 6-hour period (each column corresponds to a 15-minute timeslot). The blue boxes are bookings accepted by our system in real time.

Real time booking at a fictive restaurant

A problem with very high stochasticity

The system had to take into account not only phone and online bookings but also people who show up with no reservation. Reservation management can be quite tricky: someone might book a table of 6 at 7pm, but in reality only 4 people show up at 7:30pm — and you estimate that they will stay for an hour while they stay for an hour and a half.

Very soon, we realized that it was in the best interest of restaurants that fill up quickly to sometimes refuse people. We thus constructed a recommender system combining ML and OR that helped them reschedule some groups.

Mathematical optimization is not all

A good mathematical optimization is not necessarily a good solution for our customers. Our first version of the booking system provided highly optimized solutions — and that is exactly why it needed a second version that takes the way people actually work into account.