有人說,元胞自動機是馮諾依曼最偉大的發現。那麼它到底是一種什麼,有興趣瞭解更深入的歡迎去網上查。我對它的理解就是它可以很好的模擬羣體的運動規律,僅僅只通過簡單的幾條法則就可以讓羣體的運動是那麼的貼近自然。
從中或許我們也可以說,日常生活中的羣體運動其實就是在遵循着這幾條簡單的法則的。
那麼我有時會在想,未來會不會出現由人工智能模仿個體運動,元胞自動機模仿羣體的運動,從而產生類似自然界中各種羣體呢?
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)
這次博客有點水,最近事情真的多,寫篇簡短博客放鬆一下!!!