基于入侵杂草算法的函数寻优算法
文章目录
- 一、理论基础
- 1、算法简介
- 2、杂草特性
- 二、案例背景
- 1、问题描述
- 2、解题思路及步骤
- (1) 初始化种群
- (2) 繁殖
- (3) 空间分布
- (4) 竞争性排斥规则
- 3、算法流程
- 三、MATLAB程序实现
- 1、清空环境变量
- 2、问题设定
- 3、参数设置
- 4、初始化杂草种群
- 5、迭代优化
- 6、结果显示
- 四、参考文献
一、理论基础
1、算法简介
入侵杂草算法(Invasive Weed Optimization,IWO)是C.Lucas和A.R.Mehrabian在2006年通过模拟自然界中杂草扩散入侵过程的随机搜索仿生优化算法。该算法是一种很强大的智能优化算法,具有易于理解、收敛性好、鲁棒性强、易于实现、结构简单等优点,目前,IWO 算法已成功应用在 DNA 序列计算、线性天线设计、电力线通信系统资源分配、图像识别、图像聚类、约束工程设计、压电激励器放置等实际工程问题。
2、杂草特性
杂草最突出的特点是,种子通过动物、水及风等多种传播途径随机散布在田野里,每个种子独立地使用田里的资源,找到适合的生长空间,发挥强大的适应能力,并且充分利用生长环境中的资源,能够获取充分的营养快速生长。在杂草进化和繁殖的过程中,生存能力强的种子繁殖得更快,产生较多的种子。反之,不太适应环境的种子,产生较少的种子。
二、案例背景
1、问题描述
本案例的寻优函数为sphere函数: f ( x ) = ∑ i = 1 n x i 2 , x i ∈ [ − 10 , 10 ] , i = 1 , 2 , ⋯ , n (1) f(\boldsymbol x)=\sum_{i=1}^n x_i^2,\quad x_i∈[-10,10],i=1,2,\cdots,n\tag{1} f(x)=i=1∑nxi2,xi∈[−10,10],i=1,2,⋯,n(1)本案例取 n = 5 n=5 n=5。
sphere函数的三维立体图形如图1所示。
图1 sphere函数的三维立体图形
2、解题思路及步骤
(1) 初始化种群
设置相关参数,设定最大种群规模 N m a x N_{max} Nmax,初始化种群数 N 0 N_0 N0,所求问题维数 d d d,最大迭代次数 i t e r m a x iter_{max} itermax,繁殖的种子数的上下限 S m a x S_{max} Smax和 S m i n S_{min} Smin,非线性调和因子(方差缩减指数) n n n。
(2) 繁殖
每个杂草产生的种子数的表达式: S = f l o o r ( S m i n + f − f m i n f m a x − f m i n ( S m a x − S m i n ) ) (2) S=floor(S_{min}+\frac{f-f_{min}}{f_{max}-f_{min}}(S_{max}-S_{min}))\tag{2} S=floor(Smin+fmax−fminf−fmin(Smax−Smin))(2)其中, f l o o r floor floor是MATLAB的一个函数,表示“向下取整”,即取不大于该值的最大整数; f f f代表当前杂草的适应度值,当前种群中杂草适应度值范围为 [ f m i n , f m a x ] [f_{min},f_{max}] [fmin,fmax],一颗杂草所能繁殖种子的数量范围为 [ S m i n , S m a x ] [S_{min},S_{max}] [Smin,Smax]。
(3) 空间分布
杂草产生的种子在父代个体的周围形成正态分布,其均值为零,标准差为 σ c u r \sigma_{cur} σcur。第 i i i个杂草产生的第 s s s个种子的位置为: P o s i t i o n i , s = P o s i t i o n i + N ( 0 , σ 2 ) , S m i n ≤ s ≤ S m a x (3) Position_{i,s}=Position_i+N(0,\sigma^2),S_{min}≤s≤S_{max}\tag{3} Positioni,s=Positioni+N(0,σ2),Smin≤s≤Smax(3)其中, σ \sigma σ为标准差。随着进化次数的增加,标准差可按下式计算: σ c u r = ( i t e r m a x − i t e r i t e r m a x ) n ( σ i n i t − σ f i n a l ) + σ f i n a l (4) \sigma_{cur}=\left(\frac{iter_{max}-iter}{iter_{max}}\right)^n(\sigma_{init}-\sigma_{final})+\sigma_{final}\tag{4} σcur=(itermaxitermax−iter)n(σinit−σfinal)+σfinal(4)其中, σ c u r \sigma_{cur} σcur是当前标准差, i t e r m a x iter_{max} itermax为最大进化迭代次数, i t e r iter iter为当前进化迭代次数。 σ i n i t \sigma_{init} σinit和 σ f i n a l \sigma_{final} σfinal分别为标准差初始值和最终值。每轮进化对应的标准差并不一样,随着进化的进行,标准差从 σ i n i t \sigma_{init} σinit一直变化到 σ f i n a l \sigma_{final} σfinal;一般情况下设置为 n = 3 n=3 n=3。
(4) 竞争性排斥规则
竞争性排斥规则是经过多次进化之后,当种群规模达到 N m a x N_{max} Nmax,按照适应度值大小对所有的个体进行排序,排除适应度较差的个体,保留其余个体。即此算法是先通过杂草迅速繁殖,占领生存空间,而后保留了竞争力更强的杂草继续进行空间搜索。
3、算法流程
IWO算法主要步骤如图2所示。
图2 IWO算法流程图
三、MATLAB程序实现
利用MATLAB提供的函数,可以方便地在MATLAB环境下实现上述步骤。
1、清空环境变量
程序运行之前,清除工作空间Workspace中的变量及Command Window中的命令。具体程序如下:
%% Clear environment variables
clc;
clear;
close all;
2、问题设定
在进行优化之前,需要明确优化的目标函数。具体程序如下:
%% Problem Definition
CostFunction = @(x) Sphere(x); % 目标函数
nVar = 5; % 决策变量数
VarSize = [1 nVar]; % 决策变量矩阵大小
VarMin = -10; % 决策变量下限
VarMax = 10; % 决策变量上限
Sphere函数代码如下:
function z = Sphere(x)
%% 目标函数z = sum(x.^2);
end
3、参数设置
代码如下:
%% IWO Parameters
MaxIt = 500; % 最大迭代次数nPop0 = 10; % 初始种群规模
nPop = 25; % 最大种群规模Smin = 0; % 繁殖种子数下限
Smax = 5; % 繁殖种子数上限Exponent = 3; % 方差缩减指数(非线性调和因子)
sigma_initial = 0.5; % 标准差初值
sigma_final = 0.001; % 标准差终值
4、初始化杂草种群
在计算之前,需要对杂草种群进行初始化。同时,为了加快程序的执行速度,对于程序中涉及的一些过程变量,需要预分配其存储容量。具体程序如下:
%% Initialization
% 置空植物矩阵(包含位置和适应度值)
empty_plant.Position = [];
empty_plant.Cost = [];
pop = repmat(empty_plant, nPop0, 1); % 初始种群矩阵
for i = 1:numel(pop)% 初始化位置pop(i).Position = unifrnd(VarMin, VarMax, VarSize);% 初始化适应度值pop(i).Cost = CostFunction(pop(i).Position);
end
% 初始化最优函数值历史记录
BestCosts = zeros(MaxIt, 1);
5、迭代优化
迭代寻优为整个算法的核心。首先根据公式(4)计算标准差,获得最优和最差的目标函数值,并初始化子代种群;然后进行繁殖操作,根据公式(2)计算每个杂草个体产生的种子数;之后,遍历每个杂草产生的种子,根据杂草产生的种子在父代个体的周围服从 N ( 0 , σ 2 ) N(0,\sigma^2) N(0,σ2)和公式(3)产生相应的个体,添加进子代种群;最后,合并父代和子代,并根据竞争性生存法则剔除额外成员(如果多余的话),保存每代的最优解。
%% IWO Main Loop
for it = 1:MaxIt% 更新标准偏差sigma = ((MaxIt - it)/(MaxIt - 1))^Exponent * (sigma_initial - sigma_final) + sigma_final;% 获得最佳和最差的目标值Costs = [pop.Cost];BestCost = min(Costs);WorstCost = max(Costs);% 初始化子代种群newpop = [];% 繁殖for i = 1:numel(pop)% 比例系数ratio = (pop(i).Cost - WorstCost)/(BestCost - WorstCost);% 每个杂草产生的种子数S = floor(Smin + (Smax - Smin)*ratio);for j = 1:S% 初始化子代newsol = empty_plant; % 生成随机位置% randn是一种产生标准正态分布的随机数或矩阵的函数newsol.Position = pop(i).Position + sigma * randn(VarSize); % 边界(下限/上限)处理newsol.Position = max(newsol.Position, VarMin);newsol.Position = min(newsol.Position, VarMax);% 子代的目标函数值newsol.Cost = CostFunction(newsol.Position);% 添加子代newpop = [newpopnewsol]; % #okendend% 合并种群pop = [popnewpop];% 种群排序[~, SortOrder] = sort([pop.Cost]);pop = pop(SortOrder);% 竞争排除(删除额外成员)if numel(pop)>nPoppop = pop(1:nPop);end% 保存最佳种群BestSol = pop(1);% 保存最优函数值历史记录BestCosts(it) = BestSol.Cost;% 显示迭代信息disp(['Iteration ' num2str(it) ': Best Cost = ' num2str(BestCosts(it))]);
end
6、结果显示
为了更为直观地对结果进行观察和分析,以图形的形式将结果显示出来,具体程序如下:
%% Results
figure;
% plot(BestCosts, 'LineWidth', 2);
semilogy(BestCosts, 'r', 'LineWidth', 2);
xlabel('Iteration');
ylabel('Best Cost');
grid on;
IWO算法进化过程如图3所示。
图3 IWO算法迭代进化过程
四、参考文献
[1] A.R. Mehrabian, C. Lucas. A novel numerical optimization algorithm inspired from weed colonization[J]. Ecological Informatics, 2006, 1(4): 355-366.
[2] V. Kawadia, P. R. Kumar. Principles and protocols for power control in wireless ad hoc networks[J]. IEEE Journal on Selected Areas in Communications, 2005, 23(1): 76-88.
[3] 孟凡治, 王换招, 何晖. 基于联合感知模型的无线传感器网络连通性覆盖协议[J]. 电子学报, 2011, 39(4): 772-779.
基于入侵杂草算法的函数寻优算法相关推荐
- 《MATLAB智能算法30个案例》:第2章 基于遗传算法和非线性规划的函数寻优算法
<MATLAB智能算法30个案例>:第2章 基于遗传算法和非线性规划的函数寻优算法 1. 前言 2. MATLAB 仿真示例一 3. MATLAB 仿真示例二 4. MATLAB 仿真示例 ...
- 基于蚁群算法的函数寻优算法
文章目录 一.理论基础 二.案例背景 1.问题描述 2.解题思路及步骤 三.MATLAB程序实现 1.清空环境变量 2.初始化参数 3.构建解空间和目标函数 4.迭代寻优 5.结果显示 6.绘图 四. ...
- 基于沙猫群优化算法的函数寻优算法
文章目录 一.理论基础 1.沙猫群优化算法 (1)初始化种群 (2)搜索猎物(探索) (3)攻击猎物(开发) (4)探索和开发 2.SCSO算法伪代码 二.仿真实验与结果分析 三.参考文献 一.理论基 ...
- 基于改进正弦余弦算法的函数寻优算法
文章目录 一.理论基础 1.基本正弦余弦算法 2.改进正弦余弦算法 (1)基于双曲正弦调节因子和动态余弦波权重的位置更新 (2)基于拉普拉斯分布和高斯分布的动态混合变异 二.算法流程图 三.仿真实验与 ...
- 基于蜉蝣优化算法的函数寻优算法
文章目录 一.理论基础 1.蜉蝣优化算法 (1)雄性蜉蝣的更新 (2)雌性蜉蝣的更新 (3)蜉蝣的交配过程 2.MA算法伪代码 二.仿真实验与结果分析 1.函数测试与数值分析 2.WSN三维覆盖优化 ...
- 基于金豺优化算法的函数寻优算法
文章目录 一.理论基础 1.金豺优化算法 (1)搜索空间公式 (2)探索阶段或搜索猎物 (3)开发阶段或围捕和突袭猎物 (4)从探索转向开发 2.GJO伪代码 二.仿真实验与结果分析 三.参考文献 一 ...
- 基于果蝇优化算法的函数寻优算法
文章目录 一.理论基础 二.算法步骤 1.启发 2.方向和距离 3.气味浓度判断值 4.适应度评估 5.寻找最优个体 6.飞行 7.迭代优化 三.案例背景 问题描述 四.MATLAB程序实现 1.清空 ...
- 基于蜂鸟优化算法的函数寻优算法
文章目录 一.理论基础 1.自搜索阶段 2.引导搜索阶段 3.HOA伪代码 二.仿真实验与分析 三.参考文献 一.理论基础 蜂鸟优化算法(Hummingbirds optimization algor ...
- 基于藤壶交配优化算法的函数寻优算法
文章目录 一.理论基础 1.藤壶交配优化算法 1.1 哈迪-温伯格(Hardy-Weinberg)法则 1.2 BMO 1.2.1 初始化 1.2.2 选择过程 1.2.3 繁殖 2.BMO算法伪代码 ...
最新文章
- 【ACM】杭电OJ 1789(Doing Homework again)
- secureCRT自动断开的解决方法
- Android性能优化典范第六季
- 关于python文件_关于python文件操作
- 动态加载TreeView
- python word自动化_python操作word,自动化办公
- 查看有哪些表被锁住 如何杀死oracle死锁进程
- 千年新论:马谡的错误在于盲目创新,正确做法是死板教条
- 什么软件测试情侣头像,在线识别情侣头像软件
- STM32H750 开启 SAI 模块
- 1.HTTP协议|web框架
- 梦之所寄,行之所为——地狱之门就此洞开(读梦断代码有感)
- 126邮箱stmp服务器,网易邮箱开启13周年庆 与3.2亿用户共享快乐
- 使用谷歌(Google)TTS服务 – Java版开源gTTS及Python gTTS
- SpringBoot常用标签的理解
- UI设计中标签设计总结
- 苹果x为什么总黑屏_苹果X手机为什么突然黑屏了
- 【微信小程序】初探·即用即走的小程序到底有多急?
- Spring项目,项目启动执行方法且执行一次。
- c语言数星星结构体,1469: 数星星(结构体专题)
热门文章
- java 中成员变量的名字和类的方法的名字可以一样.
- 【vue-baidu-map】自定义地图
- 华为fusionaccess云桌面AD域虚拟机故障替换
- 2021年高压电工考试报名及高压电工复审考试
- rtmp 点播系统之播放器篇
- 拼多多跨境电商好不好做众心正和
- git stash 临时存代码,清空工作区
- javaweb(二)前端基础入门篇
- 将思科7912G SIP电话转成SCCP模式(Converting an In-Use Phone from SIP to SCCP for IP Phone 7912G)
- 跨境电商亚马逊 速卖通 阿里国际 shopee 运营策略与实践