简单生态环境的模拟.docx

上传人:b****4 文档编号:27123317 上传时间:2023-06-27 格式:DOCX 页数:17 大小:329.38KB
下载 相关 举报
简单生态环境的模拟.docx_第1页
第1页 / 共17页
简单生态环境的模拟.docx_第2页
第2页 / 共17页
简单生态环境的模拟.docx_第3页
第3页 / 共17页
简单生态环境的模拟.docx_第4页
第4页 / 共17页
简单生态环境的模拟.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

简单生态环境的模拟.docx

《简单生态环境的模拟.docx》由会员分享,可在线阅读,更多相关《简单生态环境的模拟.docx(17页珍藏版)》请在冰豆网上搜索。

简单生态环境的模拟.docx

简单生态环境的模拟

简单生态环境的模拟

一.实验目的:

研究不同光照条件下,不同参数(生命力,成熟期等)的单细胞植物与动物构成的生态环境的运行状况,从中总结规律。

二.实验模拟内容:

环境:

有均匀光线照射的培养皿,光线仿日光,强度可调整。

单细胞植物:

一个细胞占一格,按一定比例接受阳光能量,积蓄到最大值(成熟期)后,会随机分裂到周围的一格中,能量按一定比例消耗并均分。

随时间能量会下降(代谢速度)。

低于最低值时死亡(能量减为零)。

单细胞生物:

摄取能量方式为吸收周围单细胞植物,其余相同。

三.模拟方法:

1.变量说明:

an(100,100)单细胞生物能量

anc(0)单细胞生物初始能量

anc

(1)单细胞生物死亡底限

anc

(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),消耗,分裂(ontotwoa),死亡

统计输出

d.结束

3.源程序(关键子程序,VB编写):

撒点子程序:

PrivateSubseeda()

Dimi,j,n,kAsInteger

'撒动物细胞

Forn=1Toanc(5)

k=0

randa:

i=Fix(96*Rnd)+2

j=Fix(96*Rnd)+2

'判断是否重复

Ifan(i,j)=0Andpl(i,j)=0Then

an(i,j)=anc(0)

Calldrawa((i),(j))

Else

k=k+1

Ifk>50Then

anc(5)=n-1

GoToouta

EndIf

GoToranda

EndIf

Nextn

outa:

EndSub

PrivateSubseedp()

Dimi,j,n,kAsInteger

'撒植物细胞

Forn=1Toplc(5)

k=0

randp:

i=Fix(96*Rnd)+2

j=Fix(96*Rnd)+2

'判断是否重复

Ifan(i,j)=0Andpl(i,j)=0Then

pl(i,j)=plc(0)

Calldrawp((i),(j))

Else

k=k+1

Ifk>50Then

plc(5)=n-1

GoTooutp

EndIf

GoTorandp

EndIf

Nextn

outp:

EndSub

分裂子程序:

PrivateSubonetotwoa(XAsInteger,YAsInteger)

Dimxx,yy,kAsInteger

'动物分裂

Ifan(X,Y)>anc

(2)Then

'随机选周围一点

k=Fix(Rnd*8)

'转一周选合适点

Fori=0To7

xx=X+dx((k+i)Mod7)

yy=Y+dy((k+i)Mod7)

Ifxx>0Andyy>0Andxx<101Andyy<101Then

Ifan(xx,yy)=0Andpl(xx,yy)=0Then

'能量均分

an(xx,yy)=Fix(an(X,Y)/2)

an(X,Y)=an(xx,yy)

'绘新细胞

Calldrawa((xx),(yy))

ExitSub

EndIf

EndIf

Nexti

EndIf

EndSub

PrivateSubonetotwop(XAsInteger,YAsInteger)

Dimxx,yy,kAsInteger

'植物分裂

Ifpl(X,Y)>plc

(2)Then

'随机选周围一点

k=Fix(Rnd*8)

'转一周选合适点

Fori=0To7

xx=X+dx((k+i)Mod7)

yy=Y+dy((k+i)Mod7)

Ifxx>0Andyy>0Andxx<101Andyy<101Then

Ifan(xx,yy)=0Andpl(xx,yy)=0Then

'能量均分

pl(xx,yy)=Fix(pl(X,Y)/2)

pl(X,Y)=pl(xx,yy)

'绘新细胞

Calldrawp((xx),(yy))

ExitSub

EndIf

EndIf

Nexti

EndIf

EndSub

图形子程序:

PrivateSubdrawa(XAsInteger,YAsInteger)

