def runIntegerProgram(csvFile, timeLimit = -1, outputFlag = 0):
    taskList = createTasksFromCsv.getTaskList(csvFile)
    helperFunctions.preprocessTimeWindows(taskList)
    schedule, isOptimal = integerProgramSolve(taskList, timeLimit, outputFlag)
    # assert(isFeasible(taskList, schedule))

    return schedule, isOptimal
def runGreedyByOrder(csvFile,orderMethod):
    taskList = createTasksFromCsv.getTaskList(csvFile)
    helperFunctions.preprocessTimeWindows(taskList)

    # create a list of tuples (time of latest time window ending, taskId)
    timeWindowsAndPriorities = []
  
    for task in taskList:
        latestTime = 0
        for day in task.timeWindows:
            for window in day:
                if window[1] >= latestTime:
                    latestTime = window[1]
                    
        timeWindowsAndPriorities.append([latestTime, task.priority, task.id, float(task.priority)/max(float(task.getNumTimeWindows()), 1), task.dependencyTasks])
		
	# sorting by deadline	
    
    timeWindowsAndPriorities = orderMethod(timeWindowsAndPriorities)
    # sorting by priority
    
    taskOrdering = []
    for timeTaskTuple in timeWindowsAndPriorities:
        taskOrdering.append(timeTaskTuple[2])

    return helperFunctions.createOptimalSchedule(taskList, taskOrdering)
def runIntegerProgram(csvFile, timeLimit=-1, outputFlag=0):
    taskList = createTasksFromCsv.getTaskList(csvFile)
    helperFunctions.preprocessTimeWindows(taskList)
    schedule, isOptimal = integerProgramSolve(taskList, timeLimit, outputFlag)
    # assert(isFeasible(taskList, schedule))

    return schedule, isOptimal
Ejemplo n.º 4
0
def runGreedyByOrder(csvFile, orderMethod):
    taskList = createTasksFromCsv.getTaskList(csvFile)
    helperFunctions.preprocessTimeWindows(taskList)

    # create a list of tuples (time of latest time window ending, taskId)
    timeWindowsAndPriorities = []

    for task in taskList:
        latestTime = 0
        for day in task.timeWindows:
            for window in day:
                if window[1] >= latestTime:
                    latestTime = window[1]

        timeWindowsAndPriorities.append([
            latestTime, task.priority, task.id,
            float(task.priority) / max(float(task.getNumTimeWindows()), 1),
            task.dependencyTasks
        ])

# sorting by deadline

    timeWindowsAndPriorities = orderMethod(timeWindowsAndPriorities)
    # sorting by priority

    taskOrdering = []
    for timeTaskTuple in timeWindowsAndPriorities:
        taskOrdering.append(timeTaskTuple[2])

    return helperFunctions.createOptimalSchedule(taskList, taskOrdering)
def makeSchedule(taskList):
    fullTaskList = copy.deepcopy(taskList)
    helperFunctions.preprocessTimeWindows(taskList)
    schedule = Schedule()
    lastDay = len(taskList[0].timeWindows)
    for day in range(lastDay):
        schedule.append(Route())

    lastTimeWindowEndings = [0 for i in range(lastDay + 1)]
    for task in taskList:
        for index, day in enumerate(task.timeWindows):
            for timeWindow in day:
                if timeWindow[1] > lastTimeWindowEndings[index]:
                    lastTimeWindowEndings[index] = timeWindow[1]

    insertionSuccesful = True
    while insertionSuccesful:
        insertionSuccesful = False
        bestTaskInfo = (None, None, None, None)
        bestTask = None
        for task in taskList:
            taskInfo = helperFunctions.isTaskInsertable(schedule, task, lastTimeWindowEndings, fullTaskList)
            # if task can be finished earliest
            if (taskInfo[2] != None and (bestTaskInfo[2] == None or taskInfo[2] < bestTaskInfo[2])):
                bestTaskInfo = taskInfo
                bestTask = task
        if (bestTaskInfo != None and bestTaskInfo[2] != None):
            insertionSuccesful = True
            isInsertable, endingTime, endingDay, insertPosition = bestTaskInfo
            schedule.routeList[endingDay].taskList.insert(insertPosition, bestTask)
            schedule.routeList[endingDay].endingTimes.insert(insertPosition, endingTime)
            for index, task in enumerate(taskList):
                if (task.id == bestTask.id):
                    taskList.pop(index)
    return schedule
