loops - Netlogo while 循环仅一次

标签 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

在这里,程序做了它应该做的事情。
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 循环,效果很好。
我对软件不太放心,我只是在寻找一个简单的解释,(我的英语也不太好)。
如果您需要我的程序的其他部分,我可以发布它,但我认为不需要它们。如果您需要更多信息,我也可以发布,但我希望我已经足够清楚。

我提前谢谢你。

最佳答案

这是您的代码的简化版本。我已经把冒险者变成了海龟所以我不需要 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中。程序,否则每次时钟前进时都会创建另外 2 个冒险者。

设置过程适用于模拟开始时需要准备的所有内容(例如,创建冒险者、设置迷宫、为冒险者提供初始资源)。 go 程序用于正在模拟的实际过程(例如移动、从环境中获取资源、消耗能量)。

关于loops - Netlogo while 循环仅一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33248940/

相关文章:

c - 是否有等效于倒带功能的功能,但仅适用于一个 token ?

mysql - 无法通过数组循环将值传递给数据库

java - 用 Java 创建这个模式? (我的循环不起作用)

netlogo - 错误消息为 "import-world"

c# - 处理具有重复逻辑的冗余代码的最佳方法?

JavaScript:编写在短语上执行 Pig Latin 的函数;循环似乎给出了奇怪的输出

swift - && 和 ||在 while 循环中

javascript - 如何使用Js洗一副牌

netlogo - 查找给定方向上一定距离内是否存在其他海龟

java - 尝试从 bash 运行BehaviorSpace 实验时出错