一维元胞自动机 Python 实现

来源:互联网 发布:日志记录访问次数java 编辑:程序博客网 时间:2024/06/01 07:43

元胞自动机(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_Nprint u"第  0 代:" + str_cellli_num = []num = 0for 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 +1dict_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


1 0