搜索算法之爬山法总结和实现

系列文章目录

前言

首先爬山法和N皇后都是基于图这个数据结构来进行设计实现的,所以我写了另外一篇关于图这个数据结构的详解,可以看以下链接,帮助你更好的理解

常见的精确的搜索算法有:分枝定界法、线性规划法、动态规划法等。
但是如果你求解的问题规模变大的时候,这个时候精确算法将变得无能为力,所以要采用近似算法/启发式算法,有遗传算法、模拟退火法、蚁群算法、禁忌搜索算法、贪婪算法和神经网络等。

一般这种问题用在旅行商问题上(TSP),对称TSP:城市A到城市B的距离 等于 城市B到城市A的距离;
非对称TSP:城市A到城市B的距离 不等于 城市B到城市A的距离。

最短路径查找-Dijkstra算法

要学会爬山法可以先了解更基础的算法,关于图的算法,这里就可以看我博客另外一篇文章关于动态规划的。
这里简单描述一下,最短路径放在现实生活里,人们常常用到的是关于交通路线规划,当你出去旅游的时候,如果没有直达的交通,或者是你想最大化的减少交通费总和价格,这个时候最短路径,图的权重等知识点就很好的应用上了!!
最短路径查找正如其名,其实就是找最优的算法,

教你快速掌握动态规划问题实现-详解

最短路径算法很多都是用于在图这个数据结构上,关于最短路径的计算的算法,主要有广度、深度优先算法(无权图),Dijkstra算法(无权图、带权图),这两种算法主要是单源最短路径,顶点间最短路径有佛洛伊算法(无权图、带权图)

代价函数

如何根据问题的形式和规模和优化的目标,设计合适的算法来进行优化。

问题分类

随机搜索算法:适用于就是问题求得的结果是没有变化规律可寻,找不到任何能够使代价下降的梯度和极小值点。
爬山法:适用于当前解和周围解是有变化规律的。首先以一个解作为标准值,每次寻找和这个解相近的解,如果相近的解有代价更小的解,则把代价更小的值作为新的标准值。如果这个解周围的解都比这个标准值大,则认为达到了局部极小值/极大值。
模拟退火算法:从问题的原始解开始,用一个变量代表温度,温度刚开始时非常高,后逐步减低。在每一次迭代期间,算法会随机选题解种某个数字,使其发生细微变化,而后计算该解的代价,关键地方在于计算该解的代价后,决定是否接受该解。如果新的成本更低,则新的题解就会变成当前题解。随着退火过程中温度不断下降,算法越来越不可以接受较差的解,直到最后,只接受更优的解。
遗传算法:随机生成一组解,成为一个种群,直接遗传(将当前种群中代价最小的一部分解,如40%进行直接遗传,传入下一代种群),变异(从题解中随机选取一个数字,对其进行微小、简单的改变)、交叉(选择最优解中两个解,将他们按照某种方式进行结合)。通过直接遗传、变异、交叉三种方法,从上一代种群中构建出了下一代种群。而后,这一过程重复进行,知道达到了指定的迭代次数,或者连续数代都没有改善种群,则整个过程就结束了。

不同搜素算法的特点

爬山算法(最速上升爬山法):
从搜索空间中随机产生邻近的点,从中选择对应解最优的个体,替换原来的个体,不断重复上述过程。因为只对“邻近”的点作比较,所以目光比较“短浅”,常常只能收敛到离开初始位置比较近的局部最优解上面。对于存在很多局部最优点的问题,通过一个简单的迭代找出全局最优解的机会非常渺茫。(在爬山法中,青蛙最有希望到达最靠近它出发点的山顶,但不能保证该山顶是珠穆朗玛峰,或者是一个非常高的山峰。因为一路上它只顾上坡,没有下坡。)

模拟退火算法:
这个方法来自金属热加工过程的启发。在金属热加工过程中,当金属的温度超过它的熔点(Melting Point)时,原子就会激烈地随机运动。与所有的其它的物理系统相类似,原子的这种运动趋向于寻找其能量的极小状态。在这个能量的变迁过程中,开始时。温度非常高,使得原子具有很高的能量。随着温度不断降低,金属逐渐冷却,金属中的原子的能量就越来越小,最后达到所有可能的最低点。利用模拟退火算法的时候,让算法从较大的跳跃开始,使到它有足够的“能量”逃离可能“路过”的局部最优解而不至于限制在其中,当它停在全局最优解附近的时候,逐渐的减小跳跃量,以便使其“落脚”到全局最优解上。(在模拟退火中,青蛙喝醉了,而且随机地大跳跃了很长时间。运气好的话,它从一个山峰跳过山谷,到了另外一个更高的山峰上。但最后,它渐渐清醒了并朝着它所在的峰顶跳去。)

遗传算法:
模拟物竞天择的生物进化过程,通过维护一个潜在解的群体执行了多方向的搜索,并支持这些方向上的信息构成和交换。以面为单位的搜索,比以点为单位的搜索,更能发现全局最优解。(在遗传算法中,有很多青蛙,它们降落到喜玛拉雅山脉的任意地方。这些青蛙并不知道它们的任务是寻找珠穆朗玛峰。但每过几年,就在一些海拔高度较低的地方射杀一些青蛙,并希望存活下来的青蛙是多产的,在它们所处的地方生儿育女。)

启发式算法

分类

(1)正向推理:从初始状态出发向目标状态方向执行。-一般用于状态空间的搜索。
(2)反向推理:从目标状态出发向初始状态方向执行。-一般用于问题规约中。

启发性信息和评估函数

节点的重要性:选择节点要充分利用与问题有关的特征信息。搜索时选择重要性较高的节点,以利于求得最优解。
与被解问题的某些特征值有关的控制信息(如解的出现规律、解的结构特征等)称为搜索的启发信息。它反映在评估函数中,评估函数的作用是评估待扩展各系欸但在我呢提求解的价值,即评估节点的重要性。
评估函数:f(x)=g(x)+h(x),g(x)是从初始节点到一个节点x的实际代价,h(x)是这个节点x到目标节点的最优路径的估计代价,体现了问题的启发式信息,h(x)启发式函数。

使用步骤

1.引入库

代码如下(示例):

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
import  ssl
ssl._create_default_https_context = ssl._create_unverified_context

爬山法缺点

爬山法容易陷入一个局部极大值/极小值内,

参考文献链接

被动式相机自动对焦

算法学习笔记 (爬山法,模拟退火算法,遗传算法)
旅行商问题

猜你喜欢

转载自blog.csdn.net/qq_43614246/article/details/121928117