【问题标题】:Generalized Assignment Problem with Genetic Algorithms in RR中遗传算法的广义分配问题
【发布时间】:2019-02-23 03:45:45
【问题描述】:

如何实现广义分配问题: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) 

【问题讨论】:

标签: r genetic-algorithm integer-programming


【解决方案1】:

您对适应度函数的定义似乎有问题,即assigment() 函数。

  • x 是一个二元向量,而不是理论上的矩阵,所以 sum(x * p) 没有做你可能期望的事情(注意 x 的长度为 9,p 在你的例子中是一个 3x3 矩阵);
  • penalty2 术语未正确考虑对 x_{ij} 总和的约束;
  • 对于penalty1penalty2 的处罚应该有所不同,第一个是不等式(即
  • w 被定义为一个向量,但它应该是一个与x 大小相同的矩阵

【讨论】:

    猜你喜欢
    • 2016-06-23
    • 2011-10-03
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-16
    • 2019-12-09
    • 2016-08-23
    相关资源
    最近更新 更多