Nelder-Mead算法(智能优化之下山单纯形法)

这篇具有很好参考价值的文章主要介绍了Nelder-Mead算法(智能优化之下山单纯形法)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Nelder-Mead 算法是一种求多元函数局部最小值的算法,其优点是不需要函数可导并能较快收敛到局部最小值。

该算法需要提供函数自变量空间中的一个初始点x1,算法从该点出发寻找局部最小值

Nelder-Mead方法也称下山单纯形法,是由John Nelder & Roger Mead于1965年提出的一种求解数值优化问题的启发式搜索

给定n+1个顶点neldermead算法,算法,python,Powered by 金山文档(i=1,2...,n+1),这些点对应的函数值为neldermead算法,算法,python,Powered by 金山文档

开始按以下算法步骤进行,直到满足特定的精度条件或者循环次数时退出循环:


一、按照目标函数值对n+1个点进行从好到差排序,确定最坏点neldermead算法,算法,python,Powered by 金山文档,第二最坏点neldermead算法,算法,python,Powered by 金山文档和最好点neldermead算法,算法,python,Powered by 金山文档

二、计算除去最差点外其他点的中心点neldermead算法,算法,python,Powered by 金山文档

三、反射操作,计算反射点neldermead算法,算法,python,Powered by 金山文档(neldermead算法,算法,python,Powered by 金山文档就是最坏的点,C是第二步计算出的中心点,neldermead算法,算法,python,Powered by 金山文档是反射系数,等于1)

  • 3.1若neldermead算法,算法,python,Powered by 金山文档(意思是反射点的结果在最好点和第二差点之间)令neldermead算法,算法,python,Powered by 金山文档(也 就是去掉了最坏点),并进入下一层循环。

  • 3.2若neldermead算法,算法,python,Powered by 金山文档(意思是反射点的结果比最好的点还要好),计算拓展点neldermead算法,算法,python,Powered by 金山文档

3.2.1若neldermead算法,算法,python,Powered by 金山文档(意思是扩展点得到的结果比反射点要好),令neldermead算法,算法,python,Powered by 金山文档,并进入下一 层循环

3.2.2否则neldermead算法,算法,python,Powered by 金山文档(扩展失败的意思),进入下一层循环

  • 3.3若neldermead算法,算法,python,Powered by 金山文档(意思是反射点的结果在最差点和第二差点之间且比最差点要 好)此时进行向外压缩操作,计算neldermead算法,算法,python,Powered by 金山文档

3.3.1若neldermead算法,算法,python,Powered by 金山文档(意思是向外压缩点比反射点结果要好),令neldermead算法,算法,python,Powered by 金山文档(替换掉最 差点),并进入下一层循环

3.3.2否则执行最后一步

  • 3.4若neldermead算法,算法,python,Powered by 金山文档(意思是反射点的结果比最差点还要糟糕),此时进行向内压缩操作,计算neldermead算法,算法,python,Powered by 金山文档

3.4.1若neldermead算法,算法,python,Powered by 金山文档,令neldermead算法,算法,python,Powered by 金山文档,并进入下一层循环

3.4.2否则进入下一层循环

  • 3.5若上述四个条件都不符合,则令neldermead算法,算法,python,Powered by 金山文档(i=2,...n+1),并且将neldermead算法,算法,python,Powered by 金山文档赋值给neldermead算法,算法,python,Powered by 金山文档并进入下一层循环

下面以二元函数neldermead算法,算法,python,Powered by 金山文档为例,使用python编程

给定初始点:[0,0],[1.2,0],[0,0.8]

def func(x1, x2):
    return x1 * x1 - 4 * x1 + x2 * x2 - x2 - x1 * x2


