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
итеративное отображение появляется жирным шрифтом после описания шага.
Пусть x (i) обозначают список точек в текущем симплексе, i = 1,..., n + 1.
Упорядочьте точки в симплексе от самого низкого значения функции f (x (1)) до самого высокого f (x (n + 1)). На каждом шаге итерации алгоритм отбрасывает текущий x худшей точки (n + 1) и принимает другую точку в симплекс. [Или, в случае шага 7 ниже, он изменяет все точки n со значениями выше f (x (1))].
Сгенерируйте точку reflected
r = 2 m – x (n + 1),
где
m = и x (i )/ n, i = 1... n,
и вычислите f (r).
Если f (x (1)) ≤ <reservedrangesplaceholder5> (<reservedrangesplaceholder4>) <f (x (<reservedrangesplaceholder1>)), примите r и закончите эту итерацию. Размышлять
Если f (r) < f (x (1)), вычислите точку расширения s
s = m + 2 (m – x (n + 1)),
и вычислите f (s).
Если f (s) < f (r), примите s и завершите итерацию. Расшириться
В противном случае примите r и завершите итерацию. Размышлять
Если f (r) ≥ f (x (n)), выполните contraction между m и x (n + 1) или r, в зависимости от того, которое имеет более низкое значение целевой функции.
Если f (r) < f (x (n + 1)) (то есть r лучше x (n + 1)), вычислите
c = m + (r – m)/2
и вычислите f (c). Если f ( c) < f (r), примите c и завершите итерацию. Контракт вне
В противном случае перейдите к шагу 7 (усадка).
Если f (r) ≥ f (x (n + 1)), вычислите
cc = m + (x (n + 1) – m)/2
и вычислите f (cc). Если f ( cc) < f (x (n + 1)), примите cc и завершите итерацию. Контракт внутри
В противном случае перейдите к шагу 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
может рассчитываться в процедуре вместе с каждым возможным новым симплексом. Исходный симплекс имеет жирный контур. Итерации продолжаются до тех пор, пока они не удовлетворяют критерию остановки.