遗传算法介绍及在01背包问题的应用

遗传算法

背景:最优化问题

确定或几乎确定的方式寻找

充满随机性的启发式方法,例如遗传算法

遗传算法原理:

进化论的 物竞天择,适者生存

基本概念:

基因和染色体: 基因是不能分割的最小单位,染色体一组基因的组合,实例用基因表示遗传特征,简单一般就是以基因作为遗传特征

种群和个体

遗传和变异 遗传不是平稳的,有一定概率变异,可能变好,可能变坏

基因交叉,基因突变: 变化太频繁无法收敛到近似最优解,变化频率太底也不行,无法保证种群多样性,可能收敛到局部最优解。

选择: 根据个体的适应度,按照一定规则种群中选择优良个体遗传到下一代。

适应度:个体对环境的适应程度。

流程:

 

算法设计:

  1. 基因的编码 : 01背包问题可以采用 01编码

  1. 适应度评估函数  背包问题可以根据基因101001,计算出对应的价值,价值越大越好

  1. 遗传算子设计

    a) 选择算子

      i. 比例选择:又称轮盘赌选择,按种群比例来确定

      ii. 随机竞争选择 每次随机选择两个或多个,取适应度高的。

      iii. 最佳保留选择 选择最好的替换最差的,而且不参与交叉和变异  

      iv. 排序选择

      v. 确定式采样选择

    b) 交叉算子

      i. 单点交叉 随机选择1个点,随机概率交换这个点的片段

      ii. 两点交叉与多点交叉 随机选择两个点或多个点,随机概率交换每个点的片段

      iii. 均匀交叉 一致交叉,基因上每个点都按照相同概率互换基因片段

      iv. 算术交叉 用于浮点数编码表示的基因,线性组合产生

    c) 变异算子

      i. 单点变异 随机选择一个点,随机概率变异

      ii. 固定位置变异 一个或几个固定位置,随机变异

      iii. 均匀变异 每个片段,使用均匀分布的随机数,以小的随机概率进行变异

      iv. 边界变异 如果基因编码规则有边界值(最大最小),根据规则选一个替换成边界值

      v. 高斯变异

  1. 运算参数 种群大小M,交叉概率Pc, 变异概率Pm,进化迭代次数T

01背包问题遗传算法的应用:

Weight = { 35, 30, 60, 50, 40, 10, 25 }; Value = { 10, 40, 30, 50, 35, 40, 30 };

TEST_ROUND = 500; 测试次数
OBJ_COUNT = 7; 
CAPACITY = 150;背包重量
POPULATION_SIZE = 32; 种群个数
MAX_GENERATIONS = 100;//500; 种群迭代次数
P_XOVER = 0.8;  交叉编译概率
P_MUTATION = 0.15; 变异概率

选择算子采用 轮盘赌策略

交叉算子: 两点交叉,随机个数的基因位进行交换(1~7的随机数),交换的位置也是随机等概率选择

变异算子:对随机个数的基因位进行变异 每个位置被交换的概率是相等的

结果统计正确的次数:success 495

github https://github.com/sun8904/Algorithm

猜你喜欢

转载自www.cnblogs.com/sunyongliang/p/11736839.html
今日推荐