南邮_系统工程课内实验报告课内实验报告
课 程 名: 系统工程
任课教师:
专 业: 信息管理与信息系统
学 号:
姓 名:
二○ 一四 至二○ 一五 年度 第 1 学期
南京邮电大学 管理学院
《 系统工程》课程实验报告
实验内容及基本要求:
实验项目名称:Ants
实验类型:设计
每组人数: 1
实验内容及要求:
1) 了解Netlogo编程语言的特点和基本语法。
2) 完成...
课内实验
课 程 名: 系统工程
任课教师:
专 业: 信息管理与信息系统
学 号:
姓 名:
二○ 一四 至二○ 一五 年度 第 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,继续寻找到食物源,判断食物源食物量,在沿着化学气味前进的过程中,该蚂蚁会加强化学物质的强度,使得化学物质的存在时间加长,其他蚂蚁也能够通过该气味寻找到食物源,当越来越多的蚂蚁参与到这条路线中来,将会达到所有蚂蚁共同搬运的效果。
成绩评定:
该生对待本次实验的态度 □认真 □良好 □一般 □比较差。
本次实验的过程情况 □很好 □较好 □一般 □比较差
对实验结果的分析 □很好 □良好 □一般 □比较差
文档书写符合规范程度 □很好 □良好 □一般 □比较差
综合意见:
成绩
指导教师签名
日期
本文档为【南邮_系统工程课内实验报告】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。