首页 > 解决方案 > 在 Netlogo 6.0.4 中创建接收器补丁

问题描述

我想在代表“汇”和“源”区域的 Netlogo 中创建 2 个补丁(或网格中的区域,不要与常规 Netlogo 补丁混淆)。“水槽”补丁是一个可以调整大小的滑块,应该创建一个圆形区域。“源”补丁是接收器补丁之外的区域。下面是我用来尝试实现它的代码,它取自 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 中工作。任何见解都会有所帮助。谢谢!

标签: netlogopatch

解决方案


不知道为什么设置按钮卡住了。但是你的代码有问题。你有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

推荐阅读