You are on page 1of 9

Control electrónico de sistemas eléctricos

Introducción a la búsqueda tabú y ejemplo resuelto en Matlab

El problema consiste en determinar el orden de secuenciación de las tareas que minimiza


el valor de la función objetivo F. Una secuenciación de las tareas, que constituye una
permutación, define completamente a una solución.

Nos centramos, por tanto, en el problema de secuenciación de tareas en una única


máquina para
Introducir e ilustrar los componentes básicos de la búsqueda tabú. Supongamos que se
consideran 6 tareas para su secuenciación en la máquina. A modo de ilustración,
supongamos que este problema de 6 tareas tiene tiempos de procesamiento dados por
(5, 8, 2, 6, 10, 3), días de terminación especificados por (9, 10, 16, 7, 20, 23), y
penalizaciones por retraso wj = 1 para j = 1; 2; :::; 6. Deseamos diseñar un método capaz
de encontrar una solución ´optima o cercana a la ´optima explorando solo Un pequeño
subconjunto de todas las permutaciones posibles. Primero asumimos que puede
construirse una solución inicial para este problema de alguna
Manera inteligente, es decir, tomando ventaja de la estructura especifica del problema.
Supongamos que la solución inicial de nuestro problema es la que aparece en la Figura 1.

La ordenación de la Figura 1 especifica que la tarea 1 se realiza en primer lugar, seguida


por la tarea 2, etc. El valor de la función objetivo para esta solución es 39. Los métodos
TS operan bajo el supuesto de que se puede construir un entorno para identificar
“soluciones adyacentes “que puedan ser alcanzadas desde la solución actual. Los
intercambios por pares son frecuentemente usados para definir entornos en problemas de
permutaciones, identificando movimientos que conducen una solución a la siguiente. En
nuestro problema, un intercambio cambia la posición de dos tareas como se ilustra en la

1
Control electrónico de sistemas eléctricos

Figura 2. Por tanto, el entorno completo de una solución en nuestro ejemplo ilustrativo
está formado por 15 soluciones adyacentes que pueden ser obtenidas a partir de estos
Intercambios tal como muestra el Cuadro 1.

Como base para evitar la búsqueda desde combinaciones de intercambio repetidas


usadas en el pasado reciente, invirtiendo potencialmente los efectos de movimientos
anteriores por intercambios que podrían devolver a posiciones previas, clasificaremos
como tabú todos los intercambios compuestos por cualquiera de los pares de tareas m´as
recientes; en este caso, para propósitos ilustrativos, las tres más recientes. Esto significa
que un par de tareas será tabú durante un periodo de 3 iteraciones. Dado que
intercambiar las tareas 2 y 5 es lo mismo que intercambiar las tareas 5 y 2, ambos
intercambios pueden ser representados por el par (2; 5). Por lo tanto, se puede usar una
estructura de datos como la usada en la Figura 3.

2
Control electrónico de sistemas eléctricos

3
Control electrónico de sistemas eléctricos

4
Control electrónico de sistemas eléctricos

Programación en Matlab
%BUSQUEDA TABU
clear,clc
MAQUINAS=[1 2 3 4 5 6 ; 5 8 2 6 10 3 ;9 10 16 7 20 23 ; 1 1 1 1 1 1 ];
LIMITE=30; %timepo minimo aceptado para que opere la maquina
M=MAQUINAS';%matris [tareas pj dj wj]
M2=MAQUINAS';
%pj=tiempo de operacion
%dj= dias de operacion
%wj=penalizacion
M_TABU=zeros(length(M(:,1)));%MATRIZ PARA DETERMINAR LAS POSICIONES TABU
FRE_TABU=zeros(length(M(:,1)));%MATRIZ PARA DETERMINAR LAS POSICIONES DE
FRECUENCIA TABU
%**********************************************
%primera iterasion es la soluciondada dada pornosostros
% apartir dela segunda iterasion son valores hallados porlas
% todas las combinacioens posibles

5
Control electrónico de sistemas eléctricos

MQNAS1=length(M(:,1)) %numero de maquinas


MQNAS2=length(M(:,1))-1
s=0; r=0;

for j=1:MQNAS1 %numero de maquinas


