我需要计划一次航行,将具有指定起点和指定目的地的海中的n个位置连接到以下约束。
航程必须触及所有位置。
如果有从A到B的预订,那么必须在B之前触摸a
每个位置的时间花费有所不同(取决于对该位置的预订)
每个位置都有一个工作窗口。如果船只在工作窗口之前到达,它必须等待。
注:“最小生成树”算法可能不会像在每个端口所需的时间取决于以前的路线上(由于工作窗口)
是否有可用于此的任何算法?算法:航行计划
Q
算法:航行计划
5
A
回答
4
Ant colony optimization似乎是最知名的解决这个。请注意,这是一个NP problem,实际上甚至是NP完全问题。这意味着验证解决方案是否“正确”很“容易”,但找到它却“很难”。找到“最佳”解决方案的唯一途径是尝试所有可能的解决方案,比较结果并采取最佳解决方案。当然,如果你想在合理的时间范围内解决这个问题,这是不可接受的。
蚁群算法会找到一个很好的解决方案,接近最佳。我说得很接近,因为AFAIK并不能保证总能找到最好的。可能有更好的解决方案然而,通常没有必要真正找到可能的最佳解决方案,只需“非常好”的解决方案就可以实现,ACO就是您正在寻找的。它可以在合理的时间间隔内找到解决方案,并且解决方案肯定会有好处。
在你的情况,你需要稍作修改。通常它只会尝试找到最短的路线,只考虑路径。在你的情况下,它必须考虑你的工作窗口,预订和花费在一个位置上的时间。但这些只是“蚂蚁如何旅行”的修改,基本算法保持不变,仍然可以工作。
5
2
这是一个旅行商问题的修改增加了工作窗口的限制......这意味着解决这个问题将更难找到比标准旅行商问题。
我已经是体面的工作给予近似解的几种方法。
我不知道是否适用于您的问题,从我的头顶,我说这不,但dynamic programming偶尔可用于棘手的问题。
0
在这个问题上有很多工作。它通过不同的名称
- 旅行推销员(车辆路线)问题与时间窗口和优先约束。
- 接送问题。
有很多关于这个问题的研究,其中很多都在运筹学研究Journals。这个问题一般来说是NP-Hard,所以对问题的一般准确解决方案与您描述的问题不符,但可能会有针对您的具体问题的好的,准确的或近似的解决方案。最好的算法将是你的数据的函数。
- 你的数据集有多大。如果“n”相对较小(30-100),则可能会有与math programming的确切解决方案。
- 时间窗口和优先约束有多紧密。如果在任何时间窗口访问的可能位置数量很小,那么可以使用动态编程等解决方案。
- 如果找不到特殊情况,那么您可能希望将启发式构造算法与本地搜索后处理器相结合。一个简单的方法是所谓的GRASP启发,在那里你
- 利用现有建设启发式,
- 随机化是使多个运行将会给你多种解决方案,
- 运行随机版本多次
- 起飞这是最好的解决方案。
相关问题
- 1. 比赛计划算法
- 2. 无法计算构建计划 - Eclipse Maven
- 3. 学生计划构思:并行计算
- 4. 计划执行程序的计划方法只执行一次
- 5. Pollard Rho算法的计划代码
- 6. 对数时间计划算法
- 7. 划分算法。
- 8. 计算算法运行时?
- 9. 规划算法的
- 10. 卡路里计划 - Java计算
- 11. 计算器的计划是什么?
- 12. 计算每周轮换计划
- 13. SQL如何计算NEXT_RUN_DATE作业计划?
- 14. :无法计算构建计划:插件org.apache.maven.plugins:maven-resources-plugin:2.6?
- 15. 无法计算构建计划:Plugin org.apache.maven.plugins:maven-resources-plugin:2.6
- 16. DBMS:关系代数执行计划成本计算
- 17. 计划,让语法
- 18. 无法根据计划运行作业
- 19. SQL执行计划
- 20. Oracle执行计划
- 21. Maven执行计划
- 22. SQL执行计划 - 预计计划似乎比实际计划更准确
- 23. 执行数组计算的Pythonic算法
- 24. 实现并行算法来计算pi
- 25. GPS导航算法
- 26. 计划/估算游戏中的“尖峰”如何计算?
- 27. 策划算法长码
- 28. 用算法计算
- 29. 优化划分/指数计算
- 30. 动态规划 - 原始计算器
谢谢。听起来很有希望。我解决它,看看它是怎么回事。顺便提供任何伪代码? – 2008-10-29 08:35:50