%matlab 程序实现 模拟退火算法程序 函数求极值(引用后修改,感谢 ARMYLAU)
%使用模拟退火法求函数f(x,y) = 3*cos(xy) + x + y2的最小值
%解:根据题意,我们设计冷却表进度表为:
%即初始温度为30
%衰减参数为0.95
%马可夫链长度为10000
%Metropolis的步长为0.02
%结束条件为根据上一个最优解与最新的一个最优解的之差小于某个容差。
%使用METROPOLIS接受准则进行模拟, 程序如下
%* 日期:2012-11-29
%* 作者:steven
%* EMAIL:hxs2004@126.com
%* 结束条件为两次最优解之差小于某小量
function [BestX,BestY]=SimulateAnnealing1
clear;
clc;
%// 要求最优值的目标函数,搜索的最大区间
XMAX= 4;
YMAX = 4;
%冷却表参数
MarkovLength = 10000; %// 马可夫链长度
DecayScale = 0.95; %// 衰减参数
StepFactor = 0.02; %// 步长因子
Temperature=30; %// 初始温度
Tolerance = 1e-8; %// 容差
AcceptPoints = 0.0; %// Metropolis过程中总接受点
rnd =rand;
% 随机选点 初值设定
PreX = -XMAX * rand ;
PreY = -YMAX * rand;
PreBestX = PreX;
PreBestY = PreY;
PreX = -XMAX * rand ;
PreY = -YMAX * rand;
BestX = PreX;
%使用模拟退火法求函数f(x,y) = 3*cos(xy) + x + y2的最小值
%解:根据题意,我们设计冷却表进度表为:
%即初始温度为30
%衰减参数为0.95
%马可夫链长度为10000
%Metropolis的步长为0.02
%结束条件为根据上一个最优解与最新的一个最优解的之差小于某个容差。
%使用METROPOLIS接受准则进行模拟, 程序如下
%* 日期:2012-11-29
%* 作者:steven
%* EMAIL:hxs2004@126.com
%* 结束条件为两次最优解之差小于某小量
function [BestX,BestY]=SimulateAnnealing1
clear;
clc;
%// 要求最优值的目标函数,搜索的最大区间
%冷却表参数
AcceptPoints = 0.0; %// Metropolis过程中总接受点
rnd =rand;
% 随机选点 初值设定
PreX = -XMAX * rand ;
PreY = -YMAX * rand;
PreBestX
PreBestY = PreY;
PreX = -XMAX * rand ;
PreY = -YMAX * rand;
BestX = PreX;
