Hill Climbing 算法非常适合寻找局部最优,它通过改变当前状态的一小部分来获得更好的(在这种情况下,更短的)路径。
如何实施小改动以找到更好的解决方案取决于您。假设您只想切换两个节点,并且仅在结果优于当前解决方案时才保留结果。
只需将第二个城镇与其他城镇交换即可获得以下信息:
# first iteration
start: ABCDEFGA
next: ACBDEFGA, ADCBEFGA, AECDBFGA, AFCDEBGA, AGCDEFBA
# second iteration
start: ADCBEFGA
next: ACDBEFGA, ABCDEFGA, AECBDFGA, AFCBEDGA, AGCBEFDA
您会想要检查每种可能性的适用性并保留最好的一种。然后重复,直到下一个可能性都没有比你当前的状态更好。您将希望在每次迭代中不断使用相同的算法。
您可以在第一次迭代时切换第二个城市,在第二次迭代中切换第三个城市,在第三次迭代中切换第四个城市,等等。但请确保您循环返回并继续这种交换方式,并且在到达终点时不要停止。我建议坚持一个点并与其他点交换,但无论你如何解决这个问题,最终你都会得到不同的次优答案。