fprintf函数的用法matlab_工程优化设计与Matlab实现——混合遗传算法求解多维问题...

在本篇中,我们介绍一种梯度法与基本遗传算法结合的混合遗传算法,并将之前的遗传算法解决一维问题,推广到解决多维问题。

混合遗传算法

本混合遗传算法对基本遗传算法作出了两点修正

  • 修正选择操作
  • 增加了交叉前的预处理

Part 1 对选择操作的修正

在基本遗传算法中,我们使用轮盘赌法根据比例确定优胜个体;而在混合遗传算法中,我们按以下公式进行:

  • 定义
    的适应度(函数)为:

b181f6c603a27d41b73f3872e29741bb.png

其含义为

的函数值与种群内最大函数值的差距,如果
的函数值越小,则适应度函数值越大,适应度越好。
  • 则种群中的最大适应度:

4707522f8817714908fdbe3447797870.png
  • 我们更新个体的公式为:

1eec1e43ee0ed4ef8ed63a688684161f.png

上式类似于一般优化算法中的更新迭代式

,其中
可以视为方向,其系数可以视为步长。则上式就可以理解为,个体
朝向
的方向(
的连线方向),根据其适应度比例调整步长,更新个体

也就是说我们朝向当前种群中函数值下降最大的方向更新

,这样有利于提高遗传算法的局部搜索性能。

另外 ,需要注意的是,为了避免分母为0,我们加入判断条件,如果

函数值之差(即最大适应度)小于精度要求,则退出循环。

Part 2 交叉操作前的预处理

在基本遗传算法的交叉计算中,我们将相邻两个染色体的依照随机确定的定位点进行基因交换。而在混合遗传算法中,我们将个体顺序打乱后再进行交叉。这样一方面可以使个体在遗传过程中机会均等,;另一方面也可以增加每个个体的优势。

Part 3 混合遗传算法解决一维问题

混合遗传算法只是在基本遗传算法的基础上做了一点修改,只需要对之前AirHead:工程优化设计与Matlab实现——基本遗传算法求解一维问题中的程序进行一些细微修改即可。(修改后的代码见Part5)

Part 4 混合遗传算法解决多维问题

回顾一下之前生物遗传的迭代图,其二维情况如下。

a807d955421354049e38b196425beb69.png

二维问题与一维问题的唯一不同在于,每一个个体有两个染色体,两个个体交叉产生下一代时需要两个对应的染色体都进行交叉。为了实现交叉,我们需要对其都进行编码操作。也就是说,我们要对两个染色体进行编码、交叉、变异、解码。其他均与一维问题一致。

Part 5 混合遗传算法栗子

Point 1 混合遗传算法求一维问题

利用混合遗传算法求

的极小值点

目标函数定义:

function

一维混合遗传算法求解:

%----------求函数极小值----------%

求解结果:

9a8e8ec4fcfb6b387facf90214f10ce3.png

Point 2 混合遗传算法求多维问题

利用混合遗传算法求

其中
的极小值点

目标函数定义:

function

多维混合遗传算法求解:

%----------求函数极小值----------%

计算结果:

5e56f1f1dbd19fab3a2e7163fbf36954.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值