如何使用SimPy设置最小阈值以获得随机时间?

2024-06-01 11:30:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从SimPy的模拟程序中得到一个随机的车辆生成器。我使用的代码是从http://phillipmfeldman.org/Python/discrete_event_simulation/traffic_sim.py中提取并改编的。问题是,我希望车辆到达时的车头时距不小于特定车头时距(例如4秒)。下面的代码表示随机到达的车辆,但有时车头时距太小(例如车辆#2到达2.03,车辆#3到达2.45,此差值小于1秒)。我想知道是否有办法为模拟设置一个特定的阈值,谢谢

from collections import deque # double-ended queue
from numpy import random
import simpy
from simpy.util import start_delayed

class Struct(object):
   def __init__(self, **kwargs):
      self.__dict__.update(kwargs)

random.seed([1, 2, 3])

# Total number of seconds to be simulated:
end_time= 3600.0

# Cars cars arrive at the traffic light according to a Poisson process with an
# average rate of (0.00028-0.5) per second:
demand_per_hour = 1800 #veh/h
sh = 4 # sat headway 4 seconds,


arrival_rate= demand_per_hour/(3600*sh)
t_interarrival_mean= 1.0 / arrival_rate

queue= deque()
arrival_count = departure_count= 0

def arrival():

   global arrival_count, env, queue

   while True:
      arrival_count+= 1

      print("Vehicle #%d arrived at time "
         "%.3f." % (arrival_count, env.now))

      # Schedule next arrival:
      yield env.timeout( random.exponential(t_interarrival_mean))

print("\nSimulation of Cars Arriving at Intersection Controlled by a Traffic "
  "Light\n\n")
env= simpy.Environment()
t_first_arrival= random.exponential(t_interarrival_mean)
start_delayed(env, arrival(), delay=t_first_arrival)
env.run(until=end_time)

Tags: offromimportenvratetimequeuecount
1条回答
网友
1楼 · 发布于 2024-06-01 11:30:35

有几种方法可以做到这一点

  1. 截断指数到达间隔时间分布:
t=max(threshold_value, random.exponential(t_interarrival_mean))
  1. 改变指数IAT分布(也称为双参数指数分布):
t = threshold_value + random.exponential(t_interarrival_mean)
  1. 使用不同的发行版。你确定指数是最好的吗?三角形分布怎么样

相关问题 更多 >