1、简单生态环境的模拟一实验目的:研究不同光照条件下,不同参数(生命力,成熟期等)的单细胞植物与动物构成的生态环境的运行状况,从中总结规律。二实验模拟内容:环境:有均匀光线照射的培养皿,光线仿日光,强度可调整。单细胞植物:一个细胞占一格,按一定比例接受阳光能量,积蓄到最大值(成熟期)后,会随机分裂到周围的一格中,能量按一定比例消耗并均分。随时间能量会下降(代谢速度) 。低于最低值时死亡(能量减为零) 。单细胞生物:摄取能量方式为吸收周围单细胞植物,其余相同。三模拟方法:1.变量说明:an(100,100) 单细胞生物能量anc(0) 单细胞生物初始能量anc(1) 单细胞生物死亡底限anc(2)
2、单细胞生物成熟标准anc(3) 单细胞生物代谢速率anc(4) 单细胞生物吸收率anc(5) 单细胞生物初始个数pl(100,100) 单细胞植物能量plc(0) 单细胞植物初始能量plc(1) 单细胞植物死亡底限 plc(2) 单细胞植物成熟标准plc(3) 单细胞植物代谢速率plc(4) 单细胞植物吸收率plc(5) 单细胞植物初始个数light 阳光照射量 timelong 模拟时间2.算法:a.初始化:定义数组,赋值(orign) ,清零b.撒点:随机撒点(seed),不重复c.大循环:(扫描所有点)植物:吸收光线,消耗,分裂(ontotwop)动物:吃植物(eata),消耗,分裂(o
3、ntotwoa),死亡统计输出d.结束3.源程序(关键子程序,VB 编写):撒点子程序:Private Sub seeda()Dim i, j, n, k As Integer撒动物细胞For n = 1 To anc(5)k = 0randa:i = Fix(96 * Rnd) + 2j = Fix(96 * Rnd) + 2判断是否重复If an(i, j) = 0 And pl(i, j) = 0 Thenan(i, j) = anc(0)Call drawa(i), (j)Elsek = k + 1If k 50 Thenanc(5) = n - 1GoTo outaEnd IfGoT
4、o randaEnd IfNext nouta:End SubPrivate Sub seedp()Dim i, j, n, k As Integer撒植物细胞For n = 1 To plc(5)k = 0randp:i = Fix(96 * Rnd) + 2j = Fix(96 * Rnd) + 2判断是否重复If an(i, j) = 0 And pl(i, j) = 0 Thenpl(i, j) = plc(0)Call drawp(i), (j)Elsek = k + 1If k 50 Thenplc(5) = n - 1GoTo outpEnd IfGoTo randpEnd If
5、Next noutp:End Sub分裂子程序:Private Sub onetotwoa(X As Integer, Y As Integer)Dim xx, yy, k As Integer动物分裂If an(X, Y) anc(2) Then随机选周围一点k = Fix(Rnd * 8)转一周选合适点For i = 0 To 7xx = X + dx(k + i) Mod 7)yy = Y + dy(k + i) Mod 7)If xx 0 And yy 0 And xx plc(2) Then随机选周围一点k = Fix(Rnd * 8)转一周选合适点For i = 0 To 7xx
6、= X + dx(k + i) Mod 7)yy = Y + dy(k + i) Mod 7)If xx 0 And yy 0 And xx 0 Thenan(X, Y) = 0Form1.FillColor = Form1.BackColorLine (X * 80 + 425, Y * 80 + 425)-(X * 80 + 495, Y * 80 + 495), Form1.BackColor, BEnd IfEnd SubPrivate Sub disappearp(X As Integer, Y As Integer)清植物细胞If pl(X, Y) 0 Thenpl(X, Y) =
7、 0Form1.FillColor = Form1.BackColorLine (X * 80 + 425, Y * 80 + 425)-(X * 80 + 495, Y * 80 + 495), Form1.BackColor, BEnd IfEnd Sub动物进食子程序:Private Sub eata(X As Integer, Y As Integer)动物摄食If an(X, Y) 0 ThenIf X 1 And Y 1 And X 0 And Y - 1 0 Thenan(X, Y) = an(X, Y) + pl(X - 1, Y - 1) / 100 * anc(4)Call
8、 disappearp(X - 1), (Y - 1)End IfIf Y - 1 0 Thenan(X, Y) = an(X, Y) + pl(X, Y - 1) / 100 * anc(4)Call disappearp(X), (Y - 1)End IfIf X + 1 0 Thenan(X, Y) = an(X, Y) + pl(X + 1, Y - 1) / 100 * anc(4)Call disappearp(X + 1), (Y - 1)End IfIf X - 1 0 Thenan(X, Y) = an(X, Y) + pl(X - 1, Y) / 100 * anc(4)C
9、all disappearp(X - 1), (Y)End IfIf X + 1 0 And Y + 1 0 Thenna = na + 1aq = aq + an(i, j) / 100End IfIf pl(i, j) 0 Thennp = np + 1pq = pq + pl(i, j) / 100End IfNext jNext iLabel9.Caption = naLabel11.Caption = Str(Fix(aq / 10) + “K“Label13.Caption = npLabel15.Caption = Str(Fix(pq / 10) + “K“Label21.Ca
10、ption = (np + na)Label23.Caption = Str(Fix(pq + aq) / 10) + “K“Label19.Caption = Str(t) + “/“ + Str(timelong)If timelong 0 ThenProgressBar1.Value = tIf t = timelong ThenTimer1.Enabled = FalseCommand1.Caption = “开始“End IfEnd IfEnd Sub四模拟内容:固定植物的参数:初始值:500(个)*100 下限:40 成熟:160 消耗:5% 吸收率:60%1固定光照为 100,加
11、动物初值,观察平衡时状态:生存下限=初值 *0.6,成熟值= 初值*1.6初值(a) 平衡动物数 平衡植物数 动物能量 植物能量 系统总能量100 达不到平衡200 达不到平衡300 1262 2475 378K 322K 700K400 1194 2635 490K 307K 797K500 1083 3053 554K 403K 958K600 999 3331 635K 388K 1024K700 916 3862 675K 699K 1374K在初值为 100 和 200 时,系统始终在较大幅度循环波动,无法达到平衡(如图):(初值为 200 的情形)实验过程中发现:动物细胞初值越小,
12、模拟进程越快,但是越不易平衡。动物细胞初值越大,模拟进程越慢,但可以直接达到平衡状态。最后由实际数据得到,在初值为600 时,是系统达平衡最快的。所以后面固定动物细胞参数的模拟,都将初值定为 600。2只改变光照条件:固定植物的参数:初始值:500(个)*100 下限:40 成熟:160 消耗:5% 吸收率:60%固定动物的参数:初始值:50(个)*600 下限:360 成熟:960 消耗:10% 吸收率:80%光照 平衡动物数 平衡植物数 动物能量 植物能量 系统总能量100 999 3331 635K 388K 1024K200 1158 2855 722K 618K 1341K300 1
13、252 2493 775K 439K 1214K400 1243 2452 764K 584K 1348K500 1301 2518 804K 630K 1435K600 1308 2578 806K 727K 1533K(上图是光照为 600 时的平衡状态)3.成熟值的改变:光照:100固定植物的参数:初始值:500(个)*100 下限:40 成熟:160 消耗:5% 吸收率:60%固定动物的参数:初始值:50(个)*600 下限:360 消耗:10% 吸收率:80%成熟期 平衡动物数 平衡植物数 动物能量 植物能量 系统总能量720 1003 3232 508K 404K 913K840 1038 3272 588K 419K 1007K960 999 3331 635K 388K 1024K1080 883 4158 599K 1047K 1647K1200 749 5053 558K 1715K 2274K(动物细胞“吃不动”植物细胞的情况)