入侵杂草优化算法
2021/6/20 11:52:17
本文主要是介绍入侵杂草优化算法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
文章目录
- 一、理论基础
-
- 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函数:
图1 sphere函数的三维立体图形
2、解题思路及步骤
(1) 初始化种群
(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、参数设置
代码如下:
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 = [newpop newsol]; % #ok end end % 合并种群 pop = [pop newpop]; % 种群排序 [~, SortOrder] = sort([pop.Cost]); pop = pop(SortOrder); % 竞争排除(删除额外成员) if numel(pop)>nPop pop = 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算法迭代进化过程
代码下载https://www.cnblogs.com/matlabxiao/p/14883637.html
四、参考文献
[1] Mehrabian A R , Lucas C . A novel numerical optimization algorithm inspired from weed colonization[J]. Ecological Informatics, 2006, 1(4):355-366.
[2] Kawadia V , Kumar P R . 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] Meng Fan-zhi, Wang Huan-zhao, He Hui. Connected coverage protocol using cooperative sensing model for wireless sensor networks[J]. Journal of Electronics,2011,39(4):722-799.
这篇关于入侵杂草优化算法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南