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获取


🔥 更多精彩专栏

目录
相关文章
|
6天前
|
传感器 人工智能 监控
智慧电厂AI算法方案
智慧电厂AI算法方案通过深度学习和机器学习技术,实现设备故障预测、发电运行优化、安全监控和环保管理。方案涵盖平台层、展现层、应用层和基础层,具备精准诊断、智能优化、全方位监控等优势,助力电厂提升效率、降低成本、保障安全和环保合规。
智慧电厂AI算法方案
|
1月前
|
存储 算法 Java
解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用
在Java中,Set接口以其独特的“无重复”特性脱颖而出。本文通过解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用。
41 3
|
11天前
|
算法 容器
令牌桶算法原理及实现,图文详解
本文介绍令牌桶算法,一种常用的限流策略,通过恒定速率放入令牌,控制高并发场景下的流量,确保系统稳定运行。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
令牌桶算法原理及实现,图文详解
|
20天前
|
负载均衡 算法 应用服务中间件
5大负载均衡算法及原理,图解易懂!
本文详细介绍负载均衡的5大核心算法:轮询、加权轮询、随机、最少连接和源地址散列,帮助你深入理解分布式架构中的关键技术。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
5大负载均衡算法及原理,图解易懂!
|
6天前
|
机器学习/深度学习 人工智能 监控
智慧交通AI算法解决方案
智慧交通AI算法方案针对交通拥堵、违法取证难等问题,通过AI技术实现交通管理的智能化。平台层整合多种AI能力,提供实时监控、违法识别等功能;展现层与应用层则通过一张图、路口态势研判等工具,提升交通管理效率。方案优势包括先进的算法、系统集成性和数据融合性,应用场景涵盖车辆检测、道路环境检测和道路行人检测等。
|
6天前
|
传感器 人工智能 监控
智慧化工厂AI算法方案
智慧化工厂AI算法方案针对化工行业生产过程中的安全风险、效率瓶颈、环保压力和数据管理不足等问题,通过深度学习、大数据分析等技术,实现生产过程的实时监控与优化、设备故障预测与维护、安全预警与应急响应、环保监测与治理优化,全面提升工厂的智能化水平和管理效能。
智慧化工厂AI算法方案
|
7天前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的【垃圾识别系统】实现~TensorFlow+人工智能+算法网络
垃圾识别分类系统。本系统采用Python作为主要编程语言,通过收集了5种常见的垃圾数据集('塑料', '玻璃', '纸张', '纸板', '金属'),然后基于TensorFlow搭建卷积神经网络算法模型,通过对图像数据集进行多轮迭代训练,最后得到一个识别精度较高的模型文件。然后使用Django搭建Web网页端可视化操作界面,实现用户在网页端上传一张垃圾图片识别其名称。
30 0
基于Python深度学习的【垃圾识别系统】实现~TensorFlow+人工智能+算法网络
|
7天前
|
机器学习/深度学习 人工智能 算法
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
手写数字识别系统,使用Python作为主要开发语言,基于深度学习TensorFlow框架,搭建卷积神经网络算法。并通过对数据集进行训练,最后得到一个识别精度较高的模型。并基于Flask框架,开发网页端操作平台,实现用户上传一张图片识别其名称。
24 0
【手写数字识别】Python+深度学习+机器学习+人工智能+TensorFlow+算法模型
|
7天前
|
机器学习/深度学习 人工智能 算法
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
蔬菜识别系统,本系统使用Python作为主要编程语言,通过收集了8种常见的蔬菜图像数据集('土豆', '大白菜', '大葱', '莲藕', '菠菜', '西红柿', '韭菜', '黄瓜'),然后基于TensorFlow搭建卷积神经网络算法模型,通过多轮迭代训练最后得到一个识别精度较高的模型文件。在使用Django开发web网页端操作界面,实现用户上传一张蔬菜图片识别其名称。
39 0
基于深度学习的【蔬菜识别】系统实现~Python+人工智能+TensorFlow+算法模型
|
21天前
|
机器学习/深度学习 人工智能 搜索推荐
人工智能与体育:运动员表现分析
【10月更文挑战第31天】随着科技的发展,人工智能(AI)在体育领域的应用日益广泛,特别是在运动员表现分析方面。本文探讨了AI在数据收集与处理、数据分析与挖掘、实时反馈与调整等方面的应用,以及其在技术动作、战术策略、体能与心理状态评估中的具体作用。尽管面临数据准确性和隐私保护等挑战,AI仍为体育训练和竞技带来了新的机遇和前景。