【发布时间】:2013-11-24 20:24:19
【问题描述】:
我正在尝试探索在 R 中使用 GA 进行优化的领域。我意识到 R 可能不是我这样做的最佳场所,但这就是我现在所知道的。
所以问题来了:我可以挑选一组人来最有效地建造我的房子。我愿意为这份工作花费最多 100,000 美元(超出该限制的解决方案不再有效),我必须从 500 人或所以(这项工作总共有 7 个人)。
每个人都有一个他们将为工作收取的费率以及他们将为手头的工作提供的总体价值(总价值需要最大化)。在此处查看数据:
我查看了 R 包 genalg 和 DeOptim,您可以在其中使用二进制函数来选择可以在给定价格下最大化总体价值的人员,但我不知道如何限制选择的工人类型。解决方案可以是所有电工,虽然他们都提供了巨大的价值,但他们无法完成工作。所以基本上我正在寻找一种控制人口的方法,而这些软件包似乎都不允许这样做。
有没有人知道如何解决这个问题?我相信你们中的许多人都看过这个问题的变体并且有很好的洞察力。非常感谢您的帮助。
这是我从论坛获得的代码:
library(genalg)
iter = 10
population = 500
# import csv file
brank = read.csv("GA_Data.csv")
dataset <- data.frame(item = brank$Person.ID, survivalpoints = brank$Value, weight = brank$Labor.Cost)
weightlimit <- 100000
monitor <- function(obj) {
minEval = min(obj$evaluations);
plot(obj$mean, obj$best, type="p", main = obj$iter);
}
evalFunc <- function(x) {
current_solution_survivalpoints <- x %*% dataset$survivalpoints
current_solution_weight <- x %*% dataset$weight
if (current_solution_weight > weightlimit)
return(0) else return(-current_solution_survivalpoints)
}
GAmodel <- rbga.bin(size = length(brank$Person.ID), popSize = population, iters = iter, mutationChance = 0.01,
monitorFunc = monitor, elitism = T, zeroToOneRatio = 200, evalFunc = evalFunc)
cat(summary.rbga(GAmodel))
########################
# STOP and replace "space" with "comma" in a text file
solution = c(0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0)
# dataset[solution == 1, ]
brank[solution == 1, ]
sum(brank$Value[solution == 1])
sum(brank$Labor.Cost[solution == 1])
【问题讨论】:
-
你能告诉我们你的尝试吗?也许你可以提供一些我们可以复制/粘贴的代码?
-
这样做了。您可以更改迭代和填充。还必须用逗号替换空格并将其粘贴到解决方案中以查看结果。
标签: r optimization genetic-algorithm