最近要写一篇有关元胞自动机的论文,但是之前的理解不够深刻,因此在网上找到了北交贾斌、高自友等老师写的《基于元胞自动机的交通系统建模与模拟》。

因此先把VRP放放,写点读书笔记,然后是基于MicroCity的元胞自动机实现。开始吧! 努力奋斗。

上篇: 元胞自动机的基础知识

元胞自动机应用广泛,所以先学习元胞自动机是啥吧。

第一章 绪论

1、Wolfram发起“科学革命”,用简单的电脑程序,也就是元胞自动机,取代数学方程。

2、元胞自动机(cellular automata or cellular automaton,CA)实质上是定义在一个具有离散、有限状态的元胞组成的元胞空间上,按照一定的局部规则,在离散的时间维度上演化的动力学系统。

3、Conway的生命游戏机(game of life)

咱们这个游戏机可带劲了,世界是一个类似于棋盘的二维方形网格,每个格子代表一个元胞,元胞具备两种状态,活(实心)or死(空白),然后这个世界有三条规则:

  1. 生存:对一个活的元胞,如果它的邻居中有两个或三个元胞是活的,那么该元胞将继续生存下去;
  2. 死亡:对一个活的元胞,i.如果它的邻居中有四个或四个以上的元胞是活的,那么该元胞将由于拥挤而死去,ii.如果它的邻居中只有一个或没有活的元胞,那么该元胞将由于孤立无援而死去;
  3. 繁殖:对一个空的元胞,如果它的邻居中有3个活的元胞,则变成一个活元胞。

OK,咱们打开MicroCity开始编写。

  1. Grid:是MicroCity里的格子类型,也可看做一种数据结构类型,横坐标为X轴,纵坐标为Y轴,是离散的,坐标(0,0)的cell中心为(0,0),从-0,5到0.5,如果cellsize=1时。
  2. 创建Xmax=10,Xmin=0的格子,会有11个
  3. 还有其他的function,具体看代码
local MakeGrid      = AddModule('Grid','CreateWorld')
local Sim           = AddModule('Simulation','Start')
local world_sim     = AddParameter(MakeGrid, nil, "node", "Simulation Parameters")
WORLDSIZE           = AddParameter(MakeGrid, world_sim, "value", "Size of the Game World", 50)local game_sim      = AddParameter(Sim, nil, "node", "Simulation Parameters")
DENSITY             = AddParameter(Sim, game_sim, "value", "Density of the World at Beginning %", 50)
SEED                = AddParameter(Sim, game_sim, "string", "Seed of Random Number Generation", "os.time()")
UPDATEINTV          = AddParameter(Sim, game_sim, "value", "Graphics Update Interval (in seconds)", 800)   function Grid()local world = CreateGrid('Nature', 'int', WORLDSIZE+1, WORLDSIZE+1)
end local function GetNeighbors(x, y)local num = 0for i=-1,1 dofor j=-1,1 donum = GetValue(world, x+i, y+j)==1 and num+1 or num end end return num - GetValue(world, x, y)
endfunction Simulation()math.randomseed(assert(loadstring('return' .. SEED)))world = GetControl('grid.sgrd')size  = GetGridMaxXY(world) - 1 --initiatelocal cellMap = {}for i=1,size docellMap[i] = {}for j=1,size do cellMap[i][j] = 0end endfor i=1,math.ceil(size*size*DENSITY/100) dolocal x,y = math.random(size), math.random(size)SetValue(world, 1, x, y)cellMap[x][y] = 1end ---------main sim--------------- while GetReady() doUpdate(world)Sleep(UPDATEINTV)----------rules---------------for i=1,size do for j=1,size dolocal neighbors = GetNeighbors(i, j)if GetValue(world, i, j)==1 then cellMap[i][j] = neighbors>1  and neighbors<4 and 1 or 0elsecellMap[i][j] = neighbors==3 and 1 or 0end end end for i=1,size dofor j=1,size doSetValue(world, cellMap[i][j], i, j)end end end
end

这是个练蛊的游戏,我只跑了一次,左下角那个电梯F很有意思。里面有blinker、bolck、beehive、boat等,感兴趣的同学可以自己写个,研究研究,书中有具体的分析。不过为了论文的进度,咱们不能只玩游戏了。

元胞自动机的构成

元胞自动机最基本的组成单位包括元胞、元胞空间、邻居及规则,以及元胞的状态。

邻居

由于CA的演化规则是局部规则,只需要考虑元胞的邻近元胞就行,因此定义邻居的方式不同,产生的结果也不同。

邻居的划分方式包括

边界条件

