A*算法启发式函数的几种距离

A*算法启发式函数的几种距离

欧氏距离

double AstarPathFinder::getDistance_E(Vector3d n1 , Vector3d n2){
    //Euclidean
    double dis_E =  sqrt((n2(0)-n1(0))*(n2(0)-n1(0))+(n2(1)-n1(1))*(n2(1)-n1(1))+(n2(2)-n1(2))*(n2(2)-n1(2)));

    return dis_E;
}

曼哈顿距离

double AstarPathFinder::getDistance_M(Vector3d n1 , Vector3d n2){
    //Manhattan
    double dis_M =  fabs(n2(0)-n1(0))+ fabs(n2(1)-n1(1))+ fabs(n2(2)-n1(2));

    return dis_M;
}

对角距离

实质是 sqrt(3) * d_min + sqrt(2) * (d_mid - d_min) + (d_max - d_mid)

double AstarPathFinder::getDistance_D(Vector3d n1 , Vector3d n2){
    //diagonal:  3D
    double dis_D ;

    double dx = fabs(n1(0) - n2(0));
    double dy = fabs(n1(1) - n2(1));
    double dz = fabs(n1(2) - n2(2));
    double dmin = min( min(dx, dy), dz);
    double dmax = max(max(dx, dy), dz);
    double dmid = dx + dy + dz - dmin - dmax;
    dis_D = (sqrt(3) - sqrt(2))*dmin + (sqrt(2) - 1)*dmid + dmax;

    return dis_D;
}

0:Dijkstra算法

double AstarPathFinder::getDistance_0(Vector3d n1 , Vector3d n2){
    //Dijkstra
    double dis =  0;

    return dis;
}
  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
动态衡量启发式A*算法是一种计算最短路径的算法,适用于在有向图中寻找源点和目标点之间的最短路径。与普通的A*算法不同的是,动态衡量启发式A*算法将启发函数的值进行动态调整,以更好地适应搜索过程中的实际情况。 动态衡量启发式A*算法的启发函数值包括三部分:起点到当前节点的实际距离(g值)、当前节点到终点的估计距离(h值)和一个衡量当前节点与前一个节点之间“拐弯”的值(d值)。在进行搜索过程中,算法会动态调整d值的大小,使得路径更加平滑,从而加快搜索的速度。 动态衡量启发式A*算法具有以下几个优点:一是能够快速搜索到最短路径,适用于实时性比较强的应用场景;二是由于动态调整启发函数的值,算法更加适应实际情况,能够更快地找到最短路径;三是算法具有一定的容错能力,即使在搜索过程中出现了错误或者偏差,仍然可以找到最短路径。 但是,动态衡量启发式A*算法也有一些不足之处。由于需要不断地调整启发函数的值,算法的复杂度较高,运行速度可能会比较慢。此外,算法的实现过程也较为复杂,需要一定的技术经验和理解能力。 总的来说,动态衡量启发式A*算法是一种有效的寻找最短路径的算法,尤其适用于实时应用场景。在未来,随着技术的不断提升和实现方式的改进,该算法的应用范围还将进一步扩大和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值