优化算法(二)—— 遗传算法(GA算法)

遗传算法,Genetic Algorithm ,GA 

遗传算法也称进化算法、进化理论 ,是受达尔文的进化论的启发,借鉴生物进化过程而提出的一种启发式搜索算法。

 

用遗传算法实现的几个例子

马里奥 https://www.youtube.com/watch?v=qv6UVOQ0F44

自动驾驶https://www.youtube.com/watch?v=5lJuEW-5vr8&t=109s

微生物进化https://www.youtube.com/watch?v=2kupe2ZKK58

 

 

       我们都学过自然选择理论,生物的繁殖进化过程,会发生基因交叉( Crossover ) ,基因突变 ( Mutation ) 。适应度( Fitness )低的个体会被逐步淘汰,而适应度高的个体会越来越多。那么经过N代的自然选择后,保存下来的个体都是适应度很高的,其中很可能包含史上产生的适应度最高的那个个体。

 

 

        借鉴生物进化论,遗传算法将要解决的问题模拟成一个生物进化的过程,通过复制、交叉、突变等操作产生下一代的解,并逐步淘汰掉适应度函数值低的解,增加适应度函数值高的解。这样进化N代后就很有可能会进化出适应度函数值很高的个体。

       举个例子,使用遗传算法解决“0-1背包问题”的思路:0-1背包的解可以编码为一串0-1字符串(0:不取,1:取) ;首先,随机产生M个0-1字符串,然后评价这些0-1字符串作为0-1背包问题的解的优劣;然后,随机选择一些字符串通过交叉、突变等操作产生下一代的M个字符串,而且较优的解被选中的概率要比较高。这样经过G代的进化后就可能会产生出0-1背包问题的一个“近似最优解”。

 

遗传算法有3个最基本的操作:选择,交叉,变异

 

 遗传算法中每一条染色体,对应着遗传算法的一个解决方案,一般我们用适应性函数(fitness function)来衡量这个解决方案的优劣。所以从一个基因组到其解的适应度形成一个映射。可以把遗传算法的过程看作是一个在多元函数里面求最优解的过程。可以这样想象,这个多维曲面里面有数不清的“山峰”,而这些山峰所对应的就是局部最优解。而其中也会有一个“山峰”的海拔最高的,那么这个就是全局最优解。而遗传算法的任务就是尽量爬到最高峰,而不是陷落在一些小山峰。(另外,值得注意的是遗传算法不一定要找“最高的山峰”,如果问题的适应度评价越小越好的话,那么全局最优解就是函数的最小值,对应的,遗传算法所要找的就是“最深的谷底”)
 

 

用一句话来概括遗传算法:在程序里生宝宝,杀死不乖的宝宝,让乖宝宝继续生宝宝

 

 

代码实现可参考:

https://blog.csdn.net/m0_38101326/article/details/90642193

https://blog.csdn.net/ha_ha_ha233/article/details/91364937?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522159412382819195264553483%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=159412382819195264553483&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_click~default-4-91364937.ecpm_v3_rank_business_v1&utm_term=%E9%81%97%E4%BC%A0%E7%AE%97%E6%B3%95

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值