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

📄 main.m

📁 模拟退火程序:这部分代码是模式识别中结合模拟退火法的特征提取
💻 M
字号:
clc;clear;
figure(1);
Parameter_Sum=6;%从Parameter_Sum_All中找出参数个数为Parameter_Sum的最优组合
[J_Yuan,Para_Position,Parameter_Sum_All]=wh_test_44(Parameter_Sum);
Max=J_Yuan;Max_1=Max;Sample_Sum=wh_ZHS(Parameter_Sum_All,Parameter_Sum);

Temperature=1000;Decline=0.8;Step=Sample_Sum;Temp_step=1;
Temperature_Initial=Temperature; Temperature_End=1;Max_1_Max=0;

Temp_step_Point=round((Temperature_Initial-Temperature_End)/10);%将温度起点和终点分为10段,每段的两个端点都是采样点
if (Temp_step_Point<2)
    Temp_step_Point=2;
end

while ~(Temperature<Temperature_End)
    Temp_step=Temp_step+1;
    if (Temp_step==Temp_step_Point)
        if (Max_1==Max)
            Max_1_Max=1;
            break;%如果两个采样点的值相同,那末认为已经找到最优解,退出循环
        else
            Temp_step=1;%如果不相同,继续降温Temperature=Temperature*Decline;
        end
    end
    
    for step=1:Step       
        [J_Xin,P]= wh_test_44(Parameter_Sum);
        D=J_Xin-J_Yuan;
        if J_Xin>=J_Yuan
            Max=J_Xin;
            J_Yuan=J_Xin;
            Para_Position=P;
            if (Temp_step==1)
                Max_1=Max;
            end%if (step==1)
        else
            Edge=rand(1);
            if exp(D/Temperature)>Edge
                Max=J_Yuan;
                if (Temp_step==1)
                    Max_1=Max;
                end%if (step==1)
            end%---if exp(D/Temperature)>Edge
        end%-----if J_Xin>=J_Yuan       
    end%---Step
    Temperature=Temperature*Decline;    
end%---while ~(Temperature<1)
figure(1);
title 'Finished';

% while ~(Temperature<100)
% %     for Step=1:500
%         step=1;W_step=1;
%     while ~and((Max_1==Max),(step==Step))%具有自适应功能,直到在该温度下平衡才结束(直到最大值不再有变化时循环才停止)
%         if (step==Step)
%             step=1;%两次采样点间的距离,如果两次采样的值相等,我们就认为在该温度下达到平衡
%             W_step=W_step+1;%判断该温度下平衡的次数,如果大于W_step_Max,我们就认为在该温度下不能达到平衡,break出去开始降温
%             Max_1==Max;
%         end%(step==Step)
%         
%         if (W_step==W_step_Max)
%             break;
%         end
%         
%         [J_Xin,P]= wh_test;
%         D=J_Xin-J_Yuan;D=D*10^5;
%         if J_Xin>=J_Yuan
%             Max=J_Xin;
%             J_Yuan=J_Xin;
%             Para_Position=P;
%         else
%             Edge=rand(1);
%             if exp(D/Temperature)>Edge
%                 Max=J_Yuan;
% %                 J_Yuan=J_Yuan;
% %                 Para_Position=Para_Position;
%             end%---if exp(D/Temperature)>Edge
%         end%-----if J_Xin>=J_Yuan       
% %     end%---Step
%         step=step+1;      
%     end% while ~and((Max_1==Max),step==Step) 
%     Temperature=Temperature*Decline;
% end%---while

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -