8种人工智能算法求解八皇后问题+原理分析

简介: 8种人工智能算法求解八皇后问题+原理分析

目录

1 问题描述

八皇后问题——在8×8格的国际象棋盘上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上。


在八皇后问题中,不关心求解的路径,而只关注是否达到目标状态——即重要的是最终皇后在棋盘上的布局,而不是皇后加入的先后次序。由于棋盘中棋子状态数呈指数增长,因此八皇后问题的状态空间庞大且未知,利用普通搜索技术——如BFS、DFS、UCS等无法完成既定目标,因为这些算法需要系统地遍历状态空间。


因此选择局部搜索算法,其只探索当前状态的邻域,在邻域中选择若干个状态继续探索它们的邻域,直到找到目标。

2 AI算法

2.1 局部贪婪搜索

经典的爬山算法也称为局部贪婪搜索(Greedy Local Search),其在算法层的原理为:


随机生成初始状态;

探索初始状态的邻域 K K K,在 K K K中选择代价最小(或价值最高)的状态;

若此状态代价小于当前,则选择此状态为下一个状态;否则算法停止;

重复(ii)(iii)直至最优或算法停止。

此算法的实现过程简单,本质上是一种梯度下降算法,因此容易陷入局部最优状态。为了解决爬山法受限于局部最优状态的问题,提出了其几个变种。

2.2 随机行走爬山法

随机行走爬山法(Random Hill Climbing),其在算法层的原理为:


随机生成初始状态;

探索初始状态的邻域 K K K,在 K K K中随机选择状态;

以一定的概率接受此状态,此概率可以关联“陡峭”程度;

不断重复(ii)(iii)直至最优。

随机行走爬山法的优点在于,对所有邻域状态都有概率接受,只不过离最优值近的被选中的概率大,这样可以避免在局部最优点停滞不前。随机行走爬山法的收敛速度通常慢于局部贪婪搜索,但在某些状态空间地形图上可以找到更优解。

2.3 首选爬山法

首选爬山法,是随机行走爬山法和经典爬山法的折中,其在算法层的原理为:


随机生成初始状态;

探索初始状态的邻域 K K K,在 K K K中随机选择状态;

若该状态优于当前,则接受;否则重新选择;

不断重复(ii)(iii)直至最优。

首选爬山法既避免了随机行走爬山法的“漫无目的”,也防止快速陷入局部最优,其在邻域状态很庞大的情况下效率比随机行走更高,但是其依然存在陷入局部最优的可能性。

2.4 随机重启爬山法

随机重启爬山法(Random Restart Hill Climbing),其在算法层的原理为:


随机生成初始状态;

探索初始状态的邻域 K K K,在 K K K中选择代价最小(或价值最高)的状态;

若此状态优于当前,则选择此状态为下一个状态;否则随机生成下一个状态;

重复(ii)(iii)直至最优。

随机重启爬山法是对经典爬山算法受限于局部最优状态的本质改良,但可能因为不断重启影响效率。

2.5 模拟退火算法

模拟退火算法(Simulated Annealing,SA)类似于随机行走爬山法,只不过SA随机因素的引入并非关联“陡峭”程度,而是模拟了退火这一物理过程。


首先解释热力学上的退火过程。如图所示,首先物体处于非晶体的稳定状态。现将其加温至充分高,此时分子热运动加剧,物体的状态充满随机性——几乎可以向任何方向运动;再让其徐徐冷却——即退火,粒子趋近于能量最小,也就可能达到处于晶体的稳态。


image.png

基于具体退火的物理过程,引入了退火概率转移函数:

p = { 1 , i f    E n e w    b e t t e r    t h a n    E o l d exp ⁡ ( − Δ E / T )    i f    E n e w    w o r s e    t h a n    E o l d p=

{1,ifEnewbetterthanEoldexp(−ΔE/T)ifEnewworsethanEold

{1,ifEnewbetterthanEoldexp⁡(−ΔE/T)ifEnewworsethanEold

p={

1,ifE

new


betterthanE

old


exp(−ΔE/T)ifE

new


worsethanE

old




在SA的初期,认为是高温 T T T,使得SA趋于完全的随机行走——因为其对于劣于当前状态的接受率也趋于1;随着搜索次数的迭代,温度不断降低,此时SA倾向于接收离最优值更近的状态。其中 T T T的降温过程可以用最简单的指数降温: T ∗ = α T ( α = 0.8   0.99 ) T^*=\alpha T\left( \alpha =0.8~0.99 \right) T

=αT(α=0.8 0.99),或者采用其他的下降方式,如 T ∗ = T ( 1 + n )    ( n 为迭代次数 ) T^*=\frac{T}{\left( 1+n \right)}\,\,\left( n\text{为迭代次数} \right) T

=

(1+n)

T


(n为迭代次数)。


综上所述,SA在算法层的原理为:


随机生成初始状态;

探索初始状态的邻域 K K K,在 K K K中随机选择状态;

若此状态优于当前,则选择此状态为下一个状态;否则以概率转移函数为基础接受或拒绝此状态;

重复(ii)(iii)直至最优。

值得注意的是,SA算法依然可能陷入局部最优,但大多数情况下具有良好的表现。

2.6 局部束搜索

到目前为止的局部搜索算法都是单线的,即每次只探索一个状态。束搜索的思想是:内存虽然有限,但每次只保留一个状态信息又过于极端。因此束搜索算法下,每次搜索都将在内存中保留 k k k个状态, k k k称为集束宽度


局部束搜索(Local Beam Search)在算法层的原理为:


随机生成 k k k个初始状态;

分别探索 k k k个初始状态的邻域 K i ( i = 1 , 2 , ⋯ k ) K_i\left( i=1,2,\cdots k \right) K

i


(i=1,2,⋯k),在所有邻域的并集中选择 k k k个最优的状态;

重复(ii)直至最优。

在局部束搜索中,有用的信息在并行的搜索线程间传递,算法将很快放弃没有成果的搜索而把资源都用在取得最大进展的路径上。但如果是最简单形式的局部束搜索,那么由于这 个状态缺乏多样性,它们很快会聚集到状态空间中的一小块区域内,甚至使得搜索代价比高昂的爬山法版本还要多。

2.7 随机束搜索

如随机行走爬山法向爬山法中添加随机因子,解决受限于局部最优的问题一样,随机束搜索(Stochastic Beam Search)向局部束搜索中添加随机因子,防止搜索空间的状态聚合,以保持多样性。其在算法层的原理为:


随机生成 k k k个初始状态;

分别探索 k k k个初始状态的邻域 K i ( i = 1 , 2 , ⋯ k ) K_i\left( i=1,2,\cdots k \right) K

i


(i=1,2,⋯k),在所有邻域的并集中随机选择 k k k个状态,随机选择概率可以关联于“陡峭”程度或其他因素;

重复(ii)直至最优。

2.8 遗传算法

遗传算法(Genetic Algorithm, GA)类似束搜索,不同在于其选择 个状态的原则,既不是局部束搜索的“贪婪式选择”,也不是随机束搜索简单的概率选择,而是模拟了自然进化演变过程。其在算法层的原理是:


随机生成 k k k个初始状态形成初始种群;

采用适应度函数对种群进行自然选择,增加种群中距离最优值近的个体的比例;

对自然选择后的种群进行杂交,生成子代种群;

对子代随机进行变异,以增加种群多样性,防止状态聚合;

重复(ii)~(iv)直至最优。

注意:上面原理可以配合源码学习,加深理解

3 结果展示


image.png

image.png

cd218520e891418d950dda423a52b7d6.gif

完整代码关注下方公众号回复ML001获取


🔥 更多精彩专栏

目录
相关文章
|
3天前
|
负载均衡 算法 调度
负载均衡原理及算法
负载均衡原理及算法
9 1
|
5天前
|
机器学习/深度学习 存储 人工智能
【人工智能】机器学习算法综述及常见算法详解
【人工智能】机器学习算法综述及常见算法详解
|
6天前
|
Arthas 监控 算法
JVM工作原理与实战(二十五):堆的垃圾回收-垃圾回收算法
JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了垃圾回收算法评价标准、标记清除算法、复制算法、标记整理算法、分代垃圾回收算法等内容。
19 0
JVM工作原理与实战(二十五):堆的垃圾回收-垃圾回收算法
|
7天前
|
机器学习/深度学习 自然语言处理 算法
Python遗传算法GA对长短期记忆LSTM深度学习模型超参数调优分析司机数据|附数据代码
Python遗传算法GA对长短期记忆LSTM深度学习模型超参数调优分析司机数据|附数据代码
|
10天前
|
机器学习/深度学习 人工智能 算法
【AI 初识】描述遗传算法概念
【5月更文挑战第2天】【AI 初识】描述遗传算法概念
|
10天前
|
机器学习/深度学习 存储 人工智能
【AI 初识】人工智能中使用了哪些不同的搜索算法?
【5月更文挑战第2天】【AI 初识】人工智能中使用了哪些不同的搜索算法?
|
11天前
|
机器学习/深度学习 自然语言处理 算法
机器学习算法原理与应用:深入探索与实战
【5月更文挑战第2天】本文深入探讨机器学习算法原理,包括监督学习(如线性回归、SVM、神经网络)、非监督学习(聚类、PCA)和强化学习。通过案例展示了机器学习在图像识别(CNN)、自然语言处理(RNN/LSTM)和推荐系统(协同过滤)的应用。随着技术发展,机器学习正广泛影响各领域,但也带来隐私和算法偏见问题,需关注解决。
|
12天前
|
机器学习/深度学习 人工智能 搜索推荐
探索人工智能在医疗影像分析中的应用
【5月更文挑战第1天】随着人工智能技术的飞速发展,其在医疗领域的应用日益广泛,尤其是在医疗影像分析方面。本文将深入探讨人工智能在医疗影像分析中的关键技术、应用现状以及未来发展趋势,以期为相关领域的研究者和实践者提供有益的参考。
|
13天前
|
机器学习/深度学习 算法 数据可视化
Matlab决策树、模糊C-均值聚类算法分析高校教师职称学历评分可视化
Matlab决策树、模糊C-均值聚类算法分析高校教师职称学历评分可视化
|
13天前
|
机器学习/深度学习 算法 数据挖掘
【Python机器学习专栏】层次聚类算法的原理与应用
【4月更文挑战第30天】层次聚类是数据挖掘中的聚类技术,无需预设簇数量,能生成数据的层次结构。分为凝聚(自下而上)和分裂(自上而下)两类,常用凝聚层次聚类有最短/最长距离、群集平均和Ward方法。优点是自动确定簇数、提供层次结构,适合小到中型数据集;缺点是计算成本高、过程不可逆且对异常值敏感。在Python中可使用`scipy.cluster.hierarchy`进行实现。尽管有局限,层次聚类仍是各领域强大的分析工具。