Goedemiddag,

Ik ben bezig met een inschrijfsysteem te maken voor een man of 150. Vanuit 6 opties geeft iedereen een top 3 aan. Dus something like this:


user	keuze1	keuze2	keuze3
a			2		3		5
b			1		4		2
c			6		3		4


Wat is het doel?
- Iedereen in een zo hoog mogelijke voorkeur krijgen
- rekening houden met de maximum aantallen die er zijn

Nu zat ik eraan te denken om alle opties af te gaan en te laten bekijken (hoeveel mensen hebben hun eerste keuze, hoeveel hun tweede, hoeveel hun derde en zo een "geluksfactor" te bepalen en daarvan de beste te pakken), maar 3^150 geeft 3.7e71 opties.... Dat is denk een beetje heftig.

Tegelijk kan ik niet de 1e met dit probleem zijn. Dus er moet ergens een beginpunt zijn, maar na flink wat googlen kan ik niks vinden.

Wie weet een mooi beginpunt? Of nog beter, heeft zoiets al liggen ;)
Je moet die optimalisatie in verschillende fasen opsplitsen:

1. Je legt de hoogste prioriteit bij de 1e keuze. Dat goed aan de 1e keuze wordt voldaan, is namelijk meestal veel belangrijker dan dat goed aan de 3e keuze wordt voldaan. Verwerk daarom de 3 voorkeuren na elkaar.

2. Vul vervolgens eerste de keuzen waaraan sowieso kan worden voldaan: dat zijn alle keuzen waarbij je meer plaatsen dan aanvragen hebt. (Als je 12 plaatsen voor een cursus pottenbakken hebt en maar 6 mensen die het liefst pottenbakken, kun je ze alle 6 op hun wenken bedienen.)

3. De plaatsen die je daarna nog over hebt, kun je voor de 1e keuze aselect verdelen. Kwestie van 'lootjes trekken'. Bij de 2e en 3e keuze kun je echter gaan wegen. Bij de 2e keuze kun je namelijk voorrang verlenen aan de mensen waarbij niet aan de 1e keuze kon worden voldaan. Bij de 3e keuze idem dito: daar zijn de pechvogels die er bij hun 1e en 2e keuze bekaaid van af kwamen het eerste aan de beurt.

Het effect van dit soort optimalisaties kun je verder nog wat dempen met een first come, first serve. Als je bijvoorbeeld toch maar 12 plaatsen voor pottenbakken hebt, is het na 12 x 1e keuze pottenbakken misschien niet meer zinvol om pottenbakken nog langer als 1e keuze aan te bieden. Nee moeten verkopen is enerzijds niet altijd fijn, maar anderzijds wel duidelijk.

Reageren