利用遗传算法找极小值_工程优化设计与Matlab实现——基本遗传算法求解一维问题...

从猴子到人,本来就是一个优化过程。

遗传算法

Part 1 遗传算法的自然界原型

遗传算法根据进化论的思想,模拟了生物界遗传选择和自然淘汰的生物进化过程。

Point 1 从生物遗传谈起

先回想一下生物遗传知识:

  • 基因是遗传物质最基本的结构和功能单位
  • 基因在染色体上
  • 基因是有遗传效应的DNA片段

基因是如何在生物之间遗传的:

  • 假设某生物种群有n个个体;
  • 其中第n个个体有m个染色体Cn1、Cn2,……,Cnm;
  • 第n个个体的第m个染色体上有k个基因Gnm1,Gnm2,……,GnmK,

如下图:

23745117e752e03afa92dda04fee699c.png

以P1和P2产生p1的过程为例,它们在繁衍后代的时候,对应的染色体(C11和C21)如两两之间可能发生某些基因的交换,也可能发生某些基因的变异,然后产生新的后代染色体。也就是说后代的染色体是在两个父本染色体的基础上,外加交叉变异的影响得到的。

Point 2 自然选择

从父本产生了新的子代种群后,子代种群不一定能全部存活到产生下一代,环境的适应性和一些意外情况会对它们进行自然选择。总的来说,适应性差的被淘汰的概率就高,适应性强的被淘汰的概率就低。

Point 3 回到我们要解决的问题

在启发式算法中,我们是用多个迭代点并行进行迭代计算的,每一代的所有迭代点构成了一个种群,迭代一次后得到的点就是后代群体。

2a0759cb9ffe234c3254ec70a63c770b.png

对于m维问题,我们可以将每个点的m个坐标分量视为其染色体。

595c2710bba5f5d372759e6af3d24eaf.png

我们可以用编码的方式将m个坐标分量(视为染色体)进行离散化,使离散后的各个元素所为每个坐标分量的基因。

40842f6c9a9264a56b8d640a786ca055.png

一个群里中的两个迭代点繁衍后代时,对应的坐标分量(视为染色体)中的离散元素(基因)相互交叉,基因变异后组成新的坐标分量(新染色体),所有的新坐标量可以组成新的迭代点(后代个体),所有的后代个体组成了新的后代群体。

也就是说,我们在优化问题中找到对应的元素,套用自然界中的迭代方法即可,如下图。

d2f93cf6be9aeff579736b52a7b8705e.png

我们只是对第一个图的左侧的概念进行了对应替换,就得到了遗传算法的迭代思路。

所以我们完全可以模拟生物进化的方式来更新、筛选我们的迭代点。

Part 2 基本遗传算法求解一维问题的实现

本篇中我们仅对简单一维问题的遗传算法作出分析。

由于我们将迭代点的每一个坐标分量视为染色体,所以一维问题中每个迭代点只有一个坐标分量。相当于每个个体只有一个染色体,这就使得上面的问题得以简化,如下图:

ed77fd36464f632f04405d7d6e6a4d21.png

对与一维问题,由于一个个体只有一个染色体,所以许多人写的博客或者专栏里都将一维问题的染色体与个体混为一谈,也没有什么问题。

Point 1 确定个体、种群、染色体

首先我们先创建由

个迭代点组成的一个种群
,种群里的每一个体都携带一个染色体(一维问题中每一个点只有一个坐标)。由此我们可以建立一个矩阵:

cce139afc264c99c2ba5ba6e10c79ae1.png

Point 2 确定基因:二进制编码

之前我们反复提高了将坐标分量的离散化。

为什么要离散化?

每一个染色体是以更小的单元——基因来参与交叉和变异的,所以需要找到构成染色体的基本元素。

在实际问题中,每一个染色体(坐标分量)都是一个常数,我们很难找到一个常数中更小的元素进行交叉或者变异,所以要对染色体进行离散化(编码)。这里我们介绍二进制编码。

如何实现?

二进制编码的思想是利用二进制数只有0和1组成且位数众多的特点,使用

位二进制数代表更新前的实数,这样就可以对二进制数进行交叉、变异等更新操作,最后再将更新后的二进制数转化为十进制,即为更新后的点。

be8f9788128ec0f8ce4e42897db8538c.png

那么就要建立实数与二进制数之间的映射关系,也就是说在解空间内找任何一个点,都能在编码空间内找到与之对应的点,这正是因为如此,编码空间里的容量一定大于等于解空间的容量。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值