【優化演算法】雜草優化演算法(IWO)【含Matlab原始碼 1076期】
阿新 • • 發佈:2021-07-02
一、簡介
2006年,Mehrabian等提 出 了一種新 穎 的 智 能 優 化 算 法—入 侵 雜 草 優 化 算 法(Invasive Weed Optimization,IWO).該演算法模擬雜草種子在自然界的擴散、生長、繁殖和競爭性消亡的基本過程,具有很強的魯棒性和自適應性,能夠有效地收斂於問題的最優解 。
1 演算法原理
2 演算法流程圖
二、原始碼
clc; clear; close all; tic; %%% 記錄程式執行時間 %%% %%%%%%%%%%%%%% 1 初始化種群 %%%%%%%%%%%%% M0=30; %%% 初始種群個體數 %%% Mmax=50; %%%% 最大種群個體數 %%%%% itmax=2000; %%%% 迭代次數 %%%% dim=30; %%%%%% 問題維數 %%%%% smax=5; %%%%% 最大種子數 %%%%% smin=2; %%%%%% 最小種子數 %%%% n=3; %%% 調和指數 計算方差時要用的,是設好的固定值 %%%%% delta_initial=10; %%% 方差最大值 %%%% delta_final=0.001; %%% 方差最小值 %%%% xmax=100; xmin=-100; %%%% 問題解的最大最小 範圍 %%%%%%%% X=xmin+(xmax-xmin)*rand(M0,dim); %%%%% 隨機產生初始種群 %%%%% fit=fitness(X); %%% 計算種群的適應度函式值 %%%%%% best=0; %%% 定義一個數,用來儲存最優解 %%% evrybest=[]; %%% 定義一個空陣,用來儲存每代的最優解 %%% %%%%%%%%%%%%%%%%%%%%%%%%%主程式%%%%%%%%%%%%%%%%%%%%%%%%%%%%% iter=1; while iter<=itmax %%%%%% 迴圈迭代 %%%% %%%%%%%%%%%% 2 生長繁殖 產生種子 %%%%%%%%%%%%% Nseed=round(-(smax-smin)/(max(fit)-min(fit))*(fit-min(fit))+smax); %%%%%%%%%%%% 3 空間擴散 以正態隨機分佈 %%%%%%%%%%%%% delta_iter=(itmax-iter)^n/(itmax)^n*(delta_initial-delta_final)+delta_final; %%%% 上面的式子求正態分佈的方差 %%%% l=size(X); X1=[]; for i=1:l(1) %%% 對於每個個體 %%% for j=1:Nseed(i) %%% 對於每個個體產生的種子數 %%%% Xnew=normrnd(X(i,:),delta_iter^2); %%%% 產生正態分佈隨機數 %%% if Xnew(:)>xmax Xnew(:)=xmax; end if Xnew(:)<xmin Xnew(:)=xmin; end %%%%% 限制解的範圍 解決實際問題時,這步可有可無 %%%%% X1=[X1;Xnew]; %%% 將產生的所有子代存在X1中 %%%% end end %%%%%% 上面一段是 產生子代的過程 %%%%%%%%%
三、執行結果
四、備註
版本:2014a