аргументы neldermead в R - PullRequest
       34

аргументы neldermead в R

0 голосов
/ 28 февраля 2019

Я не нашел примеров использования neldermead () в интернете, поэтому я решил опубликовать следующее.Тем не менее, я не могу понять, как контролировать максимальное количество итераций алгоритма.https://cran.r -project.org / web / packages / neldermead / neldermead.pdf

Что гласит следующее:

optbase Объект класса 'optimbase', то есть список, созданный optimbase () и содержащий следующие элементы:

повторений Количество итераций.

РабочийПример использования Nelder Mead для подгонки параболы путем минимизации остатков

library(neldermead); library(nloptr);

##  ========= Minimizing the residuals for a 2d quadrature =========== ##
x2d = seq(-4,6,length.out=50);        ## x vector definition
ynoise = runif(n=50, min=-2, max = 2) ## noise
y2d  = 1.3 + (x2d-2.1)^2 + ynoise     ## y data for fitting


## Fitting with nelder-mead
quadmin <- function(x){ sum(  (y2d - x[1] - (x2d - x[2])^2)^2  )  }
x000 <- c(1, 2)
sol2d <- neldermead(x0 = x000, fn = quadmin)    
sol2d

yfit = sol2d[[1]][1] + (x2d - sol2d[[1]][2])^2      ## Fitted curve.   
plot(x2d, y2d); lines(x2d, yfit)    ## Plotting 

Но я собираюсь сделать что-то вроде:

sol2d <- neldermead(x0 = x000, fn = quadmin, iterations = 200)

^^^, что не работает.Также не внесение его в список:

sol2d <- neldermead(x0 = x000, fn = quadmin, optbase = list(iterations = 200))

Это основной вопрос о том, как использовать эти аргументы, поэтому я прошу прощения, если это не правильный заголовок.Заранее спасибо за помощь.

1 Ответ

0 голосов
/ 28 февраля 2019

В R доступны как минимум функции буксировки neldermead.Один из пакета neldermead, который соответствует документации, на которую вы ссылаетесь.Я не смог заставить его работать.Это не возвращает мне ни ошибки, ни решения.Код:

library(neldermead)
library(nloptr)
##  ========= Minimizing the residuals for a 2d quadrature =========== ##
x2d = seq(-4,6,length.out=50);        ## x vector definition
ynoise = runif(n=50, min=-2, max = 2) ## noise
y2d  = 1.3 + (x2d-2.1)^2 + ynoise     ## y data for fitting


## Fitting with nelder-mead
quadmin <- function(x){ 
  sum(y2d - x[1] - (x2d - x[2])^2)^2  }
x000 <- c(1, 2)


opt <- optimbase(x0 = as.matrix(x000),fx0 = -1000,maxiter = 200,fopt = quadmin,verbose=T)
sol2d <- neldermead::neldermead(opt)    

С другой стороны, пакет nloptr также предоставляет функцию neldermedad, синтаксис которой выглядит ближе к вашему коду, и я смог запустить:

library(neldermead)
library(nloptr)
##  ========= Minimizing the residuals for a 2d quadrature =========== ##
x2d = seq(-4,6,length.out=50);        ## x vector definition
ynoise = runif(n=50, min=-2, max = 2) ## noise
y2d  = 1.3 + (x2d-2.1)^2 + ynoise     ## y data for fitting


## Fitting with nelder-mead
quadmin <- function(x){ 
  sum(y2d - x[1] - (x2d - x[2])^2)^2  }
x000 <- c(1, 2)


sol2d <- nloptr::neldermead(x0 = x000,fn =quadmin,control =list(maxeval=200))


yfit = sol2d[[1]][1] + (x2d - sol2d[[1]][2])^2      ## Fitted curve.   
plot(x2d, y2d); lines(x2d, yfit)

Как видите, единственной проблемой с вашим кодом была часть control.Лучший! * * 1013

...