1 简介
IWO是2006年由A. R. Mehrabian等提出的一种从自然界杂草进化原理演化而来的随机搜索算法,模仿杂草入侵的种子空间扩散、生长、繁殖和竞争性消亡的基本过程,具有很强的鲁棒性和自适应性。
杂草是环境中生长的对农作物、景观、生态系统甚至人类构成威胁的植物的统 称。人类与杂草的对抗由来已久,自耕作活动出现后杂草就一直生长在田间地头影响栽培植物的生长繁殖,尽管在科技发达的今天,各种物理方法( 如火燎法) 、化学方法( 如除草剂) 、生物方法( 如养杂草宿敌) 抑或是生态系统算法都无法消除杂草的踪迹。入侵杂草具有超强的生存能力和环境适应能力,它总能在农季开始的最佳时间吸收土壤中大量的水分,造成土地干燥贫瘠影响土著植物的生长繁殖,有些杂草能通过释放化合物影响周围植物种子或幼苗的成长进而能够占据某一领地成功存活生长。杂草成熟后繁殖的种子通过风、水或者自身爆破等方式散布到其他场地,待到下一生长期,开始新一轮的扩张,不断寻找光线好、养分足等环境更优越的生长区域。 IWO 算法就是受杂草繁殖扩张过程的启发而构造出的一种随机优化算法。在 IWO 算法中,入侵杂草的生长区域视为问题的可行域; 每一杂草代表问题的一个可行解; 杂草的适应度( 杂草的生长环境质量) 反映解的优劣; 通过杂草的种子繁殖、空间扩散、竞争择优三个主要操作模拟整个寻找最优解的过程,以及建立杂草种群与解集的对应关系。
2 部分代码
clc;
clear;
close all;
%% Problem Definition
CostFunction = @(x) Sphere(x); % Objective Function
nVar = 5; % Number of Decision Variables
VarSize = [1 nVar]; % Decision Variables Matrix Size
VarMin = -10; % Lower Bound of Decision Variables
VarMax = 10; % Upper Bound of Decision Variables
%% IWO Parameters
MaxIt = 200; % Maximum Number of Iterations
nPop0 = 10; % Initial Population Size
nPop = 25; % Maximum Population Size
Smin = 0; % Minimum Number of Seeds
Smax = 5; % Maximum Number of Seeds
Exponent = 2; % Variance Reduction Exponent
sigma_initial = 0.5; % Initial Value of Standard Deviation
sigma_final = 0.001;% Final Value of Standard Deviation
%% Initialization
% Empty Plant Structure
empty_plant.Position = [];
empty_plant.Cost = [];
pop = repmat(empty_plant, nPop0, 1); % Initial Population Array
for i = 1:numel(pop)
% Initialize Position
pop(i).Position = unifrnd(VarMin, VarMax, VarSize);
% Evaluation
pop(i).Cost = CostFunction(pop(i).Position);
end
% Initialize Best Cost History
BestCosts = zeros(MaxIt, 1);
%% IWO Main Loop
for it = 1:MaxIt
end
% Merge Populations
pop = [pop
newpop];
% Sort Population
[~, SortOrder]=sort([pop.Cost]);
pop = pop(SortOrder);
% Competitive Exclusion (Delete Extra Members)
if numel(pop)>nPop
pop = pop(1:nPop);
end
% Store Best Solution Ever Found
BestSol = pop(1);
% Store Best Cost History
BestCosts(it) = BestSol.Cost;
% Display Iteration Information
disp(['Iteration ' num2str(it) ': Best Cost = ' num2str(BestCosts(it))]);
end
%% Results
figure;
% plot(BestCosts,'LineWidth',2);
semilogy(BestCosts,'LineWidth',2);
xlabel('Iteration');
ylabel('Best Cost');
grid on;
img =gcf; %获取当前画图的句柄
print(img, '-dpng', '-r600', './运行结果.png') %即可得到对应格式和期望dpi的图像
3 仿真结果
4 参考文献
[1]张义良. 基于杂草算法的位置服务模型研究[J]. 2021(2017-3):90-93.