加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

NetLogo模型讲解:元胞自动机(生命游戏)life game

(2016-08-08 11:06:06)
标签:

netlogo

元胞自动机

cellular

automata

欢迎访问Netlogo专业中文社区:www.netlogo.club

本文档由netlogo爱好者编,如有不足,请见谅!

模型目录:Library-> Sample Models ->Computer Science ->Cellular Automata-> Life

模型原理:使用netlogo中瓦片实现生命游戏,生命游戏是元胞自动机中最基本的应用。

 

生命游戏原理:

1 如果一个细胞周围有3个细胞为生(一个细胞周围共有8个细胞),则该细胞为生(即该细胞若原先为死,则转为生,若原先为生,则保持不变)

2 如果一个细胞周围有2个细胞为生,则该细胞的生死状态保持不变;

3 在其它情况下,该细胞为死(即该细胞若原先为生,则转为死,若原先为死,则保持不变)。

 

原语学习:

l  neighbors

返回由8个相邻瓦片(邻元)或4个相邻瓦片(邻元)组成的主体集合

l  random-float

如果number为正,返回大于等于0、小于number的一个随机浮点数。

如果number为负,返回小于等于0、大于number的一个随机浮点数。

如果number0,返回0

 

程序主界面:

 http://s9/mw690/006884Obzy73SStZtKod8&690game" TITLE="NetLogo模型讲解:元胞自动机(生命游戏)life game" />


;;瓦片拥有两个变量,一个是表明自己是不是活着的,一个是表明邻居中有多少个活着的

patches-own [

  living?         ;; indicates if the cell is living

  live-neighbors  ;; counts how many neighboring cells are alive

]

 

to setup-blank  ;;设置初始状态,让所有元胞都为死的状态

  clear-all

  ask patches [ cell-death ];;设置所有元胞都为死的状态,cell-death 为下面定义的函数

  reset-ticks

end

 

to setup-random  ;;随机设置一些瓦片为死的状态,一些为活的状态

  clear-all

  ask patches

    [ ifelse random-float 100.0 < initial-density  ;;利用随机数来控制活着的元胞的密度

      [ cell-birth ]

      [ cell-death ] ]

  reset-ticks

end

 

to cell-birth  ;;设置瓦片为活,颜色为fgcolor,这个可以在界面里自己选择设定一种颜色

  set living? true

  set pcolor fgcolor

end

 

to cell-death ;;设置瓦片为死,颜色为bgcolor,这个可以在界面里自己选择设定一种颜色

  set living? false

  set pcolor bgcolor

end

 

to go

  ask patches ;;先计算live-neighbors,就是计算每个瓦片邻居里活着的邻居个数

    [ set live-neighbors count neighbors with [living?] ] ;;

  ask patches

    [ ifelse live-neighbors = 3 ;;如果活着的邻居个数等于3,自己的状态就改变为活着的状态,这里不管原先自己是什么状态,只考虑周围邻居的状态

      [ cell-birth ]

      [ if live-neighbors != 2 ;;如果活着的邻居个数不等于2,自己的状态就改变为死的状态

        [ cell-death ] ] ]

  tick

end

 

to draw-cells  ;;这个主要实现一个界面交互,通过你的鼠标左键的点击,可以改变瓦片的状态

  let erasing? [living?] of patch mouse-xcor mouse-ycor

  while [mouse-down?]

    [ ask patch mouse-xcor mouse-ycor

      [ ifelse erasing?

        [ cell-death ]

        [ cell-birth ] ]

      display ]

end

 

 

 

 

本文档由netlogo爱好者编,如有不足,请见谅!

需要项目合作的可以加我qq2763035721

或者有疑问加我 qq 群:530305942

如果你觉得对你有用,欢迎请分享者一杯咖啡!

 

http://s15/mw690/006884Obzy70Kz9ZWi20e&690game" TITLE="NetLogo模型讲解:元胞自动机(生命游戏)life game" />


 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有