📄 opt_simu.m
字号:
function [xo,fo]=Opt_Simu(f,x0,l,u,kmax,q,TolFun)
%%模拟退火算法 求f(X)的最小值点且 l<=x<=u
%% f:待求函数
%% x0初值点
%% l,u 分别为搜索区间的上下限
%% kmax 最大迭代次数
%% q :退火因子
%% TolFun:函数容许误差
%%%%%%%% 算法第一步 根据输入的变量数,将某些量 设为默认值
if nargin>7
TolFun=1e-8;
end
if nargin<6
q=1;
end
if nargin<6
kmax=100;
end
%%%%%%% 算法第二步 求解一些基本变量
N=length(x0); %%自变量的维数
x=x0;
fx=feval(f,x); %%函数在初始点x0处的函数值
xo=x;
fo=fx;
%%%%%%%%算法第三步 进行迭代计算 找出近似全局最小点
for k=0:kmax
Ti=(k/kmax)^q;
mu=10^(Ti*100); %%%计算mu
dx=Mu_Inv(2*rand(size(x))-1,mu).*(u-l); %%%步长 dx
x1=x+dx; %下一估计点
%%%将 xl限定在区间[l,u]上
x1=(x1< l).* l+( l<=x1).*(x1<=u).*x1+(u<x1).*u;
fx1=feval(f,x1);
df=fx1-fx;
%%%% 如果 fxl<fx 或者概率大于随机数z
if df<0|rand<exp(-Ti*df/(abs(fx)+eps)/TolFun)
x=x1;
fx=fx1;
end
if fx<fo
xo=x;
fo=fx1;
end
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -