knitr::opts_chunk$set(
  comment = "#>", echo = FALSE, fig.width = 6, warning = FALSE, include=FALSE
)

Reading and Preparing the Data

First read the data from the Excel file. In the notation, we will index Events by i, and Members (or more precisely, Email) by j. The preferences data set has rankings and number of tickets asked, both of which are indexed over both i and j.

Let’s start by defining 3 metrics for each event:

S_i = # seats made available for event i M_i = # members asking for seats Req_ij = number of event i seats requested by member j

Now with this, partition the event list into 3 sets E : easy case, Req_i < S_i G : good case, M_i < S_i H : hard case, M_i > S_i

Assignments

The Easy Ones

For all events in E, assign everyone as many seats as they asked for. For each assignment, increment member score Score_j by (1/r_ij)*Req_ij, where r_ij is rank and Req_ij is number of seats asked.

These assignments are ready to go. Focus on the Email, Event, and Allot columns.

Test
Email Event Allot Req_ij
Kinetech Arts | 3/09/2022 | 8:30 PM 2 2
Kinetech Arts | 3/10/2022 | 7:30 PM 2 2
Kinetech Arts | 3/10/2022 | 7:30 PM 1 1
Kinetech Arts | 3/10/2022 | 7:30 PM 2 2
Kinetech Arts | 3/10/2022 | 7:30 PM 1 1
Kinetech Arts | 3/10/2022 | 8:30 PM 2 2
Dresher Davel Invented Instrument Duo | 3/12/2022 | 7:30 PM 1 1
Dresher Davel Invented Instrument Duo | 3/12/2022 | 7:30 PM 2 2
Academy of St Martin in the Fields with Joshua Bell | 3/12/2022 | 7:30 PM 2 2
Academy of St Martin in the Fields with Joshua Bell | 3/12/2022 | 7:30 PM 2 2
Academy of St Martin in the Fields with Joshua Bell | 3/12/2022 | 7:30 PM 2 2
Matthew Whitaker Quartet | 3/25/2022 | 7:30 PM 2 2
Matthew Whitaker Quartet | 3/25/2022 | 7:30 PM 1 1
Matthew Whitaker Quartet | 3/25/2022 | 7:30 PM 2 2
Matthew Whitaker Quartet | 3/25/2022 | 7:30 PM 2 2
Matthew Whitaker Quartet | 3/25/2022 | 7:30 PM 2 2
Matthew Whitaker Quartet | 3/25/2022 | 7:30 PM 1 1
Matthew Whitaker Quartet | 3/25/2022 | 7:30 PM 1 1
Dr. Ibram X. Kendi | 3/31/2022 | 7:30 PM 2 2
Dr. Ibram X. Kendi | 3/31/2022 | 7:30 PM 2 2
Dr. Ibram X. Kendi | 3/31/2022 | 7:30 PM 2 2
Dr. Ibram X. Kendi | 3/31/2022 | 7:30 PM 1 1
Dr. Ibram X. Kendi | 3/31/2022 | 7:30 PM 2 2
Dr. Ibram X. Kendi | 3/31/2022 | 7:30 PM 1 1
Ashwini Bhatt & Forrest Gander | 4/15/2022 | 7:30 PM 2 2
Ashwini Bhatt & Forrest Gander | 4/15/2022 | 7:30 PM 2 2
Ashwini Bhatt & Forrest Gander | 4/15/2022 | 7:30 PM 1 1
Ashwini Bhatt & Forrest Gander | 4/15/2022 | 7:30 PM 1 1
Christopher Taylor, Piano | 4/22/2022 | 7:30 PM 2 2
Christopher Taylor, Piano | 4/24/2022 | 2:00 PM 1 1
Christopher Taylor, Piano | 4/24/2022 | 2:00 PM 2 2
Christopher Taylor, Piano | 4/24/2022 | 2:00 PM 2 2
Christopher Taylor, Piano | 4/24/2022 | 2:00 PM 1 1
Ashwini Bhatt & Forrest Gander | 4/28/2022 | 7:30 PM 2 2
Lara Downes | 5/06/2022 | 7:30 PM 1 1
Lara Downes | 5/06/2022 | 7:30 PM 2 2
Lara Downes | 5/06/2022 | 7:30 PM 1 1
Alexander String Quartet 3 | 5/15/2022 | 2:00 PM 2 2
Alexander String Quartet 3 | 5/15/2022 | 2:00 PM 1 1
Alexander String Quartet 3 | 5/15/2022 | 2:00 PM 1 1
Alexander String Quartet 3 | 5/15/2022 | 2:00 PM 2 2
Alexander String Quartet 3 | 5/15/2022 | 2:00 PM 2 2
Alexander String Quartet 3 | 5/15/2022 | 2:00 PM 1 1
Alexander String Quartet 3 | 5/15/2022 | 2:00 PM 1 1

The Good Ones: Enough Tickets for Members (but not Guests)

In the next set you can assign 1 ticket to each member who requested as seat, but some of them asked for two, and we’re not ready to assign the 2nd ticket yet. It could still occur, after we examine the remaining shows where there are stronger conflicts (requests exceed avaialble seats).

Test
Email Event Allot Req_ij
Ballet Folklorico de Mexico | 3/18/2022 | 7:30 PM 1 2
Ballet Folklorico de Mexico | 3/18/2022 | 7:30 PM 1 1
Ballet Folklorico de Mexico | 3/18/2022 | 7:30 PM 1 2
Ballet Folklorico de Mexico | 3/18/2022 | 7:30 PM 1 2
Ballet Folklorico de Mexico | 3/18/2022 | 7:30 PM 1 2
Ballet Folklorico de Mexico | 3/18/2022 | 7:30 PM 1 2
Ballet Folklorico de Mexico | 3/18/2022 | 7:30 PM 1 2
Heather McGhee | 4/03/2022 | 7:30 PM 1 2
Heather McGhee | 4/03/2022 | 7:30 PM 1 2
Heather McGhee | 4/03/2022 | 7:30 PM 1 2
Heather McGhee | 4/03/2022 | 7:30 PM 1 2
Heather McGhee | 4/03/2022 | 7:30 PM 1 1
Heather McGhee | 4/03/2022 | 7:30 PM 1 2
Heather McGhee | 4/03/2022 | 7:30 PM 1 1
Heather McGhee | 4/03/2022 | 7:30 PM 1 2
Las Cafeteras | 4/28/2022 | 7:30 PM 1 2
Las Cafeteras | 4/28/2022 | 7:30 PM 1 2
Las Cafeteras | 4/28/2022 | 7:30 PM 1 2
Las Cafeteras | 4/28/2022 | 7:30 PM 1 2
Las Cafeteras | 4/28/2022 | 7:30 PM 1 2
Las Cafeteras | 4/28/2022 | 7:30 PM 1 2
Las Cafeteras | 4/28/2022 | 7:30 PM 1 2
Las Cafeteras | 4/28/2022 | 7:30 PM 1 1
Las Cafeteras | 4/28/2022 | 7:30 PM 1 1
Las Cafeteras | 4/28/2022 | 7:30 PM 1 2
Las Cafeteras | 4/28/2022 | 7:30 PM 1 2
David Sedaris | 5/01/2022 | 7:30 PM 1 1
David Sedaris | 5/01/2022 | 7:30 PM 1 2
David Sedaris | 5/01/2022 | 7:30 PM 1 2
David Sedaris | 5/01/2022 | 7:30 PM 1 2
David Sedaris | 5/01/2022 | 7:30 PM 1 1
David Sedaris | 5/01/2022 | 7:30 PM 1 2
David Sedaris | 5/01/2022 | 7:30 PM 1 2
David Sedaris | 5/01/2022 | 7:30 PM 1 1
David Sedaris | 5/01/2022 | 7:30 PM 1 2
David Sedaris | 5/01/2022 | 7:30 PM 1 2

Visualization