最新21装配生产线任务平衡问题的遗传算法MATLAB源代码汇总

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

21装配生产线任务平衡问题的遗传算法

M A T L A B源代码

装配生产线任务平衡问题的遗传算法MATLAB源代码下面的源码实现了装配生产线任务平衡优化问题(ALB问题)的遗传算法,算法主要参考下面这篇文献,并对其进行了改进。陈永卿,潘刚,李平.基于混合遗传算法的装配线平衡[J].机电工程,2008,25(4):60-62.。

function

[BestX,BestY,BestZ,AllFarm,LC1,LC2,LC3,LC4,LC5]=GSAALB(M,N,Pm,Pd,K,t0, alpha,TaskP,TaskT,TaskV,RT,RV)

% GreenSim团队——专业级算法设计&代写程序

% 欢迎访问GreenSim团队主页→/greensim

%% 装配生产线任务平衡问题的遗传算法

%% 输入参数列表

% M------------遗传算法进化代数

% N------------种群规模,取偶数

% Pm-----------变异概率调节参数

% Pd-----------变异程度调节参数,0

% K------------同一温度下状态跳转次数

% T0-----------初始温度

% Alpha--------降温系数

% Beta---------浓度均衡系数

% TaskP--------任务优先矩阵,n×n矩阵,Pij=1表示任务i需在j之前完成,Pij=0时任务i和j没有优先关系

% TaskT--------任务时间属性,n×1向量

% TaskV--------任务体积属性,n×1向量

% RT-----------时间节拍约束

% RV-----------工位体积约束

%% 输出参数列表

% BestX--------最好个体的编码

% BestY--------最好个体对应的装配方案

% BestZ--------最好个体的目标函数值

% LC1----------最优个体适应值的收敛曲线,M×1

% LC2----------种群平均适应值的收敛曲线,M×1

% LC3----------工位个数收敛曲线,M×1

% LC4----------时间利用率及平衡度综合度量参数收敛曲线,M×1

% LC5----------空间利用率及平衡度综合度量参数收敛曲线,M×1

% AllFarm------各代种群的集合,M×1的细胞结构

%% -----------------------初始化----------------------------------

n=size(TaskP,1);

[AA,BB]=QJHJ(TaskP);%调用子函数,建立每一个任务的前任务集和后任务集

farm=Initialization(N,TaskP,AA,BB);%调用子函数,种群初始化

%输出参数初始化

BestX=zeros(1,n);

BestY=zeros(1,n);

BestZ=0;

LC1=zeros(M,1);

LC2=zeros(M,1);

LC3=zeros(M,1);

LC4=zeros(M,1);

LC5=zeros(M,1);

AllFarm=cell(M,1);

%控制参数初始化

m=1;%迭代计数器

t=t0;%温度指示器

BestPos=1;%初始时任意指定被保护个体

%% -----------------------迭代过程---------------------------------

while m<=M%设置停止条件

%% ----------------------变异退火算子------------------------------

for i=1:N

if rand>Pm&&i~=BestPos

%如果随机数大于变异概率门限值,并且不属于保护个体,就对其实施变异

I=farm(i,:);%取出该个体

k=1;

while k<=K%每一个温度下的状态转移次数

%调用变异子函数

J=Mutation(I,Pd,AA,BB);

%调用计算适应值子函数

[YI,ZI,FI,TGWI,VGWI,f1I,f2I]=Fitness(I,TaskT,TaskV,RT,RV);

[YJ,ZJ,FJ,TGWJ,VGWJ,f1J,f2J]=Fitness(J,TaskT,TaskV,RT,RV);

if FJ>FI

farm(i,:)=J;

elseif rand

farm(i,:)=J;

else

farm(i,:)=I;

end

k=k+1;

end

end

end

%% -----------------------交叉算子---------------------------------

newfarm=zeros(size(farm));

Ser=randperm(N);%用这个函数保证随机配对

for i=1:2:(N-1)

FA=farm(Ser(i),:);

FB=farm(Ser(i+1),:);

[SA,SB]=CrossOver(FA,FB);

newfarm(i,:)=SA;

newfarm(i+1,:)=SB;

end

%新旧种群合并

FARM=[farm;newfarm];

%% -----------------------选择复制---------------------------------

FIT_Y=zeros(2*N,n);

FIT_Z=zeros(2*N,1);

FIT_F=zeros(2*N,1);

FIT_f1=zeros(2*N,1);

FIT_f2=zeros(2*N,1);

fit_Y=zeros(N,n);

fit_Z=zeros(N,1);

fit_F=zeros(N,1);

fit_f1=zeros(N,1);

fit_f2=zeros(N,1);

for i=1:(2*N)

XX=FARM(i,:);

[Y,Z,F,TGW,VGW,f1,f2]=Fitness(XX,TaskT,TaskV,RT,RV); FIT_Y(i,:)=Y;

FIT_Z(i)=Z;

FIT_F(i)=F;

FIT_f1(i)=f1;

FIT_f2(i)=f2;

end

Ser=randperm(2*N);

for i=1:N

ff1=FIT_F(Ser(2*i-1));

ff2=FIT_F(Ser(2*i));

if ff1>=ff2

farm(i,:)=FARM(Ser(2*i-1),:);

fit_Y(i,:)=FIT_Y(Ser(2*i-1),:);

fit_Z(i)=FIT_Z(Ser(2*i-1));

fit_F(i)=FIT_F(Ser(2*i-1));

fit_f1(i)=FIT_f1(Ser(2*i-1));

fit_f2(i)=FIT_f2(Ser(2*i-1));

else

farm(i,:)=FARM(Ser(2*i),:);

fit_Y(i,:)=FIT_Y(Ser(2*i),:);

相关文档
最新文档