1. 程式人生 > 其它 >【優化演算法】雜草優化演算法(IWO)【含Matlab原始碼 1076期】

【優化演算法】雜草優化演算法(IWO)【含Matlab原始碼 1076期】

一、簡介

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