首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NetLogo:取下乌龟给定的汉明距离

NetLogo:取下乌龟给定的汉明距离
EN

Stack Overflow用户
提问于 2014-08-04 18:33:08
回答 1查看 282关注 0票数 1

对NetLogo来说很新..。我有两个品种“疫苗”和“抗体”。每个人都拥有一串符号(例如:"A“"B”"C")。当抗体占据相同的空间时,如果至少有2/3的符号匹配(后者是问题的话),我希望抗体去除疫苗。我一直在尝试使用“map”函数,但无法让它工作。请帮帮忙!以下是我尝试过的:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-05 02:30:13

在这种情况下,您使用map是很棒的!结合lengthremove truemap计算汉明距离的方法显示了对这些概念的很好理解。

您的问题在于代码的结构。我认为您首先应该将hamming-distance定义为一个单独的报告程序,这将使其余的代码更易于编写:

代码语言:javascript
复制
to-report hamming-distance [ list1 list2 ]
  report length remove true (map [?1 = ?2] list1 list2)
end

如果在命令中心对其进行测试,您将看到它是有效的:

代码语言:javascript
复制
observer> show hamming-distance ["A" "B" "C"] ["A" "B" "B"]
observer: 1
observer> show hamming-distance ["A" "B" "C"] ["C" "C" "C"]
observer: 2

一旦实现了这一点,就很容易正确地编写remove-antigen

代码语言:javascript
复制
to remove-antigen
  ask vaccines [
    if any? antibodies-here with [
      hamming-distance string1 [ string2 ] of myself <= 1
    ] [ die ]
  ]  
end

几个注意事项:

  • 您可以在breed定义中倒置复数和单数。复数总是第一位的。这样,您就可以ask vaccines (即所有的真空)而不是ask vacinne (只剩下一个假期,没有太多意义)。
  • 为了能够定义hamming-distance报告器,您需要从vaccines-own中删除hamming-distance变量;无论如何,您并不需要它。
  • 在您的原始代码中,您要求vacinnes检查是否为other antibody-here,但是使用other是不必要的,因为您正在寻找不同种类的成员。
  • 在您的原始代码中,我认为您倒置了string1string2。通常,您应该尽量避免调用变量something1something2 (除非它在一些非常通用的代码中,比如我前面建议的hamming-distance报告程序中)。这串代表DNA吗?那就叫它DNA!如果两个不同的品种有相同的名称变量,那么没有什么问题:如果12代表相同的东西,就不要追加它们。
  • 如果你想让疫苗在2/3的符号相同时死亡,你应该检查汉明距离是<= 1,而不是> 1。或者更好的是,检查它是否是<= (1 / 3) * length string1
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25125268

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档