R中遗传算法的广义指派问题

问题描述 投票:-1回答:1

如何实现广义指派问题: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个回答
0
投票

你的健身功能的定义似乎存在问题,即assigment()功能。

  • x是一个二元向量,而不是理论中的矩阵,所以sum(x * p)没有做你可能期望的事情(注意x长度为9,p在你的例子中是3x3矩阵);
  • penalty2项没有正确考虑x_ {ij}之和的约束;
  • 对于penalty1penalty2,处罚应采取不同的行动,第一种是不平等(即<=),而第二种是严格平等(即=)。
  • w被定义为矢量,但它应该是与x相同大小的矩阵
© www.soinside.com 2019 - 2024. All rights reserved.