生命游戏-JAVA语言代码-细胞自动机-毕业论文 联系客服

发布时间 : 星期五 文章生命游戏-JAVA语言代码-细胞自动机-毕业论文更新完毕开始阅读2c24c0c77f1922791688e85b

浙江理工大学本科毕业设计(论文)

2. 其他情况均视为进化,即正常繁殖,个体随机一项属性能得到±10%的变化 3.6.4获取所需食物量

1. 个体所需食物量与个体体型成正比,与个体力量、速度乘一定系数之后之和成正比。

2. 个体所需草食/肉食量按个体所需食量与个体食性相乘得到 具体公式:

LifeGameCommon.FOODMULTIPLE*getWeakPercentByAge()*beEatedToMeat()*(0.3+speed/70.0/bodySize+strength/30.0/bodySize);

LifeGameCommon.FOODMULTIPLE为程序设定的倍数,用于控制个体所需食物量从而达到控制个体数量的效果。

getWeakPercentByAge()返回的是一个削弱值,表现为个体在寿命的前20%以及后20%竞争力会按一定比例上升/下降.

beEatedToMeat()返回该生物被吃掉时产生的肉食数量,与个体体积成正比 (0.3+speed/70.0/bodySize+strength/30.0/bodySize)表示个体需要的食物量至少需要自身体型的0.3倍,当速度/力量高时,也会提高这个数值,显然速度的提升对食物的消耗更少。

3.7 环境规则

根据LifeGameCommon中定义的环境自增长比率(下一节中有介绍),每一个周期每一格环境自增长,每当比率达到下一个等级,曾颜色变深一级,土地,草地,每当比率达到100%,则环境变换成下一种类型(土->草,草->树),草地,树林,每到比率降到0%以下,则环境变换成上一种类型(树->草,草->土)。

3.8 关键参数设置

PAM = 0.03

突变概率为0.03,该值应取尽量接近于0,但由于过小的突变概率会导致想要得到较好的结果需要大量的运行时间,而过大的突变概率会导致个体的不确定性太大,就算个体已经往适应环境的方向发展了很长时间,也有可能因为突然的变化而导致个体大幅度变化,最终大幅影响系统的稳定性。

所以需要折中考虑该值对程序运行时间与系统稳定性的影响,若想在1个小时内得到结果,那么该值取0.005-0.05都是合理的。当该值大于0.05时,个体会有较大的几率完全灭亡,而该值小于0.005时,程序的运行效率大幅降低,需要运行很长时间才

11

生命游戏的计算机模拟以及参数对运行结果的分析

能得到该有的结果,这不是我们想要看到的。

PAMPercent = 0.8

突变时某项属性得到80%的变化,同样,该属性需要折中考虑对程序运行时间与系统稳定性的影响,需要更加稳定时需要减少该值但是对计算机性能要求更大。该值80%的设定,已经比较大(原则上这样的设置会导致个体属性达到80%的变化幅度),但是突变的属性仍然会在0~80%之间取得随机值,所以平均40%的变化幅度还是可以接受的,若想在一个小时内得到较好的结果,那么该值平均变化幅度在30%~50%之间都是合理的。当该值大于50%时,个体会有很大的几率完全灭亡,而该值小于30%时,程序的运行效率大幅降低,需要运行很长时间才能得到该有的结果。

FOODMULTIPLE = 5

食物消耗倍率,由于系统中个体所系食物通过个体属性经过一定计算得到,并没有实际单位,通过最后乘以该系数调整与环境生长之间的关系。

PLANTGROWSPEED = 0.003

植物生长速率,每一个时间周期环境的肥沃度增加0.3%

以上两个属性需要一起考虑,由于系统设定中,每个单元格的资源是有上限的,那么就意味着,如果有一个个体的所需资源已经超过了这个上限,那么这个个体必然无法生存,如果个体所需的食物量太少,则每个单元格上会出现非常多数目的个体,现在在程序中,世界的大小被设定为2500个单元格的大小,若每个单元格出现太多的个体,单台电脑的CPU和内存是无法承受的,所以将食物消耗倍率调到了5倍,即理论上减少单个单元格所能容纳的个体数目到原来的1/5,即系统中总共个体数目较少为正常情况的1/5。

PAM与PAMPercent控制了系统达到稳定/灭亡的速度,FOODMULTIPLE与PLANTGROWSPEED用于平衡个体数目。

3.9 预测结果及理论分析

1. 在设计时个体属性中刻意加入了成年年龄这个属性,但未对该属性加以限制,该属性只对个体造成负面影响,个体在进化过程中应该使该值向趋于0的方向发展。

2. 个体的数量会从0增加到一个非常大的数目,然后因为匮乏资源,大部分死亡。

3. 步骤2的过程会不停的发生,再重复该过程中生物会不停的往不同方向进化,当然适应能力差的个体会优先死亡。

12

浙江理工大学本科毕业设计(论文)

4. 系统的运行结果基本有2种,全部灭绝或者趋于稳定,由于系统中进化/突变的概率非常高,系统并不可能显得每一次都能达到稳状态,变异也具有一定不稳定性。但是如果系统能趋于稳定(即在不停的重复2的过程中,越来越适应环境),个体数量的震幅应该会变得越来越小。

5. 加入了肉食性的系统后,由于算法过于复杂,十分影响运行速度(没有加入时我的CPU能在系统有10000个以下个体时运行,加入肉食性后,1000个个体的运算CPU已难以承受),运行时去掉了肉食性,去掉后势必带来一个严重的后果,参考现实世界,在一开始资源较少,个体较容易变异时,虽然竞争力其实不强,但是由于个体小,消耗资源少,非常容易存活下来,所以这样的生物会猛涨,并且无法得到控制,系统的平稳阶段会停留在低级生物的阶段。如果加入肉食性系统,则当该种生物爆发到一定阶段时,植食性动物资源大量减少而具有一定肉食性动物就容易生存,系统容易达到高级生物阶段。

6. 在设定中,刻意将速度对生物的提升设置为高于力量的提升,最终结果应当表现为速度对生物更有价值,会比较高,而力量值会较低。

3.10 运行结果及结论分析

以下图都为程序运行半小时左右得到的结果

图3-4 程序运行半小时后结果图

由于系统运行时间不够长,不能非常好的看出结果,但是可以看到在横坐标300左右开始有平衡在5000左右的趋势,个体数量一开始会震荡的比较厉害,可以看到有几次几乎将要灭绝,但是又会马上增长回来,原因是初始的个体的各项属性设置的

13

生命游戏的计算机模拟以及参数对运行结果的分析

较高,需求的食物量较多,所以在没有肉食的情况下,非常容易因缺乏资源而死去,个体数量非常少,很长一段时间都保持在1500以下,每次在生物爆发后,资源量非常小的情况下,能生存下去的个体一定是食物需求量非常小的,之后由于长时间的变异,变异出的个体势必会往小型发展,所以个体数量会不停上升,到个体体型小到一定程度后,由于体型小带来的竞争力下降会使个体在较稳定的环境中更难生存,所以个体会趋于稳定,表现为整个系统处于较稳定状态,个体数目趋于稳定(当然由于不确定性,突然的变异就有可能导致所有个体的灭亡)

如预测,成年年龄由于未加入限制,生物在进化过程中趋向于0,因为该属性设置为越小对个体越有利(在未成年时竞争力按百分比下降),并为加入限制,结果也确实说明个体在系统中的进化结果基本废弃了该属性。因为时间越长越趋于零,到200个时间周期之后几乎就与x轴重合了,所以图中取了较短的时间的横坐标,更好的反应结果曲线。

图3-5 成年年龄随时间变化

14