r =M(j,4)*(M(j,2)+s-M(j,3));
s=M(j,2)+s;
if r<0
r=0;
end
R(j,1)=r;
end
FO=sum(R)%funcion objetivo

T=0;
while T<50
T=T+1;
%************************************************
MM=M; I=0;
for f=1:MQNAS2 %numero demaquinas -1

for c=f+1:MQNAS1 %numero de maquinas


I=I+1;
MM1=M ;
MM1(f,:)=MM(c,:);
MM1(c,:)=MM(f,:);
MM1;
ABSOLUTE(I)=abs(MM1(f,3)-MM1(c,3));
%------------------------------------
---------
s=0; r=0;
for j=1:MQNAS1 %numero de
maquinas
r =MM1(j,4)*(MM1(j,2)+s-
MM1(j,3));
s=MM1(j,2)+s;
6
Control electrónico de sistemas eléctricos

if r<0
r=0;
end
R(j,1)=r;
end

TAREA1(I)=MM(f,1);%tarea intercambiable1
TAREA2(I)=MM(c,1);%tarea intercambiable2
F(I)=sum(R);%funcion objetivo
%-----------------------------------
----------

end

end
TAREA1;
TAREA2;
F;
VALOR_MOV=F-FO;
ABSOLUTE;
MATRIZ= [ TAREA1' TAREA2' F' VALOR_MOV' ABSOLUTE' ];
MATRIZ22= MATRIZ;

%||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

k=0;
while k<1
k=k+1;

%de la colummna VALOR_MOV escogemos el movimiento me


minimise la funcion 'F' objetivo
[minimo,fila]=min(MATRIZ(:,4));%la ubicaion del valor
minimo en la matriz fila seria MATRIZ(fila,4)

7
Control electrónico de sistemas eléctricos

a=MATRIZ(fila,1);%primer componente de la M_TABU NOMBRE


DE LA MAQUINA
b=MATRIZ(fila,2);%segundo componente de la M_TABU(a,b)
NOMBRE DE LA MAQUINA
%analisis del movimiento minimo hallado
if (M_TABU(a,b)~=0)|| (M_TABU(b,a)~=0)
MATRIZ(fila,4)=max(MATRIZ(:,4));
k=0;
end
if ((FRE_TABU(a,b)>=5) || (FRE_TABU(b,a)>=5) )&(
(M_TABU(a,b)==0) & (M_TABU(b,a)==0) )
if MATRIZ22(fila,4)- MATRIZ(fila,4)==0
MATRIZ(fila,4)=MATRIZ(fila,4)+
FRE_TABU(b,a)+FRE_TABU(a,b) ;
k=0;
else
disp('si existe diferencia');
k=1;
end
end

end

%||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
MATRIZ;
for AA=1:MQNAS2 %numero demaquinas -1
for BB=AA+1:MQNAS1 %numero demaquinas
if (M_TABU(AA,BB)~=0)
M_TABU(AA,BB)=M_TABU(AA,BB)-1;
end

end
end

%NUEVA MATRIZ TABU


if a<b
val_min=a;

8
Control electrónico de sistemas eléctricos

val_max=b;
elseif a>b
val_max=a;
val_min=b;
end

M_TABU(val_min,val_max)=3;
FRE_TABU(val_max,val_min)=FRE_TABU(val_max,val_min)+1;
%NUEVA MATRIZ DE MAQUINAS TAREAS ETC
M=MM;
for x=1:MQNAS1 %numero de maquinas
if M(x,1)==a
prime_maq_ubica_fila=x;
end
end
for xx=1:MQNAS1 %numero de maquinas
if M(xx,1)==b
seg_maq_ubica_fila=xx;
end
end
M(prime_maq_ubica_fila,:)=MM( seg_maq_ubica_fila,:);
M( seg_maq_ubica_fila,:)=MM(prime_maq_ubica_fila,:);

%************************************************
%el nuevo valor minimo de la funcion objetivo seria
disp('*************************************')
M
MATRIZ
minimo
MAQUINAS=[a,b]
MATRIZ_TABU_CON_FECUENCIAS=M_TABU+ FRE_TABU
FO=FO+minimo

%if FO>LIMITE
% T=0 ;
%endnd