Beispiel #1
0
def simulation(numSeconds, tasksPerMinute):

    worker1 = Worker(2)
    worker2 = Worker(3)
    worker3 = Worker(4)

    team = Team(worker1, worker2, worker3)

    taskQueue = Queue()
    waitingtimes = []

    for currentSecond in range(numSeconds):

        if newTask():
            task = Task(currentSecond)
            taskQueue.enqueue(task)

        if (not team.allBusy()) and (not taskQueue.isEmpty()):
            nextTask = taskQueue.dequeue()
            team.assignTask(nextText())
            waitingtimes.append(nexttask.waitTime(currentSecond))
            team.assignTask()

        team.tick()

    averageWait = sum(waitingtimes)  #/len(waitingtimes)
    print("Average Wait %6.2f secs %3d tasks remaining." %
          (averageWait, taskQueue.size()))
Beispiel #2
0
def simulateOneServer(file_name):

    import pandas as pd
    
    df = pd.read_csv(file_name, index_col=0, names = ['currentSecond', 'task', 'Time'])
    
    df2 = df.reset_index()

    server = Server()
    requestQueue = Queue()
    waitingtimes = [] 
    starttime = df2['currentSecond'][0]

    for x in range(len(df2)):
        task = Task(df2['Time'][x])
        requestQueue.enqueue(task)
    
    for x in range(len(df2)):
        endtime = starttime + df2['Time'][x]
        starttime = endtime
        nexttask = requestQueue.dequeue()         
        waitingtimes.append(nexttask.waitTime(starttime, df2['currentSecond'][x]))

    if (not server.busy()) and (not requestQueue.isEmpty()):
        server.startNext(nexttask)
    
    server.tick()
      
    averageWait=sum(waitingtimes)/len(waitingtimes)
    print("Average Wait %6.2f secs for a single server."%(averageWait))
Beispiel #3
0
class Worker:
    def __init__(self, workrate):
        self.work = workrate
        self.currentTask = None
        self.timeRemaining = 0
        self.taskList = Queue()

    def tick(self):
        if self.currentTask != None:
            self.timeRemaining = self.timeRemaining - 1
            if self.timeRemaining <= 0:
                self.currentTask = None
                if self.taskList.isEmpty() == False:
                    self.startNext()

    def busy(self):
        if self.currentTask != None:
            return True
        else:
            return False

    def addTask(self, task):
        self.taskList.push(task)

    def startNext(self):
        self.currentTask = self.taskList.pop()
        self.timeRemaining = newtask.getDifficulty() * 60 / self.work
Beispiel #4
0
def simulateManyServers(file_name, servers):

    import pandas as pd
    
    df = pd.read_csv(file_name, index_col=0, names = ['currentSecond', 'task', 'Time'])
    
    df2 = df.reset_index()
    
    df2['RoundRobin'] = ''

    networks = servers
    orig_networks = servers

    for x in range(len(df2)):
        df2.at[x, 'RoundRobin'] = networks
        networks -= 1
        if networks == 0:
            networks = orig_networks
    
    for x in range(1, orig_networks + 1):
        df3 = df2[df2['RoundRobin']==x] 
        df3.reset_index(inplace=True)
            
        server = Server()
        requestQueue = Queue()
        waitingtimes = [] 
        starttime = df3['currentSecond'][0]
    
        for x in range(len(df3)):
            task = Task(df3['Time'][x])
            requestQueue.enqueue(task)
        
        for x in range(len(df3)):
            endtime = starttime + df3['Time'][x]
            if df3['currentSecond'][x] > endtime:
                starttime = df3['currentSecond'][x]
            else:
                starttime = endtime
            nexttask = requestQueue.dequeue()         
            waitingtimes.append(nexttask.waitTime(starttime, df3['currentSecond'][x]))
                    
                
            if (not server.busy()) and (not requestQueue.isEmpty()):
                server.startNext(nexttask)
        
            
#            all_waitingtimes.append(averagesubWait)
            
            server.tick()
              
    averageWait=sum(waitingtimes)/len(waitingtimes)
    print("Average Wait {} secs for {} servers.".format("{:.2f}".format(round(averageWait,2)), servers))
