1 简介
The Wind Driven Optimization (WDO) algorithm is a new type of nature-inspired global optimization methodology based on atmospheric motion. The Wind Driven Optimization (WDO) technique is a population based iterative heuristic global optimization algorithm for multi-dimensional and multi-modal problems with the ability to implement constraints on the search domain. At its core, a population of infinitesimally small air parcels navigates over an N-dimensional search space following Newton's second law of motion, which is also used to describe the motion of air parcels within the earth's atmosphere. Compared to similar particle based algorithms, WDO employs additional terms in the velocity update equation (e.g. gravitation and Coriolis forces), providing robustness and extra degrees of freedom to fine tune the optimization. Along with the theory and terminology of WDO, a numerical study for tuning the WDO parameters is presented at the www.thewdo.com. WDO is further applied to electromagnetics optimization problems listed on the www.thewdo.com. These examples suggest that WDO can, in some cases, out-perform other well-known techniques such as Particle Swarm Optimization (PSO) and that WDO is well-suited for problems with both discrete and continuous-valued parameters.
2 部分代码
%--------------------------------------------------------------
% Sample Matlab / Octave Code for the Wind Driven Optimization.
% Optimization of the Sphere Function in the range of [-5, 5].
% by Dr. Zikri Bayraktar - thewdoalgorithm@gmail.com
% Last Update on December 2012.
% DISCLAIMER: This code is provided for educational purposes
% only. Use at own your risk!
%--------------------------------------------------------------
tic;
clear;
close all;
clc;
format long g;
delete('WDOoutput.txt');
delete('WDOpressure.txt');
delete('WDOposition.txt');
fid=fopen('WDOoutput.txt','a');
%--------------------------------------------------------------
% User defined WDO parameters:
param.popsize = 20; % population size.
param.npar = 5; % Dimension of the problem.
param.maxit = 500; % Maximum number of iterations.
param.RT = 3; % RT coefficient.
param.g = 0.2; % gravitational constant.
param.alp = 0.4; % constants in the update eq.
param.c = 0.4; % coriolis effect.
maxV = 0.3; % maximum allowed speed.
dimMin = -5; % Lower dimension boundary.
dimMax= 5; % Upper dimension boundary.
%---------------------------------------------------------------
% Initialize WDO population, position and velocity:
% Randomize population in the range of [-1, 1]:
pos = 2*(rand(param.popsize,param.npar)-0.5);
% Randomize velocity:
vel = maxV * 2 * (rand(param.popsize,param.npar)-0.5);
%---------------------------------------------------------------
% Evaluate initial population: (Sphere Function)
for K=1:param.popsize,
x = (dimMax - dimMin) * ((pos(K,:)+1)./2) + dimMin;
pres(K,:) = sum (x.^2);
end
%----------------------------------------------------------------
% Finding best air parcel in the initial population :
[globalpres,indx] = min(pres);
globalpos = pos(indx,:);
minpres(1) = min(pres); % minimum pressure
%-----------------------------------------------------------------
% Rank the air parcels:
[sorted_pres rank_ind] = sort(pres);
% Sort the air parcels:
pos = pos(rank_ind,:);
keepglob(1) = globalpres;
%-----------------------------------------------------------------
%Save values to the final file.
pressure = transpose(keepglob);
save WDOpressure.txt pressure -ascii -tabs;
%END
3 仿真结果
4 参考文献
[1]任作琳, 张儒剑, & 田雨波. (2015). 风驱动优化算法. 江苏科技大学学报(自然科学版), 000(002), 153-158.
5 MATLAB代码与数据下载地址
见博客主页头条