Я пытаюсь свести к минимуму простую функцию с шумом:
function(x,prec=10){x^2+rnorm(1)/(prec)}
Шум умеренный, т. Е. Найти оптимальное значение довольно просто при 0.
Что я считаю важным здесь, так это то, что шум независим, т.е. многократная оценка одной и той же точки приблизит вас к истинному (бесшумному) значению. Оптимизатор может воспользоваться этим. Но я не уверен, как.
Я использую mlrMBO
в R для оптимизации, но не могу получить хороший результат. Приведенный ниже код оценивает минимальное значение 0,032, и увеличение iters
, по-видимому, вовсе не улучшает результат.
library(mlrMBO)
f1<-function(x,prec=10){x^2+rnorm(1)/(prec)}
obj.fun = makeSingleObjectiveFunction(name = "noisy_parable", fn = f1, par.set = makeNumericParamSet("x", 1, -3, 3), noisy = TRUE)
ctrl = makeMBOControl(final.method = "best.predicted", final.evals = 1)
ctrl = setMBOControlInfill(ctrl, crit = crit.eqi)
ctrl = setMBOControlTermination(ctrl, iters = 10)
configureMlr(on.learner.warning = "quiet", show.learner.output = FALSE)
set.seed(1)
res = mbo(obj.fun, control = ctrl, show.info = FALSE)
print(res$x)
Моя интуиция заключалась бы в том, что увеличение iter
может продолжить улучшать результат допроизвольно точный результат: логика заключается в том, что, поскольку мы приближаемся к оптимальному, оптимизатор может использовать независимость шума для повышения точности путем многократной оценки одних и тех же / похожих точек.
Я думаю, что этоэто довольно общая настройка (шумная оптимизация с независимым шумом), поэтому я подумал, что оптимизатор будет иметь это встроенное, управляемое с помощью параметра настройки. Если это не так, есть ли способ реализовать это, используя mlrBMO
?
Справочная информация : в моем реальном приложении оценка функции очень затратна (> 2 секунды для шумаэто примерно соответствует приведенному выше примеру), так что я получу большую выгоду при запуске функции с шумом, а затем только увеличу точность (путем повторной оценки тех же точек) по мере приближения к оптимальному.
с более широкими рамками (что является хорошим алгоритмом для такого рода проблем?) задаю и отвечаю сам здесь: https://math.stackexchange.com/questions/3376670/efficient-algorithm-to-search-minimum-of-function-with-noise/3397309#3397309