Netlogo 不同品种的变量

Netlogo 不同品种的变量,netlogo,Netlogo,我正在尝试制作一个考古模型,在这个模型中,猎人们根据他们的质量在避难所里绘画 breed [shelters shelter] breed [hunters hunter] shelters-own [quality paintings] 每个避难所质量的值在设置中设置(使用滑块显示避难所的实际数量) 然后根据每个庇护所的质量随机确定是否涂漆: to make-painting ask shelters [ if any? hunters-on patch-here [

我正在尝试制作一个考古模型,在这个模型中,猎人们根据他们的质量在避难所里绘画

breed [shelters shelter]
breed [hunters hunter]
shelters-own [quality paintings]
每个避难所质量的值在设置中设置(使用滑块显示避难所的实际数量)

然后根据每个庇护所的质量随机确定是否涂漆:

to make-painting
  ask shelters [
    if any? hunters-on patch-here [
        if random 100 < quality [set paintings paintings + 1]
    ]
  ]
end
画画
询问避难所[
如果有的话?这里有猎人[
如果随机100<质量[设置绘画+1]
]
]
结束
现在,我想把它复杂化一点:质量不是由庇护所本身来定义的(因此对每个猎人来说都是一样的),而是由猎人来定义的:他们每个人都会为每个庇护所赋予不同的质量。绘画与否仍然是对随机性的测试,但每个猎人都定义了这个新的变量

但是我找不到一种方法把它正确地编码下来


有人有什么建议吗?

我想我是对的。基本上,我让每一个猎人都创建一个充满随机数的矩阵。它的尺寸是33x33,所以它遍布全世界(必须将其设置为从一个角落开始,否则它会得到负坐标)

然后,当它们到达庇护所时,将提取对应于该面片位置的值并用于绘制或不绘制

ask patches [
  ask hunters-here [set quality matrix:get hunter-matrix xpatch ypatch]
  let paintings-here sum [paintings] of shelters-here
  if any? hunters-here and any? shelters-here [
    if random 10 < quality [
      ask shelters-here [
        set paintings paintings + 1]
    ]
  ]
]
ask补丁[
在这里询问猎人[设置质量矩阵:获取猎人矩阵xpatch ypatch]
让这里的画和这里的庇护所[画]相加
如果这里有猎人和避难所[
如果随机10<质量[
在这里询问避难所[
设置绘画+1]
]
]
]

我仍然不能完全确定它是否真的做了我认为它在做的事情,tho

猎人会搬到不同的庇护所吗?您是否希望给定的猎人总是为给定的庇护所指定相同的质量?如果您想让评估持久化,那么如果它有任何随机组件,您将需要存储它。(不幸的是,表格不能使用补丁作为键,但您可以将补丁位置作为整数列表进行键控。)猎人随机移动并访问不同的庇护所(我让模型在一个庇护所获得100幅画时停止)。事实上,这个想法是,例如,如果有10个庇护所,那么每个猎人都会有一个不同的变量,即10个质量值,从设置开始持续。你如何从补丁中存储和检索这些值?那么为什么不给每个猎人一个
庇护所
属性,该属性是一个长度为10的列表(或者你有多少庇护所),并在列表中存储每个庇护所的质量。为了简化核算,您可以为每个庇护所分配一个庇护所索引(例如,0到9),并使用该索引对列表进行索引。
create-hunters number-hunters [
  set color white 
  set size 1
  setxy random-xcor random-ycor
  set hunter-matrix matrix:make-constant 33 33 random 10
]
ask n-of number-shelters patches [
  sprout-shelters 1 [ 
    set color one-of base-colors 
    set size 1 
    set xpatch xcor set ypatch ycor
]
ask patches [
  ask hunters-here [set quality matrix:get hunter-matrix xpatch ypatch]
  let paintings-here sum [paintings] of shelters-here
  if any? hunters-here and any? shelters-here [
    if random 10 < quality [
      ask shelters-here [
        set paintings paintings + 1]
    ]
  ]
]