爬山算法的详细介绍

爬山算法是一种局部寻优方法,通过比较当前节点与邻居节点找到局部最优解。本文深入探讨了如何处理局部边界问题,以及在接近局部最优时如何调整学习率。案例分析包括在特定函数上的应用,同时提供了Java和Python实现。为了找到全局最优,可以多次运行爬山算法并从不同初始点开始。
摘要由CSDN通过智能技术生成

一。介绍

爬山算法是一种局部择优的方法,采用启发式
方法,是对深度优先搜索
的一种改进,它利用反馈信息
帮助生成解的决策。 属于人工智能算法的一种。从当前的节点开始,和周围的邻居节点的值进行比较。 如果当前节点是最大的,那么返回当前节点,作为最大值(既山峰最高点);反之就用最高的邻居节点来,替换当前节点,从而实现向山峰的高处攀爬的目的。如此循环直到达到最高点。

爬山算法 ( 𝐻𝑖𝑙𝑙 𝐶𝑙𝑖𝑚𝑏𝑖𝑛𝑔 ), 是一种局部寻优算法。其本质上是沿着梯度方向进行寻优。关于爬山法的讲解已有无数的优质文章了。本文主要讲解,使用爬山法进行局部寻优时,如何处理局部边界问题,以及遇到局部最优值如何逐步逼近局部最优值,而不是反复横跳。

本文验证案例为: 𝑓(𝑥1,𝑥2)=−(𝑥1−5)2−(𝑥2−5)2 在 [0,10]×[0,10] 上的最大值,以及, 𝑓(𝑥1,𝑥2)=𝑥12+𝑥22 在 [0,10]×[0,10] 上的最大值。很显然我们容易知道上述两个案例的结果分别是 (5,5),(10,10) 。

二。分析

我们先来简单回顾一下,爬山法的一般过程。假定目标函数为 𝑓(𝑥1,𝑥2,⋯,𝑥𝑛) ,

step1: 随机选定初始出发点 𝑋0=(𝑥10,𝑥20,⋯,𝑥𝑛0) ,

step2: 计算函数 𝑓 在 𝑋0 处的梯度 Δ𝑓=(∂𝑓∂𝑥1,∂𝑓∂𝑥2,⋯,∂𝑓∂𝑥𝑛) ,

step3: 向梯度方向更新当前点,

step4:计算容差, 判断是否接受新解。

我们通过数次以上的操作,数据点会越来越逼近局部最优值。很显然,对于step1, step2, step4,相应的操作比较简单。 下面,我着重讲解在局部寻优时,如何处理step3。

传统的梯度下降法,是采用计算出来的梯度 Δ𝑓 乘上一个学习率 𝜎 ,来作为数据点更新的方向,即

𝑋1=𝑋0+𝜎Δ𝑓𝑋0

这样对于有边界约束的函数来说,当出现很大的梯度值时,便会导致越界问题。我采用,如下方式改进。

假设 𝑋𝑚𝑎𝑥=(𝑥𝑀1,𝑥𝑀2,⋯,𝑥𝑀𝑛) , 𝑋𝑚𝑖𝑛=(𝑥𝑚1,𝑥𝑚2,⋯,𝑥𝑚𝑛) 分别为各个变量的取值范围的上下限。设 𝐷 为更新的方向, 𝐷 由如下获得,

𝐷[ǔ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值