2012-08-14 41 views
0

我正在尝试使用遗传算法优化交通信号灯时间。我在html5中制作了一个流量动画,并且在JavaScript中实现了GA。所以,当我想运行该动画的模拟时,它会永远运行。在javascript中动画的模拟很慢

动画每20ms绘制信号灯和汽车,并更新下一次迭代的值。在模拟中我只需要调用更新函数,因为我不需要画信号灯和汽车。

所以动画和模拟的区别在于,模拟不会在画布上绘制任何东西,并且它在while循环中运行,而动画在setInterval循环中运行。

任何想法如何加快模拟?

我试着计算行程时间每一辆汽车,但它真的很难,因为你需要包括红色的等待时间,拥塞等

+0

你可以发布一些代码或设置JS Bin演示吗?你是指“模拟动画”是什么意思?此外,'setInterval'从来没有用于动画 - 你看过'requestAnimationFrame'吗? – Utkanos 2012-08-14 12:34:14

+1

根据您的代码,可能考虑将模拟外包给[webworker](https://developer.mozilla.org/en-US/docs/Using_web_workers),并将更新发送到主线程。 – Sirko 2012-08-14 12:36:26

回答

1

如果我正确理解你在你无限运行仿真在while循环中运行代码(或运行时间很长的代码)。

这是你的问题。在像C++和Java这样的语言中,由于多线程,这是非常正常的做法。当他们咀嚼代码时,其他代码仍然可以运行,屏幕仍然可以更新......等等。

JS是一个单线程。从字面上看,它会继续运行,而循环和几乎没有别的东西,破坏你的程序的顺利运行。以这种方式使用while循环绝对是单线程语言中的“从不做那件事”。