Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class StageBeheer:
- def __init__(self,st,b):
- self.st,self.b,self.N = st,b,len(st)
- def geldige_toekenning(self,woordenboek):
- for i in range(self.N):
- if i not in woordenboek.keys() or i not in woordenboek.values():
- return False
- return True
- def beste_bedrijf(self,rangnummer):
- voorkeuren = self.st[rangnummer]
- for i in range(self.N):
- if voorkeuren[i]==min(voorkeuren):
- return i
- def beste_student(self,rangnummer):
- voorkeuren = self.b[rangnummer]
- for i in range(self.N):
- if voorkeuren[i]==min(voorkeuren):
- return i
- def score_toekenning_bedrijf(self,woordenboek):
- if not self.geldige_toekenning(woordenboek):
- return -1
- return sum(self.b[bedrijf][student] for bedrijf,student in woordenboek.items())
- def score_toekenning_student(self,woordenboek):
- if not self.geldige_toekenning(woordenboek):
- return -1
- return sum(self.st[student][bedrijf] for bedrijf,student in woordenboek.items())
- def zoek_toekenning(self,toek):
- return toek.toekenning(self)
- class DefaultZoeker:
- def toekenning(self,beheer):
- return {i:i for i in range(beheer.N)}
- class GulzigBedrijfZoeker:
- def toekenning(self,beheer):
- woordenboek = {}
- for i in range(len(beheer.b)):
- w = {beheer.b[i][j]:j for j in range(beheer.N)}
- notfound = True
- j = 1
- while notfound:
- if w[j] not in woordenboek.values():
- woordenboek[i] = w[j]
- notfound = False
- else:
- j+=1
- return woordenboek
- class GulzigStudentZoeker:
- def toekenning(self,beheer):
- woordenboek = {}
- for i in range(len(beheer.st)):
- w = {beheer.st[i][j]:j for j in range(beheer.N)}
- notfound = True
- j = 1
- while notfound:
- if w[j] not in woordenboek.keys():
- woordenboek[w[j]] = i
- notfound = False
- else:
- j+=1
- return woordenboek
- class StabieleToekenningZoeker:
- def toekenning(self,beheer):
- te_doen = [i for i in range(beheer.N)]
- voorstellen = []
- w = {}
- while te_doen != []:
- bedrijf = min(te_doen)
- voorkeur_bedrijf = {beheer.b[bedrijf][j]:j for j in range(beheer.N) if (j,bedrijf) not in voorstellen}
- stu = voorkeur_bedrijf[min(voorkeur_bedrijf.keys())]
- voorkeur_student = {j:beheer.st[stu][j] for j in range(beheer.N)} ##voorkeur voor bedrijf j
- voorstellen.append((stu,bedrijf))
- if stu not in w.values():
- w[bedrijf] = stu
- else:
- conc = None
- for b,s in w.items():
- if s == stu:
- conc = b
- if voorkeur_student[bedrijf] < voorkeur_student[conc]:
- w[bedrijf] = stu
- del w[conc]
- te_doen = [i for i in range(beheer.N) if i not in w.keys()]
- return w
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement