第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > python 利用爬山法和迪杰斯特拉算法求解TSP最短路径

python 利用爬山法和迪杰斯特拉算法求解TSP最短路径

时间:2020-04-18 03:17:37

相关推荐

python 利用爬山法和迪杰斯特拉算法求解TSP最短路径

爬山法和模拟退火算法通常用来求解TSP的最短路径问题。爬山法的一个最大的缺点就是,它只能获取一个局部最优的解,但是无法获取一个全局最优的解。而模拟退火算法,它以一定的概率接受较差的解,因此,可以在一定程度上避免局部最优的问题。而迪杰斯特拉算法虽然能够得到最短路径,但是由于需要大量的计算,比较消耗性能,因此,实际应用中并不多。关于爬山法和模拟退火算法的介绍,百度上不是很清楚,其他的一些资料上也介绍的不是很详细。找了一篇比较靠谱的解释和介绍,如下(点击打开链接和点击打开链接): 局部搜索是解决最优化问题的一种启发式算法。对于某些计算起来非常复杂的最优化问题,比如各种NP完全问题,要找到最优解需要的时间随问题规模呈指数增长,因此诞生了各种启发式算法来退而求其次寻找次优解,是一种近似算法(Approximate algorithms),以时间换精度的思想。局部搜索就是其中的一种方法。 对于组合问题,给出如下定义:

请点击此处输入图片描述 其中,S为搜索空间(解空间),其中的每一元素都是问题一个可能解。解决组合问题,即是找到一个s* ∈ S,使得目标函数f值最小。s*称为全局最优解。 对于邻域动作定义如下:

邻域动作是一个函数,通过这个函数,对当前解s,产生其相应的邻居解集合。例如:对于一个bool型问题,其当前解为:s = 1001,当将邻域动作定义为翻转其中一个bit时,得到的邻居解的集合N(s)={0001,1101,1011,1000},其中N(s) ∈ S。同理,当将邻域动作定义为互换相邻bit时,得到的邻居解的集合N(s)={0101,1001,1010}.

2、过程描述局部搜索算法从一个初始解开始,通过邻域动作,产生其邻居解,判断邻居解的质量,根据某种策略,来选择邻居解,重复上述过程,至到达终止条件。不同局部搜索算法的区别就在于:邻域动作的定义和选择邻居解的策略,也是决定算法好坏的关键(集中性发散性,Intensification and Diversification)。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。