【发布时间】:2022-08-14 05:55:32
【问题描述】:
我正在寻求计算以下 M/M/1 排队系统中的平均等待时间和平均服务时间,但我无法计算平均值。它在控制台上记录了每个客户的到达、等待和服务时间,但我也想计算所有的平均值。我尝试了几种技术,例如实现统计库并尝试计算均值。如果你能帮助我,我会很高兴,谢谢。
import random
import simpy
import numpy
from random import randint
from random import seed
from random import expovariate
import math
import statistics
random_seed = 42 #for seed of other random generators
new_customers = 20 # Total number of customers in the system
interarrival = numpy.random.poisson(randint(0,20), size=None) # Generate new customers roughly every x seconds
#servicetime = numpy.random.exponential(randint(0,20), size=None)
min_priority = 1
max_priority = 10
def generator(env, number, interval, server): #customer generator with interarrival times.
\"\"\"generator generates customers randomly\"\"\"
for i in range(number):
c = customer(env, \'Customer%02d\' % i, server, system_time=15)
env.process(c)
t = random.expovariate(1.0 / interval)
yield env.timeout(t) #adds time to the counter, does not delete from the memory
def customer(env, name, server, system_time):
#customer arrives to the system, waits and leaves
arrive = env.now
print(\'Arrival time of Customer %s is: %7.4f\' % (name, arrive))
with server.request() as req:
priority = random.uniform(min_priority, max_priority)
results = yield req | env.timeout(priority)
waiting_time = env.now - arrive
if req in results:
#req will be in the server time
print(\'%s waited %6.3f seconds in the queue\' % (name, waiting_time))
systime = random.expovariate(1.0 / system_time)
yield env.timeout(systime)
print(\'%7.4f %s: Finished\' % (env.now, name))
print(\'Customer %s spent %7.4f time in the server\' %(name,env.now-arrive))
print(\'%s waited %6.3f seconds\' % (name, waiting_time))
else:
#reneging occurs
print(\'%7.4f %s: Reneging Time %6.3f\' % (env.now, name, waiting_time))
random.seed(random_seed)
env = simpy.Environment()
seed(29384) #for seed of randint function
server = simpy.Resource(env, capacity = 1) #capacity changes the number of generators in the system.
env.process(generator(env,new_customers, interarrival, server))
env.run()
#print(\'%s waited %6.3f seconds\' % (name, waiting_time))
-
您实际上尝试过什么?显示代码!为什么或如何没有成功?有错误信息吗?如果是,它们是什么,如果不是,你为什么认为结果是错误的?您需要具体告诉我们您的问题是什么。
-
@pjs我在我的代码的最新行中尝试了 print(\"The average waiting time is %7.4f seconds\", %(statistics.mean(waiting_time)) ,它说没有定义waiting_time。此外,当我在函数内部测试,它没有估计平均值,它也给出了int或float错误。我认为这是一个数组问题,因为我没有为时间指定数组,它没有正确存储它。因此,我是期待找到一种给出平均性能指标的方法,谢谢。
-
编辑您的问题并将信息放在那里。关于 stackoverflow 的问题应该是完全独立的,它们不应该依赖于 cmets。
标签: python statistics simulation