寻优算法之遗传算法

本文介绍了使用遗传算法解决超多目标优化问题,特别是针对那些目标之间具有矛盾性的复杂问题。遗传算法基于达尔文的进化理论,通过种群初始化、交叉、变异和环境选择等步骤,寻找问题的近似最优解。文章详细阐述了算法思想,并以一个简单的单目标优化问题为例,展示了实数编码的SBX交叉和多项式变异操作,以及N+N的环境选择策略。
摘要由CSDN通过智能技术生成

简单的遗传算法

导言

研究生研究的领域就是用启发算法来解决超多目标优化问题,所谓的超多目标就是要同时优化目标维数超过3维且目标之间具有一定矛盾性的问题。例如从深圳到北京的交通路线,我们若只考虑时间与价格这两个目标问题(二维多目标问题),会存在时长最短但是价格昂贵的路线选择(例如航班直达),也会存在价格最便宜但是很花时间的路线(例如辗转火车公交),不会存在时长最短价格最便宜的最优路线。解决多目标问题的启发算法里,遗传算法和粒子群算法的论文较多,今天讲一下简单的遗传算法。

算法思想

遗传算法主要是用达尔文进化论的观点,优胜劣汰适者生存,能更好地适应环境的个体将会保留下来,这些拥有较好适应度的个体基因会传给下一代,让好基因广为流传,活埋不好的基因。遗传算法主要包括种群初始化,交叉,变异和环境选择四个主要操作。遗传算法属于随机性算法,不能找到最优解,只能找到近优解,除非是非常简单的问题。

算法过程

比如我们要解决一个简单的单目标问题,求解目标f的最大值,x1、x2变量有约束范围

max f (x1, x2) = 21.5 + x1·sin(4 pi x1) + x2·sin(20 pi x2)
s. t. -3.0 <= x1 <= 12.1
        4.1 <= x2 <= 5.8

对于这类连续问题,其实可以不采用网上最基础的二进制编码来进行单点交叉和单点变异的操作了。实数也可以,只要把交叉和变异操作采用模拟二进制交叉simulated binary crossover(SBX)和多项式变异Polynomial mutation就好了。所以这里的种群个体可以采用[x1,x2]的数值来代表一个个体。

首先进行种群初始化,返回一个大小为100的种群列表,每个元素代表一个由两个变量构成的个体

pop_size = 100    #种群规模
population = []
dec_num = 2    #变量个数
dec_min_val = (-3, 4.1)
dec_max_val = (12.1, 5.8)

def init(population, pop_size, dec_num, dec_min_val, dec_max_val):
    rangeRealVal = [dec_max_val[i]-dec_min_val[i] f
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值