首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在c++中修改模拟时间

在c++中修改模拟时间
EN

Stack Overflow用户
提问于 2010-08-29 14:10:52
回答 5查看 2.3K关注 0票数 0

我正在写一个模拟活动的程序,我想知道如何加快模拟的时间,假设在现实世界中1小时等于程序中的1个月。

谢谢

该程序实际上类似于餐厅模拟,在那里你不能真正知道顾客什么时候来。假设我们每小时随机挑选一个(2-10)客户

EN

回答 5

Stack Overflow用户

发布于 2010-08-29 14:42:33

这取决于它现在如何获得时间。

例如,如果它调用Linux系统time(),只需将其替换为您自己的函数(如mytime),它将返回更快的时间。也许mytime调用时间,并将返回的时间乘以任何有意义的因子。1小时=1个月是720次。在程序开始时处理源应该被考虑在内:

代码语言:javascript
复制
time_t t0;
main ()
{
     t0 = time(NULL);    // at program initialization

     ....

     for (;;)
     {
           time_t sim_time = mytime (NULL);
           // yada yada yada
           ...
     }
}

time_t mytime (void *)
{
     return 720 * (time (NULL) - t0);   // account for time since program started
                                        // and magnify by 720, so one hour is one month
}
票数 2
EN

Stack Overflow用户

发布于 2010-08-29 14:36:44

你只要做就行了。你决定在一个小时的模拟时间内发生多少事件(例如,如果一个事件每秒发生一次,那么在模拟一个小时的3600个模拟事件之后)。您的模拟不需要实时运行;您可以尽可能快地计算相关数字来运行它。

票数 1
EN

Stack Overflow用户

发布于 2010-08-29 15:29:45

听起来您正在实现一个Discrete Event Simulation。在这种情况下,你甚至不需要有一个自由运行的计时器(无论你使用什么缩放)。这一切都是由事件驱动的。您有一个包含事件的优先级队列,按事件时间排序。您有一个处理循环,它获取队列头部的事件,并将模拟时间提前到事件时间。您可以处理事件,这可能涉及调度更多事件。(例如,customerArrived事件可能会导致在2分钟后生成customerOrdersDinner事件。)您可以使用random()轻松模拟到达的客户。

到目前为止,我读到的其他答案仍然假设您需要一个连续的计时器,这通常不是模拟事件驱动系统的最有效的方法。您不需要将实时缩放到模拟时间,也不需要有刻度。让事件驱动时间!

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

https://stackoverflow.com/questions/3593737

复制
相关文章

相似问题

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