在NetLogo中找到一个字符串

时间:2015-04-23 09:01:35

标签: netlogo genetic-algorithm

我想搜索一些比特字符串,如" 101101" NetLogo中的简单遗传算法模型。计算健身中有这个代码:

set fitness length (remove 0 bits)

我可以找到或搜索一串像Bits Like" 101101"在这个算法中。 感谢

感谢您的回复! 好的,但是当我运行应用程序时,会出现此错误: ...

to calculate-fitness
  set fitness position "101101110" reduce word(list bits)
end

和更新代码:

  to update-display
  set winner max-one-of turtles [fitness]
  ask patches
     [
       ifelse item pxcor ([bits] of winner) = 1
       [ set pcolor white ]
       [ set pcolor black ]
     ]
 end

和"胜利者"出现此错误:

**OF expected input to be a turtle agentset or turtle but got NOBODY instead.**

提前致谢

2 个答案:

答案 0 :(得分:1)

您可以使用position轻松搜索位字符串中的子字符串。然而,简单遗传算法模型使用列表而不是字符串。如果您愿意,可以使用reduce将列表快速转换为字符串。例如,

show position "110" reduce word [1 0 1 1 0]  ;; => 2

答案 1 :(得分:1)

首先定义一下:

to-report sublist-position [subl l]
  if length l < length subl [ report false ]
  if subl = sublist l 0 (length subl) [ report 0 ]
  let recurse sublist-position subl butfirst l
  if is-number? recurse [ report 1 + recurse ]
  report false
end

现在你可以做到:

observer> show sublist-position [1 1 0] [0 0 0 0 0 1 1]
observer: false
observer> show sublist-position [1 1 0] [0 0 0 0 0 1 1 0 0 0]
observer: 5

这适用于任何类型的数据。对于你的特殊问题,你知道你只处理0和1,所以我实际上会使用Alan的解决方案,这个解决方案更容易理解,而且几乎肯定会更快地运行。