一文教会你Python 随机爬山算法

改进爬山算法之六:随机重启爬山算法(Random-Restart Hill Climbing,RRHC) 随机重启爬山算法(Random-Restart Hill Climbing,RRHC)是爬山算法的一种改进策略,是一种启发式搜索算法,旨在通过随机重启来克服传统爬山算法容易陷入局部最优解的局限性,并增加找到全局最优解的概率。随机重启爬山算法通过在多次运行中不断尝试不同的初始解,并在每次运行中执行标准的爬山算法,最终选择所有运行中找到的最佳解作为最终结果。(1)计算复杂度:由于需要多次运行爬山算法,因此算法的计算复杂度可能较高,特别是在解空间较大或每次迭代需要较长时间的情况下。 阅读详情

随机爬山是一种优化算法。它利用随机性作为搜索过程的一部分。这使得该算法适用于非线性目标函数,而其他局部搜索算法不能很好地运行。它也是一种局部搜索算法,这意味着它修改了单个解决方案并搜索搜索空间的相对局部区域,直到找到局部最优值为止。这意味着它适用于单峰优化问题或在应用全局优化算法后使用。

在本教程中,您将发现用于函数优化的爬山优化算法完成本教程后,您将知道:

  • 爬山是用于功能优化的随机局部搜索算法。

  • 如何在Python中从头开始实现爬山算法。

  • 如何应用爬山算法并检查算法结果。

教程概述

本教程分为三个部分:他们是:

  • 爬山算法

  • 爬山算法的实现

  • 应用爬山算法的示例

爬山算法

随机爬山算法是一种随机局部搜索优化算法。它以起始点作为输入和步长,步长是搜索空间内的距离。该算法将初始点作为当前最佳候选解决方案,并在提供的点的步长距离内生成一个新点。计算生成的点,如果它等于或好于当前点,则将其视为当前点。新点的生成使用随机性,通常称为随机爬山。这意味着该算法可以跳过响应表面的颠簸,嘈杂,不连续或欺骗性区域,作为搜索的一部分。重要的是接受具有相等评估的不同点,因为它允许算法继续探索搜索空间,例如在响应表面的平坦区域上。限制这些所谓的“横向”移动以避免无限循环也可能是有帮助的。该过程一直持续到满足停止条件,例如最大数量的功能评估或给定数量的功能评估内没有改善为止。该算法之所以得名,是因为它会(随机地)爬到响应面的山坡上,达到局部最优值。这并不意味着它只能用于最大化目标函数。这只是一个名字。实际上,通常,我们最小化功能而不是最大化它们。作为局部搜索算法,它可能会陷入局部最优状态。然而,多次重启可以允许算法定位全局最优。步长必须足够大,以允许在搜索空间中找到更好的附近点,但步幅不能太大,以使搜索跳出包含局部最优值的区域。


 如果大家在学习中遇到困难,想找一个python学习交流环境,可以加入我们的python圈,裙号609616831,可领取python学习资料,会节约很多时间,减少很多遇到的难题。


爬山算法的实现

在撰写本文时,SciPy库未提供随机爬山的实现。但是,我们可以自己实现它。首先,我们必须定义目标函数和每个输入变量到目标函数的界限。目标函数只是一个Python函数,我们将其命名为Objective()。边界将是一个2D数组,每个输入变量都具有一个维度,该变量定义了变量的最小值和最大值。例如,一维目标函数和界限将定义如下:

# objective function
def objective(x):
 return 0
 
# define range for input
bounds = asarray([[-5.0, 5.0]])

接下来,我们可以生成初始解作为问题范围内的随机点,然后使用目标函数对其进行评估。

# generate an initial point
solution = bounds[:, 0] + rand(len(bounds)) * (bounds[:, 1] - bounds[:, 0])
# evaluate the initial point
solution_eval = objective(solution)

现在我们可以遍历定义为“ n_iterations”的算法的预定义迭代次数,例如100或1,000。

# run the hill climb
for i in range(n_iterations):

