算法:航行计划

时间:2008-10-28 08:47:05

标签: algorithm math

我需要计划一次航行,将海上n个地点与指定的原点和指定的目的地连接起来,并遵循以下约束 航程必须触及所有地点 如果从A到B有预约,则必须在B
之前触摸 每个地点的时间花费各不相同(取决于对该地点的预订)
每个位置都有一个工作窗口。如果船只在工作窗口之前到达,则必须等待 注意:“最小生成树”算法可能不是因为每个端口所需的时间取决于之前的路径(由于工作窗口)
有没有可用的算法?

4 个答案:

答案 0 :(得分:5)

答案 1 :(得分:4)

Ant colony optimization似乎是最知名的解决方案。请注意,这是NP problem,实际上甚至是NP完全问题。这意味着验证解决方案是否正确是“容易的”,但找到它是“难”的。找到“最佳”解决方案的唯一方法是尝试所有可能的解决方案,比较结果并采取最佳解决方案。当然,如果你想在合理的时间范围内解决它,那是不可接受的。

ACO算法将找到一个接近最佳值的好解决方案。我说接近,因为AFAIK不能保证总能找到最好的一个。可能存在更好的解决方但是,通常没有必要真正找到最佳解决方案,只需“非常好”的解决方案就可以解决问题,而ACO正是您所寻找的。它可以在合理的时间间隔内找到解决方案,解决方案肯定是好的。

在您的情况下,您需要稍微修改它。通常它只会尝试找到最短的路线,只考虑路径。在您的情况下,它必须考虑您的工作窗口,预订和在某个位置上花费的时间。但这些只是对“蚂蚁如何旅行”的修改,基本算法保持不变并且仍然可以正常工作。

答案 2 :(得分:2)

这是一个旅行推销员问题,修改后添加了工作窗口约束...这意味着找到这个问题的解决方案比标准的旅行商问题更难找到。

我有几种方法可以很好地提供近似解决方案。

  1. Genetic Algorithms
  2. Tabu Search
  3. Randomized Algorithm(例如,随机漫步)
  4. 我不知道是否适用于你的问题,我说它没有,但dynamic programming偶尔可以用于棘手的问题。

答案 3 :(得分:0)

这个问题有很多工作要做。它有不同的名称

  1. 带有时间窗口和优先约束的旅行商(车辆路线)问题。
  2. 提货和送货问题。
  3. 对此问题进行了大量研究,其中很多都在运筹学Journals中。这个问题通常是NP-Hard,因此在描述问题时对问题的一般精确解决方案是不切实际的,但对于您的具体问题可能会有好的,精确的或近似的解决方案。最好的算法将是您数据的函数。

    • 您的数据集有多大。如果“n”相对较小(30-100),那么可能会出现math programming的精确解。
    • 时间窗和优先约束有多紧。如果在任何时间窗口中访问的可能位置数量很少,则可以使用动态编程等解决方案。
    • 如果找不到特殊情况,那么您可能希望将启发式构造算法与本地搜索后处理器相结合。一个简单的替代方法是所谓的GRASP启发式,你在哪里
    • 采用现有的建筑启发式方法,
    • randomize是为了让多次运行能为您提供多种解决方案,
    • 多次运行随机版本
    • 采取最佳解决方案。