标签: path-finding

如何在寻路情况下处理不同大小的物体(A*,A-star)

我正在开发一款使用A-star(A*)进行路径查找的游戏,但我已经到了一个点,我有一些大于单个网格方块的对象.

我正在运行16*16px的网格.墙段为16*16,因此单个方块无法通行.我的一些坏人是32*32,所以他们需要检查一个间隙是否至少2格子宽,以便能够传递它.

我不能简单地制作网格32*32,因为设计需要薄壁(16px),并且有几个较小的坏人只占用一个16*16的方形.

如何实现这种多分辨率环境?A-star仍然是正确使用的工具吗?

a-star path-finding

6
推荐指数
2
解决办法
3159
查看次数

有人实施过SMA*搜索算法吗?

我发现AIMA(人工智能:现代方法)中的算法描述根本不正确."必要"是什么意思?内存限制是多少?队列大小或处理过的节点?如果当前节点根本没有孩子怎么办?

我想知道这个算法本身是否正确.因为我搜索了互联网,但还没有人实现它.

谢谢.

algorithm search artificial-intelligence a-star path-finding

6
推荐指数
1
解决办法
5167
查看次数

寻找非退化梯形的全局最短路径

我正在寻找一种有效的算法,该算法在具有多边形障碍物的二维空间中找到两点之间的全局最短路径.

源数据是非简并垂直梯形的形式,由最多10 ^ 4个梯形组成(非简并意味着每个梯形的下侧和上侧各自具有至多2个相邻的梯形).

在梯形本身上运行最短路径算法然后使用漏斗算法并不能保证找到全局最短路径.

计算角顶点的可见性图可能会起作用,但我怀疑这可能会占用太多内存,因为对算法的要求是它可以在具有多个(最多700个)的服务器上频繁使用(大约每秒100次) )在内存中映射,但如果您认为这不是问题,请随时纠正我!

为了可视化数据的样子,我上传了一张小地图的三角测量,你可以点击图像将其作为SVG查看.

例.

algorithm graph path-finding

6
推荐指数
1
解决办法
430
查看次数

我不明白A*寻路

据我所知:

将当前节点添加到关闭列表.

查找当前节点的相邻节点,如果它们不是不可移动的节点而不是关闭的列表,则将该节点添加到打开列表中,父节点是当前节点,并计算F,G和H值.如果节点已经存在于打开列表中,请检查通过当前节点转到该节点是否会导致较低的G值 - 如果是,则使该节点的父节点成为当前节点.

在具有最高F值的打开列表中查找节点,并使当前节点成为该节点.

重复直到最终到达目的地,然后浏览目标节点的父节点,然后您将返回到起始节点.这将是最好的途径.

所以,这对我的大脑来说是有意义的,但是当我在图表上实际尝试时,我想我并没有正确地理解它.

(从下面的图片)从起始绿色瓷砖下来,F值为60的那个.这是在打开的列表上,并且具有比右下角74更低的F值.为什么选择74一个而不是60?

一个*

algorithm a-star path-finding

6
推荐指数
1
解决办法
2289
查看次数

在强制使用唯一节点属性时进行寻路 - 我应该使用哪种算法?

更新2011-12-28:这是一篇博文,对我试图解决的问题,我的工作以及我目前的解决方案的描述不那么模糊:观看每个MLB团队玩游戏


我正试图解决一种奇怪的寻路挑战.我有一个非循环方向图,每个边都有一个距离值.我想找到一条最短路径.简单吧?好吧,有几个原因我不能只使用Dijkstra或A*.

  1. 我根本不关心路径的起始节点是什么,也不关心结束节点.我只需要一个包含10个节点的路径.但:
  2. 每个节点都有一个属性,让我们说它的颜色.每个节点具有20种不同颜色中的一种.
  3. 我试图找到的路径是最短的路径,正好有10个节点,每个节点都是不同的颜色.我不希望路径中的任何节点具有与任何其他节点相同的颜色.
  4. 能够强制我的路径为其中一个属性赋予一个值(例如,"至少一个节点必须是蓝色")是很好的,但这并不是必需的.

这是一个简化的例子.我的完整数据集实际上有三个不同的属性,每个节点必须都是唯一的,我有2k +节点,每个节点平均有35个传出边.由于获得完美的"最短路径"可能是指数或因子时间,因此穷举搜索实际上不是一种选择.我真正想要的是一些符合#3标准的"良好路径"的近似.

有人能指出我可以使用的算法(甚至修改过)吗?


我的完整数据集的一些统计数据:

  • 总节点:2430
  • 总边数:86524
  • 没有传入边缘的节点:19
  • 没有传出边的节点:32
  • 大多数外围边缘:42
  • 每个节点的平均边缘:35.6(每个方向)
  • 由于数据的性质,我知道图表是非循环的
  • 在完整的数据集中,我正在寻找长度为15而不是10的路径

language-agnostic algorithm path-finding

6
推荐指数
1
解决办法
320
查看次数

立方体表面的星寻路算法启发式算法

