C# 有时限的旅行推销员

C# 有时限的旅行推销员,c#,java,vb.net,traveling-salesman,C#,Java,Vb.net,Traveling Salesman,我正在尝试制作一个应用程序来计算每天拜访客户的路线。到目前为止,我可以通过使用遗传算法来解决整个问题。但我需要用距离来限制解。当我只是在某个点“切割”解决方案路径时,它就变成了一个糟糕的解决方案。这个例子有特殊的算法吗?我想找一个合适的,但运气不好 以前做过这个的人能给我一个推荐吗?我可以使用vb.NET、c#、php或JAVA 谢谢。如果您限制了行程,那么我认为您可以不每天拜访所有客户。如果您需要访问所有客户,并且您有一个最大的旅行距离,那么您所能做的就是继续运行TSP算法,直到它(希望)生成

我正在尝试制作一个应用程序来计算每天拜访客户的路线。到目前为止,我可以通过使用遗传算法来解决整个问题。但我需要用距离来限制解。当我只是在某个点“切割”解决方案路径时,它就变成了一个糟糕的解决方案。这个例子有特殊的算法吗?我想找一个合适的,但运气不好

以前做过这个的人能给我一个推荐吗?我可以使用vb.NET、c#、php或JAVA


谢谢。

如果您限制了行程,那么我认为您可以不每天拜访所有客户。如果您需要访问所有客户,并且您有一个最大的旅行距离,那么您所能做的就是继续运行TSP算法,直到它(希望)生成一个您满意的解决方案

如果您只想访问距起点一定距离内的客户机,请确定每个点与起点之间的距离,并过滤掉距离太远的客户机。然后在剩余的点上运行TSP算法


我假设您希望通过最大距离
d
访问尽可能多的客户。我建议使用一种方法。从一个有效的解决方案开始(例如,只需使用贪婪的方法,获取下一个最近的未访问客户端,并在总距离为
d
时停止),然后随机修改解决方案中的
n
节点(这可能意味着对它们进行重新排序,或者这可能意味着将一个节点替换为当前不在解决方案中的节点;在这里使用合理的启发式方法,您不希望将一个节点替换为位于地图另一侧的节点,一种可能的方法是使用加权算法,该算法倾向于与较近的节点交换,而不是与较远的节点交换)然后测试新的解决方案是否有效+优于以前的解决方案。您可以通过从旅行中剥离最后几个客户来强制新解决方案有效。

如果您限制旅行距离,那么我假设您可以不每天访问所有客户。如果您需要访问所有客户我们的客户和你有一个最大的旅行距离,然后你所能做的就是继续运行你的TSP算法,直到它(希望)产生一个你满意的解决方案

如果您只想访问距起点一定距离内的客户端,则确定每个点与起点之间的距离,并过滤掉那些距离太远的客户端。然后在剩余的点上运行TSP算法


我假设您希望通过最大距离
d
访问尽可能多的客户。我建议使用一种方法。从一个有效的解决方案开始(例如,只需使用贪婪的方法,选择下一个最近的未访问客户,并在总距离
d
时停止),然后随机修改解决方案中的
n
节点(这可能意味着对它们进行重新排序,或者这可能意味着将一个节点替换为当前不在解决方案中的节点;在这里使用合理的启发式方法,您不希望将一个节点替换为位于地图另一侧的节点,一种可能的方法是使用加权算法,该算法倾向于与较近的节点交换,而不是与较远的节点交换)然后测试新的解决方案是否有效+优于以前的解决方案。您可以通过从旅行中剥离最后几个客户端来强制新的解决方案有效。

也许您可以调整(开源,java)中的TSP或VRP示例以满足您的要求?有。

也许您可以调整中的TSP或VRP示例(开源,java)来做你的投标吗?当你说你可以“一路”解决问题时,就有了。

,你是什么意思?你可以找到一条路线?还是最短的路线?@Beta OP希望在设定的最大距离内最大化访问的地点数量。他将其建模为TS,但实际上这是一个完全不同的问题。@Beta我可以为所有现有点找到一条路线。但是,-就像Marko说的那样,-我希望最大化访问的地点数量当你说你可以“一路”解决问题时,你是什么意思?你可以找到一条路线?还是最短的路线?@Beta OP希望在设定的最大距离内最大化访问的地点数量。他将其建模为TS,但实际上这是一个完全不同的问题。@Beta我可以为所有现有点找到一条路线。但是,-就像Marko说的那样,-我希望最大化访问的地点数量站点。谢谢!这就是我要找的。也谢谢你的清晰解释!谢谢!这就是我要找的。也谢谢你的清晰解释!我在问我可以使用哪种方法,或者具体的方法叫什么。无论如何,谢谢,看起来很有趣。我在问我可以使用哪种方法,或者具体的方法是什么打过电话,谢谢,看起来很有趣。