带路径限制的图搜索问题

时间:2011-01-16 00:25:47

标签: algorithm language-agnostic optimization graph

我想计算最有利可图的路线,我认为这是一种旅行商问题 我有一组可以访问的节点和一个计算节点之间行程和到达节点的点的成本的函数。目标是在最小化成本的同时达到固定的已知分数。

此费用和奖励不固定,取决于之前访问过的节点 起始节点是固定的。

对如何访问节点有一些限制。一些简化的例子包括:

  • 节点B只能在A
  • 之后访问
  • 访问节点C后,可以访问D或E.访问至少一个是必需的,允许访问两个。
  • 只有在访问过至少5个其他节点后才能访问Z
  • 一旦访问了50个节点,节点A-M将不再奖励积分
  • 某些节点可以(并且可能必须)多次访问

目前我只想到两种方法来解决这个问题:
a)遗传算法,其中适应度函数计算所生成的路线的成本/收益
b)Dijkstra搜索图表,因为起始节点是固定的,尽管大量节点可能会使得内存不可行。

还有其他方法可以确定图表中的最佳路线吗?它不需要是完美的,只要它的错误可以接受,近似路径就完全没问题了 TSP求解器会成为一个选择吗?

1 个答案:

答案 0 :(得分:3)

由于这种奇怪的变异和路径依赖,你实际上搜索的不是图本身,而是来自根的路径空间,即树。如果问题像你说的那样一般,那么你就无法直接搜索“树路径”,保存最佳值和相应的路径。如果您可以将其转换为任何方式,以便没有这样的路径依赖,那么您应该这样做。

如果不能,有两个基本选项:广度优先,它将以长度的顺序返回路径,但代价是高内存使用,因为必须存储许多临时路径。深度优先搜索只需要存储单个路径(可以完全作为一系列递归调用完成),但没有自然停止点,并且如果路径大小没有上限,则无法保证实际终止。

如果您足够幸运,每增加一步,成本会单调增加,您可以按成本排序。第一个足够好的是你想要的那个。广度冷杉搜索有时通过在队列中放置探索路径来实现。根据费用将此更改为优先级队列,您现在有一个“成本优先搜索”,正式称为Uniform-cost search

如果成本函数可以通过添加路径来减少,则可以修改A *搜索以进行搜索,但您不再保证可以提前停止。