資源簡介
侵入性雜草優化(IWO)是自然啟發式的元啟發式方法,受雜草的傳播策略啟發,由Alireza Mehrabian和Caro Lucas于2006年提出。在本文中,我們將與您分享MATLAB中侵入性雜草優化(IWO)的結構化開源實現。

代碼片段和文件信息
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
????
????%?Update?Standard?Deviation
????sigma?=?((MaxIt?-?it)/(MaxIt?-?1))^Exponent?*?(sigma_initial?-?sigma_final)?+?sigma_final;
????
????%?Get?Best?and?Worst?Cost?Values
????Costs?=?[pop.Cost];
????BestCost?=?min(Costs);
????WorstCost?=?max(Costs);
????
????%?Initialize?Offsprings?Population
????newpop?=?[];
????
????%?Reproduction
????for?i?=?1:numel(pop)
????????
????????ratio?=?(pop(i).Cost?-?WorstCost)/(BestCost?-?WorstCost);
????????S?=?floor(Smin?+?(Smax?-?Smin)*ratio);
????????
????????for?j?=?1:S
????????????
????????????%?Initialize?Offspring
????????????newsol?=?empty_plant;
????????????
????????????%?Generate?Random?Location
????????????newsol.Position?=?pop(i).Position?+?sigma?*?randn(VarSize);
????????????
????????????%?Apply?Lower/Upper?Bounds
????????????newsol.Position?=?max(newsol.Position?VarMin);
????????????newsol.Position?=?min(newsol.Position?VarMax);
????????????
????????????%?Evaluate?Offsring
????????????newsol.Cost?=?CostFunction(newsol.Position);
????????????
????????????%?Add?Offpsring?to?the?Population
????????????newpop?=?[newpop
??????????????????????newsol];??%#ok
????????????
????????end
????????
????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
f
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????3132??2019-12-24?19:50??入侵雜草優化IWO\iwo.m
?????文件?????????10??2019-12-24?19:50??入侵雜草優化IWO\main.m
?????文件?????????55??2019-12-24?19:50??入侵雜草優化IWO\Sphere.m
?????目錄??????????0??2019-12-24?19:49??入侵雜草優化IWO
-----------?---------??----------?-----??----
?????????????????3197????????????????????4
- 上一篇:混合蛙跳算法SFLA的matlab實現
- 下一篇:CMA-ES的matlab實現
評論
共有 條評論