,VC   工具软件   办公软件   操作系统   网络安全   设计在线   程序开发   教程宝典   软件下载   软件论坛,VC
您的位置:软件 > 开发者网络 > 开发工具 > 开发专栏 > VC > 正文
用Visual C++ 6.0模拟仿真生态系统
[文章信息]
作者:中国电子科技集团公司第二十二研究所青岛分所郎锐
时间:2005-04-26
出处:天极网
责任编辑:方舟
[文章导读]
本文通过程序示例对人工生命的计算机仿真的基本思路、实现方法作了浅显的描述。
advertisement
热点推荐
· VB实现SQL Server 2000存储过程调用
· Java解析网络数据流的三种特殊方法
· 多媒体教程:网页表单文本域类型
· 体验V5E地形编辑:整体控制
· 打造完美可随意安装的WinXP镜像
[正文]

1 2  下一页

  引言

  近几年,人工生命AL(Artificial Life)的研究越来越显示出其重要性,并迅速成为对传统生物学研究的重要辅助手段。地球上的生命是碳-链基的生命,而人工生命则是把这种真实的生命形式移植到实验室中,其实是试图建立一种人工环境,在此环境中,使用计算机对其进行仿真,使人们能更好的了解环绕着人们的整个世界。本文通过程序示例对人工生命的计算机仿真的基本思路、实现方法作了浅显的描述。

  人工生命的基本说明

  现在计算机已经进入仿真真实世界,对生态系统的的一个最简单而又最基本的仿真模型就是对初等计算同类细胞的仿真。早在二十世纪六十年代末Cambridge(England)大学的John Conway就对此做了研究,并根据简单的细胞规则研究细胞(cells)的"活"、"死"以及"出生"。之后的Michael Palmiter也用程序对盛有细菌的盘中昆虫的生活情形进行了仿真。他的仿真比前者要复杂的多,最初昆虫可以随意在盘中移动,昆虫不断吃着在移动中所遇到的细菌,并由这些细菌为昆虫提供继续行走所需要的能量,当昆虫已足够成熟并有充足的能量,便会分裂产生两个新的昆虫。Michael Palmiter把这些所有的活动都以图形的方式显示在计算机屏幕上。

  上述两人的对现实生命的仿真都是通过程序来模仿真实生命的一些基本特性,以此来实现人工生命,人工生命使用的是bottom-up方法,这一点不同于其他的一些人工智能程序AI(Artificial Intelligence)所使用的top-down方法。当在程序里把人工生命的基本要素设定好之后,程序并不能预见到所产生的人工生命在此后的发展状态,甚至在不同的环境下都会产生不同的发展结果。

  程序的设计实现

  本文仿照John Conway的细胞模型对细胞群的生命状态作了仿真模拟,并通过视图将细胞群的生命变化状态实时的显示到计算机屏幕上。我们仿真的对象是一个350*350的细胞群,在屏幕上用像素来表示细胞群中的每个细胞,并用不同的颜色来表示细胞的不同的生命状态。该细胞群体中的每个细胞的生命状态简单的归结为四个基本条件,即当某个细胞的周围(指前后左右四个方向)没有其他的细胞存在,则该细胞由于失去了群体的支援而将死亡;当其周围有一个细胞存在时,则会继续维持下去;当周围的细胞数达到两个时,则有足够的细胞数和能量足以产生一个新的细胞;而一旦周围的细胞超过三个时则会因为生存空间的过分拥挤而导致此细胞的死亡。根据上述规则我们就可以对其生命状态进行仿真了,我们在程序中只能根据其个体的生死基本条件来决定该个体的生或死,但我们对于这个群体在今后某个时刻的生命状态却无法进行预测。

  由于此仿真模型比较简单,有关生命对象的生命状态只有生或死,所以可以用一个二维数组int Cells[350][350];来存放当前时刻的所有细胞个体的生命状态,并用另一个二维数组int Temp[350][350];来寄存下一时刻的生命状态。该生命群体的初始状态可以通过以时间为种子的随机数来产生,也可以通过直接对Cells数组的赋值来完成对初试状态的设定:

srand((unsigned)time(NULL)); //以时间为种子
for(int i=0;i<350;i++) //枚举每一个细胞个体,并设定其初始的生命状态
 for(int j=0;j<350;j++) {
  if(ID==1) //ID为1时设定为全生
   Cells[i][j]=1;
  if(ID==2) //ID为2时设定为全死
   Cells[i][j]=0;
  if(ID==3) //ID为3时设定其生死状态为随机
   Cells[i][j]=rand()%2;
  Temp[i][j]=Cells[i][j];
 }

  生命总是在随着时间的推移而不断的代谢、繁殖,我们可以将定时器发出的每一次中断作为指示我们的生命模型完成一次的代谢与繁殖的信号,通过枚举每一个细胞个体周围的细胞个数来决定下一代细胞群的生命状态,下面将此实现此过程的核心代码摘选如下:

