Map NetLogo:根据汉明距离移除海龟
NetLogo非常新。。。 我有两种“疫苗”和“抗体”。每一个都拥有一个符号字符串(例如,[a”“B”“C]”)。我希望当抗体占据相同的空间,并且至少有2/3的符号匹配时(后者是问题),它们能够移除疫苗。我一直在尝试使用“映射”功能,但无法使其工作。请帮忙!以下是我尝试过的: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
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
去除抗原
询问疫苗[
如果有的话?这里有抗体[
我自己的海明距离