模拟脚踏石模型

Standard

变态家族在他的Blog里提到了一个有趣的脚踏石模型(Step Stone Model),具体是这样的

在一个N乘N维的矩阵中间, 有N的平方个小方格, 开始一共有K种颜色随机的分配在这N平方个小格子里面,每次从这些格子里面随机选出一个格子,比如说是格子A, 再从它周围的8个格子中随机的选出一个,将选出的那个格子的颜色变成格子A的颜色。可以知道, 这样下来, 一种有K的N平方次方种状态。 这样进行很多次以后会有什么结果呢?他们是否还想最开始那样杂乱无章呢?

尽管已经有确定的理论说明来解释最终的结果

这是一个典型的吸收马尔科夫链。 次数如果足够多,最后到全部的格子都变成一种状态(颜色)的概率是1。 也就是说,这样不停的运行下去,格子的颜色一定会全部相同的。

但他还是用Python写了一段代码来验证这个结果。我不懂Python语言,而且要运行他的模拟程序还必须安装Python环境,比较麻烦。因此我就用Javascript来实现一个。你可以在下面来模拟看看效果。不过要注意一些问题

1:维数必须大于1,小于20。超过这个范围的话,会设置成默认的10。
2:时间间隔也是大于1,小于20。默认也是10ms。
3:整个循环式无限循环。即使变成同一个颜色后程序还是在运行的。你可以点击 停止 按钮来结束运行。

Enjoy it!

Advertisements

13 thoughts on “模拟脚踏石模型

  1. /**************************
    * 获取当前节点的邻节点
    **************************/
    function getRandomAdj(row,col){
    var i,j, cnt=0
    var adjs = new Array(8)
    for(i=row-1;i-1 && i-1 && j

  2. 这个对边上的点和角上的点的处理不是很完善, 你可以把它想象成将这个矩形卷成一个圆柱体, 再将其两头相接, 这样处理。

  3. 我爱妞妞

    biantaishabi said:

    这个对边上的点和角上的点的处理不是很完善, 你可以把它想象成将这个矩形卷成一个圆柱体, 再将其两头相接, 这样处理。

    我看过你的想法,当时我也想按照你的方法实现。不过后来我觉得卷成圆柱体后,对于圆柱体的上下地面的边来说同样要做判断。索性直接做个判断就行,不考虑那么多!

    主要是能够模拟就行,没有考虑那么多!^_^

  4. 我爱妞妞

    刚才我的回复还是没有仔细理解你的想法,现在我觉得我知道你的原来想法了。这么处理一下,所有的节点都不孤单了,都会有8个邻接节点!我考虑的确实比较简单

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s