Beispiel #5
0
def simulation(numSeconds, itemsPerMinute):
    ourClerk = Clerk(itemsPerMinute)
    clerkQueue = Queue()
    waitingtimes = []
    for currentSecond in range(numSeconds):
        if newCustomer():
            customer = Customer(currentSecond)
            clerkQueue.enqueue(customer)
        if (not ourClerk.busy()) and (not clerkQueue.isEmpty()):
            nextCustomer = clerkQueue.dequeue()
            waitingtimes.append(nextCustomer.waitTime(currentSecond))
            ourClerk.startNext(nextCustomer)

        ourClerk.tick()
    averageWait = sum(waitingtimes)/len(waitingtimes)
    print('Average Wait %6.2f secs %3d tasks remaining.'%(averageWait, clerkQueue.size()))
Beispiel #6
0
def simulation(numSeconds, pagesPerMinute):
    labprinter = Printer(pagesPerMinute)
    printQueue = Queue()
    waitingtimes = []
    for currentSecond in range(numSeconds):
        if newPrintTask():
            task = Task(currentSecond)
            printQueue.enqueue(task)

        if (not labprinter.busy()) and (not printQueue.isEmpty()):
            nexttask = printQueue.dequeue()
            waitingtimes.append(nexttask.waitTime(currentSecond))
            labprinter.starNext(nexttask)
        labprinter.tick()
    averageWait = sum(waitingtimes) / len(waitingtimes)
    print("Average wait %6.2f secs %3d tasks remaining." %
          (averageWait, printQueue.size()))
def simulation(numSeconds, pagePerMinute):
    labPrinter = Printer(pagePerMinute)
    printQueue = Queue()
    waitingTimes = []

    for currentSecond in range(numSeconds):

        if newPrintTask():
            task = Task(currentSecond)
            printQueue.enqueue(task)

        if (not labPrinter.busy()) and (not printQueue.isEmpty()):
            nextTask = printQueue.dequeue()
            waitingTimes.append(nextTask.waitTime(currentSecond))
            labPrinter.startNext(nextTask)

        labPrinter.tick()

    averageWait = sum(waitingTimes) / len(waitingTimes)
    print("平均等待时间是{:.2f}秒,有{}个任务剩余".format(averageWait, printQueue.size()))
def simulation(numSeconds, pagesPerMinute):

    labprinter = Printer(pagesPerMinute)
    printQueue = Queue()
    waitingtimes = []

    for currentSecond in range(numSeconds):

      if newPrintTask():
         task = Task(currentSecond)
         printQueue.enqueue(task)

      if (not labprinter.busy()) and \
                (not printQueue.isEmpty()):
        nexttask = printQueue.dequeue()
        waitingtimes.append( \
            nexttask.waitTime(currentSecond))
        labprinter.startNext(nexttask)

      labprinter.tick()

    averageWait=sum(waitingtimes)/len(waitingtimes)
    print("Average Wait %6.2f secs %3d tasks remaining."\
                    %(averageWait,printQueue.size()))
Beispiel #9
0
'''
from pythonds.basic import Queue
n = int(input())
lst = []
for _ in range(n):
    tmp = input()
    item = [int(i) for i in tmp]
    lst.append(item)
xt, yt, xg, yg = map(int, input().split())
xt -= 1
yt -= 1
xg -= 1
yg -= 1

q = Queue()

dire = [[-1, 0], [0, -1], [1, 0], [0, 1]]
q.enqueue([xt, yt, 0])
lst[xt][yt] = 1
while (q.isEmpty() == False):
    tmp = q.dequeue()
    if (tmp[0] == xg and tmp[1] == yg):
        print(tmp[2])
        break
    for i in range(4):
        x1 = tmp[0] + dire[i][0]
        y1 = tmp[1] + dire[i][1]
        if (x1 >= 0 and x1 < n and y1 >= 0 and y1 < n and lst[x1][y1] == 0):
            lst[x1][y1] = 1
            q.enqueue([x1, y1, tmp[2] + 1])