Algorithm 在不完全适合内存的矩阵中寻找路径的最佳算法

Algorithm 在不完全适合内存的矩阵中寻找路径的最佳算法,algorithm,memory-management,mapping,path-finding,Algorithm,Memory Management,Mapping,Path Finding,我面临一个棘手的问题: 想象一下,我有一张整个国家的地图,由一个巨大的细胞矩阵表示。每个单元格代表1平方米的区域。每个单元格都表示为一个介于0和1之间的double值,该值表示遍历单元格的成本 这张地图显然不适合放在内存中 我正试图找到一种计算机器人从起点到终点的最佳路径的方法。我的第一个想法是制作一个类似TCP的移动窗口,在移动的机器人周围有一个真实地图的小地图,并在里面执行a*算法,但是我面临着一些问题,比如地图有巨大的墙,路径发现不好等等 我正在搜索关于类A*算法的文献,但我无法想象什么是

我面临一个棘手的问题:

想象一下,我有一张整个国家的地图,由一个巨大的细胞矩阵表示。每个单元格代表1平方米的区域。每个单元格都表示为一个介于0和1之间的
double
值,该值表示遍历单元格的成本

这张地图显然不适合放在内存中

我正试图找到一种计算机器人从起点到终点的最佳路径的方法。我的第一个想法是制作一个类似TCP的移动窗口,在移动的机器人周围有一个真实地图的小地图,并在里面执行a*算法,但是我面临着一些问题,比如地图有巨大的墙,路径发现不好等等

我正在搜索关于类A*算法的文献,但我无法想象什么是这个问题的好解决方案的近似值

我想知道是否有人遇到过类似的问题,或者可以帮助你想出一个可能的解决方案


提前感谢:)

由于我不知道确切的数据,以下是一些有用的信息:

  • 最短路径的部分路径本身就是最短路径。也就是说,你可以把你的矩阵分解成子矩阵,然后在其中找到(所有)最短路径。请注意,您不必存储所有结果:例如,您可以通过不保存完整路径而只保存信息来节省内存:路径从
    a
    B
    。中间节点可能会在以后再次计算或存储在文件中以备将来使用。您甚至可以为某些区域预先计算一些最短路径

  • 另一种方法是,您可能能够以某种方式压缩矩阵。也就是说,如果您的大区域仅由一个相同的数字组成,则最好只存储该数字和该区域的尺寸

  • 另一种方法(与预计算一些最短路径相关)是生成地图的不同细节级别。考虑到美国地图,这可能看起来如下:最粗略的细节层次只包括纽约、洛杉矶、芝加哥、达拉斯、费城、休斯顿和凤凰城。标高越细,包含的城市越多,但另一方面,它们显示的整个地图的面积越小


您的问题是否有任何特殊结构,例如,三角形不等式是否成立/您能否保证最短路径不会来回移动?是否要多次执行查询?(如果是这样的话,您可以进行预处理,将在多个查询中摊销。)您需要精确的最小解,还是epsilon因子内的某个值可以

一种想法是,可以将矩阵粗化,形成100米乘以100米的正方形,并确定通过100乘以100的正方形的最短路径距离。现在这将适合内存(约1G字节),您可以运行Dijkstra,然后将每一步扩展到100乘以100的平方

还有,你试过运行Dijkstra算法的前后版本吗?也就是说,从源头展开,同时搜索汇,当有交叉口时停止


顺便说一句,为什么需要如此精细的粒度呢?

以下是一些可行的想法

可以将路径建模为分段线性曲线。如果有31条线段,则曲线由60个数字完整描述。每个可能的曲线都有一个成本,因此成本是以下形式的函数

成本(x1、x2、x3…..x60)

现在的问题是找到60个变量函数的全局最优解。您可以使用标准方法来执行此操作。一个想法是使用遗传算法。另一个想法是使用蒙特卡罗方法,如平行回火

无论何时,只要有一条有希望的路径,就可以将其作为一个起点来寻找代价函数的局部最小值。也许你可以用一些插值,使你的成本函数是可微的。然后,您可以使用牛顿方法(或者更确切地说是BFGS)来找到代价函数的局部mimima

你的问题有点类似于在化学系统中寻找反应路径的问题。也许你可以在戴维斯·威尔斯的《能源景观》一书中找到一些灵感

但我也有一些问题:

  • 您是否需要找到最佳路径,或者您只是在寻找一条合适的路径

  • 你手头上有多少计算机的能力和时间

  • 机器人是否可以急转弯,或者你是否需要额外的物理模型来改善成本函数

拥有不同层次的细节将是一个好主意。如果我理解正确,一个9x9矩阵可以划分为一个3x3矩阵,其中每个单元本身就是一个3x3矩阵,其值由一个启发式函数确定。与A*一样,启发式函数不应高估成本,否则将无法找到最佳路径。让我困惑的是,当我计算每个子矩阵内的路径时,应该如何定位起点和终点?这个问题没有任何特殊的结构,它只是每个节点上都有权重的矩阵的特例。查询应该只执行一次,精确的解决方案会很好,但在计算上应该是合理的,所以足够好的解决方案是可以的。该思想与Phimueme表达的思想相同,但应使用低内存算法。问题是哪一个?>您是否需要找到最佳路径,或者您只是在寻找一条合适的路径?精确的解决方案会很好,但它应该在计算上是合理的,所以一个足够好的解决方案是OK,你手头有多少计算机能力和时间?有点有限,但时间不是一个约束条件,所以它不重要…机器人可以急转弯,或者你需要额外的物理模型来改善成本函数吗?我不