在Netlogo 6.0.4中创建接收器修补程序

在Netlogo 6.0.4中创建接收器修补程序,netlogo,patch,Netlogo,Patch,我想在Netlogo中创建两个补丁(或网格中的区域,不要与常规Netlogo补丁混淆),它们表示“接收器”和“源”区域。“水槽”补丁是一个滑块,可以调整大小,并应创建一个圆形区域。“源”补丁是汇补丁之外的区域。下面是我用来尝试和实现此功能的代码,它取自Netlogo 5.3.1中使用的类似模型: to setup clear-all crt sink-patch-radius ;; create the 'sink' set sk1x random-pxcor set sk1y random

我想在Netlogo中创建两个补丁(或网格中的区域,不要与常规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 ]
设置
清除所有
阴极射线管接收器贴片半径
;; 创建“水槽”
设置sk1x随机pxcor
设置sk1y随机pycor
而[abs(sk1x-最小pxcor)<(水槽补片半径-1)
或abs(最大pxcor-sk1x)<(水槽补片半径-1)
或abs(sk1y-最小pycor)<(水槽补片半径-1)
或abs(最大pycor-sk1y)<(水槽贴片半径-1)]
[设置sk1y随机pycor
设置sk1x random pxcor]
将水槽修补程序设置为
[(圆形(距离XY sk1x sk1y))<汇区半径]
询问水槽补丁[设置P颜色棕色+2]
;; 创建“源”
询问补丁[
使用[pcolor!=brown+2]]设置源面片
询问源修补程序[将pcolor设置为绿色]

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

不确定设置按钮卡住的原因。但是你的代码有问题。你有
ask补丁[设置源补丁…]
,这会让每个补丁都这么做。这应该是相当快,但可以解释你的粘性问题

您的代码的此修订版本有效

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

不确定设置按钮为什么卡住。但是你的代码有问题。你有
ask补丁[设置源补丁…]
,这会让每个补丁都这么做。这应该是相当快,但可以解释你的粘性问题

您的代码的此修订版本有效

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

非常感谢。我确实将接收器补丁和源补丁作为全局变量,因为它们在代码的其他地方使用。您提供的简化代码是有意义的,唯一的问题是全局变量“sink patches”从未在该版本中定义,因此我试图考虑如何将其合并,以便可以在其他地方使用?但这是非常有用的,它现在正在工作。请参阅全球版本的修订版!最后一件事,您的意思是在说“让源中心…”的区域中使用“汇补丁”吗?询问源补丁[半径中的补丁]和“询问源补丁[设置颜色…”?我假设你这样做,因为这是我创建接收器的地方,而不是源。是的,我会修复。对不起,我的编辑没注意到谢谢!我确实将接收器补丁和源补丁作为全局变量,因为它们在代码的其他地方使用。您提供的简化代码是有意义的,唯一的问题是全局变量“sink patches”从未在该版本中定义,因此我试图考虑如何将其合并,以便可以在其他地方使用?但这是非常有用的,它现在正在工作。请参阅全球版本的修订版!最后一件事,您的意思是在说“让源中心…”的区域中使用“汇补丁”吗?询问源补丁[半径中的补丁]和“询问源补丁[设置颜色…”?我假设你这样做,因为这是我创建接收器的地方,而不是源。是的,我会修复。抱歉,我编辑时没有注意到