展会信息港展会大全

基于遗传算法的车间布局优化MATLAB源码
来源:互联网   发布日期:2011-09-20 16:28:20   浏览:14238次  

导读:基于遗传算法的车间布局优化MATLAB源码_GreenSim团队_新浪博客,GreenSim团队,...

正文 字体大小: 中

基于遗传算法的车间布局优化MATLAB源码 (2010-09-03 23:06:57)

标签: 杂谈

车间布局优化是将加工设备、物料输送设备、工作单元和通道走廊等布置物体合理地放置在一个有限的生产车间内的过程。车间布局优化模型是一个含有较为复杂约束的非线性连续优化模型,可以使用遗传算法进行优化。本源码由GreenSim团队原创,转载请注明,有意购买源码或代写相关程序,请与GreenSim团队联系(主页http://blog.sina.com.cn/greensim)。
%% 车间布局遗传禁忌搜索算法仿真主界面
%% 第一步:设置问题实例
Li=[38;16;30;40;48;32;46];%车间长度
Wi=[28;36;16;18;24;28;16];%车间宽度
%每单位距离每单位物流量的物料搬运费用
P=[
0,2,3,2,5,4,4;
0,0,5,2,2,3,4;
0,0,0,1,5,4,3;
0,0,0,0,1,5,1;
0,0,0,0,0,4,5;
0,0,0,0,0,0,1;
0,0,0,0,0,0,0
];
%物料搬运的频率
F=[
0,2,2,1,0,2,1;
0,0,2,1,1,2,2;
0,0,0,2,1,2,1;
0,0,0,0,2,1,2;
0,0,0,0,0,2,1;
0,0,0,0,0,0,1;
0,0,0,0,0,0,0
];
%物流量
Q=[
0,10,6,8,4,6,1;
0, 0,3,2,5,4,4;
0, 0,0,6,8,6,5;
0, 0,0,0,5,8,1;
0, 0,0,0,0,8,1;
0, 0,0,0,0,0,5;
0, 0,0,0,0,0,0
];
%物料搬运速率
V=[
0,4,4,4,4,4,4;
0,0,2,2,2,2,2;
0,0,0,2,2,2,2;
0,0,0,0,3,3,3;
0,0,0,0,0,3,3;
0,0,0,0,0,0,2;
0,0,0,0,0,0,0
];
L=200;%矩形区域的长度,x轴
W=120;%矩形区域的宽度,y轴
minDX=10;%各车间的最小水平间距
minDY=10;%各车间的最小垂直间距
minDS=10;%各车间到区域边界的最小距离
%%
pop_size=400;
max_gen=500;
Pm=0.3;
kc=0.5;
kt=0.5;
PLambda=1000;
PK=1000;
n=size(P,1);
LB=zeros(2*n,1);
UB=zeros(2*n,1);
for i=1:n
    LB(2*i-1)=0.5*Li(i)+minDS;
    LB(2*i)=0.5*Wi(i)+minDS;
    UB(2*i-1)=L-0.5*Li(i)-minDS;
    UB(2*i)=W-0.5*Wi(i)-minDS;
end
%% 调用遗传算法
figure(3)
[BESTX,BESTY,ALLX,ALLY]=GAUCP2(max_gen,pop_size,Pm,LB,UB,L,W,Li,Wi,P,F,Q,V,minDX,minDY,kc,kt,PLambda,PK);
X=BESTX{max_gen};
disp('遗传算法输出的最优结果为');
disp(X);
figure(4)
PlotFigure(X,Li,Wi,L,W);

function [BESTX,BESTY,ALLX,ALLY]=GAUCP2(K,N,Pm,LB,UB,PL,PW,PLi,PWi,PP,PF,PQ,PV,PminDX,PminDY,Pkc,Pkt,PLambda,PK)
%% 此函数实现遗传算法,用于车间布局优化
%% 输入参数列表
% K        迭代次数
% N        种群规模,要求是偶数
% Pm       变异概率
% LB       决策变量的下界,M×1的向量
% UB       决策变量的上界,M×1的向量
%% 输出参数列表
% BESTX    K×1细胞结构,每一个元素是M×1向量,记录每一代的最优个体
% BESTY    K×1矩阵,记录每一代的最优个体的评价函数值
% ALLX     K×1细胞结构,每一个元素是M×N矩阵,记录全部个体
% ALLY     K×N矩阵,记录全部个体的评价函数值
%% 第一步:
M=length(LB);%决策变量的个数
%种群初始化,每一列是一个样本
farm=zeros(M,N);
for i=1:M
    x=unifrnd(LB(i),UB(i),1,N);
    farm(i,:)=x;
end
%输出变量初始化
ALLX=cell(K,1);%细胞结构,每一个元素是M×N矩阵,记录每一代的个体
ALLY=zeros(K,N);%K×N矩阵,记录每一代评价函数值
BESTX=cell(K,1);%细胞结构,每一个元素是M×1向量,记录每一代的最优个体
BESTY=zeros(K,1);%K×1矩阵,记录每一代的最优个体的评价函数值
k=1;%迭代计数器初始化
%% 第二步:迭代过程
while k<=K
%% 以下是交叉过程
    newfarm=zeros(M,2*N);
    Ser=randperm(N);%两两随机配对的配对表
    A=farm(:,Ser(1));
    B=farm(:,Ser(2));
    P0=unidrnd(M-1);
    a=[A(1:P0,:);B((P0+1):end,:)];%产生子代a
    b=[B(1:P0,:);A((P0+1):end,:)];%产生子代b
    newfarm(:,2*N-1)=a;%加入子代种群
    newfarm(:,2*N)=b;   
    for i=1:(N-1)
        A=farm(:,Ser(i));
        B=farm(:,Ser(i+1));
        P0=unidrnd(M-1);
        a=[A(1:P0,:);B((P0+1):end,:)];
        b=[B(1:P0,:);A((P0+1):end,:)];
        newfarm(:,2*i-1)=a;
        newfarm(:,2*i)=b;
    end   
    FARM=[farm,newfarm];   
%% 选择复制
    SER=randperm(3*N);
    FITNESS=zeros(1,3*N);
    fitness=zeros(1,N);
    for i=1:(3*N)
        Beta=FARM(:,i);
        SE=FIT(Beta,PL,PW,PLi,PWi,PP,PF,PQ,PV,PminDX,PminDY,Pkc,Pkt,PLambda,PK);
        FITNESS(i)=SE;
    end   
    for i=1:N
        f1=FITNESS(SER(3*i-2));
        f2=FITNESS(SER(3*i-1));
        f3=FITNESS(SER(3*i));
        if f1<=f2&&f1<=f3
            farm(:,i)=FARM(:,SER(3*i-2));
            fitness(:,i)=FITNESS(:,SER(3*i-2));
        elseif f2<=f1&&f2<=f3
            farm(:,i)=FARM(:,SER(3*i-1));
            fitness(:,i)=FITNESS(:,SER(3*i-1));
        else
            farm(:,i)=FARM(:,SER(3*i));
            fitness(:,i)=FITNESS(:,SER(3*i));
        end
    end   
    %% 记录最佳个体和收敛曲线
    X=farm;
    Y=fitness;
    ALLX{k}=X;
    ALLY(k,:)=Y;
    minY=min(Y);
    pos=find(Y==minY);
    BESTX{k}=X(:,pos(1));
    BESTY(k)=minY;   
    %% 变异
    for i=1:N
        if Pm>rand&&pos(1)~=i
            AA=farm(:,i);
            BB=GaussMutation(AA,LB,UB);
            for j=1:M
                BB(j,1)=unifrnd(LB(j),UB(j),1,1);
            end
            farm(:,i)=BB;
        end
    end
    disp(k);
    k=k+1;
end
%% 绘图
BESTY2=BESTY;
BESTX2=BESTX;
for k=1:K
    TempY=BESTY(1:k);
    minTempY=min(TempY);
    posY=find(TempY==minTempY);
    BESTY2(k)=minTempY;
    BESTX2{k}=BESTX{posY(1)};
end
BESTY=BESTY2;
BESTX=BESTX2;
MeanBESTY=mean(ALLY');
plot(-BESTY,'-ks','MarkerEdgeColor','k','MarkerFaceColor','k','MarkerSize',1)
hold on
plot(-MeanBESTY,'-ro','MarkerEdgeColor','k','MarkerFaceColor','k','MarkerSize',1)
ylabel('Fitness');
xlabel('Iterations');
legend('Best Fitness','Average Fitness','FontName','Times New Roman','FontSize',10)
grid on

分享

阅读┊ ┊┊ ┊打印┊

已投稿到: 排行榜 圈子

赞助本站

人工智能实验室
AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港