基于之前的模拟退火和遗传算法:
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
这里因为例子的特殊性,可能导致实际结果没有遗传算法的结果良好