移动海龟并创造一群目标

时间:2014-07-05 16:41:03

标签: netlogo

to setup
  ca
  reset-ticks
  ask patches [
    set inside? (abs pycor < 10 and abs pxcor < 10)       
    set exit? false
    ask patch 11 0 [ set pcolor lime set exit? true]
  ]

  repeat initial-population [ ; start condition turtles with any other turtles on neighbors 
    ask one-of patches with [
      inside? and (not any? other turtles-here) and (not any? turtles-on neighbors)] [
      sprout 1 [
        set color blue
        set size 1
      ]]]  
end

to go  
  tick
  define-neighbors-radius-2
  move  
end

to define-neighbors-radius-2
   ask turtles [     
    set neighbors-ahead2 patches at-points [[2 1] [2 0] [2 -1]] 
    set neighbors-for-y-up2 patches at-points [[2 0] [2 -1] [1 -2] [0 -2] [-1 -2]] with [inside?]
    set neighbors-for-y-down2 patches at-points [[-1 2] [0 2] [1 2] [2 1] [2 0]] with [inside?]  
  ]
end

to move  
;; my intent to move turtles to exit without their neighbors are occupied by other turtles,          ;;that is the 8 patches around turtles are empty until exit?  

ask turtles[
    ifelse inside? [
      if ycor = 0 [    ;strategy to turtles with in front exit
        ifelse exit? [
          set heading 90 
          fd .5
        ]
        [
          facexy 11 0
          if (not any? turtles-on neighbors) and (not any? turtles-on neighbors-ahead2) [
            fd .5
          ]
        ]
      ]
      if ycor > 0 [     ; strategy to turtles occupied "bottom-side" of inside?
        facexy 11 0
        if (not any? turtles-on neighbors) and (not any? turtles-on neighbors-for-y-up2) [
          fd .5
        ]
      ]
      if ycor < 0 [      ; strategy to turtles occupied "down-side" of inside?
        facexy 11 0
        if (not any? turtles-on neighbors) and (not any? turtles-on neighbors-for-y-down2) [
          fd .5
        ]
      ]
    ]
    [
      set heading 90 
      fd .5
    ]
  ]  
end

我试图移动海龟退出,但不是所有海龟都移动,为什么? 另外,乌龟必须用ycor = 0出去,那是斜方向不允许因为邻居会占用补丁不在里面! 不能公开这个问题,因为“看起来我的帖子大多是代码”,所以谈谈我的生活: 严重的是我的目的是在出口前创建一个人群并设置一些规则来延迟龟流出口,为此我需要空的邻居来显示代理之间的交互。 (也接受一些建议设置这种互动)但此刻龟到达退出! 谢谢

1 个答案:

答案 0 :(得分:0)

此代码存在的一个问题是,如果您只有三个if,则每次只需要其中一个运行,但可能会触发多个if ycor = 0 [ ...commands #1... ] if ycor > 0 [ ...commands #2... ] if ycor < 0 [ ...commands #3... ] 。你有:

ycor

但是可能会通过命令#1或#2更改海龟的ifelse ycor = 0 [ ...commands #1... ] [ ifelse ycor > 0 [ ...commands #2... ] [ ...commands #3... ] ] 。因此,#1和#2可能都会运行,或者#2和#3都可能运行,也可能是其他组合。我假设你打算每只乌龟每次只能移动一次,所以我建议你把它重写为:

reset-ticks

此代码中应修复的其他内容:

  • setup应该在tick的末尾,而不是在开头附近。它告诉NetLogo设置完成。
  • go应该在print的末尾,而不是在开头附近。它告诉NetLogo一个勾号已经完成。

我不知道我指出的其中任何一个问题是否实际上导致了您所看到的意外行为。也许通过阅读代码,这个错误并不明显。在这种情况下,您有两种可能的行动方案:

1)备份。丢弃这些损坏的代码并返回到模型的最新版本,该版本仅包含已经验证可以正常工作的代码。然后再试一次,但这一次,不要一次添加这么多新代码。在继续进行下一个小改进之前,尝试对代码进行非常小的改进,并使其正常工作。等等。如果您遇到困难,请到这里,展示您的代码,并询问有关它的具体问题。这个问题应该比你当前的问题更容易回答。表格的问题“这里有大量的代码无法正常工作,帮助!&#34;很难回答。

2)按自己的问题调查问题。你写道,“不是所有的乌龟都移动,为什么?”也许有人可以通过阅读你的代码来回答这个问题;我不能(除非我上面的第一个猜测是正确的)。为了解决这个问题,我必须自己运行代码并对其进行实验。我做的事情就像尝试用一只乌龟一样运行它,看看那个案例是否失败;在代码中添加{{1}}语句,显示每个海龟的坐标和动作,这样我就可以尝试找出哪个海龟出错了,并且确切地说是在什么条件下;等等。它就像侦探工作,或者像在实验室里做化学实验一样。