优化求解基于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期