• 大小: 9KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-14
  • 语言: Matlab
  • 标签: SA  优化  

资源简介

以优化SVM算法的参数c和g为例,对SA(模拟退火)算法MATLAB源码进行了逐行中文注解。是很好的学习材料。

资源截图

代码片段和文件信息

% 使用模拟退火法求函数 f(xy)=x^2+y^2的最小值
% 使用METROPOLIS接受准则进行模拟
%% 清空环境
tic % 计时
clear
clc
close all
format compact
%% 绘制目标函数图像
x=-5:0.1:5;
y=-5:0.1:5;
[XY]=meshgrid(xy);
value=X.*X+Y.*Y;
figure(‘Name‘‘目标函数图像‘)
mesh(XYvalue)
%% SA算法主程序
lb=[-5-5]; % 参数取值下界
ub=[55]; % 参数取值上界
% 冷却表参数
MarkovLength=1000; % 马可夫链长度
DecayScale=0.95; % 衰减参数
StepFactor=0.02; % Metropolis步长因子
Temperature0=100; % 初始温度
Temperatureend=1; % 最终温度
Boltzmann_con=1; % Boltzmann常数
AcceptPoints=0.0; % Metropolis过程中总接受点
% 随机初始化参数
range=ub-lb;
Par_cur=rand(size(lb)).*range+lb; % 用Par_cur表示当前解
Par_best_cur=Par_cur; % 用Par_best_cur表示当前最优解
Par_best=rand(size(lb)).*range+lb; % 用Par_best表示冷却中的最好解
% 每迭代一次退火(降温)一次,直到满足迭代条件为止
t=Temperature0;
itr_num=0; % 记录迭代次数
while t>Temperatureend
    itr_num=itr_num+1;
    t=DecayScale*t; % 温度更新(降温)
    for i=1:MarkovLength
        % 在此当前参数点附近随机选下一点
        p=0;
        while p==0
            Par_new=Par_cur+StepFactor.*range.*(rand(size(lb))-0.5);
            % 防止越界
            if sum(Par_new>ub)+sum(Par_new                p=1;
            end
        end
        % 检验当前解是否为全局最优解
        if (objectFunction(Par_best)>objectFunction(Par_new))
            % 保留上一个最优解
            Par_best_cur=Par_best;
            % 此为新的最优解
            Par_best=Par_new;
        end
        % Metropolis过程
        if (objectFunction(Par_cur)-objectFunction(Par_new)>0)
            % 接受新解
            Par_cur=Par_new;
            AcceptPoints=AcceptPoints+1;
        else
            changer=-1*(objectFunction(Par_new)-objectFunction(Par_cur))/Boltzmann_con*Temperature0;
            p1=exp(changer);
            if p1>rand
                Par_cur=Par_new;
                AcceptPoints=AcceptPoints+1;
            end
        end
    end
end
%% 结果显示
disp([‘最小值在点:‘num2str(Par_best)]);
Objval_best= objectFunction(Par_best);
disp([‘最小值为:‘num2str(Objval_best)]);
%% 显示运行时间
toc

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        2179  2016-09-30 14:05  my_SA_exmp.m
     文件        3476  2016-09-30 16:18  my_SA_SVM_exmp.m
     文件         113  2016-09-30 13:40  objectFunction.m
     文件         414  2016-09-30 15:49  objfun_svm.m
     文件       20168  2016-09-30 15:49  wine.mat

评论

共有 条评论