-
Notifications
You must be signed in to change notification settings - Fork 0
Hoe Populatie Generator aanpakken
Doorheen het proces houden we een multimap bij van leeftijd --> personen.
-
We bepalen eerst de families mét kinderen (afgekort fmk). De leeftijden worden uit de algemene leeftijd distributie gehaald, zolang ze voldoen aan de voorwaarden.
-
Daarna bepalen we de families zonder kinderen (afgekort fzk). Voor dat we dit doen, bepalen we hoeveel de tot nu toe bekomen leeftijdverdeling afwijkt van de voorgeschreven leeftijdsverdeling. Die gegevens gebruiken we dan om leeftijden te genereren. Dit kan ook mislopen:
- Als er te weinig kinderen zijn, kunnen we hiervoor niet corrigeren.
- Als er te weinig volwassenen zijn maar niet genoeg personen in de fzk's kunnen we ook niet (genoeg) corrigeren. We geven hiervoor een melding, maar gaan niet stoppen. Het kan namelijk moeilijk zijn om een perfect consistente configuratie te maken.
-
Op basis van het nodig aantal scholen per leeftijdsgroep en het gemiddeld aantal leerlingen per school, definieren we het aantal scholen per leeftijdsgroep.
-
Daarna vullen we deze scholen at random op. Het gemiddelde aantal leerlingen per school zal natuurlijk zoals gewenst zijn. De verwachte variatie in de aantallen is hetzelfde als het gemiddelde. (TODO: bewijs of zo, heb het even nagekeken met een experiment)
De werkplaatsen hebben geen gemiddelde grootte, dus hiervoor gebruiken we een andere, simpelere methode. In pseudo-python:
werkzoekenden = set(p for p in populatie if p.zoekt_werk) # zoekt_werk gedefinieerd volgens config
werkplaats = 1
while len(werkzoekenden) > 0:
# ietsje meer kans op kleine werkplaatsen, geen groot probleem
werkplaats_grootte = random.randint(min_grootte, min(max_grootte, len(werkzoekenden))
for i in range(werkplaats_grootte):
p = werkzoekende.pop()
p.werkplaats = werkplaats
werkplaats += 1
Vergelijkbaar aan de scholen. Op basis van de gemiddelde grootte en het gemiddeld aantal clusters per persoon (tussen 0 en 2) worden er een aantal clusters gemaakt, die dan random gevuld worden.