1 简介 产品自动排序问题是个NP-hard问题,针对该问题的求解过程中存在容易陷入局部最优、效率不高的不足,提出了双种群遗传算法解决车间调度问题。该算法用两个种群的分工协作来解
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时的工位分布。
end
end
3 仿真结果
4 参考文献
[1]张茂堂等. "双种群遗传算法解决车间调度问题." 湖南农机 (2011).