我正在建立一个在立方体表面上玩的蛇游戏.目前它使用Dijkstra的算法进行寻路.尽管使用set和priority队列数据结构进行了优化,但它仍然有点太慢.当蛇吃食物并开始寻找新食物时,你会注意到延迟.

我试图让它使用A*而不是我找不到一个好的启发式.在有4个运动方向的平面网格上,我会使用曼哈顿距离.我已经尝试过使用3D曼哈顿距离了abs(dx) + abs(dy) + abs(dz),这个距离并不合理:对于蛇来说,游戏世界实际上是6个网格(对应于立方体的面),具有不寻常的环绕特性.

在代码中,每个方块存储在grid[15][15]2D数组中.每个面都有6个这样的数组.因此每个方块都有一个(arrayX, arrayY, d)三元组来描述2D数组中的偏移并指定哪个数组.此外,每个方块都有一个(x, y, z)描述空间位置的三元组.

这是寻路发生的游戏代码区域:

https://github.com/mhluska/Snakeception/blob/master/src/js/game.coffee#L105

这是A*的库代码:

https://github.com/mhluska/Stimpack/blob/master/src/js/graph.coffee#L60

什么是这个游戏世界的合适,简洁的启发式?

javascript performance a-star path-finding coffeescript

6
推荐指数
1
解决办法
1132
查看次数

如何使用密码查询找到所有最长的路径?

我想编写一个cypher查询,它查找节点中与STATUS ="on"属性相互关系的所有最长路径,这是我到目前为止所做的:

start n=node(*) 
match p = n-[r:INCLUDE*..]->m 

with n,MAX(length(p)) as l 
match p = n-[r:INCLUDE*..]->m 
WHERE all(rel in r 
 where rel.status='on' AND (length(p) = l) )
return p,l 
Run Code Online (Sandbox Code Playgroud)

它返回3个1,2和3长度的路径,不仅是最长的路径,我的查询应该只找到最长的路径,我的意思是如果有8个路径适合我的第一个where条件(where rel.status='on'),长度为1, 2,3,3,4,6,6,6,只返回长度为6的三条路径.

我该怎么办?

请指导我,我是neo4j的新手,并尝试过很多但除了头晕之外没有任何东西,我会非常感谢你的帮助.

path-finding neo4j cypher

6
推荐指数
1
解决办法
4978
查看次数

修改的最短路径算法(Dijkstra's)

所以我的问题是我有一个非负边长的有向图G,我希望找到两个节点u和v之间的最短路径,这样它们只能通过图中的一个标记节点.

如果我们没有涉及标记节点的条件,则可以使用Dijkstra算法轻松解决该问题.

procedure dijkstra(G, l, s)
Input: Graph G = (V, E), directed or undirected;
positive edge lengths {le : e ? E}; vertex s ? V
Output: For all vertices u reachable from s, dist(u) is set to the distance from s to u.

for all u ? V :
    dist(u) = ?
    prev(u) = nil
dist(s) = 0
H = makequeue(V ) (using dist-values as keys)
while H is not empty:
    u = deletemin(H)
    for all …
Run Code Online (Sandbox Code Playgroud)

graph path-finding

6
推荐指数
1
解决办法
393
查看次数

在寻路中,DFS和Dijkstra有什么区别?

我正在研究 DFS 和 Dijkstra。在我的简单测试用例中,大多数都表明 DFS 更快。在我的测试用例中,通过每个节点的成本都是相同的。但大多数人在寻路时更喜欢 Dijkstra 而不是 DFS,因为 Dijkstra 非常准确。

那么,DFS 和 Dijkstra 有什么区别呢?另外,每种算法的优缺点是什么?

algorithm dijkstra path-finding depth-first-search

6
推荐指数
1
解决办法
1万
查看次数

如何将对象从节点移动到节点?Libgdx Box2d A*寻路

我无法成功地让敌人从一个节点移动到另一个节点。

我设法设置了整个寻路,我得到了玩家的完整路径和下一个节点的位置,一直到最后。

如何将 box2d 主体从一个节点移动到另一个节点?

或者更简单 - 如何将 box2d 主体移动到某个位置?我尝试施加冲动,力量无法做到。

这是我的简化代码。Monster 和 Player 类都扩展了 Sprite:

public class B2dSteeringEntity implements Steerable<Vector2>, Updateable {

public static final String TAG = B2dSteeringEntity.class.getName();

    Body body;
    boolean tagged;
    float maxLinearSpeed, maxLinearAcceleration;
    float maxAngularSpeed, maxAngularAcceleration;
    float boundingRadius;

SteeringBehavior<Vector2> behavior;
SteeringAcceleration<Vector2> steeringOutput;

public B2dSteeringEntity(Body body, float boundingRadius) {
    this.body = body;
    this.boundingRadius = boundingRadius;

    this.maxLinearSpeed = 250;
    this.maxLinearAcceleration = 200;
    this.maxAngularSpeed = 0;
    this.maxAngularAcceleration = 0;

    this.tagged = false;

    this.steeringOutput = new SteeringAcceleration<Vector2>(new Vector2());
}

@Override
public …
Run Code Online (Sandbox Code Playgroud)

java path-finding box2d libgdx

6
推荐指数
1
解决办法
199
查看次数