1 简介

由于市场经济环境、国家政策、消费者多元化需求等多方面作用,制造型企业在更为复杂的市场背景下面对着更加激烈的竞争压力。随着人们生活水平逐渐提高和多元化消费需求的急速增长,依靠传统单一规模化生产的模式已经无法满足当今纷繁复杂的市场需求,选择更加柔性的生产制造模式不仅可以实现企业由粗放型到开放型制造模式的转型,而且也可以提高企业产品在不同消费水平的市场占有率。使用混流生产生产线来替换原来单一粗放的批量生产模式是一种新的思路。随着企业对产品个性化、多样化和特色化的分类制造的要求更高,怎样设计和应用混流生产线成为了企业面临的一个现实应用的难题。企业生产的产品直接面向市场,而市场又是变动多端的。当前,许多曾经依靠大规模批量生产的企业面对这样的市场形势也开始寻求新的生产模式来实现小批量、多品种的市场需求,所以如何实现以市场为导向,实行更加柔性的生产装配方式,需要企业进行科学分析决策。依靠现有的企业资源,创新现有的生产模式,采用多品种、小批量的新型混流生产线成为企业更加期待的生产模式,也是企业突破现有企业发展瓶颈的新思路。大规模批量生产是在批量生产的制造成本优势的基础上发展而来,而使用多品种混流生产则可以柔性、快速的实现对市场需求的把握,从而能够让企业在行业内占领先锋。上世纪 60 年代起由日本丰田提出的准时生产模式就是一种典型的创新生产模式,它的主旨就是通过实现生产系统内的各个阶段的供应和消耗的“准时”,同时以精益生产为核心对生产系统进行控制从而能够达到提高生产效率,降低生产成本和生产周期,通过保证生产线内生产物料等供需“准时”来实现零库存生产模式。混流装配线正是在 JIT 生产的背景下提出的,通过混流生产线装配实现多品种柔性生产。而在企业生产系统中产品的装配往往是生产系统当中工艺流程最复杂的一部分,从企业生产管理过程中也可以看到装配线在制造型企业中是生产管理的一个核心内容。制造型企业当中如何对装配生产品投产排序是混流装配线研究的一个重要内容,也是优化混流生产线的基本方法和路径。生产制造企业是根据企业生产技术部门设计好的工艺流程进行加工制造,混流生产线不过是把类似的不同种类产品集中在一条生产装配线上进行混合生产,通过这种生产模式可以根据不同客户需求实现灵活的生产。混流生产线上生产产品类型的多样性就会造成各种不同类型产品在生产装配中资源消耗(零部件消耗、人力配置等)出现不均匀的波动。于是,怎样充分利用混流生产装配线的同时,又能更加快速、低消耗的生产就成为人们需要面对的重要问题。根据以往专家学者的研究和总结,在研究混流生产装配线时一般从两个方面进行研究分析方面,混流生产装配线设计时怎样保证生产线平衡。另一方面则是在现有的应达到基本平衡的混流生产线上,选择怎样的生产装配投产顺序的问题。对于生产线平衡问题,其基本内容就是通过科学合理的确定生产系统内的生产工序、生产节拍、生产物料等元素,从而可以实现生产线负荷均衡的目的。而生产线的投产排序问题研究的通过对产品类型、生产数量和加工次序进行合理的排序,以最优的顺序进行生产来实现生产成本最小、生产线均衡、生产线柔性高。现阶段,面对多元化和不稳定的消费市场,混流生产已经成为企业越来越重视的生产模式。越来越多的企业也开始关注混流生产线的平衡和排序问题。相比混流生产线平衡问题,如何确定排序问题是更为重要的问题之一。

遗传算法最初由美国学者 Holland[48]提出,该算法建立在自然界“适者生存”的遗传理论和物种进化学说基础之上。通过相对应的法则和流程进行全局优化和搜索。遗传算法的基本思想是:生物在同类物种的群体当中产生初始的个体,然后这些初识的个体之间进行“生者生存”的竞争、淘汰、进化、遗传、变异,通过这几种路径能够适应生存环境的就保留了下来,而不能适应的弱者则被淘汰,使算法朝着最优化目标的方向前进,最终就可以得到适应度较强的一个群体,最后在这些群体中可以选出最优的个体。

2 部分代码

