Netlogo while循环只有一次

时间:2015-10-21 00:18:43

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

我提前感谢你。

1 个答案:

答案 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-ofone-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程序适用于正在模拟的实际过程(例如,移动,从环境中获取资源,耗尽能量)。