单目标多变量模拟退火算法
@[TOC](单目标多变量模拟退火算法) %%%%%%%%%%%%%%%%%%%%%初始化%%%%%%%%%%%%%%%%%%%% clear all; %清除所有变量 close all; %清图 clc; %清屏 D=3; %变量维数 lb=[75 255 14]; %下界 ub=[90 300 20]; %上界 %%%%%%%%%%%%%%%%%%%%%冷却表参数%%%%%%%%%%%%%%%%%%%% L=20; %马尔科夫链长度 K=0.998; %衰减参数 S=0.01; %步长因子 T=100; %初始温度 YZ=1e-8; %容差 P=0; %Metropolis过程中总接受点 %%%%%%%%%%%%%%%%%%%%%随机选点初值设定%%%%%%%%%%%%%%%%%%%% for i=1:D PreX(i)=rand*(ub(i)-lb(i))+lb(i); PreBestX=PreX; Prex(i)=rand*(ub(i)-lb(i))+lb(i); BestX=Prex; end %%%%%%%%%%%%%%%%%每迭代一次退火一次,直到满足迭代条件%%%%%%%%%%%%%%%% deta=abs(Fitness_Function(BestX)-Fitness_Function(PreBestX)); while (deta>YZ) && (T>0.001) T=K*T; %%%%%%%%%%%%%%%%%%%%%在当前温度T下迭代次数%%%%%%%%%%%%%%%%%%%%% for i=1:L %%%%%%%%%%%%%%%%%%%%%在此点附近随机选下一点%%%%%%%%%%%%%%%%%%%%% for j=1:D NextX(j)=PreX(j)+S*(rand*(ub(j)-lb(j))+lb(j)); end %%%%%%%%%%%%%%%%%%%%%边界条件处理%%%%%%%%%%%%%%%%%%%%% for jj=1:D if NextX(jj)>ub(j) || NextX(jj)<lb(j) NextX(jj)=PreX(jj)+S*(rand*(ub(j)-lb(j))+lb(j)); end end %%%%%%%%%%%%%%%%%%%%%是否全局最优解%%%%%%%%%%%%%%%%%%%%% if (Fitness_Function(BestX)>Fitness_Function(NextX)) %%%%%%%%%%%%%%%%保留上一个最优解%%%%%%%%%%%%%%%% PreBestX=BestX; %%%%%%%%%%%%%%%%此为新的最优解%%%%%%%%%%%%%%%% BestX=NextX; end %%%%%%%%%%%%%%%%%%%%%Metropolis过程%%%%%%%%%%%%%%%%%%%%% if (Fitness_Function(PreX)-Fitness_Function(NextX)>0) %%%%%%%%%%%%%%%%接受新解%%%%%%%%%%%%%%%% PreX=NextX; P=P+1; else changer=-1*(func1(NextX)-func1(PreX))/T; p1=exp(changer); %%%%%%%%%%%%%%%%接受较差的解%%%%%%%%%%%%%%%% if p1>rand PreX=NextX; P=P+1; end end trace(P+1)=Fitness_Function(BestX); end deta=abs(Fitness_Function(BestX)-Fitness_Function(PreBestX)); end disp(最小值在点:); BestX disp(最小值为:) func1(BestX) figure plot(trace(2:end)) xlabel(迭代次数) ylabel(目标函数值)
迭代结果图 参考文献 智能优化算法及其MATLAB实例(第2版)包子阳等
上一篇:
通过多线程提高代码的执行效率例子
下一篇:
编程语言的武侠解说-立哥技术