optim: General-purpose Optimization

Details

Merk op dat argumenten na exact moeten overeenkomen.

Normaal voert optim een minimalisatie uit, maar het zal maximaliseren als control$fnscale negatief is. optimHess is een hulpfunctie om later de Hessian te berekenen als hessian = TRUE vergeten is.

De standaardmethode is een implementatie van die van Nelder en Mead (1965), die alleen functiewaarden gebruikt en robuust is, maar relatief langzaam. Deze methode werkt redelijk goed voor niet-gedifferentieerde functies.

Methode "BFGS" is een quasi-Newton methode (ook bekend als een variabel metrisch algoritme), met name die welke in 1970 gelijktijdig is gepubliceerd door Broyden, Fletcher, Goldfarb en Shanno. Deze gebruikt functiewaarden en gradiënten om een beeld op te bouwen van het te optimaliseren oppervlak.

Methode "CG" is een geconjugeerde gradiënten methode, gebaseerd op die van Fletcher en Reeves (1964) (maar met de mogelijkheid van Polak–Ribiere of Beale–Sorenson updates). Conjugate gradient methoden zullen over het algemeen kwetsbaarder zijn dan de BFGS methode, maar omdat ze geen matrix opslaan kunnen ze succesvol zijn in veel grotere optimalisatieproblemen.

Methode "L-BFGS-B" is die van Byrd et. al. (1995) die box constraints toestaat, dat wil zeggen dat aan elke variabele een onder- en/of bovengrens kan worden gegeven. De beginwaarde moet aan de beperkingen voldoen. Hierbij wordt gebruik gemaakt van een beperkte-geheugenmodificatie van de BFGS quasi-Newton methode. Als niet-triviale limieten worden opgegeven, wordt deze methode geselecteerd, met een waarschuwing.

Nocedal and Wright (1999) is een uitgebreide referentie voor de vorige drie methoden.

Methode "SANN" is standaard een variant van gesimuleerde annealing, gegeven in Belisle (1992). Gesimuleerde-annealing behoort tot de klasse van stochastische globale optimalisatiemethoden. Deze methode gebruikt alleen functiewaarden, maar is relatief langzaam. Zij werkt ook voor niet-gedifferentieerde functies. Deze implementatie gebruikt de Metropolis-functie voor de aanvaardingskans. Standaard wordt het volgende kandidaat-punt gegenereerd uit een Gaussische Markov kernel met een schaal evenredig met de actuele temperatuur. Als een functie voor het genereren van een nieuw kandidaat-punt is gegeven, kan methode "SANN" ook worden gebruikt om combinatorische optimalisatieproblemen op te lossen. De temperatuur wordt verlaagd volgens het logaritmische afkoelingsschema zoals gegeven in Belisle (1992, p.890); meer bepaald wordt de temperatuur ingesteld op temp / log(((t-1) %/% tmax)*tmax + exp(1)), waarbij t de huidige iteratiestap is en temp en tmax kunnen worden gespecificeerd via control, zie hieronder. Merk op dat de methode "SANN" sterk afhankelijk is van de instellingen van de regelparameters. Het is geen methode voor algemeen gebruik, maar kan zeer nuttig zijn om tot een goede waarde te komen op een zeer ruw oppervlak.

Methode "Brent" is alleen voor eendimensionale problemen, met gebruikmaking van optimize(). Het kan nuttig zijn in gevallen waar optim() wordt gebruikt binnen andere functies waar alleen method kan worden opgegeven, zoals in mle van pakket stats4.

Functie fn kan NA of Inf teruggeven als de functie niet kan worden geëvalueerd op de opgegeven waarde, maar de beginwaarde moet een berekenbare eindige waarde van fn hebben. (Behalve voor methode "L-BFGS-B", waar de waarden altijd eindig moeten zijn.)

optim kan recursief worden gebruikt, en zowel voor een enkele parameter als voor vele. Het accepteert ook een nul-lengte par, en evalueert gewoon de functie met dat argument.

Het control argument is een lijst die een van de volgende componenten kan leveren:

trace

