应用案例
通过对事物形态生成机制的抽象,建立各种规则模拟事物的空间形态和行为:表面生长模型的规则、概率元胞自动机规则、Q2R规则、退火规则、HPP规则、蚂蚁规则、道路交通规则、固体运动规则等。
生命游戏
点击查看代码
import sys
import argparse
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import numpy as np
from matplotlib.colors import ListedColormap
yeah = ["black", "yellow"]
cmap = ListedColormap(yeah)
ON = 255
OFF = 0
vals = [ON, OFF]
def randomGrid(N):
return np.random.choice(vals, N*N, p=[0.2, 0.8]).reshape(N, N)
def addGrider(i, j, grid):
glider = np.array([[0, 0, 255], [255, 0, 255], [0, 255, 255]])
grid[i:i+3, j:j+3] = glider
def update(frameNum, img, grid, N):
newGrid = grid.copy()
for i in range(N):
for j in range(N):
total = int((grid[i, (j-1)%N] + grid[i, (j+1)%N] +
grid[(i-1)%N, j] + grid[(i+1)%N, j] +
grid[(i-1)%N, (j-1)%N] + grid[(i-1)%N, (j+1)%N] +
grid[(i+1)%N, (j-1)%N] + grid[(i+1)%N, (j+1)%N])/255)
if grid[i, j] == ON:
if total < 2 or total > 3:
newGrid[i, j] = OFF
else:
if total == 3:
newGrid[i, j] = OFF
img.set_data(newGrid)
grid[:] = newGrid[:]
return img
def run():
parser = argparse.ArgumentParser(description="Run's Conway's Game of Life simulation")
parser.add_argument("--grid-size", dest="N", required=False)
parser.add_argument("--mov-file", dest="movfile", required=False)
parser.add_argument("--interval", dest="interval", required=False)
parser.add_argument("--glider", action="store_true", required=False)
parser.add_argument("--gosper", action="store_true", required=False)
args = parser.parse_args()
N = 10
if args.N and int(args.N) > 8:
N = int(args.N)
updateInterval = 50
if args.interval:
updateInterval = int(args.interval)
grid = np.array([])
if args.glider:
grid = np.zeros(N*N).reshape(N, N)
addGrider(1, 1, grid)
else:
grid = randomGrid(N)
fig, ax = plt.subplots(facecolor="pink")
img = ax.imshow(grid, cmap=cmap, interpolation="nearest")
ani = animation.FuncAnimation(fig, update, fargs=(img, grid, N, ), frames=10, interval=updateInterval, save_count=50)
if args.movfile:
ani.save(args.movfile, fps=30, extra_args=["-vcodec", "libx264"])
plt.show()
run()
格子气体模拟
HPP模型可作为气体和流体运动的简单模型。
演化规则如下:
- (1)单个粒子沿固定方向移动,直到发生碰撞;
- (2)如果2个粒子发生正面碰撞,则2个粒子的运动方向垂直偏转;
- (3)如果2个粒子发生的不是正面碰撞,则2个粒子格子直接相互穿过并继续沿同一个方向前进;
- (4)当粒子与边缘碰撞时,反弹
迭代更新过程如下:
1.碰撞阶段
在此阶段中如果发生任何碰撞,则检查并应用上述规则(2)(3)和(4)。这将导致正面碰撞粒子改变方向,非正面碰撞粒子运动方向保持不变,或者非碰撞粒子运动方向保持不变。
2.运动阶段
在此阶段,每个粒子沿着它们当前行进的方向移动一个格子,遵循HPP模型演化规则(1)。
表决与退火模型
很多人会根据周围人的意见做出自己的判断,以此建立表决模型的基本规则。表决模型的规则与微观结构中分子之间的动能传递非常类似,所以与退货现象也是一致的。
模型规则如下:
- (1)初始状态时在正方形网格上随机分布了白点和黑点,表示各自的意见是同意或反对。
- (2)演化规则是在最近邻、次近邻及其本身9个网格点上,采用少数服从多数的规则来决定中心在下一时刻是黑(反对)还是白(赞成)
- 5个或5个以上是黑点则是黑点
- 5个或5个以上是白点则是白点
- (3)初始状态中黑白比例各50%(双方实力相当),经过一段时间演化得到如图,形成了一些比较细碎的领域。
- 若起初黑点很少,则长时间后白区块连成一片,黑区成为白色海洋中的一个个孤岛,反之亦然。
- (4)如果修改规则,即改变原来的4票对5票,则会有很大变化。这与退火过程很相似,燃料的易燃性导致不同的表面张力引起不同的效果。
这类模型可以用来研究物质的热传导和渗漏现象。