【生产调度】基于双种群遗传算法实现产品自动排序附matlab代码

本文提出了一种双种群遗传算法来解决产品自动排序的车间调度问题,旨在克服传统方法可能陷入局部最优和效率低下的问题。算法通过两个种群协作,一个种群负责搜索可能的最优解区域,另一个种群在此区域内寻找最佳解。仿真实验验证了该算法的有效性和高效率。算法中使用了潜在增量方法进行迭代优化,以确定最佳的工位分配。

1 简介

产品自动排序问题是个NP-hard问题,针对该问题的求解过程中存在容易陷入局部最优、效率不高的不足,提出了双种群遗传算法解决车间调度问题。该算法用两个种群的分工协作来解决上述的不足:一个种群负责探索可能存在最优值的区域;另一种群是在第一种群所探索区域中寻找最优解。通过仿真实验表明该算法是可行的、高效的。

2 部分代码

​%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Function: Decoding.m % Description: 译码函数 % Input:   Population        % 待译码种群 %     Time         % 各工位所需时间 %     Num_Work        % 装配线工位数 % Output:  dec_result        % 译码结果 % Return: None % Referred:None % Variable:  RESULT        % 加工顺序矩阵 %      RESULT_Time      % 加工时间矩阵 %      SUM         % 加工总时间 %      AVE         % 平均加工时间 %      AVE1        % 最小工位节拍(理论) %      WORKSPACE       % 增量计算前工位安排 %     WORKSPACE1       % 增量计算后工位安排 %     c1         % 改进前结果 %     c2         % 改进后结果 % Others: 利用潜在增量算法实现 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function  [dec_result]=Decoding(Population,Time,Num_Work) RESULT=Population; RESULT_Time=Time(RESULT);      % 将加工顺序转换为加工时间  [a,b]=size(RESULT_Time); %RESULT_Time是100行,66列的矩阵,a=100,b=66.SUM=sum(Time);         % 所有工序总加工时间 AVE=SUM/Num_Work;         % 每个工位平均加工时间 ,理论生产节拍CT'AVE1=max(AVE,max(Time));      % 最小工位节拍(理论) .去每个工位最大的时间和工序最大时间的最大者,但是一般很少有单个作业单元的值大于工位平均加工时间的吧。所以这函数AVE for k=1:1:a     AVE1=max(AVE,max(Time));      RESULT_Time1=[RESULT_Time(k,:) 0];      % 为了便于迭代,随着迭代,在RESULT_Time每一行的末尾补0     c2=0;     c1=SUM;      %C1为工序加总时间% 利用潜在增量方法迭代     while c2<c1         % 如果存在潜在增量则进行迭代         j=1;         WORKSPACE=zeros(1,b);   %workspce为1行b,即1行66列的列。        for i=1:1:b        % 将加工单元分配到工作站             if WORKSPACE(j)+RESULT_Time1(i)>AVE1    %RESULT_Time1(i)没有问题,因为RESULT_Time(k,:) 0,就是一行行得                c3(j)=i; %这啥东西                j=j+1;             end             WORKSPACE(j)=WORKSPACE(j)+RESULT_Time1(i);         end         WORKSPACE(Num_Work)=SUM-sum(WORKSPACE(1:Num_Work-1)); %最后一个工位的时间等于所有工位时间减去前几个工位总时间    % 计算潜在增量 ,,这个要怎么理解??        WORKSPACE1=WORKSPACE; %把workspce的工位及排序赋予workspaces        i=1:1:Num_Work-1;   %i等于 1到工位数 ,这里是不是要用一个for循环???        WORKSPACE1(i)=WORKSPACE1(i)+RESULT_Time1(c3(i));  % 计算潜在增量,以一个作业的时间值作为增量        c1=max(WORKSPACE(1:Num_Work));   % 改进前结果 ,workspace。。CT        c2=min(WORKSPACE1(1:Num_Work-1));  % 改进后结果 ,workspace1。CT’        AVE1=min(c1,c2);   %取c1,c2二者中较小的那个数值,作为生产线节拍    end     dec_result(k,:)=WORKSPACE(1:Num_Work);  % 译码结果 ,k=1时,的工位分布。k=2时的工位分布。。。直到k=100时的工位分布。endend

3 仿真结果

4 参考文献

[1]张茂堂等. "双种群遗传算法解决车间调度问题." 湖南农机 (2011).

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

matlab科研助手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值