【问题标题】:Creating a sink patch in Netlogo 6.0.4在 Netlogo 6.0.4 中创建接收器补丁
【发布时间】:2018-11-26 19:04:51
【问题描述】:

我想在 Netlogo 中创建 2 个补丁(或网格中的区域,不要与常规 Netlogo 补丁混淆)代表“汇”和“源”区域。 “sink”补丁是一个可以调整大小的滑块,应该创建一个圆形区域。 “源”补丁是接收器补丁之外的区域。下面是我用来尝试实现它的代码,它取自 Netlogo 5.3.1 中使用的类似模型:

to setup
clear-all

crt sink-patch-radius

;; create the 'sink'
set sk1x random-pxcor
set sk1y random-pycor
while [abs(sk1x - min-pxcor) < (sink-patch-radius - 1)
or abs(max-pxcor - sk1x) < (sink-patch-radius - 1)
or abs(sk1y - min-pycor) < (sink-patch-radius - 1)
or abs(max-pycor - sk1y) < (sink-patch-radius - 1) ]
[ set sk1y random-pycor
set sk1x random-pxcor ]


set sink-patches patches with
[(round(distancexy sk1x sk1y)) < sink-patch-radius ]
ask sink-patches [ set pcolor brown + 2 ]


;; create the 'source'
ask patches [
set source-patches patches with [pcolor != brown + 2]]
ask source-patches [ set pcolor green ]

当我这样做时,设置按钮卡住了。它不会设置模型。奇怪的是,这段代码似乎在 Netlogo 5.3.1 中工作。任何见解都会有所帮助。谢谢!

【问题讨论】:

    标签: netlogo patch


    【解决方案1】:

    不知道为什么设置按钮会卡住。但是你的代码有问题。你有ask patches [ set source-patches ...],这将使每个补丁都能做到这一点。这应该相当快,但可以解释您的粘性问题。

    你的代码的这个修改版本有效

    to setup
      clear-all
      let sink-patch-radius 3
      crt sink-patch-radius
    
      ;; create the 'sink'
      let sk1x random-pxcor
      let sk1y random-pycor
      while [ abs(sk1x - min-pxcor) < (sink-patch-radius - 1)
              or abs(max-pxcor - sk1x) < (sink-patch-radius - 1)
              or abs(sk1y - min-pycor) < (sink-patch-radius - 1)
              or abs(max-pycor - sk1y) < (sink-patch-radius - 1) ]
      [ set sk1y random-pycor
        set sk1x random-pxcor ]
      let sink-patches patches with [(round(distancexy sk1x sk1y)) < sink-patch-radius ]
      ask sink-patches [ set pcolor brown + 2 ]
    
      ;; create the 'source'
      let source-patches patches with [pcolor != brown + 2]
      ask source-patches [ set pcolor green ]  
    end
    

    但我不确定您为什么要使用 while 声明而不是简单地识别接近的补丁。试试这个更容易阅读的版本(注意没有海龟,所以你需要改变它才能把它带回来)

    globals [ sink-patches source-patches]
    
    to setup
      clear-all
      ;; create the 'sink'
      let sink-patch-radius 3
      let sink-centre one-of patches
      set sink-patches [patches in-radius sink-patch-radius] of sink-centre
      ask sink-patches [ set pcolor brown + 2 ]
      ;; create the 'source'
      set source-patches patches with [pcolor != brown + 2]
      ask source-patches [ set pcolor green ]
    end
    

    【讨论】:

    • 谢谢!我确实将 sink-patches 和 source-patches 作为全局变量,因为它们在代码的其他地方使用。您提供的简化代码是有道理的,唯一的问题是该版本中从未定义过全局变量“sink-patches”,所以我正在尝试考虑如何合并它以便可以在其他地方使用它?但这非常有帮助,现在正在运行。
    • 查看全局版本的修订
    • 非常感谢!最后一件事,你的意思是在说“让源中心......”“询问源补丁[半径内补丁..]和“询问源补丁[设置pcolor]的区域中使用“接收器补丁” ..]?我假设你这样做了,因为我正在创建接收器,而不是源。
    • 是的,我会解决的。抱歉,我的编辑没有注意
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-12
    相关资源
    最近更新 更多