优化求解基于matlab粒子群与遗传算法混合算法求解切削参数优化问题(以成本和碳排放量为目标函数)含Matlab源码 1619期

Posted 紫极神光

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了优化求解基于matlab粒子群与遗传算法混合算法求解切削参数优化问题(以成本和碳排放量为目标函数)含Matlab源码 1619期相关的知识,希望对你有一定的参考价值。

一、获取代码方式

获取代码方式1:
完整代码已上传我的资源:【单目标优化求解】基于matlab粒子群与遗传算法混合算法求解切削参数优化问题(以成本和碳排放量为目标函数)【含Matlab源码 1619期】

获取代码方式2:
通过订阅紫极神光博客付费专栏,凭支付凭证,私信博主,可获得此代码。

备注:
订阅紫极神光博客付费专栏,可免费获得1份代码(有效期为订阅日起,三天内有效);

二、遗传算法简介

1 引言


2 遗传算法理论
2.1 遗传算法的生物学基础


2.2 遗传算法的理论基础




2.3 遗传算法的基本概念






2.4 标准的遗传算法


2.5 遗传算法的特点


2.6 遗传算法的改进方向

3 遗传算法流程



4 关键参数说明

三、部分源代码

%计算机床在进行切削时的碳排放量
%遗传算法子程序
%a:切削速度,fz:铣刀每齿进给量
%Name:Cpaifang.m
popsize = 500;
a = 78 + 122 * rand(popsize,1);%a(切削速度)的染色体基因个数[78,200]
fz = 8 + 12 * rand(popsize,1);%fz(每齿进给量)的染色体基因个数,在原有机床扩大了100[8,20]
gp = 1 + 14 * rand(popsize,1);%gp(铣削深度)的染色体基因个数[1,15]
ge = 40 + 180 * rand(popsize,1);%ge(铣削宽度)的染色体基因个数[40,220]
chromlength1 = 8;%a(切削速度)的染色体基因个数[78,200]
chromlength2 = 5;%fz(每齿进给量)的染色体基因个数,在原有机床扩大了100[8,20]
chromlength3 = 4;%gp(铣削深度)的染色体基因个数[1,15]
chromlength4 = 8;%ge(铣削宽度)的染色体基因个数[40,220]
chromlength = chromlength1 + chromlength2 + chromlength3 + chromlength4;
pop = initpop1(a,fz,gp,ge,popsize,chromlength1,chromlength2,chromlength3,chromlength4,chromlength);%产生初始种群
%[newpop] = liselection(popsize,chromlength,pop,chromlength1,chromlength2,chromlength3,chromlength4);
pop5=[];
for i = 1 : popsize
    [objvalue] = calobjvalue1(pop);%计算目标函数
    [fitvalue] = calfitvalue1(objvalue);%计算个体适应度值
    [newpop] = selection1(pop,fitvalue);%选择
    %[newpop1] = liselection(popsize,chromlength,newpop,chromlength1,chromlength2,chromlength3,chromlength4);%粒子群算法
    [newpop1] = crossover1(newpop,popsize,chromlength1,chromlength2,chromlength3,chromlength4,chromlength);%交叉
    [newpop2] = mutation1(newpop1,popsize,chromlength1,chromlength2,chromlength3,chromlength4,chromlength);%变异
    [newobjvalue] = newcalobjvalue1(newpop2);%计算最新代目标函数
    [newfitvalue] = newcalfitvalue1(newobjvalue);%计算新种群适应度值
    [bestindividual,bestfit] = best(newpop2,newfitvalue);%求出群体中适应值最大的个体及其适应值
    y(i) = bestfit;%储存最优个体适应值
    pop5(i,:) = bestindividual;%储存最优个体
    n(i) = i;%记录最优代位置
    %解码
%     x1(i) = 0 + decodechrom(pop5,1,8);
%     x2(i) = decodechrom(pop5,9,5);
%     x3(i) = decodechrom(pop5,14,4);
%     x4(i) = decodechrom(pop5,18,8);
    pop = newpop2;
end

C1 = 1.5;%学习因子
C2 = 1.5;%学习因子
W = 0.8;%惯性权重
Vmax = 10;%最大飞行速度
Vmin = -10;%最小飞行速度
amax = max(decodechrom(pop5,1,8));
amin = min(decodechrom(pop5,1,8));
fzmax = max(decodechrom(pop5,9,5));
fzmin = min(decodechrom(pop5,9,5)); 
gpmax = max(decodechrom(pop5,14,4));
gpmin = min(decodechrom(pop5,14,4));
gemax = max(decodechrom(pop5,18,8));
gemin = min(decodechrom(pop5,18,8));
popv = rand(popsize,4) * (Vmax-Vmin)+Vmin;
popx = [decodechrom(pop5,1,8),decodechrom(pop5,9,5),decodechrom(pop5,14,4),decodechrom(pop5,18,8)];%满足参数范围
index = find(popx(:,1)>amax | popx(:,1)<amin);
popx(index,1) = rand * (amax - amin) + amin;
index = find(popx(:,2)>fzmax | popx(:,2)<fzmin);
popx(index,2) = rand * (fzmax-fzmin) + fzmin;
index = find(popx(:,3)>gpmax | popx(:,3)<gpmin);
popx(index,3) = rand * (gpmax-gpmin) + gpmin;
index = find(popx(:,4)>gemax | popx(:,4)<gemin);
popx(index,4) = rand * (gemax-gemin) + gemin;
pBest= popx;
pBestValue = calobjvalue12(pBest);
[gBestValue,index] = min(calobjvalue12(popx));
gBest = popx(index,:);%问题在这
for t = 1 : 1000
    for k = 1:popsize
        %更新个体的位置和速度
        popv(k,:) = W * popv(k,:)+C1 * rand *(pBest(k,:)-popx(k,:))+C2 * rand * (gBest - popx(k,:));
        popx(k,:) = popx(k,:) + popv(k,:);
        %边界处理,超过定义范围就取改范围极值
        %p1(i,:) = round(newpop(i,:));
        index = find(popv(k,:)>Vmax | popv(k,:)<Vmin);
        popv(k,index) = rand * (Vmax - Vmin) + Vmin;
        if popx(k,1)>amax
            popx(k,1) = rand * (amax-amin)+amin;
        end
        if popx(k,1)<=amin
        %index = find(popx(i,1)<=amin);
            popx(k,1) = rand * (amax-amin)+amin;
        end
        if popx(k,2)>fzmax
            popx(k,2) = rand * (fzmax-fzmin) + fzmin;
        end
        if popx(k,2)<fzmin
            popx(k,2) = rand * (fzmax-fzmin) + fzmin;
        end
        %index = find(popx(i,2)>20);
        if popx(k,3)>gpmax
            popx(k,3) = rand * (gpmax-gpmin) + gpmin;
        end
        if popx(k,3)<gpmin
            popx(k,3) = rand * (gpmax-gpmin) + gpmin;
        end
        if popx(k,4)>gemax
            popx(k,4) = rand * (gemax-gemin) + gemin;
        end
        if popx(k,4)<gemin
            popx(k,4) = rand * (gemax-gemin) + gemin;
        end
        %更新粒子历史最优
        if calobjvalue12(popx(k,:))<pBestValue(k)
            pBest(k,:) = popx(k,:);
            pBestValue(k) = calobjvalue12(popx(k,:));
        end
       if pBestValue(k) < gBestValue
           gBest = pBest(k,:);
           gBestValue = pBestValue(k);
       end
    end
    tBest(t) = calobjvalue12(gBest);
    pop6(t,:) = gBest; 
    zx(t) = t;
end
    
%%绘图
figure(1)%最优点变化趋势图
i = 1 : 1000;
plot(tBest(i),'-b*')
xlabel('迭代次数T');
ylabel('最优个体适应值(Tw+C)/mm3');
title('最优点变化趋势');
legend('最优点');
grid on
[z index] = min(tBest);%计算最小值及其位置
PO = zx(index) %最优个体的位置
X = pop6(index,1)
Y = pop6(index,2)
Z = pop6(index,3)
R = pop6(index,4)
F = z    




四、运行结果


五、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
《智能优化算法及其MATLAB实例(第2版)》包子阳 余继周 杨杉著 电子工业出版社

以上是关于优化求解基于matlab粒子群与遗传算法混合算法求解切削参数优化问题(以成本和碳排放量为目标函数)含Matlab源码 1619期的主要内容,如果未能解决你的问题,请参考以下文章

单目标优化求解基于matlab粒子群混沌混合蝴蝶优化算法求解最优目标问题(HPSOBOA)含Matlab源码 1538期

基于多种群机制的PSO算法(优化与探索三 *混合种群思想优化多种群与广义PSO求解JSP)

多式联运基于帝国企鹅算法+遗传算法+粒子群算法求解不确定多式联运路径优化问题含Matlab源码 2073期

多式联运基于帝国企鹅算法+遗传算法+粒子群算法求解不确定多式联运路径优化问题含Matlab源码 2073期

MTSP基于matlab遗传和粒子群算法求解多旅行商问题含Matlab源码 1156期

优化调度基于matlab多目标粒子群算法求解风电光伏储能电网发电与需求响应调度优化问题含Matlab源码 239期