R中使用遗传算法的逐步种群评估

时间:2018-07-23 13:04:17

标签: r optimization genetic-algorithm

我正在尝试优化一个复杂的模型,该模型需要在远程计算机上运行几个小时。无法在远程计算机上设置GA脚本。因此,我正在考虑使用以下方法:

  1. 在我的本地计算机上创建初始解决方案
  2. 将此人群发送到远程计算机并评估每个成员
  3. 从远程计算机中检索总体的适应度值
  4. 使用先前的种群及其适应度值在我的本地计算机上生成下一种群(可能是通过将先前的种群作为初始种群提供给新的GA运行,并创建适应度函数来简单地检查先前的查找表)已评估的解决方案)。
  5. 重复步骤2-4,直到对收敛感到满意为止。

但是,我无法找到任何流行的R GA函数来支持这种“逐步”方法。

此外,当我尝试使用GA :: ga(我的首选算法,因为它似乎被最好地记录和维护)对这种“逐步”方法进行小测试时,我没有得到一致的结果。

例如...

 library(GA)
 Rastrigin <- function(x1, x2) 20 + x1^2 + x2^2 - 10*(cos(2*pi*x1) + cos(2*pi*x2))
 fit <- function(x) -Rastrigin(x[1], x[2])

 suggestedSol <- matrix(c(rep(0,10), seq(0.5, 5, 0.5)), 
                        nrow = 10, ncol = 2, byrow = FALSE)

在这里,我向GA :: ga提供初始种群和seed = 333,而我只经营了3代。

 GA1 <- ga(type = "real-valued", 
           fitness = fit,
           lower = c(-5, -5), 
           upper = c(5, 5), 
           suggestions = suggestedSol,
           popSize = 10, maxiter = 3, seed = 333)
 iter3 <- GA1@population
 iter3
       [,1]     [,2]
  [1,]    0 4.648199
  [2,]    0 1.244214
  [3,]    0 1.000000
  [4,]    0 3.927499
  [5,]    0 1.087419
  [6,]    0 1.917443
  [7,]    0 1.076341
  [8,]    0 1.785816
  [9,]    0 1.995138
 [10,]    0 1.041109

然后在这里我做同样的事情,但是只运行到第二代:

GA2 <- ga(type = "real-valued", 
          fitness = fit,
          lower = c(-5, -5), 
          upper = c(5, 5), 
          suggestions = suggestedSol,
          popSize = 10, maxiter = 2, seed = 333)
iter2 <- GA2@population

...然后,我将保存的第二代用作新运行的初始种群,只运行了另一代(到理论上的第三代)。

GA3 <- ga(type = "real-valued", 
          fitness = fit,
          lower = c(-5, -5), 
          upper = c(5, 5),  
          suggestions = iter2,
          popSize = 10, maxiter = 2, seed = 333)
stepwise3 <- GA3@population
stepwise3
      [,1]     [,2]
 [1,]    0 2.113191
 [2,]    0 1.007642
 [3,]    0 1.072837
 [4,]    0 1.000000
 [5,]    0 1.141010
 [6,]    0 3.246744
 [7,]    0 1.079777
 [8,]    0 1.946409
 [9,]    0 1.087419
[10,]    0 1.769360

iter3stepwise3是不相同的,即使seed设置为相同,并且理论上它们来自同一上一代。我想念什么?如果这不起作用,那么如何将这种“逐步”方法应用于更广泛的问题?

0 个答案:

没有答案