《生态平衡建模实验.doc》由会员分享,可在线阅读,更多相关《生态平衡建模实验.doc(9页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、【精品文档】如有侵权,请联系网站删除,仅供学习与交流生态平衡建模实验.精品文档.生态平衡建模实验1、目标 通过此实验了解系统动力学的仿真方法,学会用所学的建模理论来对实际问题进行建模,并对实际问题进行分析。对此生态平衡系统进行仿真实验,改变不同的控制参数,分析实验的结果,得出系统保持生态平衡的条件,为决策者决策提供理论分析基础。2、 原理 通过此次实验了解系统动力学的仿真方法,学会用所学的建模理论来对实际问题进行建模,并对实际问题进行分析。对此生态平衡系统进行仿真实验,改变不同的控制参数,分析实验的结果,得出系统保持生态平衡的条件,为决策者决策提供理论分析基础。系统动力学(System Dyn
2、amics)是美国麻省理工学院J.W 福雷斯特(JayW Forrester)教授创立的一门新兴学科。它按照自身独特的方法论建立系统的动态模型,并借助于计算机进行仿真,以处理行为随时间变化的系统的问题。系统动力学首先强调系统性的观点,以及联系、发展、运动的观点,是研究复杂系统,诸如:社会、经济、环境、人口、生态平衡、产业发展等的有效工具。系统动力学的研究对象主要是社会经济系统。社会经济系统的范围十分广泛,凡是涉及到人类的社会活动和经济活动的系统都属于社会系统。诸如本文要研究的人口系统、资源系统、环境系统、经济系统、科技系统、能源系统,都属于社会经济系统。系统动力学的基础是通过实验方法认识系统的
3、行为,为管理决策者提供决策的依据。系统动力学仿真的基本步骤是:(1)明确建模目的一般来说,系统动力学对社会系统进行仿真实验的主要目的是认识和预测系统的结构和设计最佳参数,为制定合理的政策提供依据。这一步的工作包括观察系统、专家咨询、收集数据资料等,在涉及具体对象系统时,应根据其要求,仿真目的有所侧重。(2)确定系统边界系统动力学是将研究对象视为一个系统来处理的。系统是一个相对的概念,相对于所研究问题的实质和建模的目的而言。一旦所要研究的问题的实质和建模的目的已经确定,系统也就确定了,其边界应该是清晰的和唯一的。确定了系统边界之后,才能确定系统的内生变量和外生变量。内生变量是由系统内部反馈结构决
4、定的变量,外生变量是由影响环境因素确定的变量。系统动力学认为系统的行为是基于系统内部的种种因素而产生的,并假定系统的外部因素不给系统的行为以本质的影响,也不受系统内部因素的控制。(3)因果关系分析通过因果关系分析,要明确系统内部各要素之间的因果关系,并用表示因果关系的反馈回路来描述。所谓反馈是指:系统中某要素的增加,使受它影响的系统其他要素也发生变化(增加或者减少)。反馈环分为正反馈和负反馈,而正反馈环使系统表现为增长的行为,负反馈使系统表现为收敛的行为。系统动力学认为反馈环是构造系统的第一层次,其多少是系统复杂程度的标志。观察实际系统获得的信息首先用于这一层次。任意两个系统要素从因果关系来看
5、必然是正因果关系、负因果关系或无因果关系。由于决策是在一个或几个反馈回路中进行,而且由于各种回路的耦合,使系统的行为更加复杂化。(4) 建立系统动力学模型进行因果关系分析属于系统动力学仿真的定性分析,要对系统进行定量分析还必须借助流图与构造方程式建立系统模型。所谓建模就是要确定各反馈环中的流位和流率。流位是系统的状态变量,它的变化可用来描述系统的动态特征:而流率是流位的变化速率,它控制着流位,流率变量是一个决策函数(包括人的决策与机理决策的行为)。当确定了流位和流率变化之后,就可以得到流图与构造方程式。(5) 运行模型采用系统动力学仿真语言,将上一阶段建立的系统模型转换成系统仿真模型,并在计算
6、机上模拟运行,得出结果。(6) 结果分析通过对结果的分析,不仅可发现系统的构造错误和缺陷,而且还可以找出错误和缺陷的原因。根据结果分析情况,如果需要,就对模型进行修正,然后再做仿真试验,直至得到满意的结果为止。3、 理论分析生活在同一环境中的各类生物之间,进行着残酷的生存竞争,一类动物靠捕食另一类动物为生,而另一种动物则靠又多又快地繁衍后代和逃逸等手段求生存求发展,如此等等。设一封闭的海岛上,有两个种群,狐狸和啮齿动物。狐狸吃啮齿动物,啮齿动物吃草。青草是如此之丰富,以至啮齿动物无需为无食而发愁,啮齿动物饱食后大量繁殖。啮齿动物数量一多,狐狸容易得食,狐狸也增加。当狐狸数过多而吃掉大量啮齿动物
7、之后,狐狸进入饥饿状态而造成总数下降,这时啮齿动物们又相对安全一些。于是,啮齿动物总数回升。如此,狐狸和啮齿动物两种动物之数额相关地交替增减,无休止循环,出现生态动态平衡。本次实验不考虑种内竞争,只考虑物种间的斗争。4、 建模过程(1) 系统因果关系分析 本文中作以下假设:1 狐狸只吃成年啮齿动物,故幼年啮齿动物的死亡只与成年啮齿动物的死亡有关;2 考虑啮齿动物以种群生活,不考虑单独家庭,则幼年啮齿动物的死亡只与种群中成年啮齿动物单位时间的死亡量有关。3 猎人只捕杀成年狐狸;4 水草数量充足,故在一定限度内不用考虑啮齿动物因食物不足导致的死亡,只有当啮齿动物总量超过100000时,啮齿动物才会
8、受到水草的限制停止增长;实际上,对于一个封闭系统来说,啮齿动物的数量肯定会与水草总量有关,水草充足时,啮齿动物死亡率只受狐狸数量影响,水草不足时,啮齿动物会面临灭亡的危险,继而导致狐狸数量减少。但是,由于找不到合适的函数,来表达啮齿动物与水草之间的制约关系,故本文中假设水草充足。 幼年狐狸的数量取决于成年狐狸8 个月前月初的数量以及幼年狐狸原来的数量,同时还受成年啮齿动物数量的限制;成年狐狸数量受成年啮齿动物数量的限制(假设当狐狸需要的啮齿动物大于啮齿动物数量时系统崩溃),同时也受8 个月前幼年狐狸出生数量的影响,120 个月后猎人的捕杀会减少狐狸的数量;成年啮齿动物因作为狐狸的食物而减少,也
9、受三个月前幼年啮齿动物数量的影响;幼年啮齿动物的数量因成年啮齿动物的死亡而减少,也受之前出生的幼年啮齿动物的影响。系统的因果关系图如下图图1所示。图1:系统的因果关系图(2)变量定义:仿真时间(月数)month(120个月以内)超过120个月的部分 Month成年狐狸(初始)个数 Fox幼年狐狸(初始)个数 fox成年啮齿动物(初始)个数 Rodent幼年啮齿动物(初始)个数rodent幼年狐狸单位时间出生量 Birth_f幼年狐狸单位时间成长量 Growth_f成年狐狸单位时间死亡量 Death_F幼年狐狸单位时间死亡量 Death_f幼年啮齿动物单位时间出生量 Birth_r 幼年啮齿动物
10、单位时间成长量 Growth_r 成年啮齿动物单位时间死亡量 Death_R幼年啮齿动物单位时间死亡量 Death_r猎人的个数 Hunter猎人每月打死成年狐狸的数量是4(3)系统动力学模型 (a)系统流图(简化)图2:简化的系统流图(b)构造方程式组 系统动力学模型首先描述的是系统的状态即流位,“流位”是由系统内物质的流动情况所决定。系统的流位由输入流和输出流决定。该系统中定义的流位变量有五个:幼年狐狸fox、成年狐狸Fox、幼年啮齿动物rodent、成年啮齿动物Rodent,它们的流位方程分别为:幼年狐狸:fox= Birth_r - Death_F - Birth_f;成年狐狸:Fox
11、= Growth_f - Death_F;幼年啮齿动物:rodent= Birth_r - Death_F - Birth_f;成年啮齿动物:Rodent= Growth_r - Death_F;流率表达式则是一组代数方程。该系统中流率之间的关系可通过如下方程组表示:(考虑一个单位时间为1月)幼年啮齿动物单位时间出生量:Birth_r = floor(Rodent*0.95)幼年啮齿动物单位时间成长量:Growth_r_unit = Birth_r/3;成年啮齿动物单位时间死亡量:如果狐狸种群吃的啮齿动物量较少(假设狐狸只吃成年啮齿动物),即:10*fox+ 60*Fox Rodent,则De
12、ath_R = Rodent另外,由于环境中水草的数量的限制,当成年啮齿动物的数量超过一定的界限时,啮齿动物数量大量死亡,即: Rodent 100000时,Death_R = Rodent-100000;幼年狐狸单位时间出生量:Birth_f = floor(Fox*0.75);幼年狐狸单位时间成长量:Growth_f_unit = Birth_f/8;幼年狐狸单位时间死亡量:Death_f_unit = (10*fox + 60*Fox- Death_R)/40;成年狐狸单位时间死亡量:成年狐狸死亡的分为两个阶段,在猎人介入之前的120个月里,只与食物有关,此时:Death_F = (10
13、*fox + 60*Fox - Rodent)/30;猎人介入之后,死亡量还与猎人每月的捕杀量有关,此时:Death_F = (10*fox + 60*Fox- Rodent)/30 + 10*Hunter;(Hunter为猎人个数)(4)程序流程图图3 程序流程图(5)仿真源程序fox=400; %Existing Baby FoxesFox=200; %Existing Adult Foxesrodent=10000; %Exsiting Baby RodentsRodent=90000; %Exsiting Adult RodentsHunter=1; %Huntersfor i = 1
14、:month+Month% Fox and Rodent Influence Each Other if 10*fox(i) + 60*Fox(i) 100000 %Rodent exceeds 10W Death_R = Rodent(i)-100000; end end if i 120 Death_F = (10*fox(i) + 60*Fox(i) - Rodent(i)/30; else Death_F = (10*fox(i) + 60*Fox(i) - Rodent(i)/30 + 10*Hunter; end% if i Rodent(i)% Death_F = (10*fox
15、(i) + 60*Fox(i) - Rodent(i)/30;% else if i 120 & 8*10*fox(i) Rodent(i) 60*Fox(i)% Death_F = (8*10*fox(i) + 60*Fox(i) - Rodent(i)/30;% else if i Rodent(i)% Death_f = (8*10*fox(i) - Rodent(i)/30;% else if i 120% Death_F = (10*fox(i) + 60*Fox(i) - Rodent(i)/30 + 4*Hunter;% end% end% end% end Birth_r =
16、floor(Rodent(i)*0.95); Birth_f = floor(Fox(i)*0.75); Death_f_unit = (10*fox(i) + 60*Fox(i) - Death_R)/40; Growth_r_unit = Birth_r/3; Growth_f_unit = Birth_f/8;% Baby Fox Part if fox(i) + Birth_f - Death_f_unit - Growth_f_unit 0 fox(i+1) = fox(i) + Birth_f - Death_f_unit - Growth_f_unit; else fox(i+1
17、) = 0; end% Adult Fox Part if Fox(i) + Growth_f_unit - Death_F 0 Fox(i+1) = (Fox(i) + Growth_f_unit - Death_F)/(0.005*Fox(i)+1); else Fox(i+1) = 0; end% Baby Rodent Part if rodent(i) - Death_F - Birth_f 0 rodent(i+1) = rodent(i) - Death_F - Birth_f; else rodent(i+1) = 0; end% Adult Rodent Part if Ro
18、dent(i) + Growth_r_unit - Death_F 100000 Rodent(i+1) = Rodent(i) + Growth_r_unit - Death_F - 100000; else Rodent(i+1) = Rodent(i) + Growth_r_unit - Death_F; end endend% Figure Plotsubplot(2,2,1), plot(fox), axis(0,month+Month,0,3000), title(Baby Foxes), ylabel(Amount);grid onsubplot(2,2,2), plot(Fox
19、), axis(0,month+Month,0,2000), title(Adult Foxes);grid onsubplot(2,2,3), plot(rodent), axis(0,month+Month,0,100000), title(Baby Rodents),xlabel(Month),ylabel(Amount);grid onsubplot(2,2,4), plot(Rodent), axis(0,month+Month,0,100000), title(Adult Rodents),xlabel(Month);grid on5、 仿真结果分析按照上述程序,设初值如下:月数m
20、onth=120;Month=30;幼年狐狸数量fox=400;成年狐狸数量Fox=200;幼年啮齿动物数量rodent=10000;成年啮齿动物数量Rodent=10000; 猎人数量Hunter=1;该数据分配情况下,运行结果如下图4。很明显,仿真结果很不理想,系统在不到几年的时间内就崩溃,啮齿动物首先灭亡,然后狐狸因食物不足继而灭亡。分析原因可能是啮齿动物数量太少,不足以维持狐狸的生存。图4鉴于上述结果,我们增加成年啮齿动物数量,对数据做如下改动:幼年狐狸数量fox=400;成年狐狸数量Fox=200;幼年啮齿动物数量rodent=10000;成年啮齿动物数量Rodent=90000;
21、猎人数量Hunter=1;仿真结果如下图5:图5由上图可知,系统处于一个动态平衡状态,但总是在由于当成年啮齿动物很多时时,啮齿动物大量死亡,引起很大波动。假设狐狸和啮齿动物都比较少的时候,又会是什么情况呢?设置数据进行仿真,结果如下图6所示:幼年狐狸数量fox=50;成年狐狸数量Fox=15;幼年啮齿动物数量rodent=10000;成年啮齿动物数量Rodent=5000; 猎人数量Hunter=1;该数据分配情况下,运行结果如下图6:图6由上图可知,即使初始时动物的数量比较少,但随着时间的推移,啮齿动物数量还是会增加一定的数量,从而引起大的波动。此外,若想观察120个月之后,猎人加入后对系统
22、造成的影响,可以通过在保持猎人每月射杀的狐狸数量不变的情况下,改变程序中猎人的数量来探讨。设置数据额如下:幼年狐狸数量fox=50;成年狐狸数量Fox=15;幼年啮齿动物数量rodent=10000;成年啮齿动物数量Rodent=5000 ; 猎人数量Hunter=5;运行结果如下图7。图7显然,当增加猎人后,狐狸数目很快下降,直至全部被猎人打死。6、 提供几种情况下的对比 系统由开始的不稳定系统Error! No bookmark name given.过渡到稳定系统的情况比较(图4、5):图4系统崩溃,当增加啮齿动物数量,如图5所示系统达到稳定状态。由图可推测到应该是程序中啮齿动物初始数量
23、不合适导致。经更改后,系统稳定。这情况说明如果系统中啮齿动物由于某种数量较少时,则会导致整个系统崩溃,所有物种灭绝,因此初始情况下,啮齿动物要远大于狐狸个数。 图5与图6比较:图5初始的时候狐狸个数和啮齿动物数量都比较多,当二者都减少的时候,随着时间的推移,系统也能够达到一种动态平衡状态,但这两种状态成年啮齿动物的波动都很大。 图6和图7比较:其他初始数据不变的情况下,当增加猎人的数量时,狐狸的数量就会减少,直至灭亡。7、 感受及建议通过文中几种情况下的对比,可知一个系统要想保持稳定,各个物种的数量必须保持合理的制约关系,一个物种灭亡必然会导致另外一个物种的灭亡,从而导致系统崩溃。另外,人类的介入会在很大的程序上影响环境中物种的数量,如果人类滥捕滥杀,势必会对环境中的物种造成不可挽回的影响。当系统中啮齿动物过多,导致水草减少时,可以适当减少猎人的数量或者减少猎人每月射杀的狐狸的数量,来增加狐狸种群的数量,进而减少啮齿动物的数量,防止沙漠的出现。反之,当狐狸越来越多,可适当增加猎人的数量来限制。以此来维持一个系统的稳定。