我需要计划一次航行,将海上n个地点与指定的原点和指定的目的地连接起来,并遵循以下约束
航程必须触及所有地点
如果从A到B有预约,则必须在B
之前触摸
每个地点的时间花费各不相同(取决于对该地点的预订)
每个位置都有一个工作窗口。如果船只在工作窗口之前到达,则必须等待
注意:“最小生成树”算法可能不是因为每个端口所需的时间取决于之前的路径(由于工作窗口)
有没有可用的算法?
答案 0 :(得分:5)
答案 1 :(得分:4)
Ant colony optimization似乎是最知名的解决方案。请注意,这是NP problem,实际上甚至是NP完全问题。这意味着验证解决方案是否正确是“容易的”,但找到它是“难”的。找到“最佳”解决方案的唯一方法是尝试所有可能的解决方案,比较结果并采取最佳解决方案。当然,如果你想在合理的时间范围内解决它,那是不可接受的。
ACO算法将找到一个接近最佳值的好解决方案。我说接近,因为AFAIK不能保证总能找到最好的一个。可能存在更好的解决方但是,通常没有必要真正找到最佳解决方案,只需“非常好”的解决方案就可以解决问题,而ACO正是您所寻找的。它可以在合理的时间间隔内找到解决方案,解决方案肯定是好的。
在您的情况下,您需要稍微修改它。通常它只会尝试找到最短的路线,只考虑路径。在您的情况下,它必须考虑您的工作窗口,预订和在某个位置上花费的时间。但这些只是对“蚂蚁如何旅行”的修改,基本算法保持不变并且仍然可以正常工作。
答案 2 :(得分:2)
这是一个旅行推销员问题,修改后添加了工作窗口约束...这意味着找到这个问题的解决方案比标准的旅行商问题更难找到。
我有几种方法可以很好地提供近似解决方案。
我不知道是否适用于你的问题,我说它没有,但dynamic programming偶尔可以用于棘手的问题。
答案 3 :(得分:0)
这个问题有很多工作要做。它有不同的名称
对此问题进行了大量研究,其中很多都在运筹学Journals中。这个问题通常是NP-Hard,因此在描述问题时对问题的一般精确解决方案是不切实际的,但对于您的具体问题可能会有好的,精确的或近似的解决方案。最好的算法将是您数据的函数。