优化问题是相当大一部分科研问题中的主要问题之一,当建立起一个数模模型后如何找到这个模型的最优解或者较优解。常用的方法包括
这一章首先介绍智能优化算法中的遗传算法。
遗传算法
简介:遗传算法(Genetic Algorithm)是一种通过模拟自然进化过程搜索最优解的方法,该算法在智能优化算法里属于全局优化算法,比较适合于最优解对个别基因变化不敏感的情况。
常用或者说常见的遗传算法的优化流程如下所示:
在上述描述的步骤中(其中名词描述不知道的仔细搜索),进行遗传算法优化时有几点要素需要注意或者说需要设计
以上列出五点是将你的问题应用到遗传算法中首要解决的问题,以上5点设计好了你的遗传算法才可能帮你找到合适的最优解。下面我将一一展开介绍
一、编码设计
编码设计是解决问题的解与个体基因的对应关系的关键,你的问题的解本来是一种抽象的表示,要将遗传算法应用其中必须构建一个转换函数f可以将编码x转换为你要的实际解y。
此举将原来的优化问题,ybest=argmax(g(y))转换为xbest=argmax(g(f(x))),ybest=f(xbest)
常用的编码方式有二进制编码、整数编码、浮点编码三种,在设计和选用编码方式时必须注意以下几点
二、初始种群的产生
初始种群本身一般是随机生成的,他的随机性保证了整体种群的基因类型的丰富性,因此初始群通常是在解空间内随机生成种群。
常用的生成方式有两种
生成过程需要注意啥呢,还是无效解的问题,部分情况解的规则很复杂,只能完全随机生成,存在大量的无效解,需要解决。
三、变异和交叉方式
变异和交叉时遗传算法产生新解的方式,是后续遗传算法优化的关键因素之一。
交叉:出了一部分可以用作交叉的父母个体,而染色体交叉操作,就是指在这些父母个体中,选择两个进行相互交配,将他们的染色体按照某种方式相互交换部分基因,形成两个新的个体的过程。(全局调整)
变异: 在交叉操作过后形成的新个体,有一定的概率会发生基因变异(局部调整)。
常见的交叉方式:
常见的变异算子:
四、不满足约束的解的处理方式
上述新解产生的过程,没有完全考虑到约束问题,实际情况中如果任由不合适的解保存在种群中,会导致整体的处理效率都很低下,更遑论找到最优解了。
常用的解决方法:
有效的规避约束问题还是要靠编码,这里只能说可以避免这种问题的出现。
五、适应度函数设计
适应度的含义就是字面意思,这个个体是否可以适应环境也即是否满足优化目标指标。因为后续需要根据适应度函数进行自然选择,因此适应度函数和你的目标函数并不需要完全一样。
常用的适应度函数设计有哪些呢?我常用的方式有以下几种
注意事项:
遗传算法的优化过程中种群基因的多样性是保障避免陷入局部最优解的重要因素,如果目标函数优化结果过早收敛很可能就是因为种群的多样性不足。
为了保证种群的多样性,其中编码、适应度函数设计尤为重要。
下一期预告《Matlab从入门到精通(2)——遗传算法案例--TSP问题》