R中具有遗传算法的广义分配问题

时间:2018-09-19 04:06:53

标签: r genetic-algorithm integer-programming

如何实现通用分配问题:https://en.wikipedia.org/wiki/Generalized_assignment_problem,需要使用R中的遗传算法https://cran.r-project.org/web/packages/GA/GA.pdf来解决。

我有一个有效的代码示例,但是没有用:

require(GA)
p <- matrix(c(5, 1, 5, 1, 5, 5, 5, 5, 1), nrow = 3)
t <- c(2, 2, 2) 
w <- c(2, 2, 2)

assigment <- function(x) {
  f <- sum(x * p)
  penalty1 <- sum(w)*(sum(t)-sum(w*x))
  penalty2 <- sum(w)*(1-sum(x))
  f - penalty1 - penalty2  
}  

GA <- ga(type = "binary", fitness = assigment, nBits = length(p),
       maxiter = 1000, run = 200, popSize = 20)
summary(GA) 

1 个答案:

答案 0 :(得分:0)

您在适应性函数(即assigment()函数)的定义中似乎存在问题。

  • x是一个二进制向量,而不是理论上的矩阵,因此sum(x * p)并未达到您的预期(请注意,x的长度为9,而{{1 }}是您示例中的3x3矩阵);
  • p项未正确考虑x_ {ij}之和的约束;
  • penalty2penalty1的处罚应有所不同,第一个是不等式(即<=),第二个是严格的等式(即=)。
  • penalty2被定义为向量,但它应该是与w相同大小的矩阵