fminsearch Алгоритм

fminsearch использует алгоритм симплекса Нелдера-Мида, как описано в Lagarias et al. [57]. Этот алгоритм использует симплекс n + 1 точек для n -мерных векторов x. Алгоритм сначала делает симплекс вокруг начального предположения x 0, добавляя 5% каждого компонента x 0 (i) к x 0 и используя эти векторы n как элементы симплекса в дополнение к x 0. (Алгоритм использует 0,00025 как компонент i если x 0 (i) = 0.) Затем алгоритм неоднократно изменяет симплекс согласно следующей процедуре.

Примечание

Ключевые слова для fminsearch итеративное отображение появляется жирным шрифтом после описания шага.

  1. Пусть x (i) обозначают список точек в текущем симплексе,  i = 1,..., n + 1.

  2. Упорядочьте точки в симплексе от самого низкого значения функции f (x (1)) до самого высокого f (x (n + 1)). На каждом шаге итерации алгоритм отбрасывает текущий x худшей точки (n + 1) и принимает другую точку в симплекс. [Или, в случае шага 7 ниже, он изменяет все точки n со значениями выше f (x (1))].

  3. Сгенерируйте точку reflected

    r = 2 mx (n + 1),

    где

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

    и вычислите f (r).

  4. Если f (x (1)) ≤ <reservedrangesplaceholder5> (<reservedrangesplaceholder4>) <f (x (<reservedrangesplaceholder1>)), примите r и закончите эту итерацию. Размышлять

  5. Если f (r) < f (x (1)), вычислите точку расширения s

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

    и вычислите f (s).

    1. Если f (s) < f (r), примите s и завершите итерацию. Расшириться

    2. В противном случае примите r и завершите итерацию. Размышлять

  6. Если f (r) ≥ f (x (n)), выполните contraction между m и x (n + 1) или r, в зависимости от того, которое имеет более низкое значение целевой функции.

    1. Если f (r) < f (x (n + 1)) (то есть r лучше x (n + 1)), вычислите

      c = m + (rm)/2

      и вычислите f (c). Если f ( c) < f (r), примите c и завершите итерацию. Контракт вне

      В противном случае перейдите к шагу 7 (усадка).

    2. Если f (r) ≥ f (x (n + 1)), вычислите

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

      и вычислите f (cc). Если f ( cc) < f (x (n + 1)), примите cc и завершите итерацию. Контракт внутри

      В противном случае перейдите к шагу 7 (усадка).

  7. Вычислим точки n

    v (<reservedrangesplaceholder4>) = x (1) + (x (<reservedrangesplaceholder1>) – x (1))/2

    и вычислите f (v (i)), i = 2,..., n + 1. Симплекс при следующей итерации - x (1), v (2),..., v (n + 1). Сжаться

Следующий рисунок показывает точки, которые fminsearch может рассчитываться в процедуре вместе с каждым возможным новым симплексом. Исходный симплекс имеет жирный контур. Итерации продолжаются до тех пор, пока они не удовлетворяют критерию остановки.

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

См. также

Похожие темы