购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.3 函数寻优

本节主要介绍如何利用哈里斯鹰优化算法对函数进行寻优。主要包括寻优函数问题描述;适应度函数设计;主函数设计几个部分。

2.3.1 问题描述

求解一组 x 1 , x 2 ,使得下面函数的值最小,即求解函数的最小值。

式中, x 1 x 2 的取值范围分别为[-10,10],[-10,10]。

待求解函数的搜索空间是怎样的呢?为了直观、形象、生动地展现待求解函数的搜索空间,可以使用MATLAB绘图的方式查看,以 x 1 X 轴, x 2 Y 轴, f ( x 1 , x 2 )为 Z 轴,绘制该待求解函数的搜索空间,代码如下,效果如图2.9所示。

图2.9 程序运行结果

2.3.2 适应度函数设计

在该问题中,变量范围的约束条件如下:

-10≤ x 1 ≤10

-10≤ x 2 ≤10

可以通过设置哈里斯鹰个体的维度和边界条件进行函数设计。即设置哈里斯鹰个体的维度 dim 为2,哈里斯鹰个体上边界 ub =[10,10],哈里斯鹰个体下边界 lb =[-10,-10]。

根据问题设定适应度函数fun.m如下:

%% 适应度函数
function fitness = fun(x)
%x为输入一个个体,维度为[1,dim]
%fitness为输出的适应度
   fitness = abs(x(1)) + abs(x(2))+abs(x(1))*abs(x(2));
end

2.3.3 主函数设计

设置哈里斯鹰优化算法的参数如下。

哈里斯鹰种群数量 pop 为50,最大迭代次数 maxIter 为100,哈里斯鹰个体的维度 dim 为2,哈里斯鹰个体上边界 ub =[10,10],哈里斯鹰个体下边界 lb =[-10,-10]。

使用哈里斯鹰优化算法求解待求解函数极值问题的主函数main.m如下:

%% 哈里斯鹰优化算法求解abs(x1) + abs(x2)+abs(x1)*abs(x2)的最小值
clc;clear all;close all;
%参数设定
pop = 50;%种群数量
dim = 2;%变量维度
ub = [10,10];%个体上边界信息
lb = [-10,-10];%个体下边界信息
maxIter = 100;%最大迭代次数
fobj = @(x) fun(x);%设置适应度函数为fun(x)
%哈里斯鹰优化算法求解问题
[Best_Pos,Best_fitness,IterCurve] = HHO(pop,dim,ub,lb,fobj,maxIter);
%绘制迭代曲线
figure
plot(IterCurve,'r-','linewidth',1.5);
grid on;%网格开
title('哈里斯鹰优化算法迭代曲线')
xlabel('迭代次数')
ylabel('适应度')

disp(['求解得到的x1,x2为',num2str(Best_Pos(1)),'   ',num2str(Best_Pos(2))]);
disp(['最优解对应的函数值为:',num2str(Best_fitness)]);

程序运行得到的哈里斯鹰优化算法迭代曲线,如图2.10所示。

图2.10 程序运行结果

运行结果如下:

求解得到的x1,x2为3.2464e-29   -1.0805e-28
最优解对应的函数值为:1.4051e-28

从哈里斯鹰优化算法寻优的结果看,最终求解值为(3.2464e-29, -1.0805e-28),十分接近理论最优值(0,0),表明哈里斯鹰优化算法具有较好的寻优能力。 RnDhaIq+e5Qba3cWM2tcqxUCMO6DVkH9GHDLywgIbBs4S6qq8qf6EpqpJpypvHrn

点击中间区域
呼出菜单
上一章
目录
下一章
×