`
charlotte
  • 浏览: 124762 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

A*算法

 
阅读更多

*搜寻算法俗称A星算法,从DFS和BFS中来。

  DFS算法

File:Depth-first-tree.svg

  BFS算法:

File:Breadth-first tree.svg

 

盲目搜索:

前面说的广度和深度优先搜索有一个很大的缺陷就是他们都是在一个给定的状态空间中穷举。有可能需要试探完整个解集空间显然,只能适用于问题规模不大的搜索问题中。 

 

启发式搜素:

对每一个搜索位置都要通过一个启发函数来进行评估,评估代价最少的结点作为下一步搜索结点而跳转其上。

 

估价函数表示:

f(n) = g(n) + h(n)

 

成立条件:

 

 

  1. 搜索树上存在着从起始点到终了点的最优路径。
  2. 问题域是有限的。
  3. 所有结点的子结点的搜索代价值>0
  4. h(n)=<h*(n) h*(n)为实际问题的代价值)。

当此四个条件都满足时,一个具有f(n)=g(n)+h(n)策略的启发式算法能成为A*算法,并一定能找到最优解。

 

 

其中f(n) 是节点n的估价函数,g(n)为状态空间中从初始节点到n节点的实际代价,h(n)是从n到目标节点最佳路径的估计代价。在这里主要是h(n)体现了搜索的启发信息,因为g(n)是已知的。如果说详细点,g(n)代表了搜索的广度的优先趋势。但是当h(n) >> g(n)时,可以省略g(n),而提高效率。struct tree_node 

struct tree_node{
	double lng; //结点的经度坐标
	double lat; //结点的纬度坐标
	double fcost; //该结点对应的路径的f成本
	double gcost; // 该结点对应的路径的g成本
	double hcost; //该结点对应的路径的h成本
	bool  flag; //中间点和结点的区别位,0表示形状点,1表示结点,起止结点
	struct tree_node *father; /./指向父节点的指针,用于向上回溯
}; 
struct tree_node * p[MAXNUM];//指向路径中间点

struct link_open  //开启列表结构体
{
	struct tree_node *node; //指向表中存储的结点的指针
	double fcost_list; //表中存储结点的f成本
	double gcost_list; //表中存储结点的g成本
};
struct link_open   Openlist[20000],
 [20000];//openlist存储最新生成节点、更优节点,Closedlist存储搜索后得到最优节点。
 
 

用二叉推对openlist表排序

以下省略起始点坐标映射到路径和查找映射坐标点对应的中间点过程,即openlist表中以存储找到的其实映射点对应的最优中间点集。

 

待续。。。

 

While(Openlist!=NULL)
{
   从Openlist表中取估价值f最小的结点node;
   if(node==目标结点) 
   break;
else{
    if(node in Openlist) 
    比较两个X的估价值f //注意是同一个结点的两个不同路径的估价值
    if(node的估价值小于Openlist表的估价值 )   
     更新OPEN表中的估价值; //取最小路径的估价值
    if(node in Closedlist) 
     比较两个X的估价值 //注意是同一个结点的两个不同路径的估价值
   if(node的估价值小于Closedlist表的估价值 )   
      更新CLOSE表中的估价值; 
       把X结点放入Openlist//取最小路径的估价值
   if(node not in both)求X的估价值;   
       并将X插入Closedlist表中; //还没有排序
     }
将n结点插入Closedlist表中;
按照估价值将Closedlist表中的结点排序; //实际上是比较Openlist表内结点f的大小,从最小路径的结点向下进行。
}
 

 

 

实际应用:

 最优路径查找,已知起始点和终止点坐标,要求2点映射在地图上的最优路径。

 

分享到:
评论

相关推荐

    A*算法的讲解PPT(A算法)

    A*算法是一种在图形搜索问题中寻找最优路径的启发式搜索算法,由Peter Hart、Nils Nilsson和Bertram Raphael在1968年提出。它的主要目标是在有限的计算时间内找到从起点到终点的最短路径,特别适用于静态路网中的...

    A*算法A星算法

    A*(发音为 "A-star")算法是一种在图形搜索中广泛应用的路径寻找算法,它结合了Dijkstra算法和最佳优先搜索,旨在找到从起点到目标点的最短路径。A*算法以其效率和准确性而著名,特别是在游戏、地图导航和机器人...

    A*算法Java/C++实现

    A*(A-star)算法是一种广泛应用的路径搜索算法,它结合了最佳优先搜索和Dijkstra算法的优点,通过引入启发式信息来实现更高效的路径搜索。在这个“A*算法Java/C++实现”的项目中,我们将深入探讨A*算法的核心原理...

    A星算法 c语言实现 a*算法

    A星(A*)算法是一种在图形搜索中广泛使用的路径规划算法,它的主要目标是找到从起点到终点的最短路径。A*算法结合了Dijkstra算法的全局最优性和最佳优先搜索的效率,通过引入启发式函数来指导搜索,使得算法能够更...

    用A*算法解决TSP问题

    标题"用A*算法解决TSP问题"表明我们将探讨如何使用A*(A-star)搜索算法来解决旅行商问题(Traveling Salesman Problem, TSP)。A*算法是一种高效的路径搜索算法,它在图形理论和路径规划中广泛应用。TSP则是一个...

    A*算法Matlab 代码

    A* 算法是一种在图形搜索中广泛使用的启发式搜索策略,它的主要目标是找到从起点到终点的最短路径。在这个特定的上下文中,我们讨论的是在Matlab环境中实现A*算法来解决路径规划问题。A*算法结合了Dijkstra算法的最...

    A算法和A*算法

    A算法和A*算法详细的讲解 并且有实例的解释 大家可以借鉴

    移动机器人路径规划 几种A*算法改进matlab实现

    A*算法是一种广泛应用的启发式搜索算法,它结合了Dijkstra算法的全局最优性和 Greedy最佳优先搜索算法的效率。 A*算法的核心在于使用了启发式函数(h(n)),它估算从当前节点到目标节点的直线距离或曼哈顿距离,...

    基于matlab的双向A*算法

    A*算法(A-Star)是一种广泛应用的启发式搜索算法,它结合了Dijkstra算法的最优化路径寻找与启发式信息的高效性。而基于MATLAB实现的双向A*算法,则是A*算法的一种优化形式,旨在进一步提升路径规划的效率。 首先,...

    layaair typescipt吃豆人a*算法实现

    2. **A*算法**:编写A*算法的实现,包括开放列表、关闭列表、启发式函数以及如何根据f(n)值选择下一个节点。 3. **吃豆人和幽灵的运动**:定义它们的移动规则,如四向移动、碰撞检测和转向逻辑。 4. **游戏循环**:...

    基于A*算法的最优路径规划系统

    【A*算法详解】 A*算法是人工智能领域中用于寻找最短路径的一种高效搜索策略,尤其在路径规划问题中有着广泛的应用。它结合了Dijkstra算法的无偏搜索特性和Greedy最佳优先搜索的启发式特性,以更快的速度找到从起点...

    A*算法实现旅行商tsp java

    A*算法是一种在图形搜索中广泛应用的启发式搜索策略,其目标是找到从起点到终点的最短路径。在这个特定的场景中,A*算法被用于解决旅行商问题(Traveling Salesman Problem, TSP)。TSP是一个经典的组合优化问题,...

    A*算法学习(python代码实现)

    A*算法是一种在图形搜索中用于寻找从起点到终点最短路径的有效算法,它结合了Dijkstra算法的全局最优性和Greedy最佳优先搜索算法的效率。A*算法的核心在于引入了启发式函数,使得搜索更加高效,能够在大量可能的路径...

    A*走路 自动寻路A*算法 易语言源码优化版

    A*(A-star)算法是一种广泛应用的路径搜索算法,它在自动寻路系统中起着核心作用。易语言是一种中国本土开发的、面向对象的编程语言,它以其简单易学的特点受到很多程序员的喜爱。这个“A*走路 自动寻路A*算法 ...

    人工智能_滑动积木块—A*算法

    《人工智能:滑动积木块与A*算法详解》 在人工智能领域,寻路算法是解决智能体在复杂环境中寻找最优路径的关键技术。其中,A*(A-Star)算法因其高效性和准确性,被广泛应用于游戏开发、地图导航、机器人路径规划等...

    A*算法求解N码难题+Word分析说明

    在提供的文档"rr.doc.doc"和"A算法"中,可能会详细解释A*算法的原理,包括如何构建搜索树、如何计算启发式函数、如何维护开放列表和关闭列表等。同时,可能会通过实例演示如何应用A*算法来解决具体的N码难题,展示...

    旅行商问题-A*算法-java

    A*算法结合了最佳优先搜索(如广度优先搜索或Dijkstra算法)的优点,并引入了启发式信息来提高搜索效率。 A*算法的核心在于评估函数`f(n) = g(n) + h(n)`,其中`n`是当前节点,`g(n)`是从初始节点到当前节点的实际...

    迷宫问题的A*算法(python实现)

    A*算法是一种高效的启发式搜索算法,广泛用于解决此类问题。本篇将详细介绍A*算法的原理以及其在Python中的实现,并结合附件中的代码和测试样例进行解析。 A*算法的核心思想是通过评估节点的启发式分数(f(n))来...

    A*算法在ROS上的简单移植

    A*(发音为“A-star”)算法是一种广泛应用的路径搜索算法,它在计算机科学和机器人领域中被广泛用于解决寻路问题。ROS(Robot Operating System)是机器人领域的一个开源操作系统,提供了一整套工具和服务,使得...

    A*算法解决十五数码问题(Python程序、报告)

    **A*算法** A*算法是一种启发式搜索算法,结合了Dijkstra算法的最优化路径搜索和贪婪最佳优先搜索的优点。它利用了一个评估函数f(n)来指导搜索,该函数由两部分组成:g(n)是从初始状态到当前节点的实际代价,h(n)是...

Global site tag (gtag.js) - Google Analytics