有关路径优化遗传算法原理(结合matlab代码)

1、遗传算法介绍

遗传算法是类借鉴生物界的进化规律(适者生存,优胜劣汰遗传机制)演化而来的随机化搜索方法,其主要特点是直接对结构对象进行操作,不存在求导和函数连续性的限定,具有内在的隐并行性和更好的全局寻优能力,采用概率化的寻优方法,能自动获取和指导优化的搜索空间,自适应地调整搜索方向,不需要确定的规则。
以这篇博文代码篇为例(点击打开)

本文采用代码与原理相结合的办法给大家讲解遗传算法,有助于大家更好的理解遗传算法。

在遗传算法中包括几个重要的步骤,分别为 个体、种群、适应度、选择、交叉、变异,下边为大家介绍。

首先第一步也是最重要的一步大家需要导入需要解决的的城市坐标。

load CityPosition1;%个城市坐标位置

1、初始种群的产生

在解决问题时,首先就需要有个体和种群,而个体和种群的产生就需要用如下函数产生。

Chrom=InitPop(NIND,N);

在上述子程序中产生的个体是导入的城市随机排列,假如有30个城市,那么一个个体就是1-30之间的整数随机排列,把他存放在矩阵中的一行中。
而种群则是随机产生的NIND个个体的组合,在种群中每行代表每个个体,那么种群的矩阵大小为NIND行,30列。

2、适应度的计算

适应度简单的说就是个体在你设定的环境中活下去的能力。
那么在路径优化中,每个个体的路径总距离最小那么他就越容易存活下去,也就是说这里的适应度是和路径的总距离有关系的。

ObjV=PathLength(D,Chrom); 

因为适应度是越大越好,而在路径优化中是距离是越小越好,所以我们取总距离的的倒数,作为个体的适应度。

接下来就需要进行循环迭代,进行选择交叉变异等操作。

while gen<最大迭代次数(循环3、4、5、6步骤)

3、选择

SelCh=Select(Chrom,FitnV,GGAP);

上述选择简单的说就是通过比较每个个体的适应度,把总距离小的个体,也就是适应度大的个体挑选出,选择多少个个体则是需要大家根据自己情况而定。

4、交叉

 SelCh=cross(SelCh,FitnV,D);

这里面的交叉其实是改进后的交叉方法,交叉说简单一点就是打乱现有个体的排列顺序,去产生一个新的个体,而在这个代码中他是有目的的去进行交叉的:
他是选择出两个个体,随机选择一个点,然后找出在这两个个体中随机点的下一个城市点,比较这两个个体中随机点和下一个点的距离,选择距离他最近的那一个城市作为下一个城市点,然后再在两个个体中寻找最近的城市的下一个最近城市。以此类推。。。

5、变异

SelCh=Multate(SelCh,Pm);

变异和交叉差不多,也是去打乱现有个体的排列顺序,去产生新的个体。

在4、5的步骤中都有新的个体产生,计算出新的个体的适应度,然后与产生变化前的个体比较适应度大小,如果适应度比变化前适应度大则保留产生的新个体,如果适应度变得更差了,则保留原有未变化的个体。

6、重新插回种群

Chrom=Reins(Chrom,SelCh,ObjV);

把经历3、4、5步骤的产生的新个体重新放回到种群中,因为种群数量是不变的,只能通过把那些适应度低的个体用产生的新个体替换,在这个过程中,种群中所有个体的适应度都会越来越好。

7、得到结果

在经历上述的过程后,最后输出一个种群,在这一个种群中选择一个适应度最大的个体当作该问题的最优解。最后输出最优解的城市顺序,或者是画图等一些需要的数据

(如有其他问题可以私聊我)

你可能感兴趣的:(matlab,算法)