optimização: General-purpose Optimization

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.