返回列表 发帖

[技术讨论] 细胞自动机Python脚本运行到最后都稳定在一个状态不变了,高手给看看算法对不对

import random
import os
import time
def init(level):
    return random.randint(0,level)
dict={' ':0,'●':1}
cells=[[' ' for x in range(32)] for y in range(22)]
grid=[[' ' for x in range(32)] for y in range(22)]
while True:
    level=input('larger number,less cells (>0):')
    try:
        if int(level)>0:
            for y in range(1,21):
                for x in range(1,31):
                    r=random.randint(0,int(level))
                    if r==0:cells[y][x]='●'
            break
    except:pass
for y in cells:print(' '.join(y))
print("press key to begin...")
os.system('pause >nul')
i=0
while True:
    for y in range(1,21):
        for x in range(1,31):
            num=dict[cells[y-1][x-1]]+\
                dict[cells[y-1][x+1]]+\
dict[cells[y-1][x]]+\
dict[cells[y+1][x-1]]+\
dict[cells[y+1][x+1]]+\
dict[cells[y+1][x]]+\
dict[cells[y][x-1]]+\
dict[cells[y][x+1]]
            if num==3:grid[y][x]='●'
            elif num==2:grid[y][x]=cells[y][x]
            elif num :grid[y][x]=' '
    for y in range(1,21):
        for x in range(1,31):
            cells[y][x]=grid[y][x]
    time.sleep(0.05)
    os.system('cls')
    i+=1
    print('time: '+str(i))
    for y in cells:print(' '.join(y))COPY
这是出生概率为33%时的稳定状态,基本不变了,个别在动

概率50%的

如果要把这个脚本用迭代函数或者生成器写出来,该怎么改啊,加上是二维数组我更不会写了
!scripting!

开头那个函数忘了删掉了 没有用
!scripting!

TOP

看图好像没什么问题吧,有些形状就是稳定的

TOP

回复 3# CrLf
原来是运气问题 10%概率的时候竟然运行到1200多次才稳定 先前没几下就死完了
!scripting!

TOP

运行了一下,发现结果好像不太对,有些“孤独”的细胞也不会死亡,看代码没看出来为什么

TOP

回复 5# CrLf
对啊 肯定有问题
!scripting!

TOP

回复 5# CrLf
有一行我写错了 elif:num 应该改成else:
1

评分人数

    • CrLf: 卧槽,没发现技术 + 1
!scripting!

TOP

回复 5# CrLf
在第37行那 可是逻辑上这两者没什么不同啊
!scripting!

TOP

回复 5# CrLf
改了37行以后应该对了运行了几次都类似这种

我还奇怪呢 10%的概率那么小怎么变化那么久 你不说我都想不起来孤立这回事
!scripting!

TOP

改制后基本各种概率下基本都在200次以内稳定了
!scripting!

TOP

本帖最后由 523066680 于 2014-9-27 22:42 编辑

我在写perl版本细胞自动机的时候遇到这样的问题:数组赋值变成了引用。
修改赋值方式后得以解决,会不会是相同的问题?

现在不搞python了,没心思细看。
[url=][/url]

TOP

回复 11# 523066680

很有可能啊 我试试看直接引用是什么效果 然后对比一下
!scripting!

TOP

回复 11# 523066680
改成引用后明显运动没规律了 细胞较多时好像不像能稳定的样子 我原先改过的应该是对的 都稳定了 形态也符合算法
!scripting!

TOP

回复 13# 普大喜奔


    恩 我就是说要避免引用。
[url=][/url]

TOP

如果要验证显示结果对不对,可以把典型的生命矩阵代入
......................**...............
......................**...............
.......................................
.......................................
.......................................
.......................................
.......................................
.......................................
.......................................
.......................................
.......................................
.......................................
.........*..........**...**............
.......*.*............***..............
......*.*............*...*.............
**...*..*.............*.*..............
**....*.*..............*...............
.......*.*......*.*....................
.........*......**.....................
.................*...*.................
.....................**......*.........
....................*.*......*.*.......
...............*..............*.*....**
..............*.*.............*..*...**
.............*...*............*.*......
..............***............*.*.......
............**...**..........*.........
.......................................
.......................................
.......................................
.......................................
.......................................
.......................................
.......................................
.......................................
.......................................
.......................................
...............**......................
...............**......................COPY
[url=][/url]

TOP

返回列表