首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Simpy中建模高峰需求小时数

在Simpy中建模高峰需求小时数
EN

Stack Overflow用户
提问于 2020-12-28 22:19:54
回答 1查看 59关注 0票数 0

也许这真的是一个胡言乱语的问题,但我还没有找到一个解决方案。

我正在模拟充电站的充电行为。充电或等待的简单过程。我通过指数函数初始化了到达,它就像一个魔符一样工作。然而,现在我想实施高峰时段,在高峰时段,抵达率正在发生变化。

由于我需要模拟一整周,而高峰时段基本保持不变,因此我实现了如下所示

代码语言:javascript
复制
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 :00,7:00 /7: Am,12:00/12 6PM和18:00/6 6PM

有没有更好的方法来做这件事,或者记录一天中的时间?

EN

回答 1

Stack Overflow用户

发布于 2021-03-14 07:48:01

我想你这里可能有一个无限循环

代码语言:javascript
复制
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语句,只需执行一次并让外部循环完成它的工作

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65479054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档