R 错误:数值表达式有6个元素:仅使用第一个元素和GA中的警告
这是我的代码,我想知道为什么会有警告消息说“要替换的项目数量不是替换长度的倍数” 然后,我运行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(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)