O. *_*. L 5 loops while-loop netlogo
我在 Netlogo 中遇到了一个小问题,我几天前才开始研究它,我尝试与两个冒险家一起制作一个迷宫,我让他们从两个不同的起始位置到一个最终位置。我的代码的所有开头都工作正常,绘制了我的迷宫,但是当我想让冒险家走时,只有其中一个人朝正确的方向走并找到出口,而第二个甚至没有朝要求的方向走(东方)。我认为问题出在我的 GO 程序中,但我无法找到解决方案...这是我的代码,我在 Netlogo 5.2 上工作
to createaventurier
create-aventuriers pointsdepart
[set shape "person"
set color pink
set size 1
move-to one-of patches with [pcolor = green]
ask patch-here
[set pcolor blue]
set beta ycor
]
show count aventuriers
end
Run Code Online (Sandbox Code Playgroud)
程序在这里完成了它应该做的事情。
to go
set i 0
createaventurier
while [i < pointsdepart]
[show count aventuriers
ask one-of aventuriers
[set heading 90
execute]
set i i + 1
]
show count pas
end
Run Code Online (Sandbox Code Playgroud)
正是在这里,程序返回没有冒险家(没有代理或代理集),而观察者返回给我有两个冒险家(当我想要两个冒险家时)。我在代码的开头对它们进行了繁殖,并且在其他程序中使用了很多 while 循环,效果非常好。我对这个软件不太放心,我只是在寻找一个简单的解释,(我的英语也不太好)。如果您需要我的程序的其他部分,我可以将其发布,但我认为不需要它们。如果您需要更多信息,我也可以发布,但我希望我已经说得足够清楚了。
我提前谢谢你。
这是您的代码的简化版本。我已经将冒险家变成了乌龟,所以我不需要breeds为你的变量点出发硬编码数字 2。它工作得很好,因为总是有两只海龟。
to setup
clear-all
ask n-of 20 patches [set pcolor green]
reset-ticks
end
to make-agents
create-turtles 2
[ set shape "person"
set color pink
set size 1
move-to one-of patches with [pcolor = green]
ask patch-here [ set pcolor blue]
]
show count turtles
end
to go
let i 0
make-agents
while [ i < 2 ]
[ show count turtles
ask one-of turtles
[ set heading 90
forward 1
]
set i i + 1
]
show count turtles
end
Run Code Online (Sandbox Code Playgroud)
这表明问题出在您的execute函数中(我将其替换为forward 1)。
运行我的代码将演示一个逻辑问题。您正在循环(在本示例中两次)并ask one-of在每个循环中运行。one-of选择一只随机海龟,因此您可能会让它们每个运行一次执行代码,或者您可能每次都会选择相同的海龟。您很可能想要看起来更像这样的代码:
to go
make-agents ; note - should really be in setup, not go
ask turtles
[ set heading 90
forward 1
]
show count turtles
end
Run Code Online (Sandbox Code Playgroud)
另外,您通常会在程序tick结束时有一个命令go来提前时钟,然后go再次运行该程序,以便海龟继续移动等。这就是为什么我评论说创建冒险家的调用实际上应该在程序setup,否则每次时钟前进都会创建另外 2 个冒险家。
设置过程适用于模拟开始时需要到位的所有内容(例如创建冒险家、设置迷宫、为冒险家提供初始资源)。go 过程适用于正在模拟的实际过程(例如移动、从环境中获取资源、消耗能量)。