%————————主函数——————————
% Function: Program.m
% Description: 利用遗传算法实现产品自动排序
% Input: None
% Output: None
% Return: None
% Referred:SHL.m
% SHL模型
%     Ini_Pop       % 初始种群生成函数
%     Decoding.m       % 译码函数
%     Fitness.m       % 适应度函数
%     Selection.m     % 选择函数
%     Crossover.m     % 交叉函数
%     Mutation.m     % 变异函数
%     Exchange.m     % 种群间基因交换函数
%     Draw.m       % 绘图函数
% Variable:Num_Work       % 装配线工位数
%   Num_Pop1       % 初始种群1个数
%   Num_Pop2       % 初始种群2个数
%   Num_Exc       % 交换基因数目
%   Pro_C1         % 初始种群1交叉概率
%   Pro_C2       % 初始种群2交叉概率
%   Pro_M1         % 初始种群1变异概率
%   Pro_M2       % 初始种群2变异概率
%   Num_Gene       % 繁衍代数
%   Time       % 各工位时间
%   Matrix       % 优先关系矩阵
%   Pop1       % 初始种群1
%   Pop2       % 初始种群2
%   Pop11       % 迭代的种群1
%   Dec_Pop1       % 译码后的种群1
%   Fit_Pop1       % 种群1适应度
%   Sel_Pop1       % 选择后的种群1
%   Cro_Pop1       % 交叉后的种群1
%   Mut_Pop1       % 变异后的种群1
%   Pop12       % 种群1最优保留(用于种群间交叉)
%   Pop21       % 迭代的种群2
%   Dec_Pop2       % 译码后的种群2
%   Fit_Pop2       % 种群2适应度
%   Sel_Pop2       % 选择后的种群2
%   Cro_Pop2       % 交叉后的种群2
%   Mut_Pop2       % 变异后的种群2
%   Pop22       % 种群1最优保留(用于种群间交叉)
%     Pop00       % 每次迭代最优基因
%     Dec_Pop00       % 每次迭代最优基因译码结果
% Others: None
clc            % 清空Workspace, Command Window 和Figure
clear
close all
%Time=[2.80 9.52 3.26 3.61 4.18 6.34 6.12 2.07 3.14 2.17 5.24 3.31 2.13 5.04 9.87 2.75 3.19 5.64 3.39 14.55 1.09 5.02 1.21 3.48 6.72 1.98 3.91 5.57 5.14 7.94 3.12 5.36 2.88 1.38 4.23 3.61 3.74 2.88 4.58 2.97 5.73 5.94 4.51 1.52 5.31 2.22 4.49 4.28 3.61 8.32 7.13 4.08];
% Matrix=[0110000000000000000000000000000000000000000000000000;
%         0000100000000000000000000000000000000000000000000000;
%         0000100000000000000000000000000000000000000000000000;
%         0000100000000000000000000000000000000000000000000000;
%         0000010000000000000000000000000000000000000000000000;
%         0000001000000000000000000000000000000000000000000000;
%         0000000100000000000000000000000000000000000000000000;
%         0000000000100000000000000000000000000000000000000000;
%         0000000001000000000000000000000000000000000000000000;
%         0000000000100000000000000000000000000000000000000000;
%         0000000000010000000000000000000000000000000000000000;
%         0000000000001000000000000000000000000000000000000000;
%         0000000000000100000000000000000000000000000000000000;
%         0000000000000010000000000000000000000000000000000000;
%         0000000000000001000000000000000000000000000000000000;
%         0000000000000000010000000000000000000000000000000000;
%         0000000000000000010000000000000000000000000000000000;
%         0000000000000000001000000000000000000000000000000000;
%         0000000000000000000100000000000000000000000000000000;
%         0000000000000000000010000000000000000000000000000000;
%         0000000000000000000001000000000000000000000000000000;
%         0000000000000000000000100000000000000000000000000000;
%         0000000000000000000000010000000000000000000000000000;
%         0000000000000000000000001000000000000000000000000000;
%         0000000000000000000000000100000000000000000000000000;
%         0000000000000000000000000010000000000000000000000000;
%         0000000000000000000000000000100000000000000000000000;
%         0000000000000000000000000000100000000000000000000000;
%         0000000000000000000000000000010000000000000000000000;
%         0000000000000000000000000000001000000000000000000000;
%         0000000000000000000000000000000100000000000000000000;
%         0000000000000000000000000000000000010000000000000000;
%         0000000000000000000000000000000001100000000000000000;
%         0000000000000000000000000000000000010000000000000000;
%         0000000000000000000000000000000000010000000000000000;
%         0000000000000000000000000000000000000100000000000000;
%         0000000000000000000000000000000000000100000000000000;
%         0000000000000000000000000000000000000010000000000000;
%         0000000000000000000000000000000000000001000000000000;
%         0000000000000000000000000000000000000000110000000000;
%         0000000000000000000000000000000000000000001000000000;
%         0000000000000000000000000000000000000000001000000000;
%         0000000000000000000000000000000000000000000100000000;
%         0000000000000000000000000000000000000000000010000000;
%         0000000000000000000000000000000000000000000001000000;
%         0000000000000000000000000000000000000000000000000100;
%         0000000000000000000000000000000000000000000000010000;
%         0000000000000000000000000000000000000000000000001000;
%         0000000000000000000000000000000000000000000000000100;
%         0000000000000000000000000000000000000000000000000010;
%         0000000000000000000000000000000000000000000000000001;
%         0000000000000000000000000000000000000000000000000000;];
Time=[13.3 10.2 6.3 19.8 6.3 20.9 14.9 6.3 13.5 5.1 16.3 5.7 19.3 9.3 9.9 18.7 8.7 4.3 6.5 5.1 13.2 4.6 7.5 15.2 7.7 15.7 8.9 13.4 21.2 16.3 17.5 21.5];
Matrix=[01000000000000000000000000000000;
00100000000000000000000000000000;
00010000000000000000000000000000;
00001000000000000000000000000000;
00000100000000000000000000000000;
00000000100000000000000000000000;
00000001000000000000000000000000;
00000000100000000000000000000000;
00000000001000000000000000000000;
00000000001000000000000000000000;
00000000000100000000000000000000;
00000000000010000000000000000000;
00000000000001000000000000000000;
00000000000000100000000000000000;
00000000000000010000000000000000;
00000000000000001000000000000000;
00000000000000000010000000000000;
00000000000000000010000000000000;
00000000000000000001000000000000;
00000000000000000000100000000000;
00000000000000000000001000000000;
00000000000000000000001000000000;
00000000000000000000000100000000;
00000000000000000000000010000000;
00000000000000000000000001000000;
00000000000000000000000000100000;
00000000000000000000000000010000;
00000000000000000000000000001000;
00000000000000000000000000000100;
00000000000000000000000000000010;
00000000000000000000000000000001;
00000000000000000000000000000000;];
% Time=[6 2 5 7 1 2 3 6 5 5 4];
% Matrix=[0 1 1 1 1 0 0 0 0 0 0;
%       0 0 0 0 1 0 0 0 0 0 0;
%       0 0 0 0 0 0 1 0 0 0 0;
%       0 0 0 0 0 0 1 0 0 0 0;
%       0 0 0 0 0 0 1 0 0 0 0;
%       0 0 0 0 0 0 0 1 0 0 0;
%       0 0 0 0 0 0 0 0 1 0 0;
%       0 0 0 0 0 0 0 0 0 1 0;
%       0 0 0 0 0 0 0 0 0 0 1;
%       0 0 0 0 0 0 0 0 0 0 1;
%       0 0 0 0 0 0 0 0 0 0 0;];
% Time=[3 2 4 3 6 6 6 2];
% Matrix=[0 1 1 1 1 1 1 1;
%         0 0 1 1 0 0 0 1;
%         0 0 0 1 0 0 0 1;
%         0 0 0 0 0 0 0 1;
%         0 0 0 0 0 1 1 1;
%         0 0 0 0 0 0 1 1;
%         0 0 0 0 0 0 0 1;
%         0 0 0 0 0 0 0 0];
% set(gcf,'outerposition',get(0,'screensize'));   % 最大化显示图像
% 参数初始化
Num_Work=3;       % 装配线工作站数
Num_Pop1=100;       % 初始种群1个数
Num_Pop2=100;       % 初始种群2个数
Num_Exc=5;                     % 交换基因数目
Pro_C1=0.8;                    % 初始种群1交叉概率
Pro_C2=0.2;                    % 初始种群2交叉概率
Pro_M1=0.2;                    % 初始种群1变异概率
Pro_M2=0.05;                   % 初始种群2变异概率
Num_Gene=100;                  % 繁衍代数
%[Time,Matrix]=SHL();           % 各工位时间及优先关系矩阵
% 产生初始种群
end
%迭代完成后计算最终结果
Dec_Pop1=Decoding(Pop11,Time,Num_Work);
Fit_Pop1=Fitness(Dec_Pop1,Num_Work,Time,Pop11);
[a1 b1]=max(Fit_Pop1); Dec_Pop2=Decoding(Pop21,Time,Num_Work);
Fit_Pop2=Fitness(Dec_Pop2,Num_Work,Time,Pop21);
[a2 b2]=max(Fit_Pop2);
if a1>a2
Pop=Pop11(b1,:);
Dec_Pop=Decoding(Pop11(b1,:),Time,Num_Work);
else
Pop=Pop21(b2,:);
Dec_Pop=Decoding(Pop21(b2,:),Time,Num_Work);
end
Draw(Pop,Dec_Pop,i,Time);
save data                                % 保存结果


3 仿真结果

【优化调度】基于遗传算法实现产品自动排序问题matlab代码_交叉概率

4 参考文献

[1]马永远. 基于遗传算法的服装智能制造系统生产调度优化研究[D]. 中原工学院.

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

【优化调度】基于遗传算法实现产品自动排序问题matlab代码_遗传算法_02