ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

元胞自动机

2022-02-01 21:02:00  阅读:224  来源: 互联网

标签:parser 粒子 args grid 元胞 规则 自动机 255


应用案例

通过对事物形态生成机制的抽象,建立各种规则模拟事物的空间形态和行为:表面生长模型的规则、概率元胞自动机规则、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票,则会有很大变化。这与退火过程很相似,燃料的易燃性导致不同的表面张力引起不同的效果。

这类模型可以用来研究物质的热传导和渗漏现象。

标签:parser,粒子,args,grid,元胞,规则,自动机,255
来源: https://www.cnblogs.com/fqlqiqi/p/15859605.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有