Nelder–Mead算法详解
目录
- 1. Nelder–Mead算法[^1]
- 介绍
- 算法步骤
1. Nelder–Mead算法1
介绍
请不要与Dantzig针对线性优化问题的simplex algorithem(单纯型)方法混淆
用于多维空间寻找目标函数的最大值最小值问题。它是基于比较的直接搜索方法,通常应用于导数不可知的非线性优化问题。局部优化方法,所得解不稳定。
通常用来求解最小化问题,需要求解最大化问题f(x)时,就是最小化-f(x)
n维的Nelder–Mead包括n+1个测试点,组成一个simplex,然后计算的每个点的目标函数值,目的是找到一个新的测试点替代旧的测试点,迭代进程。最简单的方法是用质心(前n个点的均值)的反射点(reflection)替换最差的点、如果反射点比当前点更好,可以继续在反射点的方向上延伸寻找;如果不敌当前点,那就将所有点往一个更好的方向收缩。
算法步骤
目标是求解f(x)的最小值,x∈Rx\in Rx∈R. 目前的测试点有x1x_1x1, …, xn+1x_{n+1}xn+1
- 将各个的测试点的函数值从小到大排序:f(x1)≤f(x2)≤...≤f(xn+1)f(x_1) \le f(x_2) \le ... \le f(x_{n+1})f(x1)≤f(x2)≤...≤f(xn+1) 并检查是否需要终止
- 计算质心xox_oxo, 等于前n个x的平均值
- 计算反射点xr=xo+α(xo−xn+1),α>0x_r = x_o + \alpha(x_o - x_{n+1}), \alpha \gt 0xr=xo+α(xo−xn+1),α>0
1)reflection
如果f(xr)f(x_r)f(xr)优于第二差的点,但劣于目前最好的点,i.e f(x1)≤f(xr)<f(xn)f(x_1) \le f(x_r) \lt f(x_n)f(x1)≤f(xr)<f(xn) 将xn+1x_{n+1}xn+1替换成xrx_rxr获得新的单纯型,回到第1步
2)expansion
如果f(xr)<f(1)f(x_r) \lt f(1)f(xr)<f(1),那么在这一方向上延伸寻找,计算扩展点(expanded point)xe=xo+γ(xr−xo),γ>1x_e = x_o + \gamma(x_r-x_o), \gamma \gt 1xe=xo+γ(xr−xo),γ>1
: ① f(xe)<f(xr)f(x_e) \lt f(x_r)f(xe)<f(xr), 用xex_exe替代xn+1x_{n+1}xn+1,回到第一步
: ② 否则,用xrx_rxr替代xn+1x_{n+1}xn+1,回到第一步
3)contraction
f(xr)≥f(xn)f(x_r) \ge f(x_n)f(xr)≥f(xn) 接着计算contracted point xe=xo+ρ(xn+1−xo),0<ρ≤0.5x_e = x_o + \rho(x_{n+1} - x_o), 0 \lt \rho \le 0.5xe=xo+ρ(xn+1−xo),0<ρ≤0.5
: 如果f(xc)<f(xn+1)f(x_c) \lt f(x_{n+1})f(xc)<f(xn+1), 用xcx_cxc替代xn+1x_{n+1}xn+1,回到第一步
4)shrink
如果以上条件都不满足,将x1以外的点全部按以下方式替换xi=x1+σ(xi−x1)x_i = x_1 + \sigma(x_i - x_1)xi=x1+σ(xi−x1)返回第一步
5)注:α.β,ρ,σ\alpha. \beta, \rho, \sigmaα.β,ρ,σ分别是反射系数、扩张系数、紧缩系数和收缩系数。标准值设定为α=1,γ=2,ρ=1/2,σ=1/2\alpha=1, \gamma=2, \rho=1/2, \sigma=1/2α=1,γ=2,ρ=1/2,σ=1/2
终止条件设定
标准离差或其他数值小于tolerance, 或者迭代次数达到阀值
[维基百科]https://en.wikipedia.org/wiki/Nelder–Mead_method#cite_note-PM-1) ↩︎
Nelder–Mead算法详解相关推荐
- Matlab人脸检测算法详解
这是一个Matlab人脸检测算法详解 前言 人脸检测结果 算法详解 源代码解析 所调用函数解析 bwlabel(BW,n) regionprops rectangle 总结 前言 目前主流的人脸检测与 ...
- 图论-最短路Dijkstra算法详解超详 有图解
整体来看dij就是从起点开始扩散致整个图的过程,为什么说他稳定呢,是因为他每次迭代,都能得到至少一个结点的最短路.(不像SPFA,玄学复杂度) 但是他的缺点就是不能处理带负权值的边,和代码量稍稍复杂. ...
- C++中的STL算法详解
1.STL算法详解 STL提供能在各种容器中通用的算法(大约有70种),如插入.删除.查找.排序等.算法就是函数模板,算法通过迭代器来操纵容器中的元素.许多算法操作的是容器上的一个区间(也可以是整个容 ...
- 粒子群(pso)算法详解matlab代码,粒子群(pso)算法详解matlab代码
粒子群(pso)算法详解matlab代码 (1)---- 一.粒子群算法的历史 粒子群算法源于复杂适应系统(Complex Adaptive System,CAS).CAS理论于1994年正式提出,C ...
- 基础排序算法详解与优化
文章图片存储在GitHub,网速不佳的朋友,请看<基础排序算法详解与优化> 或者 来我的技术小站 godbmw.com 1. 谈谈基础排序 常见的基础排序有选择排序.冒泡排序和插入排序.众 ...
- 目标检测 RCNN算法详解
原文:http://blog.csdn.net/shenxiaolu1984/article/details/51066975 [目标检测]RCNN算法详解 Girshick, Ross, et al ...
- Twitter-Snowflake,64位自增ID算法详解
Twitter-Snowflake,64位自增ID算法详解 from: http://www.lanindex.com/twitter-snowflake%EF%BC%8C64%E4%BD%8D%E8 ...
- 数据结构与算法详解目录
数据结构与算法详解是一本以实例和实践为主的图书,主要是经典的数据结构与常见算法案例,来自历年考研.软考等考题,有算法思路和完整的代码,最后提供了C语言调试技术的方法. 后续配套微课视频. 第0章 基 ...
- [搜索]波特词干(Porter Streamming)提取算法详解(2)
接[搜索]波特词干(Porter Streamming)提取算法详解(1), http://blog.csdn.net/zhanghaiyang9999/article/details/4162 ...
最新文章
- 电脑不能安装虚拟机--解决办法
- ceph auth get_CPB羽梦幻境体验展来了!快来GET限量产品!
- 我是一个尝试做自媒体的程序员
- C#winform之自定义按钮形状
- 移动互联网创业:美国不代表全球
- 黑马旅游网 —— 登录/注册案例
- android 实现返回键执行home键方法
- linux下罗技摄像头采集图片,网络摄像头罗技和Linux
- (三)音视频:解析H264 SPS 更进一步理解H264
- FFMpeg.AutoGen(1)讲解官方example代码:Main函数、 解码
- 用户行为分析的基本概览和常用名词解释
- 华为magic ui就是鸿蒙系统,Magic UI系统是什么?Magic UI和EMUI的区别
- Jetson+zed2安装
- 3D Slicer简单三维重建
- 研一一整年都在搞深度学习,研二醒悟打算转开发
- 算法学习笔记17:堆、堆排序
- docker下载安装Zookeeper
- 赋能 打造应对不确定性的敏捷团队 pdf_赋能——打造应对不确定的敏捷团队|《赋能》斯坦利...
- fanfou+wiki
- iP1000废弃墨水吸收器已满解决方法
热门文章
- Lycn 2013 with SQL AlwaysOn 「二」偷梁换柱装Lync
- brendan eich_访谈:Brendan Eich对JavaScript的祝福和诅咒
- 记录生活账本,查看账目清晰更可查
- 【教程】爱玩吧QQ空间说说刷赞网怎么刷秒赞教程
- 非平衡电桥电阻计算_非平衡电阻电桥等效电阻的初等解析
- Getter和Setter是什么?有什么作用?实现多种数据类型的Getter、Setter方法?实现Getter、Setter的常见的错误?
- 四则运算小程序 c语言,四则运算小程序测试
- 基于Docker部署SRS流媒体服务
- 农村产权交易服务平台二次开发html源码
- 特色英文短语[转帖]