Algorithm 带路由限制的图搜索问题

Algorithm 带路由限制的图搜索问题,algorithm,language-agnostic,optimization,graph,Algorithm,Language Agnostic,Optimization,Graph,我想计算最赚钱的路线,我认为这是一种旅行推销员问题。 我有一组可以访问的节点,还有一个计算节点间旅行成本和到达节点的点的函数。目标是在最小化成本的同时达到固定的已知分数 此成本和奖励不是固定的,取决于以前访问的节点。 起始节点是固定的 对如何访问节点有一些限制。一些简化的例子包括: 节点B只能在 在访问了节点C之后,可以访问D或E。要求至少访问一个,允许同时访问两个 只有在至少访问了5个其他节点之后才能访问Z 一旦访问了50个节点,节点A-M将不再奖励积分 某些节点可以(而且可能必须)访问多次

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

此成本和奖励不是固定的,取决于以前访问的节点。
起始节点是固定的

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

  • 节点B只能在
  • 在访问了节点C之后,可以访问D或E。要求至少访问一个,允许同时访问两个
  • 只有在至少访问了5个其他节点之后才能访问Z
  • 一旦访问了50个节点,节点A-M将不再奖励积分
  • 某些节点可以(而且可能必须)访问多次
目前我只能想到两种方法来解决这个问题:
a) 遗传算法,具有计算生成路线成本/效益的适应度函数
b) Dijkstra通过图进行搜索,因为起始节点是固定的,尽管大量节点可能会使这在内存方面不可行

有没有其他方法来确定通过图表的最佳路线?它不需要是完美的,一个近似的路径是完美的,只要它的误差可以接受。

TSP解算器会是一种选择吗?

有了这么多奇怪的变化和路径依赖性,您实际上搜索的不是图本身,而是从根开始的路径空间,这是一棵树。如果问题像您所说的那样普遍,那么您将无法比直接搜索“路径树”,保存最佳值和相应的路径做得更好。如果您可以将其转换为任何方式,以便不存在这种路径依赖,那么您可能应该这样做

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

如果你足够幸运,每增加一步成本都会单调增加,你可以改为按成本订购。第一个足够好的就是你想要的。广度优先搜索有时通过将要探索的路径放在队列上来实现。将此更改为基于成本的优先级队列,您现在有一个“成本优先搜索”,正式名称为

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