首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >两个向量之间的交换元素(交叉)

两个向量之间的交换元素(交叉)
EN

Stack Overflow用户
提问于 2017-01-20 09:52:58
回答 2查看 452关注 0票数 2

假设我有:

chromosome_1 <- c('0010000001010000')

chromosome_2 <- c('0100000001001010')

如何实现步骤3-5

  1. 评估
    • NC1 =否。在chromosome_1中的1
    • NC2 =否。在chromosome_2中的1
    • M= min(NC1, NC2)

  1. NC生成随机整数range(1, M)
  2. NC中随机选择具有等位基因“1”的基因中的chromosome_1基因位置,并形成一组该位点的s1指标。 从NC中随机选择具有等位基因“1”的基因中的chromosome_2基因位置,并形成一组该位点的s2指标。
  3. s = union(s1, s2) 假定 s = 2, 3, 10, 15
  4. 对于s中的每个索引s chromosome_1chromosome_2i基因位置上的等位基因交换。

以下说明了结果:

我真的很感激你的帮助!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-02 05:40:22

也许不是最简单的解决方案,但有效。

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

Stack Overflow用户

发布于 2017-01-21 10:41:49

您可以尝试使用GA封装

在手册(第5页)中有一个例子。

代码语言:javascript
复制
ga(type = c("binary", "real-valued", "permutation"),
fitness, ...,
min, max, nBits,
population = gaControl(type)$population,
selection = gaControl(type)$selection,
crossover = gaControl(type)$crossover,
mutation = gaControl(type)$mutation,
popSize = 50,
pcrossover = 0.8,
pmutation = 0.1,
elitism = base::max(1, round(popSize*0.05)),
updatePop = FALSE,
postFitness = NULL,
maxiter = 100,
run = maxiter,
maxFitness = Inf,
names = NULL,
suggestions = NULL,
optim = FALSE,
optimArgs = list(method = "L-BFGS-B",
poptim = 0.05,
pressel = 0.5,
control = list(fnscale = -1, maxit = 100)),
keepBest = FALSE,
parallel = FALSE,
monitor = if(interactive())
{ if(is.RStudio()) gaMonitor else gaMonitor2 }
else FALSE,
seed = NULL)

例如,种群、选择、交叉、变异和监视操作符分配了新的功能。在我的研究中,我使用了自己的突变和监控功能。例如;

代码语言:javascript
复制
myga <- ga(type = "binary",
fitness, ...,
min, max, nBits,
mutation = myMutationFunction
popSize = 50,
pcrossover = 0.8,
pmutation = 0.1,
maxiter = 100,
run = maxiter,
monitor = myMonitorFunction

myMutationFunction <- function (x) {
#...
}

myMonitorFunction <- function (x) {
#...
}

因此,您只需定义自己的函数,并将函数名命名为ga函数。为了成为参考,您可以看到默认函数。您可以在默认函数中看到必要的参数和返回值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41760637

复制
相关文章

相似问题

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