【问题标题】:Modify a layout-circle for turtles in NetLogo修改 NetLogo 中海龟的布局圆
【发布时间】:2022-01-18 12:22:48
【问题描述】:

我正在尝试在 NetLogo 中获得一个layout-circle,让每秒钟的乌龟向中心移动一个坐标,其余的远离它。我找到了使用random 的方法,但结果并不是很整洁。我想要得到的是围绕圆圈以之字形方式定位的海龟,没有我得到的随机分量。例如,所有偶数的海龟都向中心移动,而所有奇数的海龟都远离。

有什么想法,希望这足够清楚吗?

to setup
  clear-turtles
  create-turtles 100
  layout-circle (sort turtles) max-pxcor - 1
  ask turtles [setxy xcor (ycor + random 3 - 1)]
end

【问题讨论】:

    标签: layout netlogo


    【解决方案1】:

    鉴于您的海龟已排序,使用它们的who 会起作用。另外,如果你想保留圆形布局,你应该让海龟沿着半径移动,而不是根据世界坐标移动(如果你不想要随机效果,一定要去掉random)。

    在我们继续之前,一个重大的警告:你会经常读到使用代理的who 是不好的 NetLogo 编码实践(我自己仍然需要确切地了解为什么这是危险的)。 考虑到您的海龟在布局中进行了排序并假设此段落仅在设置时发生,我认为在您的情况下使用 who 是足够安全的 - 但是,我还包括一种不使用 who 的方法,它在未分类的海龟的情况下也需要。

    在这两种情况下,结果都是这样的:

    (请注意,只有在创建偶数个海龟时才能实现完美的锯齿形)

    使用who 接近

    to setup
      clear-turtles
      create-turtles 100
      layout-circle (sort turtles) max-pxcor - 1
    
      ask turtles [
        ifelse (who mod 2 = 0)
          [forward 0.5]
          [forward -0.5]
      ]
    end
    

    通过这样做,每只偶数乌龟都会向前移动一点,每只奇数乌龟都会向后移动相同的量。

    没有who 的方法

    这必须更详细。

    我们利用了这样一个事实,如果我们让乌龟从圆形布局中交替向前和向后移动(由ifelse (counter mod 2 = 0) [] [] 实现),那么离最后一个移动的乌龟最近的乌龟(移动的乌龟是reference-turtle in代码)将是圆周上下一个尚未移动的乌龟。

    在每次while 迭代结束时,当前reference-turtle 将要求最近的海龟成为新的reference-turtle

    为了使这一切正常工作,我们可以使用counter 作为while 循环的停止条件和海龟知道是向前还是向后移动的条件

    to setup
      clear-turtles
      create-turtles 100
      layout-circle turtles max-pxcor - 1
    
      let counter 0
      let reference-turtle one-of turtles
      
      while [counter < count turtles] [
        ask reference-turtle [
          ifelse (counter mod 2 = 0)
            [forward 0.5]
            [forward -0.5]
          
          ask min-one-of other turtles [distance myself] [
            set reference-turtle self
          ]
        ]
        
        set counter counter + 1
      ]
    end
    

    【讨论】:

    • 非常感谢 Matteo,两者都是奇迹般的答案,使用 mod 可以解决问题。感谢您提供非who 选项的信息,我会保留它,因为我可能需要包括setup 之外的位置变化
    猜你喜欢
    • 2020-08-09
    • 1970-01-01
    • 2013-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-11
    • 1970-01-01
    相关资源
    最近更新 更多