Netlogo while 只循环一次
Netlogo while loop only one time
我在 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
程序 return 在这里没有冒险者(没有代理或代理集),而观察者 return 告诉我有两个(当我想要两个冒险者时) .我在代码的开头对它们进行了 Breed-ed,并且在其他过程中使用了很多 while 循环,效果很好。
我对软件不放心,我只是在寻找一个简单的解释,(我的英语也不太好)。
如果您需要我程序的其他部分,我可以 post,但我认为不需要它们。如果您需要更多信息,我也可以 post,但我希望我已经足够清楚了。
先谢谢你了。
这是您的代码的简化版本。我已经将冒险家变成了海龟,所以我不需要 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
)。
运行 我的代码将演示一个逻辑问题。你正在循环(在这个例子中两次)并且在每个循环中 运行ning 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
此外,您通常会在 go
程序结束时有一个 tick
命令来提前时钟,然后 go
程序再次 运行 所以海龟继续移动等。这就是为什么我评论说创建冒险家的调用应该真正在 setup
过程中,否则每次时钟前进时都会创建另外 2 个冒险家。
设置程序适用于开始模拟所需的一切(例如创建冒险者、设置迷宫、为冒险者提供初始资源)。 go过程是针对正在模拟的实际过程(例如移动,从环境中获取资源,消耗能量)。
我在 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
程序 return 在这里没有冒险者(没有代理或代理集),而观察者 return 告诉我有两个(当我想要两个冒险者时) .我在代码的开头对它们进行了 Breed-ed,并且在其他过程中使用了很多 while 循环,效果很好。 我对软件不放心,我只是在寻找一个简单的解释,(我的英语也不太好)。 如果您需要我程序的其他部分,我可以 post,但我认为不需要它们。如果您需要更多信息,我也可以 post,但我希望我已经足够清楚了。
先谢谢你了。
这是您的代码的简化版本。我已经将冒险家变成了海龟,所以我不需要 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
)。
运行 我的代码将演示一个逻辑问题。你正在循环(在这个例子中两次)并且在每个循环中 运行ning 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
此外,您通常会在 go
程序结束时有一个 tick
命令来提前时钟,然后 go
程序再次 运行 所以海龟继续移动等。这就是为什么我评论说创建冒险家的调用应该真正在 setup
过程中,否则每次时钟前进时都会创建另外 2 个冒险家。
设置程序适用于开始模拟所需的一切(例如创建冒险者、设置迷宫、为冒险者提供初始资源)。 go过程是针对正在模拟的实际过程(例如移动,从环境中获取资源,消耗能量)。