Map NetLogo:根据汉明距离移除海龟

Map NetLogo:根据汉明距离移除海龟,map,netlogo,hamming-distance,Map,Netlogo,Hamming Distance,NetLogo非常新。。。 我有两种“疫苗”和“抗体”。每一个都拥有一个符号字符串(例如,[a”“B”“C]”)。我希望当抗体占据相同的空间,并且至少有2/3的符号匹配时(后者是问题),它们能够移除疫苗。我一直在尝试使用“映射”功能,但无法使其工作。请帮忙!以下是我尝试过的: breed [vaccine vaccines] breed [antibody antibodies] vaccine-own [ string2 hamming-distance ] antibody-own

NetLogo非常新。。。 我有两种“疫苗”和“抗体”。每一个都拥有一个符号字符串(例如,[a”“B”“C]”)。我希望当抗体占据相同的空间,并且至少有2/3的符号匹配时(后者是问题),它们能够移除疫苗。我一直在尝试使用“映射”功能,但无法使其工作。请帮忙!以下是我尝试过的:

breed [vaccine vaccines]
breed [antibody antibodies]

vaccine-own [
  string2
  hamming-distance
]
antibody-own [
  string1
]

to setup
  clear-all
  create-antibody 10 [ setxy random-xcor random-ycor
    set string1 n-values 3 [one-of["A" "B" "C"]]]
  create-vaccine 2 [ setxy random-xcor random-ycor set color red 
    set string2 n-values 3 [one-of["A" "B" "C"]] ]
  reset-ticks
end

to go
  move-antibody
  remove-antigen
  tick
end

to move-antibody
  ask antibody [
    right random 360
    forward 1
  ]
end

to remove-antigen
  ask vaccine [
    if any? other antibody-here [
      set hamming-distance (length remove true (map [?1 = ?2] string2 [string1] of myself))
      ]
    if any? other antibody-here with [hamming-distance > 1] [die]
  ] 
end

您在这种情况下使用
map
非常好!将
length
remove true
map
组合计算汉明距离的方法表明您对这些概念有很好的理解

您的问题在于代码的结构。我认为您应该首先将汉明距离定义为一个单独的报告者,这将使其余代码更易于编写:

to-report hamming-distance [ list1 list2 ]
  report length remove true (map [?1 = ?2] list1 list2)
end
如果您在命令中心测试它,您将看到它工作正常:

observer> show hamming-distance ["A" "B" "C"] ["A" "B" "B"]
observer: 1
observer> show hamming-distance ["A" "B" "C"] ["C" "C" "C"]
observer: 2
一旦你有了这些,就可以很容易地正确地编写
去除抗原

to remove-antigen
  ask vaccines [
    if any? antibodies-here with [
      hamming-distance string1 [ string2 ] of myself <= 1
    ] [ die ]
  ]  
end
去除抗原
询问疫苗[
如果有的话?这里有抗体[
我自己的海明距离