您现在的位置:首页 >> ★免费资源 >> 各类算法程序 >> 内容

Matlab 车间动态调度 PSO微粒群算法程序

时间:2017-10-16 3:30:38 点击:

  核心提示:Matlab 车间动态调度 PSO微粒群算法程序...

clc
clear
%=========数据录入,参数调整=================
swarminitNum=20;%初始生成的粒子数;

MM=[1 2 3 4 5 6
    6 6 6 6 6 6];%工件、工序数量矩阵,MM第一行表示工件,第二行表示每个工件的工序数;

machineNum=6;   %加工机器数;

initT=1000;          %模拟退火初始温度;

gen=500;        %循环迭代数;

w1=0.35;          %变异率;

changeNum=3;     %变异变换对数;

restrictmatrixM=[3     1     2     4     6     5
                 2     3     5     6     1     4
                 3     4     6     1     2     5
                 2     1     3     4     5     6
                 3     2     5     6     1     4
                 2     4     6     1     5     3];%job-shop机器约束矩阵;
            
restrictmatrixT=[1     3     6    7      3     6
                 8     5     10   10     10    4
                 5     4     8     9     1     7
                 5     5     5     3     8     9
                 9     3     5     4     3     1
                 3     3     9     10    4     1];%job-shop时间约束矩阵;
            
%===============PSO算法==========================
swarminit=cell(1,swarminitNum);
swarminitLong=sum(MM(2,:));          %所有工序数即粒子长度;
for i=1:swarminitNum,
    swarminit{i}=randomparticle(MM) ;
end                                  %随机生成初始粒子群体
[popu,s] = size(swarminit);
trace = ones(1,gen);
trace(1) = 10000; % 初始全局最佳适应度设为足够大
for i = 1:s,
    bestfit(i) = 10000; % 初始个体历史最佳适应度设为足够大
end
bestpar = swarminit; % 个体历史最佳粒子初始化
for u=1:swarminitNum,
    fitlist=[0];
end
T=initT;
for step = 1:gen,
    for q=1:swarminitNum,
            fitlist(q)=timedecode(swarminit{q},restrictmatrixM,restrictmatrixT,machineNum)  ;    
    end              % 计算当前粒子群每个粒子的适应度
    [minval,sub] = min(fitlist); % 求得这代粒子的适应度最小值及其下标
    if(trace(step) > minval)  ,
         trace(step) = minval;
         bestparticle = swarminit{sub};
    end
    if(step~= gen) ,
        trace(step + 1) = trace(step); % 全局最佳适应度及最佳粒子调整
    end
    T=0.97*T;
    for i = 1:s,
        tt=fitlist(i)-bestfit(i);
        if(tt<0)|(min(1,exp(-tt/T))>=rand(1,1));
           bestfit(i) = fitlist(i);
           bestpar{i} = swarminit{i};
       end
   end % 个体历史最佳粒子及适应度调整 ;
   for j = 1:s,
       if rand(1,1)<w1,
          bestparticle1=bianyi(bestparticle,changeNum,swarminitLong);
       else
           bestparticle1=bestparticle;
       end               %粒子变异;
       l1=1000;
       l2=1;
       l3=1000;
       l4=1;
       while (l1-l2)>swarminitLong,
           m=fix(swarminitLong*rand(1,1));
           n=fix(swarminitLong*rand(1,1));
           l1=max(m,n)+1;
           l2=min(m,n)+1;
       end
       while (l3-l4)>swarminitLong,
           m1=fix(swarminitLong*rand(1,1));
           n1=fix(swarminitLong*rand(1,1));
           l3=max(m1,n1)+1;
           l4=min(m1,n1)+1;
       end
       swarminit{j}=cross(bestpar{j},swarminit{j},l2,l1);
       swarminit{j}=cross(bestparticle1,swarminit{j},l4,l3);%粒子交叉;
   end
end
[a,b,c]=timedecode2(bestparticle,restrictmatrixM,restrictmatrixT,machineNum);
disp(['优化目标: 最大完工时间'])
disp(['粒子数:' int2str(swarminitNum)  '   循环代数:' int2str(gen)])
disp(['变异率:' num2str(w1)  '   变异变换对数:' int2str(changeNum)])
disp(['模拟退火初始值:' int2str(initT)  '  模拟退火终值:' int2str(T)])
disp(['迭代循环值:' int2str(trace)])
disp(['最小平均流动时间:' int2str(a)  '   最大完工时间:'  int2str(b)  '   最小间隙时间:' int2str(c) ])
disp(['最优粒子' int2str(bestparticle)])
pause
gant(bestparticle,swarminitLong,restrictmatrixM,restrictmatrixT,b)

作者:Matlab 车间动态调度 PSO微粒群算法程序 来源:Matlab 车间动态调度 PSO微粒群算法程序
  • 您是如何找到本站的?
  • 百度搜索
  • Google搜索
  • 查阅资料过程中
  • 论坛发现
  • 百度贴吧发现
  • 朋友介绍
本站最新成功开发工程项目案例
相关文章
  • 没有相关文章
相关评论
发表我的评论
  • 大名:
  • 内容:
  • MATLAB代做,MATLAB专业代做,MATLAB淘宝代做(www.hslogic.com) © 2018 版权所有 All Rights Reserved.
  • Email:highspeed_logic@163.com 站长QQ: 1224848052

    专业代做/代写/承接、MATLAB、SIMULINK、FPGA项目、博士/硕士/本科毕业设计、课题设计、论文,毕业论文,Coursework、Eassy、Assignment