我想搜索一些比特字符串,如" 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.**
提前致谢
答案 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的解决方案,这个解决方案更容易理解,而且几乎肯定会更快地运行。