⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 opt_simu.m

📁 matlab 模拟退火经典程序
💻 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 + -