Spaces:
Sleeping
Sleeping
| from .Constant import Constant | |
| # Reads configuration file and stores parsed objects | |
| class Criteria: | |
| weights = [0, 0.5, 0.5, 0, 0] | |
| # check for room overlapping of classes | |
| def isRoomOverlapped(slots, reservation, dur): | |
| reservation_index = hash(reservation) | |
| cls = slots[reservation_index: reservation_index + dur] | |
| return any(True for slot in cls if len(slot) > 1) | |
| # does current room have enough seats | |
| def isSeatEnough(r, cc): | |
| return r.NumberOfSeats >= cc.NumberOfSeats | |
| # does current room have computers if they are required | |
| def isComputerEnough(r, cc): | |
| # return (not cc.LabRequired) or (cc.LabRequired and r.Lab) | |
| return cc.LabRequired == r.Lab | |
| # check overlapping of classes for professors and student groups (size of course) | |
| def isOverlappedProfStudentGrp(slots, cc, numberOfRooms, timeId): | |
| po = go = False | |
| dur = cc.Duration | |
| for i in range(numberOfRooms, 0, -1): | |
| # for each hour of class | |
| for j in range(timeId, timeId + dur): | |
| cl = slots[j] | |
| for cc1 in cl: | |
| if cc != cc1: | |
| # professor overlaps? | |
| if not po and cc.professorOverlaps(cc1): | |
| po = True | |
| # student group enough? | |
| if not go and cc.groupsOverlap(cc1): | |
| go = True | |
| # both type of overlapping? no need to check more | |
| if po and go: | |
| return po, go | |
| timeId += Constant.DAY_HOURS | |
| return po, go | |