Algorithm 在不完全适合内存的矩阵中寻找路径的最佳算法
我面临一个棘手的问题: 想象一下,我有一张整个国家的地图,由一个巨大的细胞矩阵表示。每个单元格代表1平方米的区域。每个单元格都表示为一个介于0和1之间的Algorithm 在不完全适合内存的矩阵中寻找路径的最佳算法,algorithm,memory-management,mapping,path-finding,Algorithm,Memory Management,Mapping,Path Finding,我面临一个棘手的问题: 想象一下,我有一张整个国家的地图,由一个巨大的细胞矩阵表示。每个单元格代表1平方米的区域。每个单元格都表示为一个介于0和1之间的double值,该值表示遍历单元格的成本 这张地图显然不适合放在内存中 我正试图找到一种计算机器人从起点到终点的最佳路径的方法。我的第一个想法是制作一个类似TCP的移动窗口,在移动的机器人周围有一个真实地图的小地图,并在里面执行a*算法,但是我面临着一些问题,比如地图有巨大的墙,路径发现不好等等 我正在搜索关于类A*算法的文献,但我无法想象什么是
double
值,该值表示遍历单元格的成本
这张地图显然不适合放在内存中
我正试图找到一种计算机器人从起点到终点的最佳路径的方法。我的第一个想法是制作一个类似TCP的移动窗口,在移动的机器人周围有一个真实地图的小地图,并在里面执行a*算法,但是我面临着一些问题,比如地图有巨大的墙,路径发现不好等等
我正在搜索关于类A*算法的文献,但我无法想象什么是这个问题的好解决方案的近似值
我想知道是否有人遇到过类似的问题,或者可以帮助你想出一个可能的解决方案
提前感谢:)由于我不知道确切的数据,以下是一些有用的信息:
- 最短路径的部分路径本身就是最短路径。也就是说,你可以把你的矩阵分解成子矩阵,然后在其中找到(所有)最短路径。请注意,您不必存储所有结果:例如,您可以通过不保存完整路径而只保存信息来节省内存:路径从
到a
。中间节点可能会在以后再次计算或存储在文件中以备将来使用。您甚至可以为某些区域预先计算一些最短路径B
- 另一种方法是,您可能能够以某种方式压缩矩阵。也就是说,如果您的大区域仅由一个相同的数字组成,则最好只存储该数字和该区域的尺寸
- 另一种方法(与预计算一些最短路径相关)是生成地图的不同细节级别。考虑到美国地图,这可能看起来如下:最粗略的细节层次只包括纽约、洛杉矶、芝加哥、达拉斯、费城、休斯顿和凤凰城。标高越细,包含的城市越多,但另一方面,它们显示的整个地图的面积越小
顺便说一句,为什么需要如此精细的粒度呢?以下是一些可行的想法 可以将路径建模为分段线性曲线。如果有31条线段,则曲线由60个数字完整描述。每个可能的曲线都有一个成本,因此成本是以下形式的函数 成本(x1、x2、x3…..x60) 现在的问题是找到60个变量函数的全局最优解。您可以使用标准方法来执行此操作。一个想法是使用遗传算法。另一个想法是使用蒙特卡罗方法,如平行回火 无论何时,只要有一条有希望的路径,就可以将其作为一个起点来寻找代价函数的局部最小值。也许你可以用一些插值,使你的成本函数是可微的。然后,您可以使用牛顿方法(或者更确切地说是BFGS)来找到代价函数的局部mimima 你的问题有点类似于在化学系统中寻找反应路径的问题。也许你可以在戴维斯·威尔斯的《能源景观》一书中找到一些灵感 但我也有一些问题:
- 您是否需要找到最佳路径,或者您只是在寻找一条合适的路径
- 你手头上有多少计算机的能力和时间
- 机器人是否可以急转弯,或者你是否需要额外的物理模型来改善成本函数