【发布时间】:2013-04-12 20:39:31
【问题描述】:
对于我的一个项目,我正在尝试创建一个求解器,给定一组具有加权路径的随机加权节点,它将找到具有有限移动次数的最高得分路径。我创建了一个视觉对象来帮助描述问题。
为了完整起见,此示例显示了所有连接边。边上的数字是遍历成本,节点内的数字是分数。一个节点只在遍历到它的时候才算,不能从它自己遍历到它自己。
从图片中的描述可以看出,有一个开始/结束节点,其中包含随机放置的节点,每个节点都有一个任意分数。每个节点都连接到所有其他节点,每个连接都有一个从剩余移动单元总数中减去的任意权重。为简单起见,您可以假设连接的权重是距离的函数。节点可以多次移动,并且再次应用它们的分数。目标是找到在给定移动限制下得分最高的循环路径。
求解器永远不会处理超过 30 个节点,通常处理 10-15 个节点。我仍然需要尝试让它尽可能快。
除了纯粹的蛮力方法之外,还有什么算法或方法可以帮助我解决这个问题?
【问题讨论】:
-
似乎类似于 DP 加权背包类型问题。谷歌搜索动态编程并检查this out
-
"节点可以多次到达" 他们得分不止一次吗?
-
@DavidEisenstat 是的。这是隐含的,因为所有节点都连接到所有其他节点;如果不获得分数,则移动到节点是没有意义的,因为节点不是导航限制。更新的问题。
-
如果我们采取一些步骤,那么剩余步骤的评分不取决于确切的历史记录是否正确?如果是这样,就有一个多项式时间动态程序。如果没有其他人,我会在一段时间内发布详细信息。
-
@DavidEisenstat 如果我理解正确,不,它没有。唯一的限制是您从起始节点开始,在起始节点结束,并且不超过移动/步数限制。当您移动到一个节点时,您必须从该节点移动到另一个节点,即您当前的位置很重要。不管怎样,我很想看看你有什么。