Matlab 模拟退火算法模型代码

Posted gshang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Matlab 模拟退火算法模型代码相关的知识,希望对你有一定的参考价值。

function [best_solution,best_fit,iter] = mySa(solution,a,t0,tf,Markov)
% 模拟退化算法
% ===== 输入 ======%
% solution 初始解 
% a 温度衰减系数 0.99
% t0 初始温度 120
% tf 最终温度 1
% Markov 马尔科夫链长度 10000
% ====== 输出 =====%
% best_solution 最优解
% best_fit 最优解目标值
% iter 迭代次数
n = length(solution);
t = t0;
solution_new = solution;  % 初始解赋给最新的解
best_fit = Inf;   % 初始化最优适应度(最差的适应度)
fit = Inf;      %  初始化当前的适应度
best_solution = solution;  % 最优解
iter = 1;
% -----------------------迭代过程------------------------------------%
while t >= tf
    for j = 1:Markov
% -----------------------产生新解过程------------------------------------%
        %进行扰动,产生新的序列solution_new;
        if (rand < 0.7) % 概率小于0.7 采取交换两个数位置的方式产生新解
            ind1 = 0;  ind2 = 0;
            while(ind1 == ind2 && ind1 >= ind2)
                ind1 = ceil(rand*n);
                ind2 = ceil(rand*n);
            end
            temp = solution_new(ind1);
            solution_new(ind1) = solution_new(ind2);
            solution_new(ind2) = temp;
        else % 概率大于等于0.7 采取成组交换连续三个数位置的方式产生新解
            ind = zeros(3,1);
            L_ind = length(unique(ind));
            while (L_ind < 3)
                ind = ceil([rand*n rand*n rand*n]);
                L_ind = length(unique(ind));
            end
            ind0 = sort(ind);
            a1 = ind0(1);  b1 = ind0(2);  c1 = ind0(3);
            solution0 = solution_new;
            solution0(a1:a1+c1-b1-1) = solution_new(b1+1:c1);
            solution0(a1+c1-b1:c1) = solution_new(a1:b1);
            solution_new = solution0;
        end
% -----------------------计算适应度过程------------------------------------ %
        %计算适应度fit_new
        fit_new = myFitCal(solution_new,D);
% -----------------------解的更新过程------------------------------------ %
        if fit_new < fit 
            fit = fit_new;
            solution = solution_new;
            %对最优路线和距离更新
            if       fit_new < best_fit
                iter = iter + 1;
                best_fit = fit_new;
                best_solution = solution_new;
            end
        else
            if rand < exp(-(fit_new-fit)/t)
                solution = solution_new;
                fit = fit_new;
            end
        end
        solution_new = solution;
    end
    t = t*a; %降温
end

以上是关于Matlab 模拟退火算法模型代码的主要内容,如果未能解决你的问题,请参考以下文章

遗传算法混合模拟退火算法求解带约束的流水线调度问题matlab代码

matlab最短路径问题(旅行商模型)—模拟退火算法禁忌搜索算法解决中国省会间最短路径问题

MATLAB教程案例13基于SA模拟退火优化算法的函数极值计算matlab仿真及其他应用

模拟退火算法通俗讲解

Python使用模拟退火(Simulated Annealing)算法构建优化器获取机器学习模型最优超参数组合(hyperparameter)实战+代码

TWVRP基于matlab遗传和模拟退火算法求解带时间窗的取送货问题含Matlab源码 1139期