如何在包GA(Rstudio)中仅使用整数参数

时间:2017-10-11 08:44:10

标签: r rstudio genetic-algorithm

我需要使用包' GA'创建一种允许改进一种搜索算法的超参数的遗传算法。 问题是:

  1. 第一个问题是我不知道如何使用整数值而不是真值。
  2. 第二个问题,我不知道如何将值限制为2个选项(例如:1和0)。
  3. 代码在这里:

    popSize = 150
    
    maxiter = 10
    
    run = maxiter
    
    pcrossover = 0.8
    
    pmutation = 0.1 
    
    elitism = max(1, round(popSize*0.05))
    
    Rastrigin <- function(x1, x2, x3, x4, x5, x6, x7) {
    
     if (x6 <= 0.5) {
    
      if (x7 <= 0.5) {
    
       print("1")
    
       -(x1+x2+x3+x4+x5+x6+x7) * 2
    
      } else {
    
       print("2")
    
       -(x1+x2+x3+x4+x5+x6+x7) * 2 / 4
    
      }
    
     } else {
    
       if (x7 <= 0.5) {
    
          print("3")
    
          -(x1+x2+x3+x4+x5+x6+x7) * 4
    
       } else {
    
        print("4")
    
        -(x1+x2+x3+x4+x5+x6+x7) * 4 / 4
    
      }
    
     }
    
    }
    
         GA <- ga(type = "real-valued", 
    
         fitness =  function(x) Rastrigin(x[1], x[2], x[3], x[4], as.integer(x[5]), x[6], x[7]),
    
         min = c(0, 0, 0, 0, 0, 0, 0), max = c(1, 1, 1, 10, 1000, 1, 1),
    
         popSize = popSize, maxiter = maxiter,  run = run, 
    
         pcrossover = pcrossover, pmutation = pmutation, elitism = elitism,
    
         optim = FALSE, 
    
         selection = gareal_tourSelection,
    
         population = gareal_Population,
    
         crossover = gareal_blxCrossover,
    
         mutation = gareal_rsMutation
    
         )
    

    对不起,这是我的第一篇文章。我希望我能理解。

    非常感谢你的帮助,

    马克西姆

1 个答案:

答案 0 :(得分:0)

回答第一个问题。您似乎不希望“整数”值,而是“二进制”值(0或1)。为此,您需要将参数“ type”指定为“ binary”。在这种情况下,您还需要将参数“ nBits”设置为您想要的值数。 此包装有一个非常好的装饰图案:https://luca-scr.github.io/GA/articles/GA.html