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

📄 main_88.asv

📁 简单实用的模拟退火算法(SB/SW) 提供一个对理解模拟退火算法很好的程序示例
💻 ASV
字号:
clc;clear;
figure(1);
Para_Position=zeros,:)
for kkk=1:10
Parameter_Sum=4;%从Parameter_Sum_All中找出参数个数为Parameter_Sum的最优组合
[J_Yuan,Para_Position(kkk,:),Parameter_Sum_All]=wh_test(Parameter_Sum);
Max=J_Yuan;Max_1=Max;Max_2=Max;
Sample_Sum=wh_ZHS(Parameter_Sum_All,Parameter_Sum);% Step=Sample_Sum;
Temperature=5000;Temperature_Initial=Temperature; Temperature_End=0.05;Decline=0.8;
Temp_step=1;Sample_step=1;step=1;
Max_1_Max=0;Max_2_Max=0;

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

if (Sample_Sum<=100)
    Sample_step_Point=Sample_Sum;%在样本中每两个采样点间的间隔最小为Sample_Sum
    Sample_Sum_Step_End=100;
elseif and((Sample_Sum>100),(Sample_Sum<=10000))
    Sample_step_Point=round(Sample_Sum/10);
    Sample_Sum_Step_End=Sample_Sum*2;
else
    Sample_step_Point=1000;
    Sample_Sum_Step_End=Sample_Sum;
end


    while ~(Temperature<Temperature_End)
        Temp_step=Temp_step+1;
        if (Temp_step==Temp_step_Point)
            if (Max_1==Max)
                Max_1_Max=1;%说明在没降到Temperature_End时就已经退出循环了
                break;%如果两个采样点的值相同,那末认为已经找到最优解,退出循环
            else
                Temp_step=1;%如果不相同,继续降温Temperature=Temperature*Decline;
            end
        end
        %     for step=1:Step%在每个温度下平衡条件
        Max_2_Max=0;
        while ~(step>Sample_Sum_Step_End)
            Sample_step=Sample_step+1;
            if (Sample_step==Sample_step_Point)
                if (Max_2==Max)
                    Max_2_Max=1;%说明在没到(step>Sample_Sum_Step_End)时就已经退出循环了
                    break;%如果两个采样点的值相同,那末认为已经达到该温度下的平衡,退出while (step>Sample_Sum_Step_End)循环
                else
                    Sample_step=1;%如果不相同,继续采样
                end
            end
            [J_Xin,P]= wh_test(Parameter_Sum);
            D=J_Xin-J_Yuan;
            %         D=D*10^5;
            if J_Xin>=J_Yuan
                Max=J_Xin;
                J_Yuan=J_Xin;
                Para_Position(kkk,:)=P;
                if (Sample_step==1)
                    Max_2=Max;
                end%(Sample_step==1)
                
                if (Temp_step==1)
                    Max_1=Max;
                end%(Temp_step==1)           
            else
                Edge=rand(1);
                if exp(D/Temperature)>Edge
                    Max=J_Yuan;
                    
                    if (Sample_step==1)
                        Max_2=Max;
                    end%(Sample_step==1)
                    
                    if (Temp_step==1)
                        Max_1=Max;
                    end%if (Temp_step==1)
                end%---if exp(D/Temperature)>Edge
            end%-----if J_Xin>=J_Yuan    
            step=step+1;
        end%while (step>Sample_Sum)
        %     end%---Step   
        Temperature=Temperature*Decline;    
    end%---while ~(Temperature<1)
    MAX(kkk)=Max;end %kkk

Max=max(MAX);

            
figure(1);
title 'Finished';


⌨️ 快捷键说明

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