元胞自动机在交通系统中的应用之一【元胞自动机的基础知识】相关推荐

  1. 计算机领域中所谓课机是指,1.计算机基础知识题及答案

    第1章计算机基础知识(单选题) 这些题目必须做一遍,来自统考题库(期末考试题也多半出在这里),参考答案在另一个Word文档中(上传自己做的答案后才可以下载-).据说,统考题库中大约有10,000测试题 ...

  2. 计算机信息学中比较大小的代码,信息学奥赛计算机基础知识.doc

    信息学奥赛计算机基础知识 目 录 青少年信息学奥林匹克竞赛情况简介5 第一章 计算机基础知识7 1.1 计算机的基本常识7 1.1.1 计算机的产生与发展7 1.1.2 计算机系统及工作原理7 1.1 ...

  3. 光纤中的多种光学模式芯径_光纤基础知识介绍,看懂这一篇就够!

    弱电监控系统中,当链路传输距离超过100米后,我们就会考虑使用光纤传输,光纤具有抗干扰能力强,传输距离远,带宽大等优势,今天我们就来一起聊聊光纤的基础知识! 1.光纤的定义 光纤是一种柔软.纤细的固态 ...

  4. 在微型计算机中应用最普遍的数字编码是,计算机基础知识理论复习题及答案

    基础知识复习题及答案 一.选择题 1.第三代计算机所使用的电子器件是( ). A)晶体管B)电子管C)中小规模集成电路D)大规模和超大规模集成电路 2.微型计算机中使用的关系数据库,就应用领域而言是属 ...

  5. 计算机在无纸化办公系统中应用属于,福建省闽侯职专计算机基础知识练习题.doc...

    福建省闽侯职专计算机基础知识练习题 ?福建省闽侯职专计算机基础知识练习题 1.当前,计算机正朝着巨型化.微型化.智能化和______ 发展 A)信息化 B)网络化 C)数据化 D)集成化 2.当前电子 ...

  6. 机器学习中的数学——点估计(一):基础知识

    分类目录:<机器学习中的数学>总目录 相关文章: · 点估计(一):基础知识 · 点估计(二):矩估计 · 点估计(三):极大似然估计/最大似然估计(Maximum Likelihood ...

  7. WebCore中的渲染机制(一):基础知识

    DOM树 web页面解析后形成节点树,称作文档对象模型(简称DOM),树上所有节点的基类是Node. Node.h 节点分为几类,与渲染代码相关的节点类型有: Document - 树的根节点总是Do ...

  8. python中使用什么注释语句和运算_Python基础知识

    本文标识 :Python_1 本文编辑 : Jack 风 编程工具 : Anaconda.Pycharm 阅读时长 : 12分钟 Python基础学习为什么那么多培训机构?那么多的程序员呢? 很简单啊 ...

  9. 简述linux内核中,Linux内核中的文件描述符(一)——基础知识简介

    2.文件描述符 下面进一步介绍进程对自己所访问的file对象的管理方法.linux中使用一个数组来管理进程打开的文件的file对象,数组中的每个元素都存放一个纸箱进程所打开的文件的file对象.既然用 ...

最新文章

  1. r语言手动算两个C指数p值,如何用R语言进行Pvalue显著性标记?
  2. 刚刚用华为鸿蒙跑了个“hello world”!跑通后,我特么开始怀疑人生....
  3. pandas使用nsmallest函数返回特定数据列中前N个最小值(搜寻最小的n个元素)、pandas使用nsmallest函数返回特定数据列中前N个最小值所对应的数据行
  4. EntityFramework Core自动返回SQL语句
  5. 香辣弹簧:不同的自动接线方式
  6. 【Pytorch神经网络实战案例】11 循环神经网络结构训练语言模型并进行简单预测
  7. php 错误 异常,php中的异常和错误解析
  8. linux date 天之前,linux date命令前后几天的推导
  9. java super.start,java – 在字节码中确定哪里是super()方法调用所有构造函数必须在JVM上执行...
  10. 颠覆游戏开发,虚幻引擎 UE5 正式发布
  11. 陆奇:疫情下的创业者,最不能缺这两大能力
  12. (附源码)spring boot西安市中小学生护眼平台开发 毕业设计 080855
  13. WinForm中的NotifyIcon控件的使用
  14. linux中 zip命令将整个目录打成zip包
  15. 我的飞信发展方案(一)
  16. 工程师实战分享:77条STM32知识汇总
  17. 【JSP篇】——6.JSP之小学生在线答题系统【综合实战篇】
  18. 流程图 自定义函数_让客户信任感倍增?酷家乐推出“自定义清单”功能,为精准报价加码!...
  19. mysql 直方图统计_MySQL 8.0 新特性之统计直方图
  20. 软件测试有白和黑盒和灰盒,白盒测试、灰盒测试和黑盒测试的区别

热门文章

  1. ORACLE中的日期相减
  2. html手机怎么刷机,一键刷机,小编教你手机怎么一键刷机
  3. Appium爬虫小案例
  4. java基于ssm的论坛贴子网站ssm论坛项目发帖子网站论坛系统论坛源码
  5. Webpack安装与配置
  6. Oracle表数据的更新
  7. js实现玫瑰动画效果
  8. cip数据核字号查询(图书cip数据核字号查询)
  9. 求教如何实现VB.NET控件随着窗体的放大而放大
  10. 目前宽带的接入方式有哪些