算法迭代的第一步是采取步骤。这需要预定义的“ step_size”参数,该参数相对于搜索空间的边界。我们将采用高斯分布的随机步骤,其中均值是我们的当前点,标准偏差由“ step_size”定义。这意味着大约99%的步骤将在当前点的(3 * step_size)之内。

# take a step
candidate = solution + randn(len(bounds)) * step_size

我们不必采取这种方式。您可能希望使用0到步长之间的均匀分布。例如:

# take a step
candidate = solution + rand(len(bounds)) * step_size

接下来,我们需要评估具有目标函数的新候选解决方案。

# evaluate candidate point
candidte_eval = objective(candidate)

然后,我们需要检查此新点的评估结果是否等于或优于当前最佳点,如果是,则用此新点替换当前最佳点。

# check if we should keep the new point
if candidte_eval <= solution_eval:
 # store the new point
 solution, solution_eval = candidate, candidte_eval
 # report progress
 print('>%d f(%s) = %.5f' % (i, solution, solution_eval))

就是这样。我们可以将此爬山算法实现为可重用函数,该函数将目标函数的名称,每个输入变量的范围,总迭代次数和步骤作为参数,并返回找到的最佳解决方案及其评估。

# hill climbing local search algorithm
def hillclimbing(objective, bounds, n_iterations, step_size):
 # generate an initial point
 solution = bounds[:, 0] + rand(len(bounds)) * (bounds[:, 1] - bounds[:, 0])
 # evaluate the initial point
 solution_eval = objective(solution)
 # run the hill climb
 for i in range(n_iterations):
  # take a step
  candidate = solution + randn(len(bounds)) * step_size
  # evaluate candidate point
  candidte_eval = objective(candidate)
  # check if we should keep the new point
  if candidte_eval <= solution_eval:
   # store the new point
   solution, solution_eval = candidate, candidte_eval
   # report progress
  
改进爬山算法之一:随机爬山法(Stochastic Hill Climbing,SHC) 这意味着,在搜索过程中,算法会以一定的概率接受比当前解更差的解,从而增加了跳出局部最优解的机会。随机爬山法(Stochastic Hill Climbing),也被称为随机爬山法,是一种基于搜索算法的优化方法,是爬山算法的一个变种,它通过引入随机性来减少算法陷入局部最优解的风险,并增加搜索解空间的能力。初始解通常是问题空间中的一个随机点或解,但在某些情况下,选择接近全局最优解的初始解可以显著提高算法的性能。然而,通过合理的参数设置和迭代次数控制,算法通常能够在一定的时间内找到一个较好的解。 阅读详情

相关推荐

爬山算法改进-探测器-python-全局最优解

爬山算法改进前言一、爬山算法二、算法改进-探测器1.递归寻找局部最优值2.探测器搜索全局最优值总结 前言 爬山法(climbing method)是一种优化算法,它一般从一个随机某一点开始,然后逐步计算每一点的函数值直到找到一个最优解(局部最优),所以它是一种局部搜索算法,这意味着它适用于单峰优化问题或在应用全局优化算法后使用。 爬山法有以下3个缺点: (1)局部最优: 该算法的性质决定了其极容易陷入局部最优,且很难跳出; (2)平顶: 平顶是状态空间中评估函数值基本不变的一个区域,在某一局部点周围..

Big_SHOe的博客 2946

爬山算法教程(个人总结版)

爬山算法(Hill Climbing Algorithm)是一种用于解决优化问题的启发式搜索方法。它是一种局部搜索算法,通过不断尝试从当前解出发,在其邻域内寻找更优的解,直到无法找到更优解为止。该算法得名于其类似于登山的过程:从山脚出发,通过不断向高处前进,最终到达山顶(即局部最优解)。爬山算法在20世纪初被提出,是求解组合优化问题的重要方法,广泛应用于人工智能、运筹学、控制论和经济学等领域。爬山算法是一种简单且高效的局部搜索算法,适用于解决各种优化问题。

年糕的博客 3844

Python爬山法/随机重启爬山法/允许侧移的爬山法解决八皇后问题

文章目录1 八皇后问题2 程序代码2.1 程序12.2 程序22.3 程序32.3.1 爬山法2.3.2 随机重启爬山法3 评价 1 八皇后问题 有一个8乘8的棋盘,现在要将八个皇后放到棋盘上,满足:对于每一个皇后,在自己所在的行、列、两个对角线都没有其他皇后。 不了解爬山法、随机重启爬山法的话,请看这里。 规定棋盘的同列只能出现一个皇后。每一个棋盘,对应于一个长度为8的序列,每一个数的范围是[1, 8],第k个数字所代表的含义是第k列中皇后所在的行数,如[3,2,5,4,3,2,1,3]代表棋盘上从第

我是一只小嵩鼠 5693

5分钟掌握 Python 随机爬山算法

随机爬山是一种优化算法。它利用随机性作为搜索过程的一部分。这使得该算法适用于非线性目标函数,而其他局部搜索算法不能很好地运行。它也是一种局部搜索算法,这意味着它修改了单个解决方案并搜索搜索空间的相对局部区域,直到找到局部最优值为止。这意味着它适用于单峰优化问题或在应用全局优化算法后使用。 在本教程中,您将发现用于函数优化的爬山优化算法完成本教程后,您将知道: 爬山是用于功能优化的随机局部搜索算法。 如何在Python中从头开始实现爬山算法。 如何应用爬山算法并检查算法结果。 ..

weixin_46737755的博客 1899

随机优化算法爬山法VS模拟退火算法

随机优化算法,由于开始和过程都是随机的数值,所以每次产生的结果都不一样。但大致收敛方向是一致的。  爬山法是一种局部最优的算法(本质上属于贪心法),也属于启发式的方法,它一般只能得到局部最优解。采用启发式方法,是对深度优先搜索的一种改进,它利用反馈信息帮助生成解的决策。当优化的问题的局部最优解即为全局最优解时可以用此方法来求最优问题,否则可以考虑多次爬山法或者其他的方法如遗传算法和模拟退火法。 ...

This is bill的专属博客 4460

Python实战开发及案例分析(25)—— 爬山算法

爬山算法(Hill Climbing)是一种启发式搜索算法,常用于解决优化问题。它的核心思想是从一个初始解开始,不断朝着增益最大的方向移动,直到达到局部最优解。

贾贾的博客 2212

爬山算法爬山算法全解析及实现

本文系统介绍了爬山算法及其应用。文章首先阐述了爬山算法的基本概念和原理,通过登山比喻形象说明了其贪心搜索策略。随后详细分析了算法的核心步骤,包括初始化、邻域搜索、移动和终止条件,并提供了Python代码示例展示其在函数优化和八皇后问题中的具体实现。文章还探讨了爬山算法的多种变体,如随机重启、模拟退火和遗传爬山算法等改进方法,以克服其容易陷入局部最优的缺陷。最后,文章全面评估了爬山算法的优缺点,指出其简单易实现但在复杂问题上表现受限的特点,并展望了与其他算法结合的未来发展方向。

大雨淅淅的博客 2414

改进爬山算法之二:首次爬山法(First-Choice Hill Climbing,FCHC)

爬山算法在选择下一步时是采用贪心策略,即在邻域空间中寻找最优解作为下一步,这将导致每一次在邻域空间中获取最优解时,都要比较所有的候选解,这样极大的增加了计算难度。首次爬山法(First-Choice Hill Climbing)是一种启发式搜索算法,是爬山算法的一个变种,它基于爬山算法的思想,但在选择邻域解时采用了一种更简单的策略,避免了在比较领域中候选解的过程中消耗过多的性能。然而,首次爬山法也存在一些明显的缺点:由于随机选择邻域解,算法的性能可能不稳定,容易受到初始解和随机因素的影响。

搏博的专栏 1836

爬山算法的详细介绍

