Netlogo 让一只乌龟停下来,然后去追赶一个特殊的事件——机器人割草机模拟项目
我试图在Netlogo上模拟机器人割草机。我的第一个目标是在电池电量不足时找到回家的路给自己充电 现在已经完成了(谢谢卢克!),但我不知道如何让割草机在到达房子时停止(它一直在移动两块补丁)。因此,我的能量滑块会无限地低于零。 我首先想到添加一个事件“充电”,并将其放在“checkdeath”之后,以配合if实例。但是:Netlogo 让一只乌龟停下来,然后去追赶一个特殊的事件——机器人割草机模拟项目,netlogo,Netlogo,我试图在Netlogo上模拟机器人割草机。我的第一个目标是在电池电量不足时找到回家的路给自己充电 现在已经完成了(谢谢卢克!),但我不知道如何让割草机在到达房子时停止(它一直在移动两块补丁)。因此,我的能量滑块会无限地低于零。 我首先想到添加一个事件“充电”,并将其放在“checkdeath”之后,以配合if实例。但是: 我怎么说,若汽车在特定的补丁:停止并获得能源?我是否应该为房子使用一种特殊的补丁颜色,然后在汽车使用蓝色补丁时进行编码 在to go元素末尾添加充电事件是否可能会产生冲突,因
- 我怎么说,若汽车在特定的补丁:停止并获得能源?我是否应该为房子使用一种特殊的补丁颜色,然后在汽车使用蓝色补丁时进行编码李>
- 在to go元素末尾添加充电事件是否可能会产生冲突,因为充电仅在电池电量不足时进行?控制死亡是一个解决办法吗
breed [cars car]
cars-own [target]
breed [houses house]
to setup
clear-all
setup-patches
setup-cars ;;represent lawn mower
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 the borders of the garden
]
end
to setup-cars
create-cars 1 [
setxy 8 8
set target one-of houses
]
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
]
end
to go
move-cars
cut-grass
check-death ;; Check % battery.
tick
end
to move-cars
ask cars
[
ifelse [pcolor] of patch-ahead 1 = red
[ lt random-float 360 ] ;; see red patch ahead turn left.
[ fd 1 ] ;; otherwise it is ok to go.
set energy energy - 1
]
tick
end
to cut-grass
ask cars [
if pcolor = green [
set pcolor gray
]
]
end
to check-death ;; when low energy lawn mower will go back to house
ask cars [
ifelse energy >= 150
[ 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 ]
[ fd 1 ]
]
]
end
品种[汽车]
汽车自有[目标]
繁殖[房屋]
设置
清除所有
安装补丁
设置车辆;;代表割草机
安置所
重置滴答声
结束
设置修补程序
询问补丁[设置颜色为绿色];;设置草地补丁
问补丁[
pxcor=最大pxcor或
pxcor=最小pxcor或
pycor=最大pycor或
pycor=最小pycor][
设置P颜色为红色;;设置花园的边界
]
结束
安装汽车
创造汽车1[
setxy 8
把目标定在一栋房子上
]
结束
安家
将默认形状房屋设置为“房屋”
询问补丁7 8[发芽屋1]
结束
砌墙
如果鼠标落下?[
询问补丁鼠标xcor鼠标ycor[设置颜色为红色]
显示
]
结束
外带
搬家
割草
制止死亡;;检查电池电量百分比。
打上钩
结束
搬家
问车
[
前方补丁的ifelse[pcolor]1=红色
[lt random float 360];;看到前面的红色补丁向左拐。
[fd 1];;否则就可以走了。
设置能量-1
]
打上钩
结束
割草
问车[
如果pcolor=绿色[
设置颜色为灰色
]
]
结束
制止死亡;;当低能量的割草机回到家里
问车[
ifelse能量>=150
[设置标签“能量正常”]
[设置标签“低能量,返回基地”
设定目标最小一间房子[距离我自己]
面对目标
ifelse距离目标<1
[移动到目标]
[fd 1]
]
]
结束
您可以将逻辑标志(如充电?
)与计数器(如充电时间
)结合使用来执行此操作。尝试修改您的汽车自己的定义,如下所示:
cars-own [target charging? charge-time]
和设置车辆
如下:
to setup-cars
create-cars 1 [
setxy 8 8
set target one-of houses
set charging? false
]
end
然后,您可以让割草机根据充电?
是否正确来执行不同的操作。尝试修改您的移动车辆
和检查死亡
以适应这些更改(旁注-您在go
和移动车辆
中都有一个勾号):
移动车辆
询问汽车[
还有别的收费吗[
设置充电时间充电时间+1
如果充电时间>14[
设置能量200
设置充电?错误
设置充电时间为0
]
] [
前方补丁的ifelse[pcolor]1=红色
[lt random float 360];;看到前面的红色补丁向左拐。
[fd 1];;否则就可以走了。
设置能量-1
]
]
结束
制止死亡;;当低能量的割草机回到家里
问车[
ifelse能量>=150
[设置标签“能量正常”]
[设置标签“低能量,返回基地”
设定目标最小一间房子[距离我自己]
面对目标
ifelse距离目标<1
[移动到目标
设置充电?正确
]
[fd 1]
]
]
结束
我建议您更改energy
海龟变量,如car energy
,以便海龟值独立于滑块。这意味着你可以有多台割草机,它们可以在充电后将能量水平重置为滑块设置!您只需要包含一行,如
设置汽车能量
在您的设置中,汽车
(然后进行修改,使汽车程序中的能量
变为汽车能量
)。非常感谢!我很高兴你的帮助!每件事都很有魅力。但是,对于你最后的建议,我不断得到一个“未定义任何命名能量”的错误,在设置汽车能量的行中,即使在更改了所有内容之后。你知道怎么回事吗?听起来你把界面上的energy
滑块改成了carenergy
-对不起,我应该澄清一下。您可以保持滑块不变,然后还包括一个名为carenergy
的cars own
变量。有道理吗?我明白了!工作起来很有魅力。我试图制作一个显示器,计算汽车的能量来读取它,但是我不知道在记者的案例中应该写什么<代码>计算汽车能量
和显示汽车能量
不起作用。可能尝试其中一辆汽车的[汽车能量]
?
to move-cars
ask cars [
ifelse charging? [
set charge-time charge-time + 1
if charge-time > 14 [
set energy 200
set charging? false
set charge-time 0
]
] [
ifelse [pcolor] of patch-ahead 1 = red
[ lt random-float 360 ] ;; see red patch ahead turn left.
[ fd 1 ] ;; otherwise it is ok to go.
set energy energy - 1
]
]
end
to check-death ;; when low energy lawn mower will go back to house
ask cars [
ifelse energy >= 150
[ 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
]
[ fd 1 ]
]
]
end