【问题标题】:How to calculate the average times of M/M/1 system in python?如何计算python中M/M/1系统的平均次数?
【发布时间】: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


【解决方案1】:

只需在初始化开始时初始化一个等待时间数组,并将其附加已计算的waiting_time。然后你可以计算统计数据。

如果你愿意,可以导入统计模块来自动计算。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-06
    • 1970-01-01
    相关资源
    最近更新 更多