# 创建一个简单的二维数组
x = [[0, 0, 0], [1.2, 0, 0], [0, 0.8, 0]]
n = len(x)
m=0
for m in range(20):
    # 第一步,将这些点按照从小到大排序
    # 计算每个点对应的函数值
    for i in range(n):
        x[i][2] = func(x[i][0], x[i][1])
    # 按照目标函数值进行排序---从小到大排序
    for i in range(n - 1):
        for j in range(n - 1):
            if x[j][2] > x[j + 1][2]:
                temp = x[j]
                x[j] = x[j + 1]
                x[j + 1] = temp
    print("第{}次循环得到的最优值为:".format(m),x[0])
    # 第二步,计算除去最坏点的其他点的中心点
    c = [0, 0, 0]  # 进行一个初始化
    c[0] = (x[0][0] + x[1][0]) / 2
    c[1] = (x[0][1] + x[1][1]) / 2
    c[2] = func(c[0], c[1])

    # 第三步进行反射操作,计算反射点
    xr = [0, 0, 0]
    xr[0] = 2 * c[0] - x[2][0]
    xr[1] = 2 * c[1] - x[2][1]
    xr[2] = func(xr[0], xr[1])
    if x[0][2] <= xr[2] < x[1][2]:
        x[2] = xr
        continue
    elif xr[2] < x[0][2]:
        xe = [0, 0, 0]
        xe[0] = 3 * c[0] - 2 * x[2][0]
        xe[1] = 3 * c[1] - 2 * x[2][1]
        xe[2] = func(xe[0], xe[1])
        if xe[2] < xr[2]:
            x[2] = xe
            continue
        else:
            x[2] = xr
            continue
    elif x[1][2] <= xr[2] < x[2][2]:
        c1 = [0, 0, 0]
        c1[0] = c[0] + (xr[0] - c[0]) / 2
        c1[1] = c[1] + (xr[1] - c[1]) / 2
        c1[2] = func(c1[0], c1[1])
        if c1[2] < xr[2]:
            x[2] = c1
            continue
        else:
            pass
    elif x[2][2] <= xr[2]:
        c2 = [0, 0, 0]
        c2[0] = c[0] + (x[2][0] - c[0])
        c2[1] = c[1] + (x[2][1] - c[1])
        c2[2]=func(c2[0],c2[1])
        if c2[2]<x[2][2]:
            x[2]=c2
            continue
        else:
            pass

    i=1
    for i in range(n):
        x[i][0]=x[0][0]+(x[i][0]-x[0][0])/2
        x[i][1] = x[0][1] + (x[i][1] - x[0][1]) / 2
        x[i][2]=func(x[i][0],x[i][1])
    continue



运行结果如下图所示:文章来源地址https://www.toymoban.com/news/detail-721113.html

neldermead算法,算法,python,Powered by 金山文档

