首页 > 解决方案 > Netlogo中简单汽车驾驶模型中墙壁碰撞程序中“NOBODY”的持续错误

问题描述

我正在 NetLogo 中开发一个简单的汽车驾驶模拟模型。但是,我面临一个主要和次要问题。该模型的过程如下:

必须有一辆在世界中心生成的“3 号车”。汽车只能在“up”、“down”、“to_right”和“to_left”四个方向上移动。当按下“开始”按钮时,汽车开始从中心向右移动。这样做时,在海龟级别起作用的按钮“上”、“下”、“to_right”和“to_left”指示汽车的方向。每按一次这些按钮,汽车的“速度”就会增加“加速度”的量,而“油箱”(汽油)会减少“减速箱”的量。汽车在矩形世界(“盒子”)中移动。当汽车与世界的边界或“墙”相撞时,它必须:首先,向相反的方向移动(向相反的“墙”方向移动,可以说“ 小问题是速度下降也不起作用。我想知道,是否有任何人有类似的问题并可以帮助我解决这些问题?先感谢您!小问题是速度下降也不起作用。我想知道,是否有任何人有类似的问题并可以帮助我解决这些问题?先感谢您!

我检查了我可以在 stackoverflow 中找到的与 NetLogo 模型中的“弹跳”问题相关的每个问题和答案,以及通过谷歌搜索在 stackoverflow 之外找到的所有问题和答案。我尝试了每个答案作为解决方案,但无济于事。作为我的解决方案实验的一部分,我编写了代码,当汽车到达“墙壁”时将其颜色设置为“黄色”。令我惊讶的是,它似乎有效,但不是汽车倒车的代码!此外,我尝试用“max-pxcor”和“max-pycor”替换“nobody”(在应该定义汽车倒车的代码块中),但它也不起作用。我还尝试增加“patch-ahead”的距离并减小汽车的“尺寸”,但结果是否定的。我承认我的代码中可能存在一些我没有注意到的缺陷,或者可能是某些代码没有被“清理”到足以通过程序运行。我的主要怀疑是定义汽车倒车的代码行可能存在问题,或者部分代码可能看起来与倒车完全无关,例如“标题”或“前进”或“大小”车。以下是我的代码。

globals [speed-limit tank]
turtles-own [speed dec-tank]

to setup

clear-all
set speed-limit 0.5
set tank 50
set-default-shape turtles "car"
draw-walls
create-turtles 1 [set color red
set size 3
set speed 0.1
set dec-tank 0.05
 ] 
reset-ticks

end

to draw-walls

ask patches with [abs (pxcor) = max-pxcor][set pcolor blue]
ask patches with [abs (pycor) = max-pycor][set pcolor blue]

end

to go

ask turtles [ 
set heading 90
fd speed

if abs [pxcor] of patch-ahead speed = max-pxcor [set heading (- heading)]
if abs [pycor] of patch-ahead speed = max-pycor [set heading (180 - heading)]]

tick

end

to up ;at turtle level

set heading 0
fd speed

if abs [pxcor] of patch-ahead speed = max-pxcor [set heading (- heading)]
if abs [pycor] of patch-ahead speed = max-pycor [set heading (180 - heading)]

set speed speed + acceleration
if speed > speed-limit [set speed speed-limit - random-float speed ]
set tank tank - dec-tank
if tank <= 0 [ set speed 0]

end

to down ;at turtle level
...

执行我的模型的总体结果是,汽车每次与“墙壁”碰撞时都必须向相反方向移动,并且“速度”必须下降到其初始水平。但是,我一直有错误“预期输入是乌龟代理集或补丁代理集或乌龟或补丁,但得到了 NOBODY。” 我发现,在 stackoverflow 中阅读其他答案时,当海龟移动到世界的“墙壁”之外时,会出现“NOBODY”错误。我想知道为什么它一直发生在我的情况下。

标签: simulationnetlogoagent-based-modelingdriving-directions

解决方案


您误解了错误 - 它告诉您没有代理可以获取价值。您需要告诉我们哪一行给了您错误,但我怀疑它是if abs [pxcor] of patch-ahead speed ...

如果那是正确的行,那么问题是没有补丁可以使用pxcor。这样想 - 假设汽车距离边缘 1 个补丁并且速度为 3。那么patch-ahead speed将是一个距离世界 2 个补丁的补丁。该补丁不存在,因此您找不到它的pxcor.

相反,您需要做的是找到当前补丁pxcor并添加速度以查看该总数是否在世界之外。更好的是,看看can-move?原始的。


推荐阅读