我在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
这个程序完成了它应该做的事情。
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
在这里,程序返回没有冒险者(没有代理人或代理人集),而观察者则告诉我有两个(当我想要两个冒险者时)。我在代码的开头编写了它们,并且在其他程序中使用了很多while循环,这非常有效。 我对这个软件并不放心,我只是在寻找一个简单的解释,(我在英语方面也不太好)。 如果你需要我的程序的其他部分我可以发布它,但我不认为他们是需要的。如果您需要更多信息,我也可以发布,但我希望我已经足够清楚了。
我提前感谢你。
答案 0 :(得分:1)
以下是代码的简化版本。我已经将冒险者变成了海龟,所以我不需要breeds
并为你的变量pointsdepart硬编码数字2。它的工作正常,总有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
这表明问题出在您的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
此外,您通常会在tick
程序结束时使用go
命令来提前计时,然后再次运行go
程序,以便海龟继续移动等这就是为什么我评论创建冒险者的呼吁应该是setup
程序,否则每次时钟前进都会创建另外两个冒险者。
设置程序适用于模拟开始时需要的所有内容(例如创建冒险者,设置迷宫,为冒险者提供初始资源)。 go程序适用于正在模拟的实际过程(例如,移动,从环境中获取资源,耗尽能量)。