Maak een voortplantingssimulator

Een open opdracht: de oplossing onderaan is er één van de vele mogelijke.

Klasse Mens

Properties. Maak een klasse Mens met volgende eigenschappen:

  • Geslacht (een enum): voorlopig enkel Man en Vrouw
  • OogKleur (een enum): Blauw, Bruin, Groen en Rood
  • MaxLengte (in cm): een getal dat niet onder 30 kan gaan. Het zegt hoe groot de persoon ooit kan worden.

Constructors. Voorzie volgende constructors:

  • Een default constructor die bovenstaande eigenschappen op willekeurige waarden zet. MaxLengte ligt 90% van de keren tussen 150 en 210, 5% van de keren tussen 40 en 150 en 5% van de keren tussen 210 en 240.
  • Een overloaded constructor waaraan je de 3 eigenschappen als parameters meegeeft.

Een derde constructor die enkel het geslacht vastlegt en de rest willekeurig laat, mag ook: die heb je straks nodig.

ToonMens. Voorzie een methode ToonMens. Die vat de informatie van een Mens-object samen op één lijn, met als achtergrondkleur de kleur van de ogen. De tekst is maxlengte [in meter], geslacht. Bijvoorbeeld:

1,78 m, Man

Plantvoort. Enkel vrouwen kunnen nieuwe mensen maken.

  • Elke mens heeft een methode Plantvoort, die als parameter een Mens met geslacht Man vraagt.
  • Enkel bij vrouwen doet deze methode iets. Wordt ze bij een man opgeroepen, of is de parameter geen man, dan geeft de methode null terug.
  • Anders geeft de methode een nieuw Mens-object terug. De nieuwe mens krijgt als lengte het gemiddelde van de lengte van de man en de vrouw. De oogkleur is 50% van de keren die van de man en 50% van de keren die van de vrouw. Het geslacht is willekeurig.

Eerste voortplantingen testen

Maak 12 willekeurige mensen en zet ze in een List. De eerste 6 zijn vrouwen, de laatste 6 mannen. Alle andere eigenschappen zijn willekeurig.

Laat de mensen nu voortplanten:

  • Elke vrouw uit de eerste helft van de lijst kiest een willekeurige partner uit de tweede helft, en maakt met hem een nieuwe mens. De man gaat als parameter naar de methode Plantvoort van de vrouw.
  • Zet de nieuwe mens achteraan in de lijst.

Generatie bijhouden

Voeg een property Generatie toe aan Mens, die onthoudt in welke generatie de mens geboren is. Je stelt ze in via de constructor. De startgroep is generatie 0.

Simulatie

Herhaal bovenstaande voor 10 generaties (ouders maken dus wellicht kinderen met hun eigen kinderen of kleinkinderen: niet over nadenken) en bekijk de resultaten. Na de eerste ronde staan de vrouwen en de mannen niet meer netjes in twee helften: laat dus elke mens een willekeurige partner uit de hele lijst kiezen, en laat Plantvoort zelf beslissen of er een kind komt.

Zet deze simulatie in een static methode Simuleer, die een List van mensen aanvaardt en een getal dat zegt hoeveel generaties er gesimuleerd moeten worden.

Toon de gebruiker daarna de gemiddelde lengte, hoeveel procent welke oogkleur heeft, enzovoort.

Maak er een applicatie van waarmee de gebruiker experimenten kan doen om te zien wat er na x generaties gebeurt. Bijvoorbeeld:

  • Wat als mannen heel klein zijn en vrouwen heel lang?
  • Wat als mensen met blauwe ogen die kleur altijd aan hun kinderen doorgeven: na hoeveel generaties heeft iedereen blauwe ogen?

Mutaties

Voeg mutaties toe tijdens de voortplanting. Elke keer dat Plantvoort een nieuwe mens maakt, is er 10% kans dat een van de “regels” gebroken wordt. Bijvoorbeeld: in plaats van de gemiddelde lengte krijgt het kind de lengte van de mama, of het kind krijgt bij een mutatie altijd groene ogen. Verzin zelf enkele mutatieregels.

Geef de methode Simuleer een bool-parameter die zegt of mutaties toegestaan zijn, en een int-parameter voor de kans op een mutatie (bijvoorbeeld 10 = 10%). Test je mutaties, verzin extra regels en pas ze toe in de simulatie.

Extra properties

Geef Mens extra eigenschappen die ook als genetische eigenschappen meetellen bij het voortplanten (denk aan haarkleur, allergieën of het aantal armen).

Voorbeeld uitvoer

Tekst die start met “>” is invoer van de gebruiker. Alles is willekeurig, dus jouw getallen zijn anders. De achtergrondkleuren van de startgroep staan hier niet bij.

De startgroep:
1,68 m, Vrouw
1,70 m, Vrouw
2,37 m, Vrouw
1,81 m, Vrouw
2,08 m, Vrouw
2,10 m, Vrouw
1,89 m, Man
1,55 m, Man
2,40 m, Man
2,02 m, Man
0,47 m, Man
2,15 m, Man
Hoeveel generaties wil je simuleren?
>10
Mutaties toestaan? (ja/nee)
>nee
Aantal mensen: 102
Gemiddelde lengte: 173,7 cm
Ogen Blauw: 11,8%
Ogen Bruin: 16,7%
Ogen Groen: 41,2%
Ogen Rood: 30,4%

Deze oplossing is afgeschermd.
Studenten krijgen de sleutel van hun lesgever. Heb je de sleutel al eens op dit toestel gebruikt, dan verschijnt de oplossing hier vanzelf.