?? 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 + -