在两个向量之间交换元素(交叉) [英] Exchanging elements (crossover) between two vectors

查看:208
本文介绍了在两个向量之间交换元素(交叉)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

假设我有:

chromosome_1 <- c('0010000001010000')

chromosome_2 <- c('0100000001001010')

如何实现 第3-5步 ?

How can I implement step 3-5 ?

  1. 评估
    • NC1 =否. chromosome_1
    • 中1的个
    • NC2 =否. chromosome_2
    • 中1的个
    • M = min(NC1, NC2)
  1. Evaluate
    • NC1 = no. of 1's in chromosome_1
    • NC2 = no. of 1's in chromosome_2
    • M = min(NC1, NC2)

从基因中随机选择NC个基因位置 与来自chromosome_1的等位基因"1"并形成索引为s1的集合 这样的职位.

Randomly select NC gene positions among the genes with allele "1" from chromosome_1 and form a set s1 of indices of such selected positions.

从基因中随机选择NC个基因位置 来自chromosome_2的等位基因"1"并形成索引为s2的一组 这样的职位.

Randomly select NC gene positions among the genes with allele "1" from chromosome_2 and form a set s2 of indices of such selected positions.

s = union(s1, s2) 假设 s = 2, 3, 10, 15

对于s

在以下位置交换染色体chromosome_1​​和chromosome_2的等位基因 基因位置i.

Exchange the alleles of chromosomes chromosome_1 and chromosome_2 at gene position i.

以下说明了结果:

真的很感谢您的帮助!

推荐答案

可能不是最简单的解决方案,但它可行

Might not be the simplest solution, but it works

set.seed(12345)

## Step 1
a <- c(0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0)
b <- c(0,1,0,0,0,0,0,0,0,1,0,0,1,0,1,0)
m <- min(sum(a==1), sum(b==1))

## Step 2
random_int <- sample(1:m, 1)

## Step 3
random_a <- sample(which(a == 1), random_int)
random_b <- sample(which(b == 1), random_int)
#all <- sort(union(random_a, random_b))

## Step 4
## for demo purpose (assume it as the random output)
all <- c(2,3,10,15)     

temp_a <- a[all]
temp_b <- b[all]

## Step 5
##crossover
b[all] <- temp_a
a[all] <- temp_b

## Output
> a
 [1] 0 1 0 0 0 0 0 0 0 1 0 1 0 0 1 0
> b
 [1] 0 0 1 0 0 0 0 0 0 1 0 0 1 0 0 0

这篇关于在两个向量之间交换元素(交叉)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