Niet-negatief geheel getal. Indien positief, wordt er traceringsinformatie over de voortgang van de optimalisatie geproduceerd. Hogere waarden kunnen meer traceringsinformatie opleveren: voor methode "L-BFGS-B" zijn er zes traceringsniveaus. (Zie de broncode om te begrijpen wat deze precies doen: hogere niveaus geven meer detail.)

fnscale

Een algemene schaling die wordt toegepast op de waarde van fn en gr tijdens de optimalisatie. Indien negatief, verandert het probleem in een maximalisatieprobleem. Optimalisatie wordt uitgevoerd op fn(par)/fnscale.

parscale

Een vector van schalingswaarden voor de parameters. De optimalisatie wordt uitgevoerd op par/parscale en deze moeten vergelijkbaar zijn in de zin dat een verandering van een eenheid in een element ongeveer een verandering van een eenheid in de geschaalde waarde oplevert. Niet gebruikt (noch nodig) voor method = "Brent".

ndeps

Een vector van stapgroottes voor de eindige-verschillen benadering van de gradiënt, op par/parscale schaal. Standaard ingesteld op 1e-3.

maxit

Het maximum aantal iteraties. Standaard 100 voor de afgeleide-gebaseerde methoden, en 500 voor "Nelder-Mead".

Voor "SANN" maxit geeft het totaal aantal functie-evaluaties: er is geen ander stop-criterium. Standaard 10000.

abstol

De absolute convergentietolerantie. Alleen nuttig voor niet-negatieve functies, als een tolerantie voor het bereiken van nul.

reltol

Relatieve convergentietolerantie. Het algoritme stopt als het niet in staat is de waarde met een factor reltol * (abs(val) + reltol) per stap te verminderen. Standaard op sqrt(.Machine$double.eps), gewoonlijk ongeveer 1e-8.

alpha,beta,gamma

Schalingsparameters voor de methode "Nelder-Mead". alpha is de reflectie factor (standaard 1.0), beta de contractie factor (0.5) en gamma de expansie factor (2.0).

REPORT

De frequentie van rapporten voor de "BFGS", "L-BFGS-B" en "SANN" methoden indien control$trace positief is. Standaard op elke 10 iteraties voor "BFGS" en "L-BFGS-B", of elke 100 temperaturen voor "SANN".

warn.1d.NelderMead

a logical die aangeeft of de (standaard) methode "Nelder-Mean" een waarschuwing moet geven als deze wordt gebruikt voor een-dimensionale minimalisatie. Aangezien de waarschuwing soms ongepast is, kunt u deze onderdrukken door deze optie op false te zetten.

type

voor de conjugate-gradients methode. Neemt de waarde 1 voor de Fletcher-Reeves update, 2 voor Polak-Ribiere en 3 voor Beale-Sorenson.

lmm

is een geheel getal dat het aantal BFGS updates geeft dat in de "L-BFGS-B" methode behouden blijft, Het staat standaard op 5.

factr

regelt de convergentie van de "L-BFGS-B" methode. Convergentie treedt op als de reductie van de doelstelling binnen deze factor van de machinetolerantie ligt. Standaard is 1e7, dat is een tolerantie van ongeveer 1e-8.

pgtol

Helpt de convergentie van de methode "L-BFGS-B" te regelen. Het is een tolerantie op de geprojecteerde gradiënt in de huidige zoekrichting. Deze wordt standaard op nul gezet, wanneer de controle wordt onderdrukt.

temp

controleert de methode "SANN". Het is de begintemperatuur voor het koelschema. Standaard ingesteld op 10.

tmax

is het aantal functie-evaluaties bij elke temperatuur voor de methode "SANN". Standaard ingesteld op 10.

Enige naam gegeven aan par zal worden gekopieerd naar de vectoren die zijn doorgegeven aan fn en gr. Merk op dat geen andere attributen van par worden gekopieerd.

De parameter vector die aan fn wordt doorgegeven heeft speciale semantiek en kan worden gedeeld tussen aanroepen: de functie mag deze niet veranderen of kopiëren.