爬山算法(Hill Climbing Algorithm)是求解优化问题的经典算法之一。它以一种迭代的方式,从任意一个解的空间上的点出发不断向相邻的点移动,直到达到无法移动的局部最优解。本文将详细介绍爬山算法的原理、优缺点、应用场景等相关内容。1. 基本原理爬山算法是一种贪心算法,它假设解空间上的每个点都可以看做是一个局部最优解,它的目的是寻找一个整体最优解。

记录 IT 领域经验与见解的博客 8868

python爬山算法

这篇文章主要介绍了爬山算法,爬山法(climbing method)是一种优化算法,其一般从一个随机的解开始,然后逐步找到一个最优解(局部最优)然后用Python实现了这个算法,需要的朋友可以参考下 一、爬山法简介 爬山法(climbing method)是一种优化算法,其一般从一个随机的解开始,然后逐步找到一个最优解(局部最优)。 假定所求问题有多个参数,我们在通过爬

Better Thinker 7258

人工智能算法——随机重启爬山法,模拟退火算法,遗传算法求解N皇后问题

一、爬山爬山法就是完全的贪心算法,每一步都选最优位置,可能只能得到局部最优解。本实验对普通爬山法进行了简单的优化,采用了传统爬山法的变种——随机重启爬山法,当爬山步数超过一定值时,会重新打乱棋盘,重新“爬山”。 适应度函数:冲突皇后的总对数 “爬山”:每一步就是将棋盘的某一行的皇后移动到最优的位置,即该位置让冲突的皇后对数最少,即适应度函数值最小。 “不断地爬山”: 循环对棋盘的每一行...

湫一 9037

python 新的随机爬山算法,一起交流~

前言 最近在做聚焦算法,需要找到无参考图像中图像质量最好的,其中用到了随机爬山算法, 最开始采用三轮爬山,三轮步长不同,寻找最优解,但是发现精度不够,有的时候因为步长原因会跳过最佳点 后采用新的随机爬山算法 原理介绍 本算法第一轮采用大步长爬山算法确定范围值,如果找到局部峰值后,再向前继续找一步,如果同为下降趋势则停止 后几轮采用小步长迭代方法寻找最优解,最优解结果范围:±最后一轮步长,如果对迭代次数没有要求,最后1步长迭代会更精确 流程图如下所示 ...

m0_37968030的博客 812

python 列表切片_【Python技术入门7】Python列表的详细用法

列表是Python语言中内置的有序、可变的元素集合,是Python语言中最常用的数据类型。列表的元素类型可以为任意的数据类型,如整数、也就是说,同一个列表中的每个数据的类型可以各不相同。列表的使用非常灵活,是Python语言面试中面试官最爱问的知识点之一。01列表的定义使用中括号([])来定义列表,所有元素放在一对中括号([])中,并使用逗号分隔其中的元素。列表里面的元素类型可以是任意类...

weixin_39664995的博客 526

Python零基础实践随机爬山算法

【翻译自 : Stochastic Hill Climbing in Python from Scratch】 【说明:Jason BrownleePhD大神的文章个人很喜欢,所以闲暇时间里会做一点翻译和学习实践的工作,这里是相应工作的实践记录,希望能帮到有需要的人!】 随机爬山是一种优化算法。它利用随机性作为搜索过程的一部分。 这使得该算法适用于非线性目标函数,而其他局部搜索算法不能很好地运行。它也是一种局部搜索算法,这意味着它修改了单个解决方案并搜索搜索空...

Together_CZ的博客 1096

干货,《爬山算法详解》

爬山算法(Hill Climbing Algorithm)是一种广泛应用于人工智能和优化问题中的启发式搜索算法。该算法的主要思想是从当前解出发,不断尝试找到更好的解,直到达到某个终止条件。本文将详细介绍爬山算法的基本原理、种类、优缺点以及应用实例。

Kimi2024的博客 1082

爬山法、随机重启爬山法——八皇后问题、八数码问题】

爬山算法的应用——八皇后、八数码问题

Megumi_Ben的博客 2194
上一篇: Windows上安装和创建python开发环境(全网最详细)!
下一篇: Python [] 为什么比 list() 快?
python阿喵
博客等级 码龄6年 169粉丝 127原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值