天天看点

Matlab SA for Feature Selection(模拟退火求解特征选择)前言一、SA原理二、源码总结

文章目录

  • 前言
  • 一、SA原理
  • 二、源码
    • 1.matlab源码
  • 总结

前言

提示:本文在matlab平台实现了SA算法用于求解特征选择问题。

一、SA原理

  1. 通过模拟金属退火这一过程发现,从高温时粒子的不稳定状态到低温时粒子的稳定状态,其间并不是一直都往稳定的状态变化,也有小概率会往更加不稳定的状态变化,但最有总能收敛到一个比较好的局部最优解。
  2. SA算法是最经典的元启发式算法之一,已经被证明——只要时间足够就一定能收敛到全局最优解?忘了是不是记错了哈哈。不过对于复杂的问题上时间就是不可接受的了,只是理论上证明。
  3. 算法步骤,即伪代码:

    ①初始化当前位置和适应度值,温度。

    ②进入一个for loop,多次进行扰动,并记录结果

    ③如果上一个for loop有更好的解,则进入上一个for loop中最好的解。

    ④如果上一个for loop 没有更好的解,则以Metropolis准则判断是否是要接受上一个for loop的最好解

    ⑤降温

    ⑤直至迭代结束

  4. Memory:每次迭代记录SA的最优解,保证不丢失历史最优解。
  5. 降温策略:一般来说 T = T * 温度衰减系数,还有很多其它的降温策略,其实没啥用
  6. 扰动策略:分为随机扰动和顺序扰动
  7. 并行化计算:在每个for loop里面可以进行并行

二、源码

1.matlab源码

代码如下(示例):

%% SA memory&without memory were saved in this function
function [globalbest_x,globalbest_faval,X,F] = SA()
iter = 1;%迭代次数初值
% a=0.95;%温度衰减系数
Mint=0.001;%初始温度
Maxt=2000;%最后温度
gN2 = min(gN,80);
a=(Mint/Maxt)^(gN2/4800);%温度衰减系数
t=Maxt;
Markov=gN;%Markov链长度
p = 0.5;
InitializationX = randsrc(1,gN,[0,1;p,(1-p)]);%初始解
InitResult = Fitness(InitializationX);
globalbest_x = InitializationX;
globalbest_faval = InitResult (:,4);
X = InitializationX;
F = InitResult (:,4);
% Accept_P = zeros(ceil((4800/gN)),gN);
%% 开始迭代

while t>=Mint
    iter = iter + 1;
%     MarkovResult = 
    parfor j=1:Markov
        NewX = X;
        %%随机扰动
        %         r = round(rand(1,1)*gN);
        %         if r==0
        %             r = 1;
        %         end
        %         NewX(r) = ~NewX(r);
        %%遍历扰动
        NewX(j) = ~NewX(j);
               
        ELMResult = ELM_Fitness(gdistribute,glable,gTrainData,gTrainLable,gTestData,gTestLable,DivideMethod,NewX,NumberofHiddenNeurons,ActiveName,C);
        NewF = ELMResult(:,4);
        if(NewF> F)
            X = NewX;
            F = NewF;
            if NewF>globalbest_faval
                globalbest_faval = NewF;
                globalbest_x = NewX;
            end
        elseif exp((NewF-F)/t)>rand()
            %             Accept_P(iter-1,j) = P;
            X = NewX;
            F = NewF;
            if NewF>globalbest_faval
                globalbest_faval = NewF;
                globalbest_x = NewX;
            end
        end
    end
    disp([iter,t,F,globalbest_faval]);
    %                 disp(globalbest_x);
    t=t*a;
end
end
%% 结果显示--------------------------------------------------------------------------

           

总结

本文介绍了SA算法求解特征选择问题的原理,并提供了matlab源码以供参考。

继续阅读