exponenta event banner

fminsearch Алгоритм

fminsearch использует алгоритм симплекса Нелдера-Мид, как описано в Lagarias et al. [57]. Этот алгоритм использует симплекс из n + 1 точек для n-мерных векторов x. Алгоритм сначала делает симплекс вокруг начального предположения x0, добавляя 5% каждого компонента x0 (i) к x0, и используя эти n векторов в качестве элементов симплекса в дополнение к x0. (Алгоритм использует 0,00025 в качестве компонента i, если x0 ( 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. Создание отраженной точки

    r = 2m - x (n + 1),

    где

    m = Startx (i )/n, i = 1... n,

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

  4. Если f (x (1)) f (r) < f (x (n)), примите r и завершите эту итерацию. Размышлять

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

    s = m + 2 (m - x (n + 1)),

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

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

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

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

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

      c = m + (r - m )/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 (i) = x (1) + (x (i) - 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.

См. также

Связанные темы