有人说,元胞自动机是冯诺依曼最伟大的发现。那么它到底是一种什么,有兴趣了解更深入的欢迎去网上查。我对它的理解就是它可以很好的模拟群体的运动规律,仅仅只通过简单的几条法则就可以让群体的运动是那么的贴近自然。
从中或许我们也可以说,日常生活中的群体运动其实就是在遵循着这几条简单的法则的。
那么我有时会在想,未来会不会出现由人工智能模仿个体运动,元胞自动机模仿群体的运动,从而产生类似自然界中各种群体呢?
import numpy as np
import matplotlib.pyplot as plt
import imageio
import os
a = np.zeros((100, 136))
u, v = a.shape
for i in range(u):
for j in range(v):
# 下面三个公式不一样结果不一样,也可自己更改
#if (i + j) % 10 < 2 or (i - j) % 10 < 2:
#if (i+j) % 10 < 2 or (i-j) % 10 < 3:
if(i + j ) % 9 < 3 or (i - j) % 9 < 2:
a[i, j] = 1
def ner(i, j, a):
k = a[i - 1:i + 2, j - 1:j + 2]
k = k.reshape((-1,))
k = sum(k) - a[i, j]
return k
def chg(a):
b = a * 1
for i in range(1, u - 1):
for j in range(1, v - 1):
k = ner(i, j, a)
if k > 3 or k < 2:
b[i, j] = 0
elif k == 3:
b[i, j] = 1
elif k == 2:
b[i, j] = 1 - a[i, j]
return b
def creat_gif(image_list, gif_name, duration):
"""
生成gif文件,原始图像仅仅支持png格式;
gif_name : 字符串,所生成的gif文件名,带.gif文件名后缀;
path : 输入图像的路径;
duration : gif图像时间间隔,这里默认设置为1s,当然你喜欢可以设置其他;
"""
# 创建一个空列表,用来存源图像
frames = []
# 利用方法append把图片挨个存进列表
for image_name in image_list:
frames.append(imageio.imread(image_name))
# 保存为gif格式的图
imageio.mimsave(gif_name, frames, 'GIF', duration=duration)
return
image_list = []
for i in range(80):
b = np.zeros((u, v, 3))
for j in range(3):
b[:, :, j] = a
a = chg(a)
plt.imsave(str(i) + '.png', b)
image_list.append(str(i) + '.png')
gif_name = 'new.gif'
duration = 0.2
creat_gif(image_list, gif_name, duration)
for i in range(80):
# 可以自己修改路径
path = str(i) + '.png'
if os.path.exists(path): # 如果文件存在
os.remove(path)
这次博客有点水,最近事情真的多,写篇简短博客放松一下!!!