#r #optimization
#r #оптимизация
Вопрос:
Проблема 1 У меня есть целевая функция, gFun(modelOutput,l,u)
которая возвращает 0, если смоделированный вывод находится в интервале [l,u]
, в противном случае она возвращает положительное (!) число.
OFfun <- function(params) {
out <- simulate(params)
OF <- gFun(out,0,5)
return(OF)
}
Целевая функция вызывается из optim
функции с некоторыми настройками допуска.
fitval=optim(par=parms,fn=OFfun,method="SANN",control = list(abstol = 1e-2))
summary(fitval)
Моя проблема в том, что оптимизация не останавливается, если OFfun == 0.
Я пытался выполнить условие, приведенное ниже:
if (OF == 0){
opt <- options(show.error.messages=FALSE)
on.exit(options(opt))
stop()
}
это работает, но не возвращает значение OF обратно в optim
, и поэтому я не получаю fitval
информацию с оценочными параметрами.
Проблема 2
Другая проблема заключается в том, что решатель иногда выходит из строя и прерывает всю оптимизацию. Я хотел бы собрать множество наборов решений для разных начальных предположений — поэтому мне нужно обработать неудачные симуляции. вероятно, связано с проблемой 1.
Любой совет был бы очень признателен.
Комментарии:
1. Первое: не используйте метод SANN в
optim
, он не является ни надежным, ни эффективным. Второе: если вы собираетесь применить имитацию отжига, есть пакет GenSA с самой современной реализацией. В-третьих: у GenSA есть опция управления, позволяющая останавливать процесс оптимизации при достижении определенного минимального уровня. В моем понимании это то, о чем вы просите. Другие стохастические решатели см. в представлении задачи оптимизации .2. Вопрос, связанный с GenSA, я запускаю следующий fitval = GenSA (par=log (parms), fn = OFfun, lower =log(p_min), upper =log(p_max), control = list (maxit= MaxIter)), но он не учитывает настройку maxit, есть идеи, что я делаю неправильно?
3. Откройте новый вопрос… и предоставьте некоторый воспроизводимый код.
4. Из статьи R Journal: ‘maxit: целое число. Максимальное количество итераций алгоритма. Значение по умолчанию равно 5000, которое может быть увеличено пользователем для оптимизации очень сложной целевой функции. ‘ нет ничего о возможности его уменьшения. (Источник: journal.r-project.org/archive/2013/RJ-2013-002/RJ-2013-002.pdf ). Предоставление кода не является простым, поскольку оно реализуется с использованием проприетарного пакета. К счастью, использование ‘max.time: числовое. Максимальное время выполнения в секундах ‘ Я могу достичь того, что мне нужно,