元胞自动机

元胞自动机

1. 简介

cellular automata,在本质上,是一种将无序,无规则,不平衡的状态,将它变为有序、有规则、平衡的状态。这种改变是不可预测的。

首先,一个可以转化为空间结构,或者说棋盘结构的世界。

其次,状态的改变只与周围邻居的状态有关,且改变规矩是普适一样的。

最后,平衡的状态其实可以有很多种,制定好规则后每次得到的状态可能都不一样。

PS: 关于rule的选择, Stephen Wolfram 他列出了经典的256种规则,并根据规则的不同,把所有Cellular automata归为了4类。(具体可以参读他的《A new kind of science》)

  1. No change in final state (不变)

    (Tends to a spatially homogeneous state)

  2. Changes only in a region of finite size (有限范围内改变)

    (Yields a sequence of simple stable or periodic structures)

  3. Changes over a region of ever-increasing size(在一个不断增大的范围内改变)

    (Exhibits chaotic aperiodic behaviour)

  4. Irregular changes (无规则改变)

    (Yields complicated localized structures, some propagating)

可以看到第一二类都在固定范围内,在第三类中,通常以一个固定的正速度增长。
具体应用时,理应根据模型实际规则制定rule。

算法在使用时,都需明确以下几点:
1. 结构。如何将空间模型抽象为一个个cell
2. 邻居。如何定义每个cell的邻居
3. 规则。如何定义每个cell根据上一时间点cell状态及邻居状态进行更新的规则。

rule110示例:

元胞自动机_第1张图片

rule 250:

元胞自动机_第2张图片

(说明:以上图片,都是根据相应规则,从一个小黑方格逐渐演变而来。是一个一维空间的示例。规则小方框内代表一个cell根据它两个邻居及它之前的状态做出改变)

代码已上传啦~,2017年选的美赛C题。。。。感觉全程只有我一个程序媛最苦逼。。。。
有一个是基于多道变少道的代码,另外一个是我瞎编的用散点图模拟了空间连续性的不知道是什么自动机的代码,具体目的是想实现连续性的速度和安全距离啥的~大家有什么问题可以问我哦!
多道少道元胞自动机
瞎编的迷之自动机

你可能感兴趣的:(算法学习)