Algorithm 在二维网格曲面上查找最短路径时遇到问题

Algorithm 在二维网格曲面上查找最短路径时遇到问题,algorithm,matlab,dijkstra,Algorithm,Matlab,Dijkstra,三天前我问了这个问题,我被投稿人炒了鱿鱼,因为我没有提供足够的信息。对此我很抱歉 我有一个2D矩阵,每个阵列位置都与水道中的水深有关,我希望应用Dijkstra或类似的“最小成本路径”算法,找出在水面上建造桥梁所需的最少混凝土量 将数据格式化为一个干净的版本需要一些时间,因此我已经学习了一些基本的Matlab技能。我已经移除了大部分土地,因此现在海岸线被标准化为某个值,我的计划是使用一个循环,通过“西”海岸上的每个“像素”,对其运行一个最小成本算法,直到最近的“东”海岸,并通过整个网格最终找到成

三天前我问了这个问题,我被投稿人炒了鱿鱼,因为我没有提供足够的信息。对此我很抱歉

我有一个2D矩阵,每个阵列位置都与水道中的水深有关,我希望应用Dijkstra或类似的“最小成本路径”算法,找出在水面上建造桥梁所需的最少混凝土量

将数据格式化为一个干净的版本需要一些时间,因此我已经学习了一些基本的Matlab技能。我已经移除了大部分土地,因此现在海岸线被标准化为某个值,我的计划是使用一个循环,通过“西”海岸上的每个“像素”,对其运行一个最小成本算法,直到最近的“东”海岸,并通过整个网格最终找到成本最低的一个

这是我的问题,将数据拟合到任何算法。不幸的是,我被选项和不同的格式弄得不知所措,因为其他示例是针对其他用例的

我的另一个考虑是,当计算最短成本路径时,它将是一条不适合桥梁的锯齿线,因此如果可能,我需要约束路径中的弯曲半径,我不知道如何进行

频道图片:


方法中的任何建议都很好,我只需要知道是否有人知道一种方法应该有效,然后我将花时间学习如何拟合数据。

您可以通过以下方式将Dijkstra应用于您的问题:

  • 要连接的两个“干燥”区域对应于值为0的矩阵项;其他单元格有一个正值,表示深度(或用混凝土填充该位置的成本)

  • 你的边是矩阵中相邻细胞的连接。(可以是4邻域或8邻域。)边的权重是连接单元值的算术平均值

  • 然后应用Dijkstra算法,起点在一个“干燥”区域,终点在另一个“干燥”区域

  • 最便宜的路径将连接两个值为0的单元格,其权重将对应于访问的单元格的总成本。(每个单元重量的一半来自边缘到单元,另一半来自边缘离开单元。)

    通过这种方式,你将得到一条可能相当弯曲的通向水面的小路,这可能是一个有用的提示,告诉你在哪里建造一座便宜的桥


    您可以使用A*-算法加快计算速度。因此,每个单元到达另一端需要剩余成本的下限。只要环不包含另一侧的0单元,就可以通过检查围绕一个点的“同心环”来计算该下限。然后,每个环的最小单元值之和就是剩余成本的下限。

    另一种方法是使用蒙特卡罗、模拟退火或遗传算法,其中初始“桥”是由两个随机选择的端点(裂谷两侧各一个)之间的简单样条曲线,以及裂谷中少量或随机选择的中间点组成。最终,你会得到一座物理上“真实”的桥梁和一个合理优化的混凝土成本

    你以前问过吗?在这种情况下,正确的操作是编辑问题以包含信息。因此,您需要网格中的最短路径。但这与问题的主体相矛盾:你不需要最短路径,也不需要网格中的最短路径,你只是在网格上离散数据。这里的大问题是提出一个“成本”函数,一个给定路径的函数,将给你提供混凝土的数量。我们无法为您找到,因为这不是一个编程问题,而是一个研究问题。请记住,Stackoverflow是用于编程问题,而不是关于您希望使用ProgrammingSomePerson解决的问题。我将更新旧问题。Ander我可以研究混凝土的用量,显然我不是在寻求帮助,我是在寻找如何从一个海岸到另一个海岸的成本最低的路径。这似乎是一个非常基本的例子,我很惊讶在所有文档和论坛的例子中都没有提到这种情况。啊哈!因为要么你提供了太多的信息,不清楚你想要什么,要么这是一个很难的例子。机器学习算法就是为了解决这个问题,数学家们研究算法在凸和非凸场景下的收敛性。这不是一个简单的例子。除非你想要两个点之间的最短路径,那是一条直线。@drcross欢迎来到工程,那里的问题令人沮丧,你需要自己研究它们!