Nelder-Mead metod
Ej att förväxla med "
simplexmetoden " från linjär programmering, en metod för att optimera ett linjärt system med begränsningar.
Nelder-Mead-metoden , även känd som den deformerbara polyedermetoden och simplexmetoden , är en metod för ovillkorlig optimering av en funktion av flera variabler som inte använder derivatan (mer exakt, gradienter ) av funktionen, och därför är lätt tillämpas på icke- jämna och/eller bullriga funktioner.
Kärnan i metoden är att sekventiellt flytta och deformera simplexen runt extremumpunkten.
Metoden hittar ett lokalt extremum och kan fastna i ett av dem. Om du fortfarande behöver hitta ett globalt extremum kan du försöka välja en annan initial simplex. En mer avancerad metod för att eliminera lokala extrema finns i algoritmer baserade på Monte Carlo-metoden , såväl som i evolutionära algoritmer .
Algoritm
Låt det krävas att hitta det ovillkorliga minimumet av en funktion av n variabler . Det antas att det inte finns några allvarliga begränsningar för funktionens definitionsdomän, det vill säga funktionen definieras vid alla påträffade punkter.

Metodparametrarna är:
- reflektionskoefficienten , väljs vanligtvis lika med .


- kompressionsförhållandet väljs vanligtvis lika med .


- sträckfaktorn väljs vanligtvis lika med .


- "Träning". Först väljs en punkt som bildar en simplex av ett n-dimensionellt utrymme. Vid dessa punkter beräknas funktionens värden: .



- "Sortering". Vi väljer tre punkter från hörnen i simplexen: med det största (från det valda) värdet på funktionen , med det näst största värdet och med det minsta värdet på funktionen . Målet med ytterligare manipulationer kommer att vara att åtminstone minska .







- Låt oss hitta tyngdpunkten för alla punkter, förutom : . Det är inte nödvändigt att beräkna .



- "Reflexion". Vi reflekterar punkten med avseende på koefficienten (vid detta kommer att vara central symmetri , i det allmänna fallet - homoteti ), vi får punkten och beräknar funktionen i den: . Koordinaterna för den nya punkten beräknas med formeln:






.
- Därefter tittar vi på hur mycket vi lyckades minska funktionen, vi letar efter en plats i serien .

Om , då är riktningen framgångsrik och du kan försöka öka steget. Vi producerar "stretching". Nytt punkt och funktionsvärde .


Om , då kan vi utöka simplexen till denna punkt: vi tilldelar punkten ett värde och avslutar iterationen (i steg 9).

Om , sedan flyttat för långt: tilldela ett värde till punkten och avsluta iterationen (till steg 9).

Om , då är valet av punkt inte dåligt (den nya är bättre än de två tidigare). Tilldela ett värde till punkten och gå till steg 9.

Om , byt sedan ut värdena för och . Du måste också byta ut värdena för och . Efter det går vi till steg 6.



Om , gå bara till nästa steg 6.
Som ett resultat (kanske efter byte av namn) .
- "Kompression". Vi bygger en punkt och beräknar värdet i den .


- Om , tilldela sedan ett värde till punkten och gå till steg 9.



- Om , då visade sig de första punkterna vara de mest framgångsrika. Vi gör en "global sammandragning" av simplex -homoteten till den punkt med det minsta värdet :


, .
- Det sista steget är att kontrollera konvergensen. Det kan göras på olika sätt, till exempel genom att uppskatta variansen för en uppsättning punkter. Kärnan i kontrollen är att kontrollera den ömsesidiga närheten av de erhållna hörnen i simplexen, vilket också innebär att de är nära det erforderliga minimumet. Om den erforderliga noggrannheten ännu inte uppnåtts kan du fortsätta att iterera från steg 2.
Källor