基于模拟退火的遗传算法

基于之前的模拟退火和遗传算法:
http://blog.csdn.net/qq_34861102/article/details/77806124

针对遗传算法和模拟退火算法的不足,这里给出了一个机遇模拟退火的遗传算法

原文:
http://blog.csdn.net/qq_34861102/article/details/77899555

clear
firstbestfit = 0;
popsize=20; %群体大小
chromlength=1; %字符串长度(个体长度)
pc = 0.6; %交叉概率
pm = 0.001; %变异概率
pop = initpop(popsize,chromlength); %随机产生初始群体
t=90; %初始温度 
tf=89; %结束温度 
a = 0.99; %温度下降比例 

while t>=tf
for i=1:2000 %2000为迭代次数
    i
    [objvalue] = calobjvalue(pop); %计算目标函数
    fitvalue = calfitvalue(objvalue); %计算群体中每个个体的适应度
    [newpop] = selection(pop,fitvalue); %复制
    [newpop] = crossover(newpop,pc); %交叉
    [newpop] = mutation(newpop,pc); %变异 
    [newobjvalue] = calobjvalue(newpop); %计算目标函数 
    [newobjvalue] = calfitvalue(newobjvalue); %计算群体中每个个体的适应度
    %是否替换旧个体
    for k = 1:popsize
            if fitvalue(k) > newobjvalue(k)
                newpop(k,:) = pop(k,:);
                else
                p = rand;
                if p <= exp((newobjvalue(k)-fitvalue(k))/t)
                    %newpop(k,:) = pop(k,:);
                end
        end
    end
    pop = newpop;
    [bestindividual,bestfit]=best(pop,fitvalue); %求出群体中适应度值最大的个体及其适应值
    %保留最好的个体
    if bestfit > firstbestfit
        firstbestfit = bestfit;
        aa = bestindividual;
        zz = 1/bestfit + 8;
    end
end
t = t*a;
end

这里因为例子的特殊性,可能导致实际结果没有遗传算法的结果良好

    原文作者:遗传算法
    原文地址: https://blog.csdn.net/qq_34861102/article/details/77899555
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