Генетический алгоритм - коммивояжер - добавление ограничений - PullRequest
0 голосов
/ 27 ноября 2018

Я пытаюсь изучить генетический алгоритм для задачи коммивояжера .Я использовал пример, упомянутый в Rpubs http://rpubs.com/somasdhavala/GAeg, чтобы понять то же самое.

Реализация по вышеприведенной ссылке - это классическая задача коммивояжера, когда у вас есть N узлов, которые нужно посетить по кратчайшему пути.

Но я хотел бы добавить еще одно условие / ограничение, где У меня есть 21 город, но я хотел бы посетить только 10 городов из 21 , в то время как расстояние, которое я прохожу, должно быть минимальным.

#GA function
GA.fit <- ga(type = "permutation", fitness = tpsFitness, distMatrix = D, min 
= 1,  max = attr(eurodist, "Size"), popSize = 10, maxiter = 500, run = 100, 
pmutation = 0.2, monitor = NULL)

#Fitness function
tourLength <- function(tour, distMatrix) {
tour <- c(tour, tour[1])
route <- embed(tour, 2)[, 2:1]
sum(distMatrix[route])
}
tpsFitness <- function(tour, ...) 1/tourLength(tour, ...)

Тип параметра функции g в качестве перестановки будет генерировать различные перестановки для создания населения из 21 города.Но когда мне приходится выбирать только 10 городов из 21, я не могу написать алгоритм, чтобы определить, как создать население.(Фитнес-функция должна оставаться такой же, хотя).

Не могли бы вы помочь мне, как создать популяцию для нескольких итераций здесь.

...