def getInitStateFromString(self): op = OutputParser("") return op.getStateFromStr(self.extractInitSection())
self.patchedStateSequence.append(s) def purgeFactsWithSymbol(self, symbol): #In order to log the change, create a state # with facts that match symbol # remove from both true set and false set s = State() s.patch(self.initState) self.patchSequence.append("Purge symbol: " + symbol) self.patchedStateSequence.append(s) for prop in s.getTrueProps(): if symbol in prop: self.initState.removeTrueProp(prop) for prop in s.getFalseProps(): if symbol in prop: self.initState.removeFalseProp() if __name__ == "__main__": myPDDL = InitFileMgr("/tmp/test2.out") op = OutputParser("/tmp/test.out") pset = op.getPropSet() print "\n\nAll props:" print str(pset) myPDDL.printInitState() myPDDL.patchInitState(op.stateList[2], pset) print "After patch:" myPDDL.printInitState()
def purgeFactsWithSymbol(self, symbol): #In order to log the change, create a state # with facts that match symbol # remove from both true set and false set s = State() s.patch(self.initState) self.patchSequence.append("Purge symbol: "+symbol) self.patchedStateSequence.append(s) for prop in s.getTrueProps(): if symbol in prop: self.initState.removeTrueProp(prop) for prop in s.getFalseProps(): if symbol in prop: self.initState.removeFalseProp() if __name__ == "__main__": myPDDL = InitFileMgr("/tmp/test2.out") op = OutputParser("/tmp/test.out") pset = op.getPropSet() print "\n\nAll props:" print str(pset) myPDDL.printInitState() myPDDL.patchInitState(op.stateList[2], pset) print "After patch:" myPDDL.printInitState()
def generate(parameters): #Set up ssl certificates # Load venue data with open('venues.json', 'r') as f: venue_list = json.load(f) academicYear = "2019-2020" semester = parameters["semester"] #modules = ["CS2030", "CS2040S", "CS2100", "IS1103", "GER1000", "ES1103"] modules = parameters["moduleArray"] # ========================================================================= # Fetch timetable data timetable = {} for module in modules: response = requests.get("https://api.nusmods.com/v2/" + academicYear + "/modules/" + module + ".json") moduleData = response.json() # print("====================================================") # print("Timetable for " + module) # print(moduleData) timetableData = {} if len(moduleData["semesterData"]) > 1: timetableData = moduleData["semesterData"][semester]["timetable"] else: timetableData = moduleData["semesterData"][0]["timetable"] slots = {} for classSlot in timetableData: lessonType = classSlot["lessonType"] classNo = classSlot["classNo"] classDay = classSlot["day"] classVenue = classSlot["venue"] times = [] for i in range(int(classSlot["startTime"]), int(classSlot["endTime"]), 100): times.append(i) ''' print("Class: " + classNo) print("Day: " + classDay) print("Start Time: " + classSlot["startTime"]) print("End Time: " + classSlot["endTime"]) print(times) print("Type: " + lessonType) ''' if lessonType not in slots: slots[lessonType] = {} if classNo not in slots[lessonType]: slots[lessonType][classNo] = [] slots[lessonType][classNo].append({ "day": classDay, "times": times, "venue": classVenue }) timetable[module] = slots # ========================================================================= # remove modules past cutoff times and in fixed slots filtered = copy.deepcopy(timetable) startCutoff = parameters["startTime"] endCutoff = parameters["endTime"] #blocked = [("Monday", 1200), ("Wednesday", 1600)] #fixed = [("CS2100", "Tutorial", "15"), ("CS2030", "Laboratory", "06")] blocked = [] fixed = [] for module_code in timetable: for slot_type in timetable[module_code]: for slot_number in timetable[module_code][slot_type]: for date_time in timetable[module_code][slot_type][ slot_number]: day = date_time['day'] time_list = date_time['times'] remove = False for slot in fixed: if module_code == slot[0] and slot_type == slot[ 1] and slot_number != slot[2]: remove = True for hour in time_list: if hour > endCutoff or hour < startCutoff or ( day, hour) in blocked: remove = True if remove: filtered[module_code][slot_type].pop(slot_number) timetable = filtered # print(timetable) ''' #initialize empty schedule schedule = [] for i in range(5): schedule.append([]) for j in range(14): schedule[i].append(0) #print(schedule) ''' validTimetables = [] for i in range(20000): # randomly assign timetable dictLen = len(timetable) randomTimetable = {} for module in timetable: classTypes = timetable[module] if module not in randomTimetable: randomTimetable[module] = {} for classType in classTypes: classes = classTypes[classType] if (len(classes) > 0): chosenClass = choice([*classes]) else: return "Timetable is impossible" randomTimetable[module][classTypeConverter( classType)] = chosenClass # print(checkConflict(randomTimetable)) if not checkConflict(randomTimetable, timetable): # print(OutputParser.create_url(randomTimetable)) validTimetables.append(randomTimetable) # print(randomTimetable) # break noOfTimetables = len(validTimetables) priorityFunctions = { "0": lambda validTimetables: min_travel_distance( validTimetables, timetable, venue_list, noOfTimetables), "1": lambda validTimetables: top_free_time(validTimetables, timetable, noOfTimetables), "2": lambda validTimetables: filter_block_size(validTimetables, timetable, parameters["blockSize"]) } if parameters["prioritizeDistance"]: validTimetables = priorityFunctions["0"](validTimetables) if parameters["prioritizeFreeTime"]: validTimetables = priorityFunctions["1"](validTimetables) validTimetables = priorityFunctions["2"](validTimetables) #print(OutputParser.create_url(validTimetables[:5])) print("done") urls = list( map(lambda timetable: OutputParser.create_url(timetable), validTimetables[:5])) print(urls) return urls