simulation - 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”错误。我想知道为什么它一直发生在我的情况下。
解决方案
您误解了错误 - 它告诉您没有代理可以获取价值。您需要告诉我们哪一行给了您错误,但我怀疑它是if abs [pxcor] of patch-ahead speed ...
。
如果那是正确的行,那么问题是没有补丁可以使用pxcor
。这样想 - 假设汽车距离边缘 1 个补丁并且速度为 3。那么patch-ahead speed
将是一个距离世界 2 个补丁的补丁。该补丁不存在,因此您找不到它的pxcor
.
相反,您需要做的是找到当前补丁pxcor
并添加速度以查看该总数是否在世界之外。更好的是,看看can-move?
原始的。
推荐阅读
- prolog - Prolog: How to convert hexadecimal value to integer in Prolog
- sql - 为什么我在更新级联上使用时出现错误?
- php - Is IonCube 7.2 backwards compatible with IonCube 5.6 PHP code?
- azure - 在使用 Azure 以太坊 PoA 解决方案模板设置的以太坊网络上获取初始以太币
- sql - 在 sql server 2008 中将列名和值转换为行名和行值
- javascript - Jquery: each button click, in the same class must to replace a content of div stored in vars depends on attr value
- c# - Get all Process handles in C#
- python - How do I patch object imported by another python file?
- javascript - Javascript 中的递归不起作用(CodeWars 问题)
- ajax - 如何在 JSP 中停止 Ajax 上的重定向