Details
Nota que os argumentos após …
devem ser combinados exactamente.
Por defeito optim
realiza a minimização, mas irá maximizar se control$fnscale
for negativo. optimHess
é uma função auxiliar para calcular o Hessian num estágio posterior se hessian = TRUE
foi esquecido.
O método padrão é uma implementação do de Nelder e Mead (1965), que usa apenas valores de função e é robusto, mas relativamente lento. Ele funcionará razoavelmente bem para funções não-diferenciáveis.
Método "BFGS"
é um método quase-Newton (também conhecido como algoritmo de métrica variável), especificamente aquele publicado simultaneamente em 1970 por Broyden, Fletcher, Goldfarb e Shanno. Isto usa valores de função e gradientes para construir uma imagem da superfície a ser otimizada.
Método "CG"
é um método de gradientes conjugados baseado no de Fletcher e Reeves (1964) (mas com a opção de Polak–Ribiere ou Beale–Sorenson updates). Métodos de gradientes conjugados geralmente serão mais frágeis que o método BFGS, mas como eles não armazenam uma matriz eles podem ter sucesso em problemas de otimização muito maiores.
Método "L-BFGS-B"
é o de Byrd et. al. (1995) que permite restrições de caixa, ou seja, cada variável pode receber um limite inferior e/ou superior. O valor inicial deve satisfazer as restrições. Isto usa uma modificação de memória limitada do método quasi-Newton do BFGS. Se forem fornecidos limites não triviais, este método será selecionado, com um aviso.
Nocedal e Wright (1999) é uma referência abrangente para os três métodos anteriores.
Método "SANN"
é por padrão uma variante do recozimento simulado dado em Belisle (1992). O recozimento simulado pertence à classe dos métodos estocásticos de otimização global. Ele usa apenas valores de função, mas é relativamente lento. Ele também funciona para funções não-diferenciáveis. Esta implementação utiliza a função Metropolis para a probabilidade de aceitação. Por padrão o próximo ponto candidato é gerado a partir de um kernel Markov Gaussiano com escala proporcional à temperatura real. Se uma função para gerar um novo ponto candidato for dada, o método "SANN"
também pode ser usado para resolver problemas de otimização combinatória. As temperaturas são diminuídas de acordo com o horário de resfriamento logarítmico como dado em Belisle (1992, p.890); especificamente, a temperatura é ajustada para temp / log(((t-1) %/% tmax)*tmax + exp(1))
, onde t
é o passo de iteração atual e temp
e tmax
são especificáveis via control
, veja abaixo. Note que o método "SANN"
depende criticamente das configurações dos parâmetros de controle. Não é um método de propósito geral mas pode ser muito útil para se chegar a um bom valor em uma superfície muito áspera.
Método "Brent"
é apenas para problemas unidimensionais, usando optimize()
. Pode ser útil em casos onde optim()
é usado dentro de outras funções onde apenas method
pode ser especificado, como em mle
das estatísticas do pacote4.
Função fn
pode retornar NA
ou Inf
se a função não pode ser avaliada no valor fornecido, mas o valor inicial deve ter um valor finito computável de fn
. (Excepto para o método "L-BFGS-B"
onde os valores devem ser sempre finitos.)
optim
pode ser usado recursivamente, e para um único parâmetro assim como para muitos. Ele também aceita um comprimento zero par
, e apenas avalia a função com esse argumento.
O argumento control
é uma lista que pode fornecer qualquer um dos seguintes componentes:
trace
Non-negativo inteiro. Se positivo, é produzida informação de rastreamento sobre o progresso da otimização. Valores superiores podem produzir mais informação de rastreamento: para o método "L-BFGS-B"
há seis níveis de rastreamento. (Para entender exatamente o que eles fazem veja o código fonte: níveis mais altos dão mais detalhes.)
fnscale
Um escalonamento geral a ser aplicado ao valor de fn
e gr
durante a otimização. Se negativo, transforma o problema em um problema de maximização. A otimização é realizada em fn(par)/fnscale
.
parscale
Um vetor de escala de valores para os parâmetros. A otimização é realizada em par/parscale
e estes devem ser comparáveis no sentido de que uma mudança de unidade em qualquer elemento produz aproximadamente uma mudança de unidade no valor escalonado. Não usado (nem necessário)para method = "Brent"
.
ndeps
Um vetor de tamanhos de passos para a aproximação da diferença finita ao gradiente, em par/parscale
escala. O valor padrão é 1e-3
.
maxit
O número máximo de iterações. O padrão para 100
para os métodos baseados em derivadas, e 500
para "Nelder-Mead"
.
Para "SANN"
maxit
dá o número total de avaliações de função: não há outro critério de parada. O padrão para 10000
.
abstol
A tolerância de convergência absoluta. Apenas útil para funções não negativas, como tolerância para atingir zero.
reltol
Tolerância de convergência relativa. O algoritmo pára se não for capaz de reduzir o valor por um factor de reltol * (abs(val) + reltol)
num passo. O valor padrão é sqrt(.Machine$double.eps)
, normalmente cerca de 1e-8
.
alpha
,beta
,gamma
Parâmetros de escalonamento para o método "Nelder-Mead"
. alpha
é o fator de reflexão (padrão 1,0), beta
o fator de contração (0,5) e gamma
o fator de expansão (2,0).
REPORT
A freqüência de relatórios para os métodos "BFGS"
, "L-BFGS-B"
e "SANN"
se control$trace
for positiva. O padrão a cada 10 iterações para "BFGS"
e "L-BFGS-B"
, ou a cada 100 temperaturas para "SANN"
.
warn.1d.NelderMead
a logical
indicando se o método (padrão) "Nelder-Mean"
deve sinalizar um aviso quando usado para minimização unidimensional. Como o aviso às vezes é inadequado, você pode suprimi-lo definindo esta opção como falsa.
type
para o método de conjugados-gradientes. Toma valor 1
para o Fletcher–Reeves update, 2
para Polak–Ribiere e 3
para Beale–Sorenson.
lmm
é um número inteiro dando o número de actualizações BFGS retidos no método "L-BFGS-B"
, Por defeito é 5
.
factr
controla a convergência do método "L-BFGS-B"
. A convergência ocorre quando a redução do objetivo está dentro deste fator de tolerância da máquina. O padrão é 1e7
, ou seja, uma tolerância de cerca de 1e-8
.
pgtol
ajuda a controlar a convergência do método "L-BFGS-B"
. É uma tolerância sobre o gradiente projetado na direção da busca atual. Este padrão é zero, quando a verificação é suprimida.
temp
controla o método "SANN"
. É a temperatura inicial para o horário de resfriamento. O padrão para 10
.
tmax
é o número de avaliações de função em cada temperatura para o método "SANN"
. O valor padrão para 10
.
Todos os nomes dados a par
serão copiados para os vetores passados para fn
e gr
. Note que nenhum outro atributo de par
é copiado sobre.
O parâmetro vetor passado para fn
tem semântica especial e pode ser compartilhado entre chamadas: a função não deve mudar ou copiá-lo.