clc;
clear;
close all;
%% Problem Definition
model=CreateModel();
CostFunction=@(xhat) MyCost(xhat,model); % Cost Function
nVar=model.n*(model.n-1)/2; % Number of Decision Variables
VarSize=[1 nVar]; % Decision Variables Matrix Size
VarMin=0; % Lower Bound of Variables
VarMax=1; % Upper Bound of Variables
%% PSO Parameters
MaxIt=250; % Maximum Number of Iterations
nPop=250; % Population Size (Swarm Size)
w=0.2; % Inertia Weight
wdamp=1; % Inertia Weight Damping Ratio
c1=0.7; % Personal Learning Coefficient
c2=1.0; % Global Learning Coefficient
% Constriction Coefficients
% phi1=2.05;
% phi2=2.05;
% phi=phi1+phi2;
% chi=2/(phi-2+sqrt(phi^2-4*phi));
% w=chi; % Inertia Weight
% wdamp=1; % Inertia Weight Damping Ratio
% c1=chi*phi1; % Personal Learning Coefficient
% c2=chi*phi2; % Global Learning Coefficient
% Velocity Limits
VelMax=0.1*(VarMax-VarMin);
VelMin=-VelMax;
mu = 0.1; % Mutation Rate
%% Initialization
empty_particle.Position=[];
empty_particle.Cost=[];
empty_particle.Sol=[];
empty_particle.Velocity=[];
empty_particle.Best.Position=[];
empty_particle.Best.Cost=[];
empty_particle.Best.Sol=[];
particle=repmat(empty_particle,nPop,1);
BestSol.Cost=inf;
for i=1:nPop
% Initialize Position
particle(i).Position=unifrnd(VarMin,VarMax,VarSize);
% Initialize Velocity
particle(i).Velocity=zeros(VarSize);
% Evaluation
[particle(i).Cost, particle(i).Sol]=CostFunction(particle(i).Position);
% Update Personal Best
particle(i).Best.Position=particle(i).Position;
particle(i).Best.Cost=particle(i).Cost;
particle(i).Best.Sol=particle(i).Sol;
% Update Global Best
if particle(i).Best.Cost<BestSol.Cost
BestSol=particle(i).Best;
end
end
BestCost=zeros(MaxIt,1);
%% PSO Main Loop
for it=1:MaxIt
for i=1:nPop
% Update Velocity
particle(i).Velocity = w*particle(i).Velocity ...
+c1*rand(VarSize).*(particle(i).Best.Position-particle(i).Position) ...
+c2*rand(VarSize).*(BestSol.Position-particle(i).Position);
% Apply Velocity Limits
particle(i).Velocity = max(particle(i).Velocity,VelMin);
particle(i).Velocity = min(particle(i).Velocity,VelMax);
% Update Position
particle(i).Position = particle(i).Position + particle(i).Velocity;
% Velocity Mirror Effect
IsOutside=(particle(i).Position<VarMin | particle(i).Position>VarMax);
particle(i).Velocity(IsOutside)=-particle(i).Velocity(IsOutside);
% Apply Position Limits
particle(i).Position = max(particle(i).Position,VarMin);
particle(i).Position = min(particle(i).Position,VarMax);
% Evaluation
[particle(i).Cost, particle(i).Sol] = CostFunction(particle(i).Position);
% Mutation
for k=1:2
NewParticle=particle(i);
NewParticle.Position=Mutate(particle(i).Position, mu);
[NewParticle.Cost, NewParticle.Sol]=CostFunction(NewParticle.Position);
if NewParticle.Cost<=particle(i).Cost || rand < 0.1
particle(i)=NewParticle;
end
end
% Update Personal Best
if particle(i).Cost<particle(i).Best.Cost
particle(i).Best.Position=particle(i).Position;
particle(i).Best.Cost=particle(i).Cost;
particle(i).Best.Sol=particle(i).Sol;
% Update Global Best
if particle(i).Best.Cost<BestSol.Cost
BestSol=particle(i).Best;
end
end
end
% Local Search based on Mutation
for k=1:5
NewParticle=BestSol;
NewParticle.Position=Mutate(BestSol.Position, mu);
[NewParticle.Cost, NewParticle.Sol]=CostFunction(NewParticle.Position);
if NewParticle.Cost<=BestSol.Cost
BestSol=NewParticle;
end
end
BestCost(it)=BestSol.Cost;
disp(['Iteration ' num2str(it) ': Best Cost = ' num2str(BestCost(it))]);
w=w*wdamp;
% Plot Best Solution
figure(1);
PlotSolution(BestSol.Sol,model);
pause(0.01);
end
%% Results
figure;
plot(BestCost,'LineWidth',2);
xlabel('Iteration');
ylabel('Best Cost');
没有合适的资源?快使用搜索试试~ 我知道了~
基于粒子群算法PSO、帝国殖民算法ICA 和萤火虫算法 FA 求解最小生成树附matlab代码.zip
共20个文件
m:17个
png:3个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 1 下载量 37 浏览量
2023-02-08
22:59:27
上传
评论
收藏 19KB ZIP 举报
温馨提示
基于粒子群算法PSO、帝国殖民算法ICA 和萤火虫算法 FA 求解最小生成树附matlab代码.zip
资源推荐
资源详情
资源评论
收起资源包目录
基于粒子群算法PSO、帝国殖民算法ICA 和萤火虫算法 FA 求解最小生成树附matlab代码.zip (20个子文件)
fa.m 4KB
IntraEmpireCompetition.m 372B
UpdateTotalCost.m 339B
RouletteWheelSelection.m 124B
Mutate.m 340B
pso.m 5KB
MyCost.m 369B
3.png 4KB
CalcDisconnectivity.m 125B
DoRevolution.m 927B
main.m 505B
1.png 4KB
CreateModel.m 585B
ica.m 2KB
PlotSolution.m 390B
AssimilateColonies.m 838B
InterEmpireCompetition.m 1KB
CreateMatrixFromVector.m 281B
2.png 3KB
CreateInitialEmpires.m 1KB
共 20 条
- 1
资源评论
- 月享百万的梦2023-12-05感谢资源主的分享,这个资源对我来说很有用,内容描述详尽,值得借鉴。
天天Matlab科研工作室
- 粉丝: 3w+
- 资源: 7259
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功