沉浸式写代码|遗传算法解决旅行商问题|MATLAB实现

这里是司守奎老师《数学建模算法与应用》一书中的截图:
希望能够帮助没有书籍参考的小伙伴理解代码,视频的代码也是来自这本书。
然后想说,我是刚学数模的小白,自己学习的过程遇到了一些坎坷,学习完之后就想和大家分享,如果能帮助到也是刚学的小伙伴,那就更好了!


这道题和模拟退火那道题是一样的,如果有小伙伴不清楚,欢迎去上一个视频看看哦。
对于编码的话,表现型通过编码转化为基因型,我们在遗传算法中进行的交叉、变异操作都是针对基因型,最后我们通过解码再把基因型转化为表现型,这样我门就能得出我们问题的解。
书上用的编码方式并不是常见的二进制编码,而是十进制编码。在我看来,二进制编码有编码简单、操作易实现的优点,但是呢因为其随机性,使得算法的局部搜索能力差,下面引用CSDN上某位博主的例子:若0010101111的第2位发生了变异,即从0变为1,那么表现型则会从x=175变成了x=431,变异使得表现型变化很大,很不稳定。遗传算法相比模拟退火算法,在我看来前者局部搜索能力强,但是全局搜索能力较差,那么对后者的学习,我们需要扬长避短,所以我觉得用十进制编码是一个不错的选择。另外,遗传算法的时间复杂度是不是高了亿点点(吐槽)。并且十进制编码还能够避免出现二进制编码出现非法染色体的情况,这个特点是我查到的,但是我不太理解,希望有小伙伴教教我(诚恳!)。
交叉和变异操作,书上有改进的内容,这里我截图给大家:


对于说寻优抖振现象,说白了就是结果会由于初始条件微小的变化而产生大的变化。那么在寻找最优解的过程中会出现上下波动的情况,最终还是没有确定答案。