Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在多个市场中找到最短、最便宜的路径_Java_Traveling Salesman - Fatal编程技术网

Java 在多个市场中找到最短、最便宜的路径

Java 在多个市场中找到最短、最便宜的路径,java,traveling-salesman,Java,Traveling Salesman,我正在做我的硕士项目,希望你能给我一些关于如何用java编程以下问题的想法: 交易者想买一系列物品。有多个 他可以从中购买物品的卖家/市场。市场已经 与买方的距离不同。买方必须想出一个解决办法 以尽可能短的距离购买最便宜的商品 基本上,买家希望在寻找最便宜商品的同时,尽量降低旅行成本 我希望描述有意义,如果我不清楚,请让我知道,我会尝试以不同的方式解释 到目前为止,我有一个买方类,卖方类,项目类和主类。我计划使用Java Point类型显示买方位置和卖方位置 我曾考虑使用类似Dijkstra的最

我正在做我的硕士项目,希望你能给我一些关于如何用java编程以下问题的想法:

交易者想买一系列物品。有多个 他可以从中购买物品的卖家/市场。市场已经 与买方的距离不同。买方必须想出一个解决办法 以尽可能短的距离购买最便宜的商品

基本上,买家希望在寻找最便宜商品的同时,尽量降低旅行成本

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

到目前为止,我有一个买方类,卖方类,项目类和主类。我计划使用Java Point类型显示买方位置和卖方位置

我曾考虑使用类似Dijkstra的最短路径算法,但问题是,如果买家稍微走远一点,可能会以更便宜的价格买到商品


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

我认为Dijkstra's是正确的方向。我们遇到了一个类似的问题,我们需要将客户的优先级与旅行距离考虑在内,我们只是决定了一种将优先级与距离联系起来的方法。在你的情况下,这将更容易,因为旅行成本和物品成本可以很容易地进行比较。将两者之和作为边权重。

首先,这是一个算法问题,而不是Java问题。一旦您找到了要使用的算法,您应该能够用您选择的语言轻松地实现它(尽管Python比Java容易得多)

至于算法,这是一个NP难问题,因此没有已知的多项式时间算法。(如果你找到一个,你会得到一百万美元的奖励)。您希望处理哪些类型的输入?即使在最坏的情况下,也可能有一些东西在实践中运行良好。

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

那就是找到最便宜商品的位置,然后找到它们之间最短的路线。 如果相同的商品在不同的地点以相同的价格提供,那么您可以为每条路线选择最短路径

或者找到覆盖所有项目的最短路线,并计算价格

仅当您为旅行距离(例如在不同地点之间行驶的汽油)添加成本因素时,您的旅行距离才会与您的购物旅行成本相关


你可能想用谷歌搜索“遗传算法旅行推销员问题”

假设旅行成本是总成本的一部分,并且你想最小化总旅行+购买成本,这听起来很像,旅行推销员问题就是其中的一个特例。wiki文章中的参考文献对此问题有几种不同的解决方案。请注意,这个问题是NP难问题,因此没有一个已知的解决方案可以保证既快速又给出最佳解决方案。

我不确定这是可扩展的。如果我们购买的是一份非特定订单的商品清单呢?@FrankieTheKneeMan,那么我想你会遇到旅行推销员,而且没有简单的解决办法。“买家如果再往前走一点,可能会以更便宜的价格买到商品”听起来确实像是一个简化的问题,但我的意思是,我同意。我只是觉得你需要使用Dijkstra's的修改版本,链接长度取决于你想买的物品。事实上,因为图表是完整的,Dijkstra's甚至没有必要。-1如果已经有了距离,这不是Dijkstra!这是一个旅行推销员的问题(或一个变体),买家只得到一件商品吗?例如,买方有一份可能的物品清单,而商户a和商户B都以某种价格携带物品x?如果是这样的话,你也可以看看。嗨,Nate,买家有一个物品清单(比如糖、盐、牛奶)。卖方有不同的商品,价格不同。买家不一定能找到他想要的所有商品。商家不必拥有所有或任何商品。作为一个总体目标,我的问题与Kanapsack的问题描述相符,因为我也希望最小化重量/距离,同时增加价值)Djikstra的目标是找到起点和终点之间的最短路径,而不是找到访问所有节点的最短路径——这就是TSP。这真的是硕士项目吗?o_-OYou可能能够复制/粘贴/调整(Java,开源)。感谢您的回答。我理解你的意思,这是一个算法问题。我不确定这是否是您的意思,但作为输入,我希望有项目名称和价格、商家及其位置、买家及其初始位置(不太确定这是否是您所指的输入)。所以会有一个卖家列表,每个卖家都有一个物品列表,一个买家有一个他想买的物品列表。我想如果我这样做的话,这会起作用,但我不太擅长编程,也不知道如何开始解决问题。比如说,我可以从卖家那里找到最便宜的商品,只需浏览每一件商品并比较它们的价格。一旦我做到了这一点,我将如何在编程方面记住最便宜的东西在哪里?再次感谢。哦,亲爱的。旅行推销员问题是竞争的焦点,对于非常有才华和非常数学的程序员来说,谁能以最快的速度找到最佳解决方案。您可能在这里做得太多了,或者您应该开始变得更简单,并迭代到更全面的解决方案。要回答您的问题,一种方法是创建卖方、地点和产品的结构/类。然后,最短路径代码将访问其中的一个列表,并使用location属性进行计算。是的,这就是问题所在。这个问题最初是用计划者解决的,我现在正试图找到一个更好的方法