Скажем, у нас есть функция стоимости:
my_func <- function(x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11){
rst <- (x1^2) * x2 + x2 + x3*x4*x5*x6*x7*x8*x9 + x10^3 + (1-x11-x10)
return(rst)
}
Реальный пример имеет такое же количество переменных, более сложную функцию стоимости.
Тогда скажите, что у меня есть ограничения для каждой переменной:
0 <= x1 <= (1/11)
0 <= x2 <= (1/20)
0 <= x3 <= (1/5)
....
0 <= x11 <= (1/10)
И я хочу найти минимальную стоимость для этого.
Мое текущее решение - сначала построить последовательности для каждой переменной с заданной точностью (0,001), скажем для x1:
x1.seq <- seq(0, 1/11, by = 0.001)
....
Затем я запускаю 11 для циклов и пробую каждую комбинацию, чтобы попытаться найти минимум:
hold <- NULL # Preallocation of this variable does help, a bit...
for (i in 1:length(x1.seq){
x1 <- x1.seq[i]
for (j in 1:length(x2.seq){
x2 <- x2.seq[j]
....
hold <- c(hold, my_func(x1 = x1, ..., x11 = x11))
....
}
}
min(hold)
Теперь, как вы, наверное, знаете, это будет продолжаться вечно, если точность не тривиальна. Так есть ли более быстрый способ сделать это в R? Я знаю о других подходах, таких как частные производные или множители Лагранжа, и т. Д., Но они также занимают много времени (и грубо с моей проблемой нелинейности), и я ищу подход с использованием кода R, если таковой существует.