clc;
clear;
close all;
%% Problem Settings
CostFunction=@Ackley; % Cost Function
nVar=10; % Number of Unknown (Decision) Variables
VarSize=[1 nVar]; % Decision Variables Matrix Size
VarMin=-10; % Lower Bound of Decision Variables
VarMax= 10; % Upper Bound of Decision Variables
%% CMA-ES Settings
% Maximum Number of Iterations
MaxIt=300;
% Population Size (and Number of Offsprings)
lambda=(4+round(3*log(nVar)))*10;
% Number of Parents
mu=round(lambda/2);
% Parent Weights
w=log(mu+0.5)-log(1:mu);
w=w/sum(w);
% Number of Effective Solutions
mu_eff=1/sum(w.^2);
% Step Size Control Parameters (c_sigma and d_sigma);
sigma0=0.3*(VarMax-VarMin);
cs=(mu_eff+2)/(nVar+mu_eff+5);
ds=1+cs+2*max(sqrt((mu_eff-1)/(nVar+1))-1,0);
ENN=sqrt(nVar)*(1-1/(4*nVar)+1/(21*nVar^2));
% Covariance Update Parameters
cc=(4+mu_eff/nVar)/(4+nVar+2*mu_eff/nVar);
c1=2/((nVar+1.3)^2+mu_eff);
alpha_mu=2;
cmu=min(1-c1,alpha_mu*(mu_eff-2+1/mu_eff)/((nVar+2)^2+alpha_mu*mu_eff/2));
hth=(1.4+2/(nVar+1))*ENN;
%% Initialization
ps=cell(MaxIt,1);
pc=cell(MaxIt,1);
C=cell(MaxIt,1);
sigma=cell(MaxIt,1);
ps{1}=zeros(VarSize);
pc{1}=zeros(VarSize);
C{1}=eye(nVar);
sigma{1}=sigma0;
empty_individual.Position=[];
empty_individual.Step=[];
empty_individual.Cost=[];
M=repmat(empty_individual,MaxIt,1);
M(1).Position=unifrnd(VarMin,VarMax,VarSize);
M(1).Step=zeros(VarSize);
M(1).Cost=CostFunction(M(1).Position);
BestSol=M(1);
BestCost=zeros(MaxIt,1);
%% CMA-ES Main Loop
for g=1:MaxIt
% Generate Samples
pop=repmat(empty_individual,lambda,1);
for i=1:lambda
pop(i).Step=mvnrnd(zeros(VarSize),C{g});
pop(i).Position=M(g).Position+sigma{g}*pop(i).Step;
pop(i).Cost=CostFunction(pop(i).Position);
% Update Best Solution Ever Found
if pop(i).Cost<BestSol.Cost
BestSol=pop(i);
end
end
% Sort Population
Costs=[pop.Cost];
[Costs, SortOrder]=sort(Costs);
pop=pop(SortOrder);
% Save Results
BestCost(g)=BestSol.Cost;
% Display Results
disp(['Iteration ' num2str(g) ': Best Cost = ' num2str(BestCost(g))]);
% Exit At Last Iteration
if g==MaxIt
break;
end
% Update Mean
M(g+1).Step=0;
for j=1:mu
M(g+1).Step=M(g+1).Step+w(j)*pop(j).Step;
end
M(g+1).Position=M(g).Position+sigma{g}*M(g+1).Step;
M(g+1).Cost=CostFunction(M(g+1).Position);
if M(g+1).Cost<BestSol.Cost
BestSol=M(g+1);
end
% Update Step Size
ps{g+1}=(1-cs)*ps{g}+sqrt(cs*(2-cs)*mu_eff)*M(g+1).Step/chol(C{g})';
sigma{g+1}=sigma{g}*exp(cs/ds*(norm(ps{g+1})/ENN-1))^0.3;
% Update Covariance Matrix
if norm(ps{g+1})/sqrt(1-(1-cs)^(2*(g+1)))<hth
hs=1;
else
hs=0;
end
delta=(1-hs)*cc*(2-cc);
pc{g+1}=(1-cc)*pc{g}+hs*sqrt(cc*(2-cc)*mu_eff)*M(g+1).Step;
C{g+1}=(1-c1-cmu)*C{g}+c1*(pc{g+1}'*pc{g+1}+delta*C{g});
for j=1:mu
C{g+1}=C{g+1}+cmu*w(j)*pop(j).Step'*pop(j).Step;
end
% If Covariance Matrix is not Positive Defenite or Near Singular
[V, E]=eig(C{g+1});
if any(diag(E)<0)
E=max(E,0);
C{g+1}=V*E/V;
end
end
%% Display Results
figure;
% plot(BestCost, 'LineWidth', 2);
semilogy(BestCost, 'LineWidth', 2);
xlabel('Iteration');
ylabel('Best Cost');
grid on;
qq_33369554
- 粉丝: 9
- 资源: 23
最新资源
- 基于Flask框架的Web外卖程序设计(python)
- 永磁同步电机PMSM仿真计算,本项目使用直接转矩控制和磁场定向控制FOC来测试模型的准确性和可行性,使用扩展卡尔曼滤波器来估计转子的速度和位置,以便减少在闭环中驱动电机所需的传感器的数量 仿真效果良
- comsol不同电压等级盆氏绝缘子电场分布和温度场分布,330kv、550kv绝缘子电热耦合,与文献内容对应,comsol电热耦合仿真
- 同步机(VSG)三相并网仿真模型 包括VSG有功无功环,电压电流双闭环,阻抗部分 仿真结果波形完美,该仿真主要用来基础原理的学习
- 机械设计液晶屏点胶后检测固化一体机sw20可编辑全套技术资料100%好用.zip
- 基于A*算法的路径规划 鼠标自由选择起始点终点 五种地图随意切, 附涵的代码注释
- Simulink仿真:三相光伏MPPT并网谐振 关键词:光伏电池 Matlab MPPT 并网 离网 参考文献:提前录制的详细讲解视频 仿真平台:MATLAB Simulink
- 基于FPGA的硬件电子琴设计(文档+程序)
- 三机九节点,含火力,水力,风机发电机,风机采用惯性控制 渗透率可调,可用于基础研究
- 西门子S7-200PLC程序和组态王4层电梯四层电梯带组态仿真组态设计PLC设计
- EDA技术中基于Quartus II的8位电子密码锁设计与仿真实践
- 多孔介质(随机生成),应力分析,孔隙渗流 1.孔隙率、孔径大小可调 2.并行重构,效率高 3.可导入ansys,comsol,abaqus等软件 4.固相和孔隙可导出数字模型、stl、stp等格式
- Python Pygame模块实现贪吃蛇游戏
- 三相VIENNA整流,维也纳整流器simulink仿真 输入电压220v有效值 输出电压800v纹波在1%以内 0.1s后系统稳定 功率因数>0.95 电流THD<5% 开关频率20k 图一为拓扑,可
- 机械设计在线自动扫码测试机sw21可编辑全套技术资料100%好用.zip
- All电视节目列表saving.txt
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