lunes, 16 de marzo de 2015

Método PFA para células de fabriación

El método/algoritmo PFA (Production Flow Analysis) es utilizado a la hora de ordenar las diferentes máquinas que actúan en un proceso de manufactura, y que son necesarias para fabricar un conjunto de piezas.
Este algoritmo (Disponible aquí en MatLab) nos permite calcular cual es el número de máquinas de cada uno de los tipos, así como el cómo agruparlas para poder obtener una distribución eficiente. Este algoritmo nos da como salida un número de células (manufacturing cells), formadas con las distintas máquinas, y en las que se producen unos tipos de pieza. Este algoritmo se basa en ir diagnoalizando la matriz del proceso mediante la agrupación en células y duplicación de máquinas. Se puede encontrar más inforamción sobre el método en:
Handbook of cellular manufacturing
- Curso abierto Universidad de Chipre (Muy completo)

Otro tipo de ordenación de células es el ROC, que lo podéis encontrar también aquí: Método ROC
El código ha sido implementado en MatLab. La matriz del ejemplo es la de un proceso productivo donde se quieren fabricar 43 tipos de piezas con 16 tipos de máquinas.

El código en MatLab:


M=[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0;
   0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 1 1 0 1 0 1 0;
   0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0;
   0 0 0 0 1 0 0 1 1 0 0 0 0 1 0 0 0 0 1 0 1 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
   0 0 0 0 1 0 0 1 1 0 0 0 0 1 1 1 0 0 1 0 1 0 1 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 1 0 1;
   1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 1 0 1 0 0 0 1 0 0 0 0 0 0 0 0 1 1 1 0 0 1 0 1 1 0 1 1;
   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 0 0 0 0 0 0 0;
   1 1 1 0 0 0 0 1 1 0 1 1 0 0 1 0 0 0 1 1 1 0 1 1 0 0 1 1 0 0 1 0 0 0 0 0 1 1 0 0 1 0 1;
   0 1 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 1 1 0 1 0 1 0;
   1 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0;
   0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0;
   0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0;
   0 1 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 0 0 1 0 0 0 0 1 1 0 0 0 1 0;
   0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
   0 1 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 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 1 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 1;
   ];

fil = 16;
col = 43;
filC = 1;
colC = 1;
piezas = 0;
nummaq = 0;
%matriz de celulas
cel=zeros(300,col);


for iteracione = 1:16
%Calculamos piezas por máquina
for i = 1:fil
    suma(i)=0;
    for j = 1:col
        if M(i,j) == 1
            suma(i)=suma(i)+1;
        end
    end
end

%Calcular minimo de piezas por máquina
min =100;
for i = 1:fil
    if ((suma(i) < min) && (suma(i) ~= 0))
        min=suma(i);
    end
end
  
%Miramos filas con minimo
maqmin=0;
for i = 1:fil
    if suma(i) == min
        maqmin=i;
        break
    end
end

aux2=zeros(1,10);
cont1=0;
for j = 1:col
    if M(maqmin,j) == 1
        cont1=cont1+1;
        %aux2(cont1)=j=tipo pieza fabricada en maquina maqmin
        aux2(cont1)=j;
    end
end

for i = 1:fil
    aux3=0;
    for a = 1:cont1
        h=aux2(a);
        aux3 = aux3 + M(i,h);
        cel(1,1+a+piezas)=aux2(a);
    end

    if (aux3>0)
        nummaq=nummaq+1;
        cel(nummaq+1,1)=i;
        for a = 1:cont1
            cel(nummaq+1,1+a+piezas)= M(i,aux2(a));
        end
    end
end

piezas = piezas+cont1;

for i=1:fil
    for a = 1:cont1
        M(i,aux2(a))=0;
    end
end
end


Un saludo y espero que les haya servido de ayuda.

No hay comentarios:

Publicar un comentario