到了这里,关于Nelder-Mead算法(智能优化之下山单纯形法)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 线性规划——单纯形法(原理及代码实现)

    线性规划基本模型 由于单纯性法是用于求解线性规划模型,因此我们对一般的问题进行松弛之后得到了线性规划模型的一般形式(及是LP问题的一般形式)如下: m a x   z = c T X s . t . { A X = b X ≥ 0 max z = c^TX\\\\[2ex] s.t.begin{cases} AX = b\\\\[2ex] Xgeq0 \\\\ end{cases} ma x   z = c T X s . t . ⎩

    2024年02月08日
    浏览(77)
  • 单纯形法求解线性规划问题示例

    今天被一个人问到了一个线性规划问题,这个问题我印象中只有在数学建模中会出现,于是就研究了一下,这里做一个记录。 线性规划问题如下: max z = 90 x 1 + 70 x 2 s . t . { x 1 + x 2 ≤ 16 3 x 1 + 2 x 2 ≤ 36 5 x 2 ≤ 65 x 1 , x 2 ≥ 0 (1) text{max} quad z = 90x_1 + 70x_2 \\\\ begin{align} s.t.left

    2024年02月06日
    浏览(42)
  • 线性规划问题及单纯形法-线性规划变标准形

    线性规划模型的标准形式 (1)目标函数为求极大值 (2)所有功能约束条件(非负条件除外),都是等式 (3)右端常数项为非负 (4)决策变量为非负 标准形转换方法 (1)目标函数值的转换 即在原有目标函数值前面加一个符号,当求出结果后,结果乘以一个负号。 (2)

    2024年02月06日
    浏览(47)
  • 算法中的变形金刚——单纯形算法学习笔记

    目录 阅读本文你将会知道 线性规划简介 线性规划的标准形 一般型转标准型 与 ≤ 线性规划的松弛形 标准型转松弛形 单纯形算法 基本可行解 如何判断最优 旋转操作 如何通过旋转更新解? 退化与布兰德规则 基本不可行解 单纯形算法的几何意义 单纯形算法的时间复杂度分

    2024年04月22日
    浏览(38)
  • “单纯靠大模型无法实现 AGI”!万字长文看人工智能演进 | 新程序员

    【导读】人工智能当前的发展瞬息万变,未来究竟会如何演进?AGI 究竟是否会到来?本文作者深入分析了 AI 的起源和演变,并对 AI 技术的关键转折点和里程碑事件进行总结。人工智能几经起落,作者特别强调,单纯依靠大模型是无法实现通用人工智能的,人工智能三大范式

    2024年02月21日
    浏览(50)
  • 智能优化算法:白鲸优化算法-附代码

    摘要:白鲸优化算法([Beluga whale optimization,BWO)是由是由 Changting Zhong 等于2022 年提出的一种群体智能优化算法。其灵感来源于白鲸的群体觅食行为。 BWO建立了探索、开发和鲸鱼坠落的三个阶段,分别对应于成对游泳、捕食和鲸落的行为。BWO中的平衡因子和鲸落概率是自适应的

    2023年04月08日
    浏览(67)
  • 智能优化算法:金枪鱼群优化算法-附代码

    摘要:金枪鱼群优化算法(Tuna swarm optimization,TSO),是于2021年提出的一种新型智能优化算法,该算法通过模拟金枪鱼群体的觅食行为,来对问题进行寻优。具有寻优能力强,收敛速度快等特点。 1.1 初始化 与其他智能优化算法一样,金枪鱼种群在搜索空间内随机初始化。 X

    2023年04月25日
    浏览(51)
  • 智能优化算法:卷积优化算法-2023 附代码

    摘要:将二维卷积运算引入智能优化算法的种群位置更新过程,提出一种新的智能优化算法,即卷积优化算法(Convolution Optimization Algorithm,COA)。 该算法主要包括卷积搜索和解质量增强 2 种机制:在卷积搜索过程中,分别定义纵向卷积核、横向卷积核和区域卷积核,依次进行二维卷积运

    2023年04月16日
    浏览(47)
  • 智能优化算法:多目标粒子群优化算法(MOPSO)

    目录 一、粒子群优化算法(Particle Swarm Optimization,PSO) 二、多目标优化Pareto支配 三、多目标粒子群优化算法(Multiple Objective Particle Swarm Optimization,MOPSO) 四、参考文献: 粒子群算法(PSO)[1]是一种群智能优化算法,于1995年Kennedy和Eberhart提出,其灵感来源于鸟群的协作觅食行

    2023年04月19日
    浏览(50)
  • 智能优化算法——灰狼优化算法(Python&Matlab实现)

    目录 1 灰狼优化算法基本思想 2 灰狼捕食猎物过程 2.1 社会等级分层 2.2 包围猎物 2.3 狩猎 2.4 攻击猎物 2.5 寻找猎物 3 实现步骤及程序框图 3.1 步骤 3.2 程序框图 4 Python代码实现 5 Matlab实现 灰狼优化算法是一种群智能优化算法,它的独特之处在于 一小部分 拥有绝对话语权的灰

    2024年02月15日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包