如何将for循环中的基本R图更改为ggplot?

如何将for循环中的基本R图更改为ggplot?,r,ggplot2,genetic-algorithm,R,Ggplot2,Genetic Algorithm,目前,我正在使用遗传算法,我有以下代码,在优化适应度函数的算法的每次迭代中生成一个图: popSize <- 4 e<-5 d<-10 cromSize <- e+d potDec<-2^d fitness.f <- function(x){ abs((x-5)/(2+sin(x))) } eval <- function(x){ evaluation <- matrix(ncol = 2, nrow = nrow(x), rep(0,times

目前,我正在使用遗传算法,我有以下代码,在优化适应度函数的算法的每次迭代中生成一个图:

popSize <- 4
e<-5
d<-10
cromSize <- e+d
potDec<-2^d
fitness.f <- function(x){
abs((x-5)/(2+sin(x)))
}
eval <- function(x){
evaluation <- matrix(ncol = 2, nrow = nrow(x), rep(0,times = nrow(x)), dimnames = list(paste("I", c(1:nrow(x)), sep = ""), c("X", "Fit")))
for(i in 1:nrow(x)){
    count <- 0
    for(j in 1:cromSize){
        count <- x[i,j]*(2^(cromSize-j)) + count
    }
    count<-count/potDec
    evaluation[i,1] <- count
    evaluation[i,2] <- fitness.f(count)
}
evaluation <- cbind(evaluation, x)
evaluation <- evaluation[order(evaluation[,2], decreasing = T),]
return(evaluation)
}
cross.f <- function(r, pcrossover){
if(runif(1)<=pcrossover){
    hijos <- matrix(ncol = cromSize, nrow = 2, dimnames = list(paste("I",c((nrow(r)+1):(nrow(r)+2)), sep = ""),c()))
    c <- r[sample(1:popSize,2),]
    tam_cross <- sample(1:(cromSize-1),1)
    for(i in 1:2){
        for(j in 1:(cromSize-tam_cross)){
            hijos[i,j] <- c[i,j] 
        }
        for(k in (cromSize-tam_cross+1):cromSize){
            if(i==1){
                hijos[i,k] <- c[i+1,k]  
            }else{
                hijos[i,k] <- c[i-1,k]
            }
        }
    }
    r <- rbind(r,hijos)
}
return(r)
}
mut.f <- function(r, pmutation){
c <- matrix(ncol = cromSize, nrow = 1, r[sample(1:popSize,1),], dimnames = list(paste("I",(nrow(r)+1), sep = ""),c()))
vecAle <- c(runif(cromSize))
count <- 0
for(j in 1:cromSize){
    if(vecAle[j]<=pmutation){
        count <- count+1
        c[1,j]=abs(c[1,j]-1)
    }
}
if(count>0){
    r <- rbind(r,c)
}
return(r)
}
selection.f <- function(s){
fit <- eval(s)
aux <- fit[1:popSize,3:(3+cromSize-1)]
row.names(aux) <- paste("I", c(1:popSize), sep = "")
return(aux)
}
main.f <- function(maxIter){
min <- -0
max<-(2^e)+1
x <- c(0,1) 
s <- matrix(ncol = cromSize, nrow = popSize, sample(x, cromSize*popSize, replace = T) , dimnames = list(paste("I", c(1:popSize), sep = ""), paste("C", c(1:cromSize), sep = "")))
layout(matrix(c(1,2), 2, 1, byrow = TRUE))
par(mai = c(.7,.7,.7,.4), mgp = c(1,1,0))
plot(fitness.f, xlim = c(min - 0.1, max - 1), main = "Iteración = 0", ylab = "Fit", yaxt = "n")
fit <- eval(s)
points(fit, col = "red")
plot(density(fit[,1]), main = "Densidad de población en la iteracion 0", xaxt = "n", yaxt = "n", xlab = "")
pcrossover <- 0.9
pmutation <- 0.3
  for (i in 1:maxIter){
    #debug(cross.f)
    s <- cross.f(s, pcrossover)
    s <- mut.f(s, pmutation)
    #debug(selection.f)
    s <- selection.f(s)
    fit <- eval(s)
    layout(matrix(c(1,2), 2, 1, byrow = TRUE))
    par(mai = c(.7,.7,.7,.4), mgp = c(1,1,0))
    plot(fitness.f, xlim = c(min - 0.1, max - 1), main = c(paste("Iteración =",i)), ylab = "Fit", yaxt = "n")
    points(fit, col = "red")
    poblacion <- density(fit[,1])
       }
}
main.f(20)

popSize是在每次迭代中不断更新单个绘图还是创建新绘图?如果是前者,请看前面关于这个主题的答案:您的代码太复杂了。请精简它,直到你有一个包含你问题本质的最小示例。如果你唯一需要帮助的部分是绘图,你能把你拥有的数据作为输出,我们可以帮助绘制吗?我认为没有“将绘图…更改为ggplot2”的功能。不幸的是,如果您想将绘图机制从base-R更改为
ggplot2
,则需要学习并从头开始。有很多教程,有些可能提供基本的翻译,但一般来说,这是一个没有直接转换机制的新图形系统。