• 大小: 8KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-03
  • 语言: Matlab
  • 标签: matlab  遗传算法  JSP  

资源简介

用matlab程序解决作业车间调度问题的小例子,程序可运行,可画出进化图与甘特图。内附算例与程序说明。

资源截图

代码片段和文件信息

function [ ret ] = Cross( pxchromlenchromn )
%本函数完成交叉操作
%px input:交叉概率
%chrom input:染色体群
%sizepop input:种群规模
%lenchrom input:染色体长度
%ret output:交叉后的染色体
sizepop=size(chrom1);
i=1;
randjob=4; %变动工件数
while i<=sizepop   %是否进行交叉操作由交叉概率决定(continue控制)
    %随机选择两个染色体进行交叉
    temp=randperm(sizepop);
    index=temp(1:2);
    s1=chrom(index(1):);
    s2=chrom(index(2):);
    %初始化中间片段
    s11=zeros(1n*2);
    s22=zeros(1n*2);
    index=zeros(2n*2);
    %交叉概率决定是否交叉
    pick=rand;
    while pick==0
        pick=rand;
    end
    id1=1;
    id2=1;
    if pick        %随机选择两个工件
        tempjob=randperm(n);
        job1=tempjob(11);
        job2=tempjob(12);
        job3=tempjob(13);
        job4=tempjob(14);
        %job5=tempjob(15);
        for j=1:lenchrom
            if s1(1j)==job1
                index(1id1)=j;
                s11(1id1)=job1;
                id1=id1+1;    
            end
            if s1(1j)==job2
                index(1id1)=j;
                s11(1id1)=job2;
                id1=id1+1;
            end
            if s1(1j)==job3
                 index(1id1)=j;
                 s11(1id1)=job3;
                 id1=id1+1;
            end     
            if s1(1j)==job4
                 index(1id1)=j;
                 s11(1id1)=job4;
                 id1=id1+1;
            end
           
        end
        for j=1:lenchrom
            if s2(1j)==job1
                index(2id2)=j;
                s22(1id2)=job1;
                id2=id2+1;           
            end
            if s2(1j)==job2
                index(2id2)=j;
                s22(1id2)=job2;
                id2=id2+1;
            end
            if s2(1j)==job3
                index(2id2)=j;
                s22(1id2)=job3;
                id2=id2+1;
            end           
            if s2(1j)==job4
                index(2id2)=j;
                s22(1id2)=job4;
                id2=id2+1;
            end
            
        end        
        %交叉后的第一条染色体
        for j=1:(randjob*n)
            id1=index(1j);          
            s1(1id1)=s22(1j);
        end
        %交叉后的第二条染色体
        for j=1:(randjob*n)
            id2=index(2j);
            s2(1id2)=s11(1j);
        end;
    end
    if i==sizepop   %调整ret染色体数目,控制为奇数
        ret(i:)=s1;
    else
        ret(i:)=s1;
        ret((i+1):)=s2;   
    end
    i=i+2;
end
end


 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        2617  2017-12-24 15:59  GA_JSP\Cross.m
     文件        5399  2018-05-25 23:06  GA_JSP\gant.m
     文件        3297  2018-06-04 20:09  GA_JSP\main.m
     文件        4251  2018-06-04 20:01  GA_JSP\makespan.m
     文件         738  2018-01-15 14:17  GA_JSP\Mutation.m
     文件         382  2018-06-04 20:04  GA_JSP\remain.m
     文件        1142  2018-06-04 20:00  GA_JSP\Select.m
     文件         422  2018-06-04 19:59  GA_JSP\time.m
     文件         233  2018-06-04 20:14  GA_JSP\程序说明.txt
     文件        1019  2017-12-21 13:05  GA_JSP\算例.txt

评论

共有 条评论