Form1.FillColor=RGB(255,0,0)

'画动物细胞(红色圆)

X=X*80+460

Y=Y*80+460

Circle(X,Y),35,RGB(255,0,0)

EndSub

PrivateSubdrawp(XAsInteger,YAsInteger)

Form1.FillColor=RGB(0,255,0)

'画植物细胞(绿方块)

Line(X*80+435,Y*80+435)-(X*80+485,Y*80+485),RGB(0,255,0),B

EndSub

PrivateSubdisappeara(XAsInteger,YAsInteger)

'清动物细胞

Ifan(X,Y)>0Then

an(X,Y)=0

Form1.FillColor=Form1.BackColor

Line(X*80+425,Y*80+425)-(X*80+495,Y*80+495),Form1.BackColor,B

EndIf

EndSub

PrivateSubdisappearp(XAsInteger,YAsInteger)

'清植物细胞

Ifpl(X,Y)>0Then

pl(X,Y)=0

Form1.FillColor=Form1.BackColor

Line(X*80+425,Y*80+425)-(X*80+495,Y*80+495),Form1.BackColor,B

EndIf

EndSub

动物进食子程序:

PrivateSubeata(XAsInteger,YAsInteger)

'动物摄食

Ifan(X,Y)>0Then

IfX>1AndY>1AndX<100AndY<100Then

an(X,Y)=an(X,Y)+(pl(X-1,Y-1)+pl(X,Y-1)+pl(X+1,Y-1)+pl(X-1,Y)+pl(X+1,Y)+pl(X-1,Y+1)+pl(X,Y+1)+pl(X+1,Y+1))/100*anc(4)

Calldisappearp((X-1),(Y-1))

Calldisappearp((X),(Y-1))

Calldisappearp((X+1),(Y-1))

Calldisappearp((X-1),(Y))

Calldisappearp((X+1),(Y))

Calldisappearp((X-1),(Y+1))

Calldisappearp((X),(Y+1))

Calldisappearp((X+1),(Y+1))

ExitSub

EndIf

IfX-1>0AndY-1>0Then

an(X,Y)=an(X,Y)+pl(X-1,Y-1)/100*anc(4)

Calldisappearp((X-1),(Y-1))

EndIf

IfY-1>0Then

an(X,Y)=an(X,Y)+pl(X,Y-1)/100*anc(4)

Calldisappearp((X),(Y-1))

EndIf

IfX+1<101AndY-1>0Then

an(X,Y)=an(X,Y)+pl(X+1,Y-1)/100*anc(4)

Calldisappearp((X+1),(Y-1))

EndIf

IfX-1>0Then

an(X,Y)=an(X,Y)+pl(X-1,Y)/100*anc(4)

Calldisappearp((X-1),(Y))

EndIf

IfX+1<101Then

an(X,Y)=an(X,Y)+pl(X+1,Y)/100*anc(4)

Calldisappearp((X+1),(Y))

EndIf

IfX-1>0AndY+1<101Then

an(X,Y)=an(X,Y)+pl(X-1,Y+1)/100*anc(4)

Calldisappearp((X-1),(Y+1))

EndIf

IfY+1<101Then

an(X,Y)=an(X,Y)+pl(X,Y+1)/100*anc(4)

Calldisappearp((X),(Y+1))

EndIf

IfX+1<101AndY+1<101Then

an(X,Y)=an(X,Y)+pl(X+1,Y+1)/100*anc(4)

Calldisappearp((X+1),(Y+1))

EndIf

EndIf

EndSub

主程序:

PrivateSubTimer1_Timer()

Dimna,npAsInteger

Dimaq,pqAsLong

na=0

np=0

aq=0

pq=0

t=t+1

Fori=1To100

Forj=1To100

'植物摄食

Calleatp((i),(j))

'植物消耗

Callwastep((i),(j))

Nextj

Nexti

Fori=1To100

Forj=1To100

'植物分裂

Callonetotwop((i),(j))

'植物死亡

Calldeadp((i),(j))

Nextj

Nexti

Fori=1To100

Forj=1To100

'动物摄食

Calleata((i),(j))

'动物消耗

Callwastea((i),(j))

Nextj

Nexti

Fori=1To100

Forj=1To100

'动物分裂

Callonetotwoa((i),(j))

'动物死亡

Calldeada((i),(j))

Nextj

Nexti

'统计输出

Fori=1To100

Forj=1To100

Ifan(i,j)>0Then

na=na+1

aq=aq+an(i,j)/100

EndIf

