粒子群优化算法—Matlab
2024-09-05 07:17:45
PSO算法
clc;
clear ;
close ;
%% Problem Definition CostFunction = @(x) sphere(x); % Cost Function nVar = 5; % Dimension of Decision Variables VarSize = [1,nVar]; % Matrix Size of Decision Variables VarMin = -10; % Lower Bound of Decision Variables
VarMax = 10; % Upper Bound of Decision Variables %% Parameters of PSO MaxIt = 1000; % Maximum Number of Iterations nPop = 50; % Population Size w = 1; % Inertia Coefficient
wdamp = 0.81; % Damping Ratio of Inertia Coefficient
c1 = 2; % Personal Acceleration Coefficient
c2 = 2; % Social Acceleration Coefficient %% Initialization % The Patticle Template
empty_partical.Position = [];
empty_partical.Velocity = [];
empty_partical.Cost = [];
empty_partical.Best.Position = [];
empty_partical.Best.Cost = []; % Create Population Array
particle = repmat(empty_partical,nPop,1); % Initialize Global Best
GlobalBest.Cost = inf; % Iniitialize Population Members
for i=1:nPop % Generate Random Solution
particle(i).Position = unifrnd(VarMin,VarMax,VarSize); % Initialize Velocity
particle(i).Velocity = zeros(VarSize); % Evaluation
particle(i).Cost = CostFunction(particle(i).Position); % Update the Personal Best
particle(i).Best.Position = particle(i).Position;
particle(i).Best.Cost = particle(i).Cost; % Update Global Best
if particle(i).Best.Cost < GlobalBest.Cost
GlobalBest = particle(i).Best;
end end % Array to Hold Best Cost Value
BestCosts = zeros(MaxIt,1); %% Main Loop of PSO 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).*(GlobalBest.Position - particle(i).Position);
% Update Position
particle(i).Position = particle(i).Position + particle(i).Velocity; % Evaluation
particle(i).Cost = CostFunction( particle(i).Position); % 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; % Update Global Best
if particle(i).Best.Cost < GlobalBest.Cost
GlobalBest = particle(i).Best;
end end end % Store the Best Cost Value
BestCosts(it) = GlobalBest.Cost; % Display Iteration Information
disp(['Iteration ' num2str(it) ': Best Cost = ' num2str(BestCosts(it))]); % Damping Inertia Coefficient
w = w * wdamp; end %% Results figure;
plot(BestCosts,'LineWidth',2);
semilogy(BestCosts,'LineWidth',2);
xlabel('Iterations');
ylabel('Best Cost');
grid on;
测试函数
function z = sphere(x)
%% 目标函数
z = sum(x.^2);
end
最新文章
- 4. K线基础知识
- Permutations II 再分析
- MySQL Proxy
- Raspberry Pi 学习笔记之一
- 如何将ADT项目导入Android studio及常見問題
- 把Java程序打包成jar文件包并执行
- 【LeetCode OJ】Pascal&#39;s Triangle
- 【UVA11019】Matrix Matcher
- [问题解决] initAndListen: 10309 Unable to create/open lock file: /data/db/mongod.lock
- nodejs中EventEmitter
- List实现
- wGenerator代码生成工具
- [PKUSC2018]星际穿越(倍增)
- Oracle客户端连接数据库配置
- 小tips:JS严格模式(use strict)下不能使用arguments.callee的替代方案
- <;自动化测试方案_3>;第三章、怎么样实现自动化测试?(How)
- python 约束与异常处理
- golang 使用os/exec配合context实现的超时机制
- Python学习之路基础篇--02Python基础+小作业
- 支持向量机通俗导论(理解SVM的三层境界)(ZT)
热门文章
- [atARC123F]Insert Addition
- 2020第十三届全国大学生信息安全竞赛创新实践能力赛rceme writerup
- 基于IDEA Plugin插件开发,撸一个DDD脚手架
- git不显示提交代码
- 洛谷 P7116 - [NOIP2020] 微信步数(拉格朗日插值)
- [Linux]非root的R环境被conda破坏后如何恢复?
- 【Python小试】判断一条序列GC含量高低
- Linux—软件包管理器yum安装详解
- Excel-姓名列中同一个人汇总金额列,得出总金额
- 41-Climbing Stairs-leetcode