我正在进行一次队列模拟,一次处理一个客户。
,客户随即随机进入邮局 概率 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))