Ifpl(i,j)>0Then

np=np+1

pq=pq+pl(i,j)/100

EndIf

Nextj

Nexti

Label9.Caption=na

Label11.Caption=Str(Fix(aq/10))+"K"

Label13.Caption=np

Label15.Caption=Str(Fix(pq/10))+"K"

Label21.Caption=(np+na)

Label23.Caption=Str(Fix((pq+aq)/10))+"K"

Label19.Caption=Str(t)+"/"+Str(timelong)

Iftimelong>0Then

ProgressBar1.Value=t

Ift>=timelongThen

Timer1.Enabled=False

Command1.Caption="开始"

EndIf

EndIf

EndSub

四.模拟内容:

固定植物的参数:

初始值:

500(个)*100下限:

40成熟:

160消耗:

5%吸收率:

60%

1.固定光照为100,加动物初值,观察平衡时状态:

生存下限=初值*0.6,成熟值=初值*1.6

初值(a)

平衡动物数

平衡植物数

动物能量

植物能量

系统总能量

100

\

\

\

\

达不到平衡

200

\

\

\

\

达不到平衡

300

1262

2475

378K

322K

700K

400

1194

2635

490K

307K

797K

500

1083

3053

554K

403K

958K

600

999

3331

635K

388K

1024K

700

916

3862

675K

699K

1374K

在初值为100和200时,系统始终在较大幅度循环波动,无法达到平衡(如图):

(初值为200的情形)

实验过程中发现:

动物细胞初值越小,模拟进程越快,但是越不易平衡。

动物细胞初值越大,模拟进程越慢,但可以直接达到平衡状态。

最后由实际数据得到,在初值为600时,是系统达平衡最快的。

所以后面固定动物细胞参数的模拟,都将初值定为600。

2.只改变光照条件:

固定植物的参数:

初始值:

500(个)*100下限:

40成熟:

160消耗:

5%吸收率:

60%

固定动物的参数:

初始值:

50(个)*600下限:

360成熟:

960消耗:

10%吸收率:

80%

光照

平衡动物数

平衡植物数

动物能量

植物能量

系统总能量

100

999

3331

635K

388K

1024K

200

1158

2855

722K

618K

1341K

300

1252

2493

775K

439K

1214K

400

1243

2452

764K

584K

1348K

500

1301

2518

804K

630K

1435K

600

1308

2578

806K

727K

1533K

(上图是光照为600时的平衡状态)

3.成熟值的改变:

光照:

100

固定植物的参数:

初始值:

500(个)*100下限:

40成熟:

160消耗:

5%吸收率:

60%

固定动物的参数:

初始值:

50(个)*600下限:

360消耗:

10%吸收率:

80%

成熟期

平衡动物数

平衡植物数

动物能量

植物能量

系统总能量

720

1003

3232

508K

404K

913K

840

1038

3272

588K

419K

1007K

960

999

3331

635K

388K

1024K

1080

883

4158

599K

1047K

1647K

1200

749

5053

558K

1715K

2274K

(动物细胞“吃不动”植物细胞的情况)

实验过程中发现:

当成熟期增加时,系统的运行速度剧烈减慢,需极长时间达到最终平衡。

五.结果分析:

1.随着动物细胞的增大,系统能量逐渐上升;动物数量下降,活动力下降,总能量增大;植物的数量上升,总能量增大。

2.随光线增加,各项指数呈缓慢上升趋势,但不明显。

3.这时随机性占了很大成分,一开始,动物数量急剧下降,在植物遍布后才开始上升。

若存留点较分散则可快速达平衡,若较集中就会有植物过度,而动物缓慢生长的情况。

由于时间有限,未能观察到底。

总体趋势是,能量逐渐向植物流动,系统能量增大。

动物数下降,植物数上升。

六.实验意义:

运用计算机模拟的方法,比较成功的模拟了简单的生态平衡过程,结果有其合理性,从中可以看出一些规律性。

七.有待改进之处:

随着计算机计算能力的不断提高,可以以更高的速度,模拟更大规模,更加复杂的环境。

如果使用C语言,可以用动态分配存储空间的改进算法,动态记录每个细胞的属性,提高程序的运行效率,也便于统计输出,不必再扫描所有点。

用牺牲空间的方法来节约时间。

八.展望:

可进一步扩展,增加生物数量种类,环境复杂程度。

通过对真实,或者接近真实的环境模拟,使人们在行动前做到心中有数,避免不必要的损失,对人的行动有一定指导意义。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 学科竞赛

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1