python - 在 Simpy 中建模高峰需求时间
问题描述
也许这真的是一个很重要的问题,但我还没有找到解决方案。
我正在模拟充电站的充电行为。充电或等待的简单过程。我通过 expovariate 函数初始化了到达,它就像一个魅力。但是,现在我想实施高峰时段,其中到达率正在发生变化。
因为我需要模拟一整周,而高峰时间基本上保持不变,我已经像这样实现了
def run_cs(env, num_charging_lots):
cs = CS(env, num_charging_lots)
ev = 1
while True:
arrival_time = env.now
if 2880 >= arrival_time > 1440:
print('Tuesday')
elif 4320 >= arrival_time > 2880:
print('Wednesday')
elif 5760 >= arrival_time > 4320:
print('Thursday')
elif 7200 >= arrival_time > 5760:
print('Friday')
elif 8640 >= arrival_time > 7200:
print('Saturday')
elif 10080 >= arrival_time > 8640:
print('Sunday')
hour = arrival_time / 60
if (hour % 24) < 0.9 and hour != 0:
print('es ist 0 Uhr')
while (hour % 24) < 0.9:
print('EV %s arrives at %d' % (ev, env.now))
env.process(charging_EV(env, ev, cs))
ev += 1
yield env.timeout(random.expovariate(2))
elif (hour % 7) < 0.9 and (hour != 0):
print('es ist 7 Uhr')
while (hour % 7) < 0.9 or 1440 <= (env.now % 1860) <= 1449 and (hour != 0):
print('EV %s arrives at %d' % (ev, env.now))
env.process(charging_EV(env, ev, cs))
ev += 1
yield env.timeout(random.expovariate(1))
elif (hour % 12) < 0.9 and (hour != 0):
print('es ist 12 Uhr')
while (hour % 12) < 0.9 and (hour != 0):
print('EV %s arrives at %d' % (ev, env.now))
env.process(charging_EV(env, ev, cs))
ev += 1
yield env.timeout(random.expovariate(1))
elif (hour % 18) < 0.9 or 1440 <= (env.now % 2520) <= 1449 and (hour != 0):
while (hour % 18) < 0.9 and (hour != 0):
print('EV %s arrives at %d' % (ev, env.now))
env.process(charging_EV(env, ev, cs))
ev += 1
yield env.timeout(random.expovariate(1))
else:
print('EV %s arrives at %d' % (ev, env.now))
env.process(charging_EV(env, ev, cs))
ev += 1
yield env.timeout(random.expovariate(2)) # pace of EV arrivals
我的想法是检查当前时间是否是高峰时间。这样,该时间段的 while 循环开始并改变到达率。如果一切都失败了,则应使用普通的到达间隔时间。我现在的问题是模拟没有完成。我的高峰时间是 0:00 或 12 AM、7:00 / 7AM、12:00/12PM 和 18:00/6PM
有没有更好的方法来做到这一点或跟踪一天中的时间?
解决方案
我想你可能在这里有一个无限循环
while (hour % 24) < 0.9:
print('EV %s arrives at %d' % (ev, env.now))
env.process(charging_EV(env, ev, cs))
ev += 1
yield env.timeout(random.expovariate(2))
你在哪里更新你的小时变量来打破while循环条件?你的其他while循环也有同样的问题
或者所有这些while语句都应该是if语句吗?
或者你甚至需要while语句,只做一次,让外循环做它的事情
推荐阅读
- sql - 重构查询函数中的硬编码值
- jquery - 如何将多个值传递给ajax?
- asp.net - 在字符串数组中正确定位字符串
- ios - 为什么我的屏幕从滚动视图的中心开始?IOS
- javascript - setState() 函数不起作用,我无法更新我的状态。我怎么解决这个问题?
- amazon-elastic-beanstalk - AWS 路由 53 配置为指向 Elastic BeanStalk URL
- pandas - 需要帮助获取按患者 ID 分组的最小和最大日期之间的差异,仅使用 Python
- optimization - 为 SQL 数据库和面向服务的架构优化 GraphQL 解析器
- npm - 将 jhipster 从 v5.0.1 升级到最新
- reactjs - 你如何突出显示 React Dev Tools V4 中的更新?