Netlogo上的寻路——机器人割草机模拟项目
我试图在Netlogo上模拟机器人割草机。我的目标是:Netlogo上的寻路——机器人割草机模拟项目,netlogo,path-finding,Netlogo,Path Finding,我试图在Netlogo上模拟机器人割草机。我的目标是: 它随机地在绿色斑块(草)上进行切割(绿色变为灰色) 当电池电量不足时,它会找到回家的路给自己充电 它不会离开由红色斑块缩小的定义周界(花园),并绕过用户通过鼠标单击放置的障碍物 现在,我已经为我的两个首要目标准备了一个工作代码(感谢Luke!) 然而,在进入检查死亡步骤后,让割草机尊重我不使用红色补丁的愿望变得越来越复杂。 事实上,它似乎没有考虑到我以前在移动汽车步骤中的命令 有人告诉我,如果我想让它在墙壁周围导航,它实际上会非常复杂,
- 它随机地在绿色斑块(草)上进行切割(绿色变为灰色)
- 当电池电量不足时,它会找到回家的路给自己充电
- 它不会离开由红色斑块缩小的定义周界(花园),并绕过用户通过鼠标单击放置的障碍物
检查死亡
步骤后,让割草机尊重我不使用红色补丁的愿望变得越来越复杂。
事实上,它似乎没有考虑到我以前在移动汽车步骤中的命令
有人告诉我,如果我想让它在墙壁周围导航,它实际上会非常复杂,需要某种寻路
通过我的研究,我发现了一些关于所谓A*的文档。
我很理解算法的概念,但是在Netlogo上翻译它对我来说非常困难。到目前为止,我在没有课程的情况下所做的是相当基本的,基于现有的规范,并遵循我得到的建议。但从现在起,为我的代码修改A*会让我头发掉光。我希望通过理解如何在代码中实现寻路,最终能够理解Netlogo的复杂性。
我知道有些人不想详细解释它是如何工作的。我只是希望找到一个足够有耐心的人,一步一步地向我解释A*是如何工作的
非常感谢
这是我的密码:
breed [cars car]
cars-own [target charging? charge-time car-energy]
breed [houses house]
to setup
clear-all
setup-patches
setup-cars
setup-house
reset-ticks
end
to setup-patches
ask patches [set pcolor green] ;; Setup grass patches
ask patches with [
pxcor = max-pxcor or
pxcor = min-pxcor or
pycor = max-pycor or
pycor = min-pycor ] [
set pcolor red ;; Setup garden perimeter
]
end
to setup-cars
set-default-shape cars "car"
create-cars 1 [
setxy 8 8 ;; Place the lawn mower near the house
set target one-of houses
set charging? false
set car-energy energy
]
end
to setup-house
set-default-shape houses "house"
ask patch 7 8 [sprout-houses 1]
end
to place-walls
if mouse-down? [
ask patch mouse-xcor mouse-ycor [ set pcolor red ]
display ;; Permits the user to place red patches as new obstacles in garden.
]
end
to go
move-cars
cut-grass
check-death ;; Verify % battery.
tick
end
to move-cars
ask cars [
ifelse charging? [
set charge-time charge-time + 1 ;; Counts the time spent to charge
if charge-time > 15 [ ;; Defined charge time here
set car-energy 1000
set charging? false
set charge-time 0
]
] [
ifelse [pcolor] of patch-ahead 1 = red
[ lt random-float 360 ] ;; See a red patch ahead : turn left randomly
[ fd 1 ] ;; Otherwise, its safe to go foward.
set car-energy car-energy - 1
]
]
end
to cut-grass
ask cars [
if pcolor = green [ ;; cut grass (green patches go grey)
set pcolor gray
]
]
end
to check-death ;; checking battery level
ask cars [
ifelse car-energy >= 300
[ set label "Energy ok" ]
[ set label "Low Energy, returning to base"
set target min-one-of houses [distance myself]
face target
ifelse distance target < 1
[ move-to target
set charging? true
set label "Charging"
]
[ fd 1 ]
]
]
end
品种[汽车]
汽车自有[目标充电?充电时间汽车能量]
繁殖[房屋]
设置
清除所有
安装补丁
设置车辆
安置所
重置滴答声
结束
设置修补程序
询问补丁[设置颜色为绿色];;设置草地补丁
问补丁[
pxcor=最大pxcor或
pxcor=最小pxcor或
pycor=最大pycor或
pycor=最小pycor][
设置P颜色红色;;设置花园周长
]
结束
安装汽车
将默认形状汽车设置为“汽车”
创造汽车1[
把割草机放在房子附近
把目标定在一栋房子上
设置充电?错误
设置汽车能量
]
结束
安家
将默认形状房屋设置为“房屋”
询问补丁7 8[发芽屋1]
结束
砌墙
如果鼠标落下?[
询问补丁鼠标xcor鼠标ycor[设置颜色为红色]
显示;;允许用户在花园中放置红色斑块作为新障碍物。
]
结束
外带
搬家
割草
制止死亡;;验证电池电量的百分比。
打上钩
结束
搬家
问车[
还有别的收费吗[
设置充电时间充电时间+1;;统计充电所用的时间
如果充电时间>15[;;此处定义充电时间
将汽车能量设置为1000
设置充电?错误
设置充电时间为0
]
] [
前方补丁的ifelse[pcolor]1=红色
[lt random float 360];;看到前面的红色补丁:随机左转
[fd 1];;否则,向前走是安全的。
设置汽车能源汽车能源-1
]
]
结束
割草
问车[
如果pcolor=绿色[;;割草(绿色斑块变为灰色)
设置颜色为灰色
]
]
结束
制止死亡;;检查电池电量
问车[
ifelse汽车能量>=300
[设置标签“能量正常”]
[设置标签“低能量,返回基地”
设定目标最小一间房子[距离我自己]
面对目标
ifelse距离目标<1
[移动到目标
设置充电?正确
设置标签“充电”
]
[fd 1]
]
]
结束
相关:相关: