人工智能--贪婪算法(启发式搜索)

本文探讨了贪婪算法作为启发式搜索的一种,其在寻找树最优路径中的应用。虽然贪婪算法不保证全局最优解,但在树结构中可能会遇到不可行解,需要回溯。通过MATLAB程序演示了基本的贪婪算法和改进的N-型贪婪算法,后者在大型图或树中可提升搜索效率,但可能导致小规模问题的路径震荡。
摘要由CSDN通过智能技术生成

作者: 沈聪

贪婪算法是启发式算法的代表算法之一,其核心思想是每次都选择局部最优解,但该算法并不能保证最后得出的结果是全局最优解。贪婪算法比较典型的案例就是最短路径搜索。之前,大部分的贪婪算法都是基于图的方式寻找最优路径。本篇文章主要借助路径动态规划的案例利用贪婪算法讲解树的最优路径。

相对于图来说,在树的搜索过程中,贪婪算法会遇到很多不可行解,这就需要程序能否返回到最近的一个节点,重新寻找其他的可行路径。下面通过一个示例说明贪婪最佳优先搜索和改进贪婪优化算法具体过程。

问题描述

下图展示了城市之间的路径图,该图包含了城市节点,城市之间的路径以及路径的大小。
城市间连接图利用贪婪算法寻找节点1到节点19的路径。

贪婪算法和核心思路从节点1开始,每次都选择最短的路径,直到到达节点19,其路径显示图如下:
贪婪算法路径显示图

可以看出路径经历了3次死循环后,得出了最后的路径。

在贪婪算法的基础上,我们尝试的每次搜索N个节点,并把这N个节点的路径进行比较,这就是提出的改进贪婪算法。其思路从节点1开始,每次选择N个最短路径进行比较,然后选择N个叠加后的最短路径。以N=2为例,其选择路径为:

N型贪婪算法图
该算法在大型的图或树中,可提高搜索效率,但对于过大的N来说,其会导致搜索来回震荡。

MATLAB程序及仿真结果(贪婪算法)

function Best_Path = Greedy_search (Distance_Matrix, Begin_Point, End_Point)

% 该程序主要利用贪婪算法寻找两个节点之间的最小距离
% Distance_Matrix 的格式为:
% 节点  1    2    3    4    5.... 21
%  1    0    92   86   0    0  
%  2    92   0    0    83   0 ...
%  3    86   0    0    0    76
%  ...
%  21   0    0    0    0     0

% Distance_Matrix 主要描述了节点和节点之间的连接关系及距离
% Begin_Point 为起始的节点编号
% End_Point 为目标的节点编号
% History 显示了贪婪算法历经的路径
% Best_Path 显示了贪婪算法最后找出的最优结果

Dist_Matrix=Distance_Matrix;
History=[Begin_Point]; % 记录了当次的寻找路径
Next_Point = Begin_Point;

while Next_Point~=End_Point           
    Next_Point1 = Min_Find(Dist_Matrix(Next_Point,:)); % 找出当前节点下,最优的下一个节点
    Dist_Matrix = Trace_Find(Dist_Matrix,Next_Point<
一致代价搜索、贪婪搜索和有信息搜索是常用的无信息搜索策略和有信息搜索策略。它们在解决问题时有不同的特点和优劣势。 一致代价搜索(Uniform Cost Search)是一种无信息搜索策略,它根据路径的代价来选择下一步的动作。一致代价搜索会优先选择代价最小的路径进行扩展,直到找到目标状态。它适用于代价不同的问题,但可能会导致搜索空间过大,效率较低。 贪婪搜索(Greedy Search)是一种有信息搜索策略,它根据启发式函数(Heuristic Function)来评估每个状态的优劣。贪婪搜索会优先选择启发式函数值最小的状态进行扩展,希望能够直接找到目标状态。贪婪搜索的优点是速度快,但可能会陷入局部最优解,无法找到全局最优解。 有信息搜索(Informed Search)是一种综合利用代价和启发式函数的搜索策略。其中,A*搜索是一种常用的有信息搜索算法。A*搜索综合考虑了路径的代价和启发式函数的值,选择代价和启发式函数值之和最小的路径进行扩展。A*搜索既能保证找到最优解,又能保证搜索效率。但需要注意选择合适的启发式函数,否则可能会导致搜索结果不准确。 综上所述,一致代价搜索适用于代价不同的问题,贪婪搜索适用于速度要求较高的问题,而A*搜索是一种综合利用代价和启发式函数的有信息搜索算法,能够找到最优解并保证搜索效率。
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值