Een groep van
De studenten worden in een lijst geordend (en krijgen dus een rangnummer
tussen 0 en N-1 (grenzen inbegrepen)), en analoog worden de bedrijven via een
lijst geordend (en elk bedrijf krijgt dus ook een rangnummer tussen 0 en N-1
(grenzen inbegrepen)). De voorkeur van de studenten wordt weergegeven in een
lijst
Een toekenning van studenten aan bedrijven, zullen we voorstellen
via een woordenboek
geldige_toekenning()
met als enig argument een
woordenboek, dat een toekenning (zie hoger) voorstelt. De methode geeft
True
of False
terug, naargelang het om een geldige
toekenning gaat. Een toekenning is hierbij geldig indien tegelijk voldaan is
aan onderstaande voorwaarden:
beste_bedrijf()
heeft 1 argument, een natuurlijk getal, dat
een rangnummer van een student voorstelt. Het resultaat van de methode is het rangnummer van beste bedrijf
voor die student. Je mag aannemen dat het argument een geldige waarde aanneemt.beste_student()
heeft 1 argument, een natuurlijk getal, dat
een rangnummer van een bedrijr voorstelt. Het resultaat van de methode is het rangnummer van beste student
voor dit bedrijf. Je mag aannemen dat het argument een geldige waarde aanneemt.score_toekenning_bedrijf()
heeft als enig argument
een woordenboek dat een toekenning voorstelt. De methode levert als resultaat
een geheel getal, namelijk:
score_toekenning_student()
vertoont een gelijkaardig
gedrag, alleen wordt nu gesommeerd over de voorkeuren van elke student voor het
bedrijf dat hem/haar toegewezen werd (let erop dat het argument nog steeds een
woordenboek is dat bedrijfrangnummers afbeeldt op studentrangnummers). zoek_toekenning()
heeft 1 object als argument, en
dit object beschikt over een methode toekenning()
. Deze methode heeft
1 argument, namelijk een object van de klasse stageBeheer
waarvoor een toekenning
moet bepaald worden, via een welbepaalde strategie (zie verder). Het resultaat van de methode
toekenning()
is een woordenboek dat een gevonden toekenning voorstelt.sb = StageBeheer([[4, 5, 2, 1, 3], [2, 1, 5, 3, 4], [5, 2, 4, 1, 3], [1, 5, 3, 4, 2], [4, 3, 1, 2, 5]], [[3, 5, 1, 4, 2], [3, 5, 1, 4, 2], [4, 3, 5, 2, 1], [4, 5, 3, 1, 2], [1, 4, 2, 5, 3]]) print(sb.beste_bedrijf(3)) #0 print(sb.beste_bedrijf(2)) #3 print(sb.beste_student(2)) #4 print(sb.beste_student(4)) #0 print(sb.geldige_toekenning({0: 0, 1: 3, 2: 4, 3: 2, 4: 1})) #True print(sb.geldige_toekenning({0: 6, 1: 3, 2: 4, 3: 0})) #False print(sb.score_toekenning_bedrijf({0: 0, 1: 3, 2: 4, 3: 2, 4: 1})) #15 print(sb.score_toekenning_bedrijf({0: 6, 1: 3, 2: 4, 3: 0})) #-1 print(sb.score_toekenning_student({0: 0, 1: 3, 2: 4, 3: 2, 4: 1})) #15 print(sb.score_toekenning_student({0: 6, 1: 3, 2: 4, 3: 0})) #-1
Elk van onderstaande klassen beschikt over de methode toekenning()
met als enig
argument een object van de klasse stageBeheer
. Het resultaat van de methode is een
woordenboek dat een gevonden toekenning voorstelt. De tekst hieronder beschrijft telkens de te
volgen strategie bij het genereren van oplossingen voor het toekenningsprobleem.
Het resultaat komt tot stand door aan het bedrijf met rangnummer
Loop alle bedrijven af in de volgorde waarin ze in de lijst van voorkeuren voorkomen. Kies voor elk bedrijf de meest geschikte student, die nog geen bedrijf toegewezen kreeg.
Loop alle studenten af in de volgorde waarin ze in de lijst van voorkeuren voorkomen. Koppel aan elke student het meest geschikte bedrijf, dat nog geen stagiair toegewezen kreeg.
sb = StageBeheer([[6, 3, 2, 5, 4, 1], [2, 4, 5, 1, 3, 6], [4, 2, 6, 3, 1, 5], [2, 3, 5, 6, 1, 4], [1, 2, 3, 5, 4, 6], [3, 1, 2, 6, 4, 5]], [[2, 4, 3, 5, 1, 6], [1, 2, 5, 3, 4, 6], [5, 1, 2, 6, 3, 4], [6, 2, 1, 5, 4, 3], [4, 5, 2, 1, 6, 3], [6, 4, 3, 1, 5, 2]]) sb.zoek_toekenning(DefaultZoeker()) #{0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5} sb.zoek_toekenning(GulzigBedrijfZoeker()) #{0: 4, 1: 0, 2: 1, 3: 2, 4: 3, 5: 5} sb.zoek_toekenning(GulzigStudentZoeker()) #{0: 3, 1: 4, 2: 5, 3: 1, 4: 2, 5: 0}
sb = StageBeheer([[3, 2, 4, 1], [4, 2, 3, 1], [4, 3, 2, 1], [3, 2, 4, 1]], [[1, 3, 4, 2], [2, 3, 4, 1], [1, 3, 2, 4], [2, 1, 3, 4]]) sb.zoek_toekenning(StabieleToekenningZoeker()) #{0: 0, 1: 3, 2: 2, 3: 1}