我目前正在使用JavaSim编写面向流程的模拟器进行大学考试。模拟器本身运行良好,但我有一个主要的疑问:是否有正确/最好的方法在代码中找到模拟的稳态?
我读到的这本书含糊地描述了当模拟的行为收敛到一个恒定或重复值时找到“稳态”的过程:
Steady state http://img24.imageshack.us/img24/9782/steadystate.png
但是这在代码中看起来如何?我想我可以定期收集我需要收集的统计数据,并检查它们是否收敛于某个平均值。或者我可以简单地及时打印出值并随意决定模拟何时达到稳定状态?
答案 0 :(得分:0)
标准方法是监测波动率,并选择一些小到足以被视为“稳态”的阈值。使用提供的平均值是脆弱的,因为它会对您正在寻找的解决方案的绝对值进行硬编码。
我只计算一个点窗口的standard deviation,比如说最后50个点,然后声明当偏差低于可接受的最小值时达到稳定状态(你必须自己选择最小偏差,因为这是你对“稳态”的定义。这大致等同于当图表中的摆动变得足够小以至于持续一段时间时接受答案。
答案 1 :(得分:0)
没有看到你对此有一个好的答案......
查看在线资源或Law and Kelton,Simulation Modeling and Analysis,了解稳态的过程。关键是您希望模拟与系统启动条件无关。更重要的是,关键指标(如延迟)的分布应独立于起始条件。他们有一套程序来根据平均值,方差和样本大小构建围绕关键指标的置信区间,然后确定您的连续样本在统计上是否相同。尽管满足常态假设,但是有足够的样本量是很重要的。
“模拟与竞技场”一书中的好东西还包括讨论为什么稳态可能并不重要。
祝你好运!