Ejemplo n.º 6
0
def runGreedyConstructiveHeuristic(csvFile):
    unscheduledTaskList = createTasksFromCsv.getTaskList(csvFile)
    helperFunctions.preprocessTimeWindows(unscheduledTaskList)
    fullTaskList = copy.deepcopy(unscheduledTaskList)

    avgDistance = findAvgDistance(fullTaskList)
    avgPriority = findAvgPriority(fullTaskList)
    avgDuration = findAvgDuration(fullTaskList)

    priorityWeight = avgPriority / (avgDistance + avgDuration)

    schedule = Schedule()
    numDays = len(fullTaskList[0].timeWindows)
    for day in range(numDays):
        route = Route()
        schedule.append(route)

    for task in unscheduledTaskList:
        print "one task down!"
        schedule, taskToRemove = returnScheduleInsertedWithBestTask(
            schedule, unscheduledTaskList, fullTaskList, priorityWeight)
        # we have to do this because remove doesn't use equality testing,
        # so it doesn't know tasks in the deepcopy are the same
        for task in unscheduledTaskList:
            if task == taskToRemove:
                unscheduledTaskList.remove(task)
                break
        # taskList.remove(taskToRemove) # I don't know if I can actually do this....
    return schedule
def findBestSchedule(taskList, permutations):
    helperFunctions.preprocessTimeWindows(taskList)
    bestSchedule = Objects.Schedule()
    for perm in permutations:
        newSchedule = helperFunctions.createOptimalSchedule(taskList, perm)
        if isBetterSchedule(newSchedule, bestSchedule):
            bestSchedule = newSchedule

    return bestSchedule
def findBestSchedule(taskList, permutations):
    helperFunctions.preprocessTimeWindows(taskList)
    bestSchedule = Objects.Schedule()
    for perm in permutations:
        newSchedule = helperFunctions.createOptimalSchedule(taskList, perm)     
        if isBetterSchedule(newSchedule, bestSchedule):
            bestSchedule = newSchedule
    
    return bestSchedule
def findBestScheduleWithTimeLimit(taskList, permutations, timeLimit):
    '''
    A function given a list of task objects and all the potential task permutations
    will create a schedule for each ordering and output one of the best schedules in the
    time it has that is has tried.
    '''
    start = time.time()
    helperFunctions.preprocessTimeWindows(taskList)
    bestSchedule = Objects.Schedule()
    for perm in permutations:
        newSchedule = helperFunctions.createOptimalSchedule(taskList, perm)
        if isBetterSchedule(newSchedule, bestSchedule):
            bestSchedule = newSchedule
        if time.time() - start >= timeLimit:
            return bestSchedule

    return bestSchedule
def randomlyPickBestScheduleUnderTime(csvFile, numSeconds):
    taskList = createTasksFromCsv.getTaskList(csvFile)
    helperFunctions.preprocessTimeWindows(taskList)

    bestSchedule, bestProfit = None, 0
    taskIds = [task.id for task in taskList]

    start = time.time()
    while time.time() < (start + numSeconds):
        # Get a random permutation
        orderToTry = random.sample(taskIds, len(taskIds))
        schedule = helperFunctions.createOptimalSchedule(taskList, orderToTry)

        if schedule.getProfit() > bestProfit:
            bestProfit = schedule.getProfit()
            bestSchedule = schedule
    return bestSchedule
def randomlyPickBestScheduleUnderTime(csvFile, numSeconds):
    taskList = createTasksFromCsv.getTaskList(csvFile)
    helperFunctions.preprocessTimeWindows(taskList)
    
    bestSchedule, bestProfit = None, 0
    taskIds = [task.id for task in taskList]
    
    start = time.time()
    while time.time() < (start + numSeconds):
        # Get a random permutation
        orderToTry = random.sample(taskIds, len(taskIds))
        schedule = helperFunctions.createOptimalSchedule(taskList, orderToTry)
        
        if schedule.getProfit() > bestProfit:
            bestProfit = schedule.getProfit()
            bestSchedule = schedule
    return bestSchedule
def findBestScheduleWithTimeLimit(taskList, permutations, timeLimit):
    '''
    A function given a list of task objects and all the potential task permutations
    will create a schedule for each ordering and output one of the best schedules in the
    time it has that is has tried.
    '''
    start = time.time()
    helperFunctions.preprocessTimeWindows(taskList)
    bestSchedule = Objects.Schedule()
    for perm in permutations:
        newSchedule = helperFunctions.createOptimalSchedule(taskList, perm)     
        if isBetterSchedule(newSchedule, bestSchedule):
            bestSchedule = newSchedule
        if time.time() - start >= timeLimit:
            return bestSchedule

    
    return bestSchedule