一维元胞自动机 Python 实现

论坛 期权论坛 脚本     
匿名技术用户   2020-12-23 17:50   229   0

元胞自动机(Cellular Automata,以下简称CA)最早由Von Neuman 等人提出, 虽然元胞自动机的结构简单,但是由大量元胞的相互作用而产生的总体行为却非常复杂。因此与传统的计算机数值计算和模拟方法比较,CA 能更好地模拟晶格生长、雪花形成、化学过程和流体形成等难以解析表达的复杂现象.近年来,许多学者对CA 的行为进行研究并应用到数学、物理、生物和计算机科学等领域。元胞自动机在数学方面的研究,主要集中在研究它们的行为,即它们在演化过程中的性态. 如今许多线性的问题得到了解决。

函数f∶{0,1}3→{0,1}称为一个三重局部变换规则,如果f 可以表现为以下形式:
111
110 101 100 011 010 001 000

r7 r6 r5 r4 r3 r2 r1 r0
其中
f 的规则数N定义为:

N=2`7*r7+2`6*r6+…+2`0*r0

边界值按不变计算,则Python实现代码如下:

#coding=utf8
#N = 1471
#n = 4
#str_cell = "00011110101010"
N = int (raw_input(u"请输入N值:"))
n = int (raw_input(u"请输入计算代数:"))
str_cell = raw_input(u"请输入原始序列:")
if ( N>=128 ):
    str_N = bin(N)
    str_N = str_N[2:]
elif (N > 0):
    str_N = bin(N)
    num = len(str_N[2:])
    str0 = "00000000"
    str_N =str0[:8-num] + str_N[2:]
print u"映射序列"+str_N
print u"第  0 代:" + str_cell
li_num = []
num = 0
for i in range (0,8):
    if ( num >= 4):
        str_num = bin(num)
        str_num = str_num[2:]
        li_num.append(str_num)
    elif (num >= 0):
        str_num = bin(num)
        num0 = len(str_num[2:])
        str0 = "000"
        str_num =str0[:3-num0] + str_num[2:]
        li_num.append(str_num)
    num = num +1
dict_N = dict([(li_num[t],str_N[t])for t in range (0,8)])
for k in range (1,n+1):
    str_cell_new = str_cell[0]
    for i in range (0,len(str_cell)-2):
        if i >=0 & i<(len(str_cell)-2):
            cmp_cell = str_cell[i:i+3]
            str_cell_new = str_cell_new + dict_N.get(str_cell[i:i+3])  
    str_cell_new = str_cell_new + str_cell[len(str_cell)-1]
    str_cell = str_cell_new
    print   u"第",'%2d'%k,u"代:"+str_cell


分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP