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()))
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))
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
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))
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()))
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()))
''' 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])