有多个推销员的旅行推销员?

| 我有一个问题已被有效地简化为具有多个推销员的旅行推销员问题。我有一个从初始位置访问的城市列表,并且必须访问销售人员数量有限的所有城市。 我试图提出一种启发,想知道是否有人可以伸出援手。例如,如果我有20个城市有2个推销员,那么我考虑采用的方法是2步法。首先,将20个城市随机分为10个城市,每个城市有2个推销员,然后我会发现每个城市的巡回演出就像几次迭代都是独立的。之后,我想交换城市或将城市分配给另一位推销员,以查找游览。实际上,这将是TSP,然后是最小制造期问题。这样做的问题是,它太慢了,并且很难很好地生成邻居来交换或分配城市。 任何人都可以就我如何改善上述问题提出建议吗? 编辑: 每个城市的地理位置都是已知的,推销员的起点和终点都在相同的地方。目标是最大程度地减少最大行驶时间,从而解决这种最小的制造跨度问题。因此,例如,如果salesman1花费10个小时,而salesman2花费20个小时,则最长行驶时间将是20个小时。     
已邀请:
        TSP是一个难题。多TSP可能更糟。我不确定您是否可以使用此类临时方法找到好的解决方案。您是否尝试过元启发式方法?我会先尝试使用交叉熵方法:将它用于您的问题应该不会太难。否则,请寻找通用算法,蚁群优化,模拟退火... 参见Boer等人的“交叉熵方法教程”。他们解释了如何在TSP上使用CE方法。对于您的问题的简单调整可能是为每个推销员定义一个不同的矩阵。 您可能想假设您只想找到推销员之间的最佳城市划分(并将每个推销员的最短行程委派给经典的TSP实施)。在这种情况下,在“交叉熵”设置中,您考虑每个城市Xi出现在推销员A巡回中的概率:P(A中的Xi)= pi。然后在p =(p1,... pn)的空间上工作。 (我不确定它是否会很好地工作,因为您将不得不解决许多TSP问题。)     
        当您开始谈论多个销售人员时,我开始考虑粒子群优化。使用引力搜索算法,我已经找到了很多成功的方法。这是我发现的(冗长的)论文,涉及该主题。 http://eprints.utm.my/11060/1/AmirAtapourAbarghoueiMFSKSM2010.pdf     
        为什么不将多个TSP转换为传统TSP? 这是一个众所周知的问题(将多个业务员TSP转换为TSP),您可以在其中找到几篇文章。 对于大多数转换,您基本上将仓库(业务员开始和完成的地方)复制到几个仓库(在您的案例2中),进行权重调整,以迫使TSP两次回到仓库,然后移除两个仓库,将它们变成一个。 瞧!进行了两次最小费用的游览,这些游览仅一次覆盖了顶点。     
        我不会开始为如此复杂的问题编写算法(除非这是我的日常工作-编写优化算法)。为什么不使用像http://www.optaplanner.org/这样的通用解决方案呢?您必须定义您的问题,并且该程序使用的算法是顶尖开发人员花了几年时间才能创建和优化的。     
在阅读问题描述时,我的第一个想法是使用一种标准的方法来解决业务员的问题(寻找合适的方法,因为我从未真正为此写过代码);然后将结果分成两半。然后,您的算法可能是确定“一半”在哪里-可能是一半的城市,或者是基于距离,或者是某种组合。或在结果中搜索两个城市之间的最大距离,然后选择作为销售员#1的最后一个城市与销售员#2的第一个城市之间的距离。当然它并不仅限于两个业务员,您会分成x个;但是总的来说,您的标准1销售人员TSP解决方案应该已经在旅行图中将“附近”的城市彼此相邻,因此您不必提出单独的分组算法... 无论如何,我确定有更好的解决方案,但这对我来说似乎是一个很好的第一种方法。     
        看看这个问题(562904)-虽然与您的问题不完全相同,但应该有一些有益的食物供您思考和参考,以供进一步研究。     
        如以上答案中所述,分层集群解决方案将非常适合您的问题。但是,除非有一条路径,否则不要继续分解集群,而要在有n条时停止,这里n是拥有的销售人员的数量。您可能可以通过添加一些“假”停止符来改善它,以提高如果初始群集过于分散,群集最终与初始目标均匀间隔的可能性。这不是最佳选择-但您不会针对此类问题获得最佳解决方案。我将创建一个可视化问题的应用程序,然后测试解决方案的多种变体,以了解您的试探法是否足够理想。 在任何情况下,我都不会随机化群集,这将导致大多数群集不是最佳的。     
        刚开始使用遗传算法阅读您的问题就浮现在脑海。只需同时使用两种遗传算法,一个可以解决如何将城市分配给推销员,另一个可以解决您拥有的每个推销员的TSP。     

要回复问题请先登录注册