int nCount=0;//用以统计每个细胞周围的细胞个数
for(int i=1;i<349;i++)
 for(int j=1;j<349;j++){
  //每个细胞的前后左右的
  nCount=Cells[i-1][j]+Cells[i][j-1]+Cells[i][j+1]+Cells[i+1][j];
  //细胞个数。
  switch(nCount)//根据人工生命的模拟规则,对其个体的生存状态进行判别
  {
   case 0://周围没有细胞,该细胞死亡。
    Temp[i][j]=0;
    break;
   case 1://周围有一个细胞,维持当前状态不变。
    break;
   case 2://周围有两个细胞,产生一个新细胞。
    Temp[i][j]=1;
    break;
   case 3://周围有三个细胞,该细胞死亡。
    Temp[i][j]=0;
    break;
   case 4://周围有四个细胞,该细胞死亡。
    Temp[i][j]=0;
    break;
   default:
    break;
  }
 }
 ……
 for(i=0;i<350;i++)
  for(int j=0;j<350;j++)
   Cells[i][j]=Temp[i][j];

  下面是将生命群体的每个细胞的生存状态在350像素*350像素的视图中用不同的颜色显示出来,以便直观的对细胞群体的生存状况进行观察。

CDC* pDC=GetDC();
……
for(int i=1;i<349;i++)
for(int j=1;j<349;j++)
{
 if(Cells[i][j]==0)//死亡的细胞所对应的像素用黑色表示。
  pDC->SetPixel(i,j,RGB(0,0,0));
 if(Cells[i][j]==1)//活着的细胞所对应的像素用黄色表示。
  pDC->SetPixel(i,j,RGB(255,255,0));
}
……
ReleaseDC(pDC);


1 2  下一页

发表评论推荐给朋友我想参加相关培训打印我对此感兴趣订阅电子杂志
天极社区邀请您:写博客日记  上传相片   论坛聊天  订阅电子杂志  推荐网摘   免费图铃工具
笔名:   请您注意:

 遵守国家有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。

 天极网拥有管理笔名和留言的一切权利。
评论:
 
,VC相关内容,VC焦点新闻
  • 利用VC+OpenGL实现几种特殊图形效果
  • VC6中用DOM遍历网页中的元素
  • VC编程实现动态截获并显示窗口DC
  • MFC六大关键技术剖析之动态创建
  • MFC程序员的WTL指南之属性页与向导
  • FVD刺激高清碟机加速商业化 抢占商机最重要
  • 3家搜索引擎集体诉讼8848 吕春维未敢出席
  • 杨元庆:没有准备不会获批的备用方案
  • 军队信息化诞生新领域 电子军务呼之欲出
  • 世界经济论坛公布信息化程度全球最新排名
  • 2004政务绩效评估:政府门户尚处于发展阶段
  • 甲骨文出资5.15亿美元 意图收购RetekInc
  • 技术并购:帮你突破传统增长的“天花板”
  • ,VCAdvertisement

    天极无线
    经典名曲 华语流行 欧美风情 人声音效 原声大碟
    你好周杰伦-安又琪
    直线-张韶涵
    天边-张韶涵
    看我72变-蔡依林
    乱世佳人-Twins
    全世界下雨-张娜拉
    我们的爱-飞儿乐队
    分手快乐-梁静茹
    爱在西元前-周杰伦
    三万英尺-迪克牛仔
    爱如潮水-张信哲
    爱情宣言-齐秦
    寻找玛依拉-刀郎
    驼铃-刀郎
    老鼠爱大米-杨臣刚
    功夫主题曲
    仙剑主题曲杀破狼
    天下无贼片尾曲
    冲动的惩罚-刀郎
    情人-刀郎
    爱情-莫文蔚
    挪威的森林-伍佰
    奔跑 - 羽泉
    因为爱 - 羽泉
      ·时尚女人圈
    ·经典影视专集
    ·美女秀场
    ·美丽大自然专题
    ·流行金曲
    ·科幻电影特区
    | 最新推荐
    ·你好周杰伦
    ·杀破狼
    ·寻找玛依拉
    ·孤单公园
    ·男人海洋
    | 魔术铃声
    ·少女丰胸
    ·少妇丰胸
    ·减肥魔铃
    ·增高魔铃
    ·美容魔铃

    今日报价查询 更多报价