找到多个市场周围最短,最便宜的路径

时间:2012-08-09 21:58:27

标签: java traveling-salesman

我正在研究我的硕士课程,并希望你能给我一些关于如何在java中编程以下问题的想法:

  

交易者想要购买物品清单。有多个   他可以从中购买物品的卖家/市场。市场有   与买家的距离不同。买方必须找到一种方法   以最短的距离购买最便宜的物品。

基本上买家希望在尝试寻找最便宜的物品的同时尽量减少他的旅行费用。

我希望描述有意义,如果我不清楚,请告诉我,我会尝试以不同的方式解释。

到目前为止,我有一个买方类,卖方类,商品类和主类。我计划使用Java Point类型放置买方的位置和卖方的位置。

我正在考虑使用类似Dijkstra算法的最短路径,但问题是,如果他的旅行稍微进一步,买家可能会得到更便宜的物品。

提前感谢您的帮助和时间。

4 个答案:

答案 0 :(得分:3)

首先,关闭这是一个算法问题,而不是Java问题。一旦你弄清楚要使用的算法,你应该能够用你选择的语言轻松实现它(虽然Python比Java容易得多)。

对于算法,这是NP-Hard问题,因此没有已知的多项式时间算法。 (如果你找到一个你得到一百万美元的奖金)。您期望处理什么样的输入?即使它具有糟糕的最坏情况复杂性,也可能在实践中有效。

答案 1 :(得分:2)

假设旅行费用计入总费用,并且您希望最大限度地减少总旅行费用+购买费用,这听起来就像Traveling Purchaser Problem,旅行商问题是一个特殊情况。维基文章中的引用有一些不同的解决方案。请注意,这个问题是NP-Hard,因此没有一种已知的解决方案可以保证快速并提供最佳解决方案。

答案 2 :(得分:1)

我认为Dijkstra是正确的方向。我们有一个类似的问题,我们需要将客户的优先考虑到旅行距离,我们只是决定了一种将优先级与距离联系起来的方法。在您的情况下,它会更容易,因为可以轻松比较差旅成本和项目成本。只需将两者的总和作为边缘权重。

答案 3 :(得分:1)

“买家必须找到一种方法,以最短的距离购买最便宜的物品。”

这只是找到最便宜物品的位置,然后找到它们之间的最短路线。 如果在不同的位置以相同的价格提供相同的项目,那么您为每条路线执行最短路径。

或找到涵盖所有项目的最短路线,并总结价格。

只有当您为行驶距离(例如汽油在不同地点之间行驶)添加成本系数时,您行驶的距离才会与您的购物成本相关。

你可能想谷歌“遗传算法旅行商问题”