資源簡介
將變量為離散型的蟻群算法擴展到連續型變量,根據Socha, Krzysztof
和Dorigo, Marco在2008年發表的文章Ant colony optimization for continuous domains制作,內附原文及代碼。

代碼片段和文件信息
clc;
clear;
close?all;
%%?Problem?Definition
CostFunction=@(x)?Sphere(x);????????%?Cost?Function
nVar=10;?????????????%?Number?of?Decision?Variables
VarSize=[1?nVar];???%?Variables?Matrix?Size
VarMin=-10;?????????%?Decision?Variables?Lower?Bound
VarMax=?10;?????????%?Decision?Variables?Upper?Bound
%%?ACOR?Parameters
MaxIt=1000;??????????%?Maximum?Number?of?Iterations
nPop=10;????????????%?Population?Size?(Archive?Size)
nSample=40;?????????%?Sample?Size
q=0.5;??????????????%?Intensification?Factor?(Selection?Pressure)
zeta=1;?????????????%?Deviation-Distance?Ratio
%%?Initialization
%?Create?Empty?Individual?Structure
empty_individual.Position=[];
empty_individual.Cost=[];
%?Create?Population?Matrix
pop=repmat(empty_individualnPop1);
%?Initialize?Population?Members
for?i=1:nPop
????
????%?Create?Random?Solution
????pop(i).Position=unifrnd(VarMinVarMaxVarSize);
????
????%?Evaluation
????pop(i).Cost=CostFunction(pop(i).Position);
????
end
%?Sort?Population
[~?SortOrder]=sort([pop.Cost]);
pop=pop(SortOrder);
%?Update?Best?Solution?Ever?Found
BestSol=pop(1);
%?Array?to?Hold?Best?Cost?Values
BestCost=zeros(MaxIt1);
%?Solution?Weights
w=1/(sqrt(2*pi)*q*nPop)*exp(-0.5*(((1:nPop)-1)/(q*nPop)).^2);
%?Selection?Probabilities
p=w/sum(w);
%%?ACOR?Main?Loop
for?it=1:MaxIt
????
????%?Means
????s=zeros(nPopnVar);
????for?l=1:nPop
????????s(l:)=pop(l).Position;
????end
????
????%?Standard?Deviations
????sigma=zeros(nPopnVar);
????for?l=1:nPop
????????D=0;
????????for?r=1:nPop
????????????D=D+abs(s(l:)-s(r:));
????????end
????????sigma(l:)=zeta*D/(nPop-1);
????end
????
????%?Create?New?Population?Array
????newpop=repmat(empty_individualnSample1);
????for?t=1:nSample
????????
????????%?Initialize?Position?Matrix
????????newpop(t).Position=zeros(VarSize);
????????
????????%?Solution?Construction
????????for?i=1:nVar
????????????
????????????%?Select?Gaussian?Kernel
????????????l=RouletteWheelSelection(p);
????????????
????????????%?Generate?Gaussian?Random?Variable
????????????newpop(t).Position(i)=s(li)+sigma(li)*randn;
????????????
????????end
????????
????????%?Evaluation
????????newpop(t).Cost=CostFunction(newpop(t).Position);
????????
????end
????
????%?Merge?Main?Population?(Archive)?and?New?Population?(Samples)
????pop=[pop
?????????newpop];?%#ok
?????
????%?Sort?Population
????[~?SortOrder]=sort([pop.Cost]);
????pop=pop(SortOrder);
????
????%?Delete?Extra?Members
????pop=pop(1:nPop);
????
????%?Update?Best?Solution?Ever?Found
????BestSol=pop(1);
????
????%?Store?Best?Cost
????BestCost(it)=BestSol.Cost;
????
????%?Show?Iteration?Information
????disp([‘Iteration?‘?num2str(it)?‘:?Best?Cost?=?‘?num2str(BestCost(it))]);
????
end
%%?Results
figure;
%plot(BestCost‘LineWidth‘2);
semilogy(BestCost‘LineWidth‘2);
xlabel(‘Iteration‘);
ylabel(‘Best?Cost‘);
grid?on;
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????105??2019-02-02?04:23??RouletteWheelSelection.m
?????文件?????396529??2018-11-21?17:37??Socha-Ant?colony?optimization?for?continuous?d.pdf
?????文件?????????51??2015-07-15?18:50??Sphere.m
?????文件???????2973??2019-01-30?22:25??acor.m
?????文件??????????7??2019-02-02?04:23??main.m
-----------?---------??----------?-----??----
???????????????399665????????????????????5
評論
共有 條評論