1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 基于候鸟优化算法(MBO)的柔性车间调度优化研究(Matlab代码实现)

基于候鸟优化算法(MBO)的柔性车间调度优化研究(Matlab代码实现)

时间:2020-01-31 14:28:33

相关推荐

基于候鸟优化算法(MBO)的柔性车间调度优化研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

目录

📋1 概述

📝2 运行结果

📃3 参考文献

📋4 Matlab代码实现

📋1 概述

在FJSP-LS求解方法上,现有研究主要采用元启发式算法,如遗传算法、差分算法、禁忌搜索[1,8J和粒子群算法[)等,大多侧重于调度方案的优化,对批次划分方案的制定缺乏深入研究。候鸟优化(Migrating Birds Optimization,MBO)算法是DUMAN等于首先提出的自然启发的元启发式算法,具有参数少、易于理解、结构简单等优点,成功用于多种优化问题,尤其是求解二次分配问题时,该算法获得了比模拟退火算法、禁忌搜索算法和指导的进化模拟退火算法质量更高的解。同时,越来越多的学者尝试将MBO运用到生产线调度上,同样获得了高质量的解,本文基于候鸟优化算法(MBO)的柔性车间调度优化研究。

📝2 运行结果

%% 巡回阶段

for i=1:G

%% 领飞鸟进化

[leader,Z_leader,share,Z_share]=bird_evolution(leader,Z_leader,[],[],...

N_size,S_size,total_op_num,num_machine,e,num_job,num_op);

%% 跟飞鸟进化

% 初始化左右队列的共享解集

share_left=share;

Z_share_left=Z_share;

share_right=share;

Z_share_right=Z_share;

for j=1:sp

% 左队列

[lefts(j,:),Z_left(j),share_left,Z_share_left]=bird_evolution(lefts(j,:),Z_left(j),share_left,Z_share_left,...

N_size-S_size,S_size,total_op_num,num_machine,e,num_job,num_op);

% 右队列

[rights(j,:),Z_right(j),share_right,Z_share_right]=bird_evolution(rights(j,:),Z_right(j),share_right,Z_share_right,...

N_size-S_size,S_size,total_op_num,num_machine,e,num_job,num_op);

end

%% 竞争机制2:队间交叉

% 随机产生G2对位置相同的个体

ind=randperm(sp,G2);

[rights(ind,:),Z_right(ind),lefts(ind,:),Z_left(ind)]= crossover(lefts(ind,:),rights(ind,:),...

Z_left(ind),Z_right(ind),total_op_num,num_machine,e,num_job,num_op);

end

%% 竞争机制1:队内竞争

ind=randperm(sp,G1);

% 左队列

[~,ind1]=sort(Z_left(ind));

lefts(ind,:)=lefts(ind(ind1),:);

Z_left(ind)=Z_left(ind(ind1));

% 右队列

[~,ind2]=sort(Z_right(ind));

rights(ind,:)=rights(ind(ind2),:);

Z_right(ind)=Z_right(ind(ind2));

%% 领飞鸟替换

if rand<0.5

% 选择左队列首只跟飞鸟

[leader,Z_leader,lefts,Z_left]=update_leader(leader,Z_leader,lefts,Z_left);

else

% 选择右队列首只跟飞鸟

[leader,Z_leader,rights,Z_right]=update_leader(leader,Z_leader,rights,Z_right);

end

%% 记录相关数据

% 记录每代的最优适应度与平均适应度

Z=[Z_leader,Z_left,Z_right];

[val,ind]=min(Z);

trace(1,gen)=val;

trace(2,gen)=mean(Z);

% 更新全局最优适应度

if gen==1 || MinVal>trace(1,gen)

MinVal=trace(1,gen);

end

end

%% ============================输出结果=============================

%% 输出最优适应度

fprintf('最优适应度:'),disp(MinVal)

%% 绘制最优适应度与平均适应度的迭代曲线图

figure(1)

plot(trace(1,:));

hold on;

plot(trace(2,:),'-.');grid;

legend('解的变化','种群均值的变化');

%% 绘制全局最优解的甘特图

[Z,~,~,machine_time,Pvals]=fitness(leader,num_machine,e,num_job,num_op);

Pval1=Pvals{1,1};

figure(2);

for i=1:total_op_num

mText=leader(total_op_num+i);

b=leader(i);

x1=Pval1(1,i);

x2=Pval1(2,i);

y1=mText-0.2;

y2=mText;

hold on;

fill([x1,x2,x2,x1],[y1,y1,y2,y2],[1-1/b,1/b,b/num_job]);

text((x1+x2)/2,mText-0.1,num2str(b));

end

📃3 参考文献

[1]刘雪红,段程,王磊.基于改进候鸟算法的柔性作业车间分批调度问题[J].计算机集成制造系统,,27(11):3185-3195.DOI:10.13196/j.cims..11.012.

[2]任彩乐. 基于候鸟优化算法的混合流水车间调度问题研究[D].华中科技大学,.

[3]刘雪红,段程,王磊.基于改进候鸟算法的柔性作业车间分批调度问题[J].计算机集成制造系统,,27(11):3185-3195.DOI:10.13196/j.cims..11.012.

📋4 Matlab代码实现

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。