课内实验报告
课 程 名:        系统工程         任课教师:
专    业:  信息管理与信息系统     学    号:           姓    名:
二○ 一四 至二○ 一五 年度 第 1 学期
南京邮电大学  管理学院
《 系统工程》课程实验报告 实验内容及基本要求: 实验项目名称:Ants  实验类型:设计 每组人数: 1 实验内容及要求:  1) 了解Netlogo编程语言的特点和基本语法。 2) 完成Netlogo基本Model的语句解析和仿真流程分析。      学号尾数为1号:Biology目录下的AIDS;2号:Ants                3号:DaisyWorld;4号:Fireflies                5号:Heatbugs;6号:Moths                7号:Virus;8号:Social Science目录下的Traffic Grid                9号:Voting;10号:Network目录下的Team Assembly 实验过程与结果: 1) 语句解析: patches-own [   chemical            蚂蚁分泌的化学物含量   food                食物堆中的食物量   nest?                蚁巢   nest-scent          接近蚁巢的情况   food-source-number   食物来源的食物量 ] 下面的是详细的程序 to setup   clear-all   set-default-shape turtles \"bug\"   crt population          [ set size 2         设置大小为2     set color red  ]   蚂蚁如果没有携带食物的话就是红色的   setup-patches         reset-ticks end  to setup-patches   ask patches   [ setup-nest      设置蚁巢     setup-food    设置食物     recolor-patch ]    蚂蚁颜色的设置 end  to setup-nest            设置蚁巢的具体程序                      如果在蚁巢里,变量变为1,否则就是0   set nest? (distancexy 0 0) < 5   ;; spread a nest-scent over the whole world – 在蚁巢旁边更加强烈   set nest-scent 200 - distancexy 0 0      end  to setup-food  设置食物堆   ;; setup food source one on the right设置食物堆1号在右边的食物堆   if (distancexy (0.6 * max-pxcor) 0) < 5  设置食物堆1号  ;; setup food source two on the lower-left设置食物堆2在左下角   if (distancexy (-0.6 * max-pxcor) (-0.6 * max-pycor)) < 5  设置食物堆2号  ;; setup food source three on the upper-left设置食物堆3在左上方   if (distancexy (-0.8 * max-pxcor) (0.8 * max-pycor)) < 5 设定食物堆3号   ;; set \"food\" at sources to either 1 or 2, randomly   if food-source-number > 0   [ set food one-of [1 2] ] end  to recolor-patch  给蚂蚁颜色的设定函数   设置蚁巢和食物源的颜色   ifelse nest?   [ set pcolor violet ]   将蚁巢设置成紫色   [ ifelse food > 0        如果食物数量大于0的话     [ if food-source-number = 1 [ set pcolor cyan ]  食物堆1号,设置成青色       if food-source-number = 2 [ set pcolor sky ] 食物堆2号,设置成天空色       if food-source-number = 3 [ set pcolor blue ] ] 食物堆3号,设置成蓝色     ;; scale color to show chemical concentration     [ set pcolor scale-color green chemical 0.1 5 ] ] 将含量为0.15的化学物设置为绿色 end  ;;;;;;;;;;;;;;;;;;;;; ;;; Go procedures ;;;           运行的程序段 ;;;;;;;;;;;;;;;;;;;;;  to go  ;; forever button        ask turtles        [ if who >= ticks [ stop ] ;; delay initial departure     ifelse color = red         如果颜色为红色     [ look-for-food  ]       运行寻找食物的函数     [ return-to-nest ]         运行返回蚁巢的函数     Wiggle                    随意走动         fd 1 ]   diffuse chemical (diffusion-rate / 100)     弥散的化学物质=扩散/100   ask patches   [ set chemical chemical * (100 - evaporation-rate) / 100 挥发后的化学物质     recolor-patch ]   tick end  to return-to-nest                 回到蚁巢之后的运行程序具体函数代码   ifelse nest?   [ ;; drop food and head out again   放下食物,头伸出来探测     set color red                 设置颜色为红色,表示没有携带食物     rt 180 ]                     转向180度   [ set chemical chemical + 60      将化学物质增加60     uphill-nest-scent ]             运行uphill-nest-scent函数 end  to look-for-food           寻找食物的程序段   if food > 0   [ set color orange + 1       找到食物后将身上的颜色中橙色度+1     set food food - 1        减少食物堆中的一份食物     rt 180                  蚂蚁的身体旋转180度     stop ]                  结束 走化学位置气味最大的方向   if (chemical >= 0.05) and (chemical < 2)  如果化学物质的含量在0.05到2之间   [ uphill-chemical ]                    那么就执行这个uphill-chemical算法 end  ;; sniff left and right, and go where the strongest smell is闻左边和右边的气味,选择最强的气味作为方向 to uphill-chemical                  uphill-chemical的具体算法程序体   let scent-ahead chemical-scent-at-angle   0  0度方向的化学物质含量是前方闻到的气味量   let scent-right chemical-scent-at-angle  45   45度角的化学物质的含量就是右边闻到的气味量   let scent-left  chemical-scent-at-angle -45   -45度角的化学物质量就是左边闻到的气味量   if (scent-right > scent-ahead) or (scent-left > scent-ahead) 如果左边的气味大于前面的或者右边的气味大于前面的,那么   [ ifelse scent-right > scent-left        如果右边的气味大于左边的气味 向右旋转45度     [ rt 45 ]     [ lt 45 ] ]     否则向左旋转45度 end 闻左边和右边的气味,选择最强气味的方向作为前进的方向 to uphill-nest-scent                    uphill-nest-scent的具体算法   let scent-ahead nest-scent-at-angle   0  采取0角度的气味作为前方气味   let scent-right nest-scent-at-angle  45   使右边45度角度气味作为右边的气味   let scent-left  nest-scent-at-angle -45   使得左边45度的气味作为左边的气味   if (scent-right > scent-ahead) or (scent-left > scent-ahead)如果右边的气味大于前面的气味或者左边的气味大于前面的气味   [ ifelse scent-right > scent-left     如果右边的气味大于左边的气味     [ rt 45 ]       右转45度     [ lt 45 ] ]      否则左转45度 end  to wiggle         rt random 40    随机右转40度   lt random 40    随机左转40度   if not can-move? 1 [ rt 180 ]  如果不可以走了,就右转180度 end  to-report nest-scent-at-angle [angle]       let p patch-right-and-ahead angle 1     if p = nobody [ report 0 ] 如果没有,就使得report置0   report [nest-scent] of p         否则将nest-scent输出 end  to-report chemical-scent-at-angle [angle]   let p patch-right-and-ahead angle 1     if p = nobody [ report 0 ]   report [chemical] of p end   2) 基本算法流程分析: 程序先是设置食物堆中的食物量,蚁巢,接近蚁巢的情况,食物来源的食物量,蚂蚁分泌的化学物含量这些变量。 当一只蚂蚁发现一块食物,它携带食物回巢,分泌出化学物质。当其他的蚂蚁“闻”到化学物质,他们沿着化学物质朝食物前进。随着越来越多的蚂蚁搬运食物回巢,他们加强了化学物质的强度。 蚂蚁在路径上前进时会根据前边走过的蚂蚁所留下的分泌物选择其要走的路径。其选择一条路径的概率与该路径上分泌物的强度成正比。因此,由大量蚂蚁组成的群体的集体行为实际上构成一种学习信息的正反馈现象:某一条路径走过的蚂蚁越多,后面的蚂蚁选择该路径的可能性就越大。蚂蚁的个体间通过这种信息的交流寻求通向食物的最短路径。 蚂蚁只应对化学水平0.05和2之间的化学物质。下限是用来表示蚂蚁并不是无限敏感。 设置三个食物来源的食物量,蚂蚁出了蚁巢,运行wiggle程序,这个是使得蚂蚁分开到处跑动寻找食物源look-for-food,蚂蚁身上是红色的代表其不携带食物,遇到食物源后,判断食物源食物是否大于0,如果大于0就携带食物,并且身上显示橘黄色,并分泌化学物质,旋转180度回蚁巢。 回到蚁巢后放下食物,运行的是 return-to-nest程序,重新置红色,表示未携带食物,期间,化学物质扩散挥发,蚂蚁沿着左边前面右边三个方向中气味较重的方向前进uphill-chemical,继续寻找到食物源,判断食物源食物量,在沿着化学气味前进的过程中,该蚂蚁会加强化学物质的强度,使得化学物质的存在时间加长,其他蚂蚁也能够通过该气味寻找到食物源,当越来越多的蚂蚁参与到这条路线中来,将会达到所有蚂蚁共同搬运的效果。 成绩评定: 该生对待本次实验的态度            □认真 □良好 □一般   □比较差。 本次实验的过程情况                □很好 □较好 □一般   □比较差 对实验结果的分析                  □很好 □良好 □一般   □比较差 文档书写符合规范程度              □很好 □良好 □一般   □比较差 综合意见:  成绩  指导教师签名   日期