Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 错误:数值表达式有6个元素:仅使用第一个元素和GA中的警告_R_For Loop_Permutation_Genetic Algorithm - Fatal编程技术网

R 错误:数值表达式有6个元素:仅使用第一个元素和GA中的警告

R 错误:数值表达式有6个元素:仅使用第一个元素和GA中的警告,r,for-loop,permutation,genetic-algorithm,R,For Loop,Permutation,Genetic Algorithm,这是我的代码,我想知道为什么会有警告消息说“要替换的项目数量不是替换长度的倍数” 然后,我运行GA代码: GA <- ga(type = "permutation", fitness = fitness, lower = 1, upper = 6, maxiter= 5, run = 20, optim = TRUE) 然后我就跑去 summary(GA) 总结GA的输出 -- Genetic Algorithm ------------------- GA settings:

这是我的代码,我想知道为什么会有警告消息说“要替换的项目数量不是替换长度的倍数”

然后,我运行GA代码:

GA <- ga(type = "permutation", fitness = fitness, lower = 1, upper = 6, maxiter= 5, run = 20, optim = TRUE)
然后我就跑去

summary(GA)
总结GA的输出

-- Genetic Algorithm ------------------- 

GA settings: 
Type                  =  permutation 
Population size       =  50 
Number of generations =  5 
Elitism               =  2 
Crossover probability =  0.8 
Mutation probability  =  0.1 

GA results: 
Iterations             = 5 
Fitness function value = 25 
Solutions = 
      x1 x2 x3 x4 x5 x6
[1,]   4  1  6  3  5  2
[2,]   6  3  1  5  4  2
[3,]   6  2  3  4  1  5
[4,]   3  6  4  1  5  2
[5,]   4  6  2  1  5  3
[6,]   5  3  4  1  2  6
[7,]   2  1  6  3  5  4
[8,]   4  1  6  3  2  5
[9,]   3  6  1  2  5  4
[10,]  3  6  2  1  5  4
 ...                   
[35,]  4  5  6  2  1  3
[36,]  3  4  5  6  2  1

当我运行summary(GA)时,它似乎有效,但我对警告消息很好奇。如果有人能在这方面帮助我,我将不胜感激。提前感谢。

您在
健身
功能中尝试的操作可以轻松实现,无需
for
循环

例如,从
For
循环获得的输出是

#[1] 25  32  74 110 128 157
使用
cumsum
我们得到了同样的结果

cumsum(data1$Pj)
#[1]  25  32  74 110 128 157
然而,主要的问题是
fitness
函数应该只返回一个值,而不是像
cumsum
这样的值向量。如果你把函数改成这样

fitness <- function(j) sum(j)

fitness@RonakShah我已经编辑了我的帖子,让它更清晰。谢谢。实际上我指的是使用GA(通过获得最佳路线使总距离最大化)的TSP问题。在我的问题中,我希望最小化总完成时间(通过随机化作业序列)。输出的形式应该是GA | iter=503 | Mean=0.0002776453 | Best=0.0012239902 GA | iter=504 | Mean=0.0002369902 | Best=0.0012239902 GA | iter=505 | Mean=0.0002356493 | Best=0.0012239902然而,在我的问题中,我无法随机化作业序列,输出表明数值表达式有6个元素:仅第一个使用的元素对不起,我真的不知道GA函数的作用,我试图在这里演示的是
fitness
函数应返回一个值而不是值向量,以避免警告消息。
summary(GA)
-- Genetic Algorithm ------------------- 

GA settings: 
Type                  =  permutation 
Population size       =  50 
Number of generations =  5 
Elitism               =  2 
Crossover probability =  0.8 
Mutation probability  =  0.1 

GA results: 
Iterations             = 5 
Fitness function value = 25 
Solutions = 
      x1 x2 x3 x4 x5 x6
[1,]   4  1  6  3  5  2
[2,]   6  3  1  5  4  2
[3,]   6  2  3  4  1  5
[4,]   3  6  4  1  5  2
[5,]   4  6  2  1  5  3
[6,]   5  3  4  1  2  6
[7,]   2  1  6  3  5  4
[8,]   4  1  6  3  2  5
[9,]   3  6  1  2  5  4
[10,]  3  6  2  1  5  4
 ...                   
[35,]  4  5  6  2  1  3
[36,]  3  4  5  6  2  1
#[1] 25  32  74 110 128 157
cumsum(data1$Pj)
#[1]  25  32  74 110 128 157
fitness <- function(j) sum(j)
fitness(data1$Pj)
#[1] 157

library(GA)
GA <- ga(type = "permutation", fitness = fitness, lower = 1, upper = 6, 
         maxiter= 5, run = 20, optim = TRUE)