【遗传算法】遗传算法入门示例

问题:求二元函数的最大值

f(x)=x^2,x\in[0,31]

遗传算法实现步骤:

1.编码

编码方法包括:二进制编码法、浮点编码法、符号编码法

这里使用二进制编码。由于变量的最大值31,固采用5个位即可表达全部的值

x=6   00110

2.产生初始群体

01101     11000    01000  10011

3.评价个体的适应度--适应度函数

这里采用与适应度成正比的概率作为适应度

p=fi/\sum fi

4.选择运算

第0代
序号群体适应值选择概率期望次数

选中次数 

选择结果
1011011690.14440.58101101
2110005760.49231.97211000
301000640.05470.22011000
4100113610.30851.23110011

适应值 为 f(群体反编码值)    如f(13)=169
选择概率:p=fi/\sum fi       如p=169/(169+576+64+361)=0.1444

期望次数:采用确定性算法,对于规模为N的群体,一个选择概率为p的染色体被选择的期望次数e。公式:e=p*N,取\left \lfloor e \right \rfloor

选择结果:

常用的选择算子:

  1. 轮盘赌选择(Roulette Wheel Selection):是一种回放式随机采样方法。每个个体进入下一代的概率等于它的适应度值与整个种群中个体适应度值和的比例。选择误差较大。

  2. 随机竞争选择(Stochastic Tournament):每次按轮盘赌选择一对个体,然后让这两个个体进行竞争,适应度高的被选中,如此反复,直到选满为止。

  3. 最佳保留选择:首先按轮盘赌选择方法执行遗传算法的选择操作,然后将当前群体中适应度最高的个体结构完整地复制到下一代群体中。

  4. 无回放随机选择(也叫期望值选择Excepted Value Selection):根据每个个体在下一代群体中的生存期望来进行随机选择运算。方法如下:

    (1) 计算群体中每个个体在下一代群体中的生存期望数目N。

    (2) 若某一个体被选中参与交叉运算,则它在下一代中的生存期望数目减去0.5,若某一个体未 被选中参与交叉运算,则它在下一代中的生存期望数目减去1.0。

    (3) 随着选择过程的进行,若某一个体的生存期望数目小于0时,则该个体就不再有机会被选中。

  5. 确定式选择:按照一种确定的方式来进行选择操作。具体操作过程如下:

    (1) 计算群体中各个个体在下一代群体中的期望生存数目N。

    (2) 用N的整数部分确定各个对应个体在下一代群体中的生存数目。

    (3) 用N的小数部分对个体进行降序排列,顺序取前M个个体加入到下一代群体中。至此可完全确定出下一代群体中M个个体。

  6. 无回放余数随机选择:可确保适应度比平均适应度大的一些个体能够被遗传到下一代群体中,因而选择误差比较小。

  7. 均匀排序:对群体中的所有个体按期适应度大小进行排序,基于这个排序来分配各个个体被选中的概率。

  8. 最佳保存策略:当前群体中适应度最高的个体不参与交叉运算和变异运算,而是用它来代替掉本代群体中经过交叉、变异等操作后所产生的适应度最低的个体。

  9. 随机联赛选择:每次选取几个个体中适应度最高的一个个体遗传到下一代群体中。

  10. 排挤选择:新生成的子代将代替或排挤相似的旧父代个体,提高群体的多样性。

转载来自:作者:短短的路走走停停被抢注啦
                    链接:https://www.jianshu.com/p/ae5157c26af9

5.配对进行交配,其中交配位是随机选择的rand(5):位的话是从左边往右边数。

交配规则:

编号群体交配对象交配位第1代适应值
1011012401100144
2110001411001625
3110004211011729
4100113210000256

6.得到第一代

第1代
序号群体适应值选择概率期望次数

选中次数 

选择结果
1011001440.08210.3284011001
2110016250.35631.4252111011
3110117290.41561.6624211011
4100002560.14600.5840110000

不停地选择、配对(交叉)、变异。

变异:

异运算是对个体的某一个或某一些基因座上的基因值按某一较小的概率进行改变,它也是产生新个体的一种操作方法。本例中,我们采用基本位变异的方法来进行变异运算,其具体操作过程是:
     • 首先确定出各个个体的基因变异位置;
     • 然后依照某一概率将变异点的原有基因值取反。

  • 5
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
遗传算法是一种模拟自然选择和遗传机制的优化算法。在Python中,你可以使用遗传算法来解决优化问题。以下是一个入门级的遗传算法示例: 首先,你需要导入所需的库: ```python import random ``` 接下来,定义问题的适应度函数。适应度函数用于评估每个个体的优劣程度,它需要根据具体问题进行定义。 ```python def fitness_function(individual): # 计算个体的适应度 # 返回适应度值 pass ``` 然后,定义遗传算法的主要功能。这包括初始化种群、选择、交叉、变异等操作。 ```python def genetic_algorithm(population_size, chromosome_length, generations): # 初始化种群 population = [] for _ in range(population_size): individual = [random.randint(0, 1) for _ in range(chromosome_length)] population.append(individual) # 进行进化迭代 for _ in range(generations): # 评估种群中每个个体的适应度 fitness_values = [fitness_function(individual) for individual in population] # 选择操作 # 根据适应度值选择个体进行繁殖 # 交叉操作 # 对选中的个体进行交叉操作产生新的个体 # 变异操作 # 对新个体进行变异操作 # 返回最优解 best_individual = population[0] # 这里假设第一个个体是最优解 return best_individual ``` 最后,你可以调用遗传算法函数并获取最优解: ```python population_size = 100 # 种群大小 chromosome_length = 10 # 染色体长度 generations = 50 # 迭代次数 best_solution = genetic_algorithm(population_size, chromosome_length, generations) print("最优解:", best_solution) ``` 以上是一个简单的遗传算法入门示例,你可以根据具体问题进行适应度函数的定义和进化操作的实现。希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值