Optimization 在具有多值节点的树中查找最小路径

Optimization 在具有多值节点的树中查找最小路径,optimization,math,tree,path-finding,Optimization,Math,Tree,Path Finding,我的数学课远远落后,我目前正努力找到一个像样的解决方案来解决我遇到的问题:我有一棵树,其中的节点是动作,并根据多个标准进行“加权”:所述动作的成本、所需时间、必要的资源、干扰等 我想在这棵树中找到使成本和时间最小化的路径,例如,干扰和成本与时间等。我的问题是,我不知道如何做到这一点,除非提出一个全局成本函数F(成本、时间、资源…),并使用F(…)的结果应用一个常规的树遍历算法作为我唯一的重量。 但是,我怎样才能得到F呢?类似于“F(成本、时间、资源)=a*成本+b*时间+c*资源”的感觉非常“不

我的数学课远远落后,我目前正努力找到一个像样的解决方案来解决我遇到的问题:我有一棵树,其中的节点是动作,并根据多个标准进行“加权”:所述动作的成本、所需时间、必要的资源、干扰等

我想在这棵树中找到使成本和时间最小化的路径,例如,干扰和成本与时间等。我的问题是,我不知道如何做到这一点,除非提出一个全局成本函数F(成本、时间、资源…),并使用F(…)的结果应用一个常规的树遍历算法作为我唯一的重量。 但是,我怎样才能得到F呢?类似于“F(成本、时间、资源)=a*成本+b*时间+c*资源”的感觉非常“不专业”

编辑:

我想避免使用“求和”这个词,因为我不确定这是否真的是一种方法,但本质上,这就是我正在做的:计算从顶部节点到其中一个叶的每个“路径”或“分支”的总成本,并选择使成本最小化的“路径”或“分支”。问题在于,每个节点都有一个基于所需时间、财务成本、资源使用等的权重

因此,正如Stephan所说,似乎不可避免地必须提出一个公式,将所有这些参数减少到每个节点的一个全局成本,然后当我沿着树向下移动时,我可以在节点之间求和,并选择使总成本最小化的路径

所以我想我的问题是,有没有一种方法来选择这个函数


谢谢你的回答和评论,现在我的脑子里开始有点清楚了。

提出F是最重要的。如果我能给你6倍5倍或者5倍6倍,你更喜欢哪一种?你的成本函数需要考虑到这一点。不幸的是,没有一种算法能为你解决这个问题。在我坐下来为我正在开发的一个优化应用程序编写F之前的一周里,我否认了这一点。最糟糕的情况是,将参数留给用户修改。

为什么普通的图形搜索算法不起作用

对于路径成本函数,可以使用相关条件的运行和。到目标的距离更难


它可能是到最近叶子的距离,是为所有或某些节点预先计算的,尽管这听起来非常昂贵。根据你的树的结构,你可以得出一个更便宜的低估值——例如,如果它是完全平衡的,那么它是微不足道的。

假设我们有四对(x,y),比如(1,4),(1,5),(2,3),(3,3)。现在要最小化“x和y”。什么意思?如果你先最小化x,然后最小化y,最后得到(1,4)。如果你先最小化y,然后最小化x,你会发现(2,3)

除非你选择一个全局成本函数F(x,y),就像你观察到的那样,我看不出“两者”的任何含义。(无论如何,一旦选择了F,可能仍然存在多个最小点。)顺便说一句,在我看来,线性组合(正乘数a、b、c被理解为“权重”)根本不是“不专业的”,至少如果你不知道什么是更合适的成本函数

编辑:

因此,正如Stephan所说,似乎不可避免地必须提出一个公式,将所有这些参数减少到每个节点的一个全局成本,然后当我沿着树向下移动时,我可以在节点之间求和,并选择使总成本最小化的路径

小心。事实上,只有当F是线性的时,这种策略才有意义。当然,成本、时间、资源等都是加法函数,从某种意义上说,时间(node1->node2->node3)=时间(node1)+时间(node2)+时间(node3),但通常情况下,F不是这种情况,除非它是线性的。(即F(成本(节点1->节点2))=F(成本(节点1)+成本(节点2))!=F(成本(节点1))+F(成本(节点2)))


如果您选择非线性全局代价函数,正确的策略是为每个节点计算从根节点到该节点的总代价、总时间、总资源,并仅为终端节点计算(然后最小化)F。

如果您能给出一个具体的数据示例,将有所帮助。我通常将“查找路径”与图形而不是树相关联。如果我使用“分支”而不是“路径”,这是否更有意义?在沿着树向下移动时,是否对节点的成本/时间求和?或者您只是在寻找成本/时间最小的最终(叶)节点?如果是后一种情况,则父节点及其子节点的成本/时间之间是否存在任何关系?找到“使成本和时间最小化的路径”意味着什么?最小化一个的路径可能不会最小化另一个。