我正在为(几乎)任何使用 Moore 或 Neumann 邻域的 CA 编写基于 ncurses 的 CA 模拟器。
使用当前(硬编码和最明显的[运行状态函数]),模拟运行得很好;直到屏幕充满“on”(或任何活动的)单元格。
所以我的问题是:是否有任何有效的算法来处理至少栩栩如生的规则?或世代,加权生命/世代......
谢谢。
我正在为(几乎)任何使用 Moore 或 Neumann 邻域的 CA 编写基于 ncurses 的 CA 模拟器。
使用当前(硬编码和最明显的[运行状态函数]),模拟运行得很好;直到屏幕充满“on”(或任何活动的)单元格。
所以我的问题是:是否有任何有效的算法来处理至少栩栩如生的规则?或世代,加权生命/世代......
谢谢。
通常最好只在上一个时间步有活动的网格区域中运行更新通道。如果你保持一个布尔格子“我这次改变了吗?” 对于每次传递,您只需要更新一个半径范围内的单元格,这些单元格在更改格中具有“开”。
您可以研究HashLife算法并尝试使其概念适应您正在处理的任何自动机。
我认为编写状态机与其说是算法设计问题,不如说是如何编写干净且“无错误”的代码的问题。您可能正在寻找的是元胞自动机/状态图的实现。
http://www.state-machine.com/ //<- 这不是巧合 http://www.boost.org/doc/libs/1_40_0/libs/statechart/doc/index.html
你也可以试试 whit stackless python http://stackless.com/。它可用于状态机或 CA。这里http://members.verizon.net/olsongt/stackless/why_stackless.html#the-factory它是无堆栈实现工厂过程模拟的教程