Main Content

Algoritmo fminsearch

fminsearch utiliza el algoritmo simplex Nelder-Mead como se describe en Lagarias et al. [57]. Este algoritmo utiliza un simplex de n + 1 puntos para vectores x de n dimensiones. El algoritmo realiza primero un simplex alrededor de la conjetura inicial x0 añadiendo un 5% de cada componente x0(i) a x0 y utilizando estos n vectores como elementos del simplex, además de x0. (El algoritmo usa 0,00025 como componente i si x0(i) = 0). A continuación, el algoritmo modifica el simplex repetidamente de acuerdo con el siguiente procedimiento.

Nota

Las palabras clave para la visualización iterativa de fminsearch aparecen en negrita después de la descripción del paso.

  1. Deja que x(i) indique la lista de puntos del simplex actual, i = 1,...,n + 1.

  2. Ordena los puntos del simplex del menor valor de la función f(x(1)) al mayor f(x(n + 1)). En cada paso de la iteración, el algoritmo descarta el peor punto actual x(n + 1) y acepta otro punto del simplex. [O, en el caso del paso 7 a continuación, cambia todos los puntos n con valores superiores a f(x(1))].

  3. Genera el punto reflejado

    r = 2mx(n + 1),

    donde

    m = Σx(i)/n, i = 1...n,

    y calcula f(r).

  4. Si f(x(1)) ≤ f(r) < f(x(n)), acepta r y termina esta iteración. Reflect

  5. Si f(r) < f(x(1)), calcula el punto de expansión s

    s = m + 2(mx(n + 1)),

    y calcula f(s).

    1. Si f(s) < f(r), acepta s y termina la iteración. Expand

    2. De lo contrario, acepta r y termina la iteración. Reflect

  6. Si f(r) ≥ f(x(n)), realiza una contracción entre m y x(n + 1) o r, dependiendo de cuál tenga el menor valor de la función objetivo.

    1. Si f(r) < f(x(n + 1)) (es decir, r es mejor que x(n + 1)), calcula

      c = m + (rm)/2

      y calcula f(c). Si f(c) < f(r), acepta c y termina la iteración. Contract outside

      De lo contrario, continúa con el paso 7 (Shrink).

    2. Si f(r) ≥ f(x(n + 1)), calcula

      cc = m + (x(n + 1) – m)/2

      y calcula f(cc). Si f(cc) < f(x(n + 1)), acepta cc y termina la iteración. Contract inside

      De lo contrario, continúa con el paso 7 (Shrink).

  7. Calcula los puntos n

    v(i) = x(1) + (x(i) – x(1))/2

    y calcula f(v(i)), i = 2,...,n + 1. El simplex en la siguiente iteración es x(1), v(2),...,v(n + 1). Shrink

La siguiente figura muestra los puntos que fminsearch puede calcular en el procedimiento, junto con cada nuevo simplex posible. El simplex original tiene un contorno en negrita. Las iteraciones continúan hasta que se encuentran con un criterio de detención.

Graphical representation of fminsearch algorithm showing reflection, expansion, contraction, and shrinking points.

Consulte también

Temas relacionados