我希望功能两台计算机的双交叉1-crossover。
输入是两个二进制字符串,长度相同,输出是1-crossover。
例如,交叉输出(11100,10000)
10100,11000 11100,10000
或者我可以自己编写函数,但是在R中是否有任何字符串拆分或sting Congregation函数?
谢谢!
答案 0 :(得分:1)
这是一个愚蠢的低效实施:
crossover=function(A,B){
require(e1071)
b = bincombinations(length(A))
t(unique(apply(b, 1, function(r){r*A+(1-r)*B}),MARGIN=2))
}
它的args是1和0的向量,它的返回是一个交叉矩阵:
> crossover(c(1,1,1,0,0),c(1,0,0,0,0))
[,1] [,2] [,3] [,4] [,5]
[1,] 1 0 0 0 0
[2,] 1 0 1 0 0
[3,] 1 1 0 0 0
[4,] 1 1 1 0 0
低效率来自于它计算A与B的所有组合,然后仅采用唯一的组合。必然会有更好的方式。
如果您真的想要处理字符串,那么您可以自己找到字符串拆分和粘贴答案。