空间分析作业+基于生命游戏规则的CA模型+黄岸峰_第1页
空间分析作业+基于生命游戏规则的CA模型+黄岸峰_第2页
空间分析作业+基于生命游戏规则的CA模型+黄岸峰_第3页
空间分析作业+基于生命游戏规则的CA模型+黄岸峰_第4页
空间分析作业+基于生命游戏规则的CA模型+黄岸峰_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于生命游戏规则的基于生命游戏规则的 CA 模型模型 地理科学与规划学院 09测绘 黄岸峰 09343065 CA A 模型简介 模型简介 元胞自动机 简称 CA 是一时间和空间都离散的动力系统 散布在规则格网中的每一 元胞取有限的离散状态 遵循同样的作用规则 依据确定的局部规则作同步更新 大量元 胞通过简单的相互作用而构成动态系统的演化 不同于一般的动力学模型 元胞自动机不 是由严格定义的物理方程或函数确定 而是用一系列模型构造的规则构成 凡是满足这些 规则的模型都可以算作是元胞自动机模型 因此 元胞自动机是一类模型的总称 或者说 是一个方法框架 其特点是时间 空间 状态都离散 每个变量只取有限多个状态 且其 状态改变的规则在时间和空间上都是局部的 元胞自动机具有强大的空间建模能力和运算能力 能模拟具有时空特征的复杂动态系 统 CA 在化学 生物学中成功地模拟了复杂系统的繁殖 自组织 进化等过程 具有一下 5 个基本特征 1 元胞分布在按照一定规则划分的离散的元胞空间上 2 系统的演化按照等时间间隔分步进行 时间变量取等长的时刻点 3 每个元胞都有明确的状态 并且元胞的状态自能取有限个离散值 4 元胞下一时刻演化的状态值是由确定的转换规则所决定的 5 每个元胞的转换规则只由局部领域内的元胞状态所决定的 生命游戏的生命游戏的 CACA 模型 模型 最经典 CA 模型是 John Horton Conway 设计的生命游戏模型 该游戏通过分布在二维 空间网格上的元胞来发挥作用 每个元胞只以一种状态存在 0 或 1 并且在下个时刻的 状态由当前状态以及它最临近的 8 个邻居的状态共同决定 定义了如下 3 中转化规则 1 生存规则 周围有 2 或者 3 个活着的邻居将在下一代继续生存 2 死亡规则 周围活着的邻居有 4 个或者 4 个以上 或者少于 2 个元胞的将会死 亡 3 繁殖规则 周围存活邻居数达到 3 个的死亡元胞将在下一代活过来 尽管规则看上去很简单 但是该模型能够产生丰富有趣的动态图案 生命游戏模型已在 很多方面得到应用 演化规则近似地描述了生物群体的生存繁殖规律 在生命密度过小 相邻元胞数小于 2 时 由于孤单 缺乏配种繁殖机会 缺乏互助也会出现生命危机 元胞状态值由 1 变为 0 在生命密度过大 相邻元胞数大于 3 时 也会由于环境恶化 资 源匮乏以及相互竞争而出现生存危机 元胞状态值由 1 变为 0 只有处于个体适中 相邻元 胞数为 2 或 3 时生物才能生存 保持状态值为 1 和繁衍后代 元胞状态值由 0 变为 1 根据以上制定的规则 我们可以简单地用一下数学表达式对其进行表达 1 S 2 3 1 若 1 则 1 0 S 2 3 1 S 3 2 若 0 则 1 2 S 3 其中 表示 t 时刻元胞的状态 S 为 8 个相邻元胞中活着的元胞数 编程实现生命游戏 编程实现生命游戏 我们将在 Microsoft c 6 0 编程环境下实现生命游戏 注意此处将调用 vc 6 0 的图 形库文件来显示相关画面 因此必须现在系统上安装其图形库文件 见附件 下面截图说 明游戏实现结果 此程序为交互实现过程 运行程序后 首先需要输入初始化窗口大小和像元大小 窗口大 小和像元大小理论上可以任意赋值 这里我们输入窗口大小为 800 和像元大小为 10 将弹 出初始界面如下 上图为随机生成生命后的图示 在该程序里面我们调用了鼠标函数 可以自己添加生命 暂停程序 以及结束程序三种 操作 命令说明如下 双击鼠标左键 开始游侠 单击鼠标左键 添加生命 单击鼠标右键 慢动作演示 双击鼠标右键 推出程序 下面为运行过程的一些截图 下图表示达到平衡以后的元胞状态 之后元胞再也不随时间变化而发生变化 这时 元胞世界已经达到饱和 元胞数目为现 有环境下最优的数目 需要说明的是 在该程序中 我们制定的规则是按照八邻域规则进 行的 CACA 的其他运用 的其他运用 由于 CA 具有强大的空间运算能力 常用于自组织系统演变过程的研究 近年来越来越多 的学者利用元胞自动机来模拟城市系统的演化 土地利用演化模拟等 CA 在将来 GIS 应用 中必将发挥更加重要的作用 附件 附件 程序代码 include include include include include include include int N int n int L int T int i j int r k int s void init int void create void disp void evolution void redraw void mouse 主函数 void main printf 请输入初始化窗口大小和像元大小 n scanf d d init N create disp setbkcolor YELLOW while true mouse evolution cleardevice disp Sleep 100 getch closegraph 初始化画图窗口 void init int N initgraph N n n N n n setbkcolor WHITE cleardevice setcolor BLACK for i 0 i N n n i i n line i 0 i N for j 0 j N n n j j n line 0 j N j 初始化画图窗口 创建随机世界 void create int t 0 s N n 2 扩充边界 srand unsigned time NULL 设置随机种子 L int malloc sizeof int s 申请二维动态数组 T int malloc sizeof int s for i 0 i s i L i int malloc sizeof int s T i int malloc sizeof int s for i 0 i s i i 1 for j 0 j s j j 1 T i j L i j 0 初始化数组值全为 0 表示无生命的世界 for i 1 i s 1 i i 1 for j 1 j s 1 j j 1 T i j L i j rand 2 随机生成生命 有生命值为 1 无生命值为 0 生成随机生命 进化函数 void evolution int sum 0 for i 1 i s 1 i for j 1 j s 1 j sum L i 1 j L i 1 j 1 L i j 1 L i 1 j 1 L i 1 j L i 1 j 1 L i j 1 L i 1 j 1 switch sum case 3 T i j 1 break case 2 T i j L i j break default T i j 0 break 搜索周围活细胞的个数 for i 0 i s i for j 0 j s j L i j T i j 更新生命世界 显示图形函数 void disp for i 1 i s 1 i for j 1 j s 1 j if L i j 1 setfillstyle GREEN SOLID FILL NULL bar i 1 n j 1 n i n j n 画矩形并且填充 鼠标函数 void mouse int t while true MOUSEMSG m 定义鼠标消息 m GetMouseMsg 获取一条鼠标消息 switch m uMsg case WM LBUTTONDBLCLK cleardevice evolution disp break case WM LBUTTONDOWN int x m x n int y m y n setfill

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论