我正在尝试创建一个应用程序来计算访问我的客户的每日路线。到目前为止,我可以使用遗传算法解决整个方式。但我需要按距离限制解决方案。当我在某个时刻“切割”解决方案路径时,它就变成了一个糟糕的解决方案。这个实例有特殊的算法吗?我试图找到并适合一个但没有运气。
有人这么做可以给我一个建议吗?我可以使用vb.NET,c#,php或JAVA。
感谢。
答案 0 :(得分:1)
如果你限制了旅行的距离,那么我假设你没有每天都去拜访你的所有客户。如果您需要访问所有客户并且您想要旅行的最大距离,那么您所能做的就是继续运行您的TSP算法,直到它(希望)产生您满意的解决方案。
如果您只想在起点的某个距离内访问客户,那么从起点确定每个点的Euclidean distance,并过滤掉那些距离太远的点。然后在剩下的点上运行TSP算法。
我假设您希望能够通过最大距离d
访问尽可能多的客户。我建议使用Hill-climbing方法。从有效的解决方案开始(例如,只使用贪婪的方法获取下一个最近的未访问客户端,并在总距离为d
时停止),然后随机修改解决方案中的n
个节点(这可能意味着重新排序它们,或者这可能意味着将节点换成当前不在解决方案中的节点;在这里使用合理的启发式,您不希望将节点交换到地图另一侧的节点,一种可能方法是使用加权算法,有利于在更远的节点上具有更近节点的交换)并测试新解是否有效+优于先前解决方案。您始终可以通过从旅行中剥离最后几个客户来强制新解决方案有效。
答案 1 :(得分:0)
也许您可以调整OptaPlanner(开源,java)中的TSP或VRP示例来进行出价?有a video that shows how to customize/tailor the constraints to your specific case。