Nelder-Mead metod



Sekventiella förenklingar i Nelder-Mead-metoden för Rosenbrock-funktionen (överst) och Himmelblau-funktionen (nederst)
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:

  1. "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: .
  2. "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 .
  3. Låt oss hitta tyngdpunkten för alla punkter, förutom : . Det är inte nödvändigt att beräkna .
  4. "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: .
  5. 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) .
  6. "Kompression". Vi bygger en punkt och beräknar värdet i den .
  7. Om , tilldela sedan ett värde till punkten och gå till steg 9.
  8. 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 : , .
  9. 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