Nelder-Mead 演算法
03-18
閱讀原文
預備知識 Matlab
Nelder-Mead 演算法是一種求多元函數局部最小值的演算法, 其優點是不需要函數可導並能較快收斂到局部最小值. Matlab 自帶的 fminsearch 函數就是使用該演算法. 對 N 元函數 f (這裡把函數自變數用 N 維矢量來表示), 該演算法需要提供函數自變數空間中的一個初始點, , 演算法從該點出發尋找局部最小值. 以下講解具體演算法.
我們先根據初始點另外生成另外 N 個初始點 , 使 在第的第 i 個分量比 的大 5%, 其他分量保持相同. 如果 的第 i 個分量為零, 那麼 的第 i 個分量設為 0.00025. 得到 N+1 個初始點後, 開始按照以下步驟進行循環, 直到滿足特定的精度條件時退出循環.
- 先給這些點按照 從小到大的順序重新排序並重命名, 使 i 越大 越大.
- 計算前 N 個點的平均位置為 (1)
- 計算 關於點 的反射點為 (2)
- 如果 , 令 , 並進入下一個循環.
- 如果 , 計算拓展點為 (3) 如果 , 令 並進入下一個循環, 否則令 . 並進入下一循環.
- 如果 , 令 (4) 如果 , 令 並進入下一循環, 否則執行最後一步.
(剩下部分見頂部的「閱讀原文」)
推薦閱讀: