您现在的位置:首页 >> 智能优化 >> 内容

基于GWO灰狼优化的生产线工件工序调度优化matlab仿真,仿真输出优化收敛曲线和工序调度甘特图

时间:2023/3/20 23:13:59 点击:

  核心提示:A584,包括程序操作录像...

1.完整项目描述和程序获取

>面包多安全交易平台:https://mbd.pub/o/bread/ZJaalJ1u

>如果链接失效,可以直接打开本站店铺搜索相关店铺:

点击店铺

>如果链接失效,程序调试报错或者项目合作可以加微信或者QQ联系。

2.部分仿真图预览



3.算法概述

        灰狼优化算法(GWO),灵感来自于灰狼.GWO算法模拟了自然界灰狼的领导层级和狩猎机制.四种类型的灰狼,如 α,β,δ,w 被用来模拟领导阶层。此外,还实现了狩猎的三个主要步骤:寻找猎物、包围猎物和攻击猎物。

4.部分源码

function [newp,newTN] = GWO(fit,p,TN,N,m,n,s,a)

newp = cell(N,1);

newTN = cell(N,1);

fit_sort = sort(fit);

fit_1 = fit_sort(1);      

fit_2 = fit_sort(1);

fit_3 = fit_sort(1);

pos = find(fit == fit_1);

 if length(pos)>=3;     

    p1 = p{pos(1)};

    p2 = p{pos(2)};

    p3 = p{pos(3)};

 elseif length(pos) == 2

     p1 = p{pos(1)};

     p2 = p{pos(2)};

     pos1 = find(fit==fit_3);

     p3 = p{pos1(1)};

 elseif length(pos) == 1 && length(find(fit ==fit_2))>=2

     p1 = p{pos(1)};

     pos2 = find(fit ==fit_2);

     p2 = p{pos2(1)};

     p3 = p{pos2(2)};

 elseif length(pos) == 1 && length(find(fit ==fit_2))==1

     p1 = p{pos(1)};

     p2 = p{find(fit ==fit_2)};

     pos3 = find(fit == fit_3);

     p3 = p{pos3(1)};

 end

 

for i=1:N         

     p5=p1;        %为防止p1,p2,p3的数值发生变化,赋值给p5,p6,p7

     p6=p2;

     p7=p3;

    if i == 1     %将前三个最好的解放入下一代数的前三个解,保证最优解不会变坏

        newp{1} = p5;   

    elseif i==2

        newp{2}= p6;

    elseif i==3

        newp{3} = p7;

    elseif i>3

        p4 = p{i-3};   %将其余的灰狼取出

        for ii=1:m     %进行位置信息转换

            for j =1:n

                if length(find(s{ii,j}(1,:)==p5(ii,j)))>1

                    p5(ii,j) = 0;

                else

                    p5(ii,j) = find(s{ii,j}(1,:)==p5(ii,j));

                end

                if length(find(s{ii,j}(1,:)==p6(ii,j)))>1

                    p6(ii,j) = 0;

                else

                    p6(ii,j) = find(s{ii,j}(1,:)==p6(ii,j));

                end

                if length(find(s{ii,j}(1,:)==p7(ii,j)))>1

                    p7(ii,j) = 0;

                else

                    p7(ii,j) = find(s{ii,j}(1,:)==p7(ii,j));

                end

                if length(find(s{ii,j}(1,:)==p4(ii,j)))>1

                    p4(ii,j) = 0;

                else

                    p4(ii,j) = find(s{ii,j}(1,:)==p4(ii,j));

                end

            end

        end

        p4 = ceil((p5-(2*a*rand-a).*((2*rand).*p5-p4)+p6-(2*a*rand-a).*((2*rand).*p6-p4)+p7-(2*a*rand-a).*((2*rand).*p7-p4))/3);

        %灰狼位置更新公式

        for ii = 1:m         %将位置信息转换回机器号

            for j = 1:n

                if length(s{ii,j}(1,:))>p4(ii,j) || length(s{ii,j}(1,:))<p4(ii,j)

                    p4(ii,j) = s{ii,j}(1,ceil(rand*length(s{ii,j}(1,:))));

                else

                    p4(ii,j) = s{ii,j}(1,p4(ii,j));

                end

            end

        end

        newp{i} = p4;

    end

    for ii = 1:m     %对机器号对应的时间进行更新

        for j= 1:n

            pos = find(s{ii,j}(1,:)==newp{i}(ii,j));

            p8(ii,j) = s{ii,j}(2,pos(1));

        end

    end

    newTN{i} = p8;

end

A584

作者:我爱C编程 来源:我爱C编程
本站最新成功开发工程项目案例
相关评论
发表我的评论
  • 大名:
  • 内容:
本类固顶
  • 没有
  • FPGA/MATLAB商业/科研类项目合作(www.store718.com) © 2025 版权所有 All Rights Reserved.
  • Email:1480526168@qq.com 站长QQ: 1480526168