我的代码中的时间顺序出现问题

时间:2019-05-27 10:32:50

标签: python

我正在进行一次队列模拟,一次处理一个客户。

  • 差事发生的时间是两分钟
  • ,客户随即随机进入邮局 概率 0.2 /分钟

  • 客户差事也是随机的。

  

我的问题是处理客户所需的时间   有一个队列,不正确。

我正在考虑吸引最后一个顾客out_time并吸引下一个顾客in_time(他开始由店员提供服务的时间)。

例如: 时间1:客户1进来2差事。
时间1:客户2有1条差事。
时间5:客户1离开。
时间6:客户2离开。 <---错误。
应该是时间7:客户2离开。

import random as rn

class Post_office:
    def __init__(self):
        self.customer_in_queue = 0

        self.clock = 0
        self.open= 540  #opens 9am
        self.close = 1080 #closes 18pm
        self.time_in = self.generate_incoming()
        self.time_out = float('inf')
        self.customernr_in = 0
        self.customernr_out = 0
        self.total_wait = 0


    def add_time(self):
        t_event = min(self.time_in, self.time_out)

        self.total_wait += self.customer_in_queue*(t_event-self.clock)
        self.clock = t_event

        if self.time_in <= self.time_out:
            self.handle_in_custom()
        else:
            self.handle_out_custom()


    def handle_in_custom(self):
        self.customer_in_queue +=1
        self.customernr_in +=1
        text = ''

        errands = self.generate_errands()

        if self.customer_in_queue <=1:
            self.time_out = self.clock + (errands*2)
            text = 'and is immediately served'
        else:
            text = ' queuing as '+str(self.customer_in_queue)
        self.time_in = self.clock + self.generate_incoming()

        print('time', str(self.clock), 'customer came', str(self.customernr_in),'in with',
              str(errands),'errands', text)

    def handle_out_custom(self):
        self.customer_in_queue -= 1
        self.customernr_out += 1
        text = ''

        if self.customer_in_queue > 0:
            self.clock = self.time_out + self.generate_errands()
            text = self.clock
        else:
            self.time_out = float('inf')
            text = self.clock

        print('Time', str(text), ' customer', str(self.customernr_out),'left')

    def generate_incoming(self):

        return int(rn.expovariate(0.2))

    def generate_errands(self):
        rand = rn.random()
        errands = 1                                                     
        chance = 0.5                                                         
        while chance > rand:
                errands = errands + 1                                       
                chance = chance / 2                                          

        return errands

p = Post_office()

for minute in range(p.clock, p.close):
    minute +=1
    p.add_time()

print('Total amount of customers:', str(p.customernr_in), 'Total wait per customer:',str(p.total_wait/p.customernr_in))

0 个答案:

没有答案