我有一个类似下面图片的值的栅格网格(白色是高值,黑色背景值为零):
我正在尝试编写某种路径跟踪代码,从线的一端开始并跟踪到另一端,经过可能的最高值(也就是说,选择在线中的像素越白越好),但仍然要到达另一端。
我已经在这个问题上挣扎了一段时间,似乎无法让我尝试的任何东西起作用。那么我想知道,是否已经针对这种问题开发了通用算法?我做了很多搜索,但大多数路径算法似乎都是设计用于矢量/网络,而不是像这样的栅格网格。
有什么想法吗?
我认为你不需要遗传算法或任何荒谬的东西;好老式递归和动态规划应该足够。我最初的想法是,你应该能够通过进行广度优先搜索来实现你的目标。从起点开始,你访问所有得分大于该路径值的邻居--所有单元格最初都是无限的,黑色单元格的成本将是无限的,这些是你可以剪枝的路径。一旦到达目的地,如果可达,你应该能够回溯找到路径。这是贪婪的,但如果你的路径像这些一样表现良好,那就没问题。
对于更多灰色和曲折的路径,将光栅图像转换为图形,并将边缘权重设置为邻居的灰度值(或灰度值之间的差异,具体取决于这个数据实际意义)。因此,你应该能够使用基于该解释的任何最短路径算法。
如果您正在进行大规模或研究性的工作,可以尝试使用蚁群优化算法http://en.wikipedia.org/wiki/Ant_colony_optimization,但如果您是为了赚钱而做这个项目,只需选择像泛洪填充http://en.wikipedia.org/wiki/Flood_fill这样的东西即可。
r <- raster('file'); start <- which(r[1,] > 250); end <- ncell(r) -ncol(cell) + which(r[nrow(r), ] > 250)
通过start和end,你可以像这样计算坐标:xyFromCell(r, start)
。 - Robert Hijmans