Обобщенная задача присваивания с генетическими алгоритмами в R - PullRequest
0 голосов
/ 19 сентября 2018

Как я могу реализовать обобщенную задачу назначения: https://en.wikipedia.org/wiki/Generalized_assignment_problem, которая должна быть решена с помощью генетических алгоритмов https://cran.r -project.org / web / packages / GA / GA.pdf в R.

У меня есть рабочий пример кода, но он не работает:

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 голосов
/ 19 сентября 2018

Кажется, в вашем определении фитнес-функции есть проблемы, т.е. функция assigment().

  • x - это двоичный вектор, а не матрица, как в теории, поэтомуsum(x * p) не выполняет то, что вы, вероятно, ожидаете (обратите внимание, что x имеет длину 9 и p - это матрица 3x3 в вашем примере);
  • ограничение на сумму x_ {ij} не являетсяпри правильном учете слагаемым penalty2;
  • наказания должны действовать по-разному для penalty1 и penalty2, первое - это неравенство (т. е. <=), а второе - строгое равенство (т. е.=). </li>
  • w определяется как вектор, но это должна быть матрица того же размера, что и x
...