Exemplo n.º 1
0
 def getInitStateFromString(self):
     op = OutputParser("")
     return op.getStateFromStr(self.extractInitSection())
Exemplo n.º 2
0
        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()
Exemplo n.º 3
0
    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()
Exemplo n.º 4
0
 def getInitStateFromString(self):
     op = OutputParser("")        
     return op.getStateFromStr(self.extractInitSection())
Exemplo n.º 5
0
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