遗传算法简介
遗传算法(Genetic Algorithms,GA)是一种基于自然选择原理和自然遗传机制的搜索(寻优)算法,它是模拟自然界中的生命进化机制,在人工系统中实现特定目标的优化。遗传算法的实质是通过群体搜索技术,根据适者生存的原则逐代进化,最终得到最优解或准最优解。
生物遗传概念在遗传算法中的对应关系
生物遗传概念 | 遗传算法中的作用 |
---|---|
适者生存 | 算法停止时,最优问题的可行解有最大的可能性被留住 |
个体 | 可行解 |
染色体 | 可行解的编码 |
基因 | 可行解中每一分量的特征 |
适应性 | 适应度函数值 |
种群 | 根据适应度函数选取的一组可行解 |
交配 | 通过交配原则产生一组可行解的过程 |
变异 | 编码的某一分量发生变化的过程 |
算法应用
主要的应用场景有函数优化、组合优化、车间调度。
基本框架
编码
由于遗传算法不能直接处理问题空间的参数,因此必须通过编码将要求解的问题表示成遗传空间的染色体或者个体。这一转换操作就叫做编码,也可以称作(问题的)表示(representation)。
编码策略:个体的染色体编码要能够反应所有的个体特征,使得每一个随机序列的编码都能和种群中的一个个体相对应。如二进制编码,浮点数编码。
适应度函数(评估函数)
进化论中的适应度,是表示某一个体对环境的适应能力,也表示该个体繁殖后代的能力。遗传算法的适应度函数也叫评价函数,是用来判断群体中的个体的优劣程度的指标,它是根据所求问题的目标函数来进行评估的。
适应度函数的选取:往往是优化问题或者组合问题的目标函数。由于遗传算法中,适应度函数要比较排序并在此基础上计算选择概率,所以适应度函数的值要取正值。
适应度函数的设计:
- 单值、连续、非负、最大化
- 合理、一致性
- 计算量小
- 通用性强
适应度函数将直接影响到遗传算法的性能。
初始群体选取
遗传算法中初始群体的个体是随机产生的。
- 确定可行解的分布,把握最优解的分布范围,在此范围内设定初始群体
- 利用蒙特卡洛方法挑选符合预定规模的可行解作为初始解。
模型及算法
遗传算法的基本运算过程如下:
开始循环直至找到满意的解。
- 初始化:根据题意随机生成m个个体作为初始群体P(t)
- 个体评价:评估每条染色体所对应个体的适应度。
- 选择运算:遵照适应度越高,选择概率越大的原则,从种群中选择两个个体作为父方和母方。
- 交叉运算:抽取父母双方的染色体,进行交叉,产生子代。
- 变异运算:对群体中的个体串的某些基因座上的基因值作变动。群体P(t)经过选择、交叉、变异运算之后得到下一代群体P(t+1)
- 重复3、4、5步骤,直到新种群的产生
结束循环。
遗传操作包括以下三个基本遗传算子(genetic operator):选择(selection);交叉(crossover);变异(mutation)。
旅行商问题
已知100个目标的经度、纬度。
我方有一个基地,经度和纬度为(70,40)。假设我方飞机的速度为1000km/h。我方派一架飞机从基地出发,侦察完所有目标,再返回原来的基地。在每一目标点的侦察时间不计,求该架飞机所花费的时间(假设我方飞机巡航时间可以充分长。
用遗传算法求解,设定基本参数如下:
种群大小为M=50,最大代数G=1000
交叉率 P c = 1 P_c=1 Pc=1,交叉概率为1能保证种群的充分进化
交叉变异率 P m = 0 , 1 P_m=0,1 Pm=0,1,一般而言,变异发生的可能性较小。
遗传算法引入变异的目的有两个:一是使遗传算法具有局部的随机搜索能力。当遗传算法通过交叉算子已接近最优解邻域时,利用变异算子的这种局部随机搜索能力可以加速向最优解收敛。显然,此种情况下的变异概率应取较小值,否则接近最优解的积木块会因变异而遭到破坏。二是使遗传算法可维持群体多样性,以防止出现未成熟收敛现象。此时收敛概率应取较大值。(内容来自《百度百科》)
step1:基因编码
给101个地点编号,用包含101个城市的序号的数值序列表示一种路线(个体),数组元素的序号表示巡航的顺序。数值序列中的值不重复,即每个地点只去过一次,起点和终点除外,因为巡航完要回到基地。
step2:初始化种群
随机生成m个基因编码序列作为初始种群。
step3:评估适应度
TSP问题中路线越短越好,适应度取值为总距离的倒数。
step4:产生新种群
产生新种群分为选择、交叉和变异。个体被选中的概率取决于该个体的适应度。随机选取两个个体后以交叉率交叉,子代分别继承父母的部分基因,且保持顺序与父代一致。交叉完之后就是变异,变异以变异率的概率发生。在TSP问题中因为除起点外每个城市只经历过一次,所以在变异的时候不能只是改变基因序列中的某一位的值(这会导致一个地点经过两次),应该随机交换两个位置的值。
求解说明:选择算子采用轮盘赌选择,以每个个体的适应度为基础,为每个个体计算累积概率。随机生成一个浮点数,若浮点数在两个个体的累计概率之间则选取这两个个体中累积概率较大的那一个个体。