Вы можете запустить поиск по сетке, прежде чем запускать и отбрасывать NA
параметры.Вот пример.
Тестовая функция:
fn <- function(x) {
if (x[1] < 0)
NA
else
prod(x)
}
Теперь запустите поиск по сетке.
library("NMOF")
res <- gridSearch(fn,
npar = 2, ## length of x
lower = -1, ## lower bound for x
upper = 3, ## upper bound for x
n = 5) ## number of levels per element in x
## 2 variables with 5, 5 levels: 25 function evaluations required.
Функция показывает вам все комбинации параметров, которые она пробовала.
res$levels
## [[1]]
## [1] -1 -1
##
## [[2]]
## [1] 0 -1
##
## [[3]]
## [1] 1 -1
##
## ....
И он предоставляет значения целевой функции, связанные с этими комбинациями.
res$values
## [1] NA 0 -1 -2 -3 NA 0 0 0 0 NA 0 1 2 3
## [16] NA 0 2 4 6 NA 0 3 6 9
## => many objective functions values are NA
Лучшее (не- NA
) решение:
res$minlevels
## [1] 3 -1
## => your starting value for optim:
##
## optim(gridSearch(fn, npar = 2,
## lower = -1, upper = 3, n = 5)$minlevels,
## fn, dat = dat)
Конечно, это не даст вам гарантии, что найден хотя бы один не-NA
вектор, но шансы могут улучшиться.