Вы находитесь на странице: 1из 2

Anexo - 1: Codigo en Matlab del metodo simplex fase 1

Fabian Leonardo Ramirez Sandino


Mayo 28 del 2011

1. Codigo fuente:
A continuaciòn se presenta el codigo fuente de la funciòn hecha en matlab, para resolver un problema
de programaciòn lineal de maximizaciòn, con restricciones de relaciòn ≤ menoroigual. El programa recibe
como paràmetros la matriz de coeficientes de las restricciones A, el vector de restricciones por condicion
B, y la funciòn objetivo que representa la maximizacion del ingreso Z. La funcion retorna el vector òptimo
correspondiente a la solucion del problema, y la matriz A, que da informacion sobre el pso de cada una
de las variables.

%Implementacion d e l metodo s i m p l e x p r i m e r a f a s e f u n c i o n que r e c i b e


%l a m a t r i z de c o e f i c i e n t e s de l a s r e s t r i c c i o n e s , e l v e c t o r de
%c o e f i c i e n t e s de l a f u n c i o n o b j e t i v o y e l v e c t o r de r e s t r i c c i o n e s , y
%d e v u e l v e e l v e c t o r de s o l u c i o n optimo . Las r e s t r i c c i o n e s deben e n t r a r
%t o d a s e x p r e s a d a s mediante l a misma d e s i g u a l d a d ( mayor que o menor que ) .
%El u l t i m o v a l o r d i c e s i e l problema e s de maximizacion ( 0 ) o s i e s de
%m i n i m i z a c i o n ( 1 )

f u n c t i o n [ optimo ,A]= SimplexFase1 (A, B, Z , t i p o )


%p r i m e r paso
tamA=s i z e (A ) ;
A=[A eye (tamA ( 1 , 1 ) , tamA ( 1 , 1 ) ) ] ;
%segundo paso
Z=−Z ;
%s e amplia e l ancho de Z , d e a c u e r d o a l numero de v a r i a b l e s de h o l g u r a +1
Z=[Z z e r o s ( 1 , tamA ( 1 , 1 ) ) 0 ] ;
%t e r c e r paso
A=[A B ] ;
A=[A; Z ] ;
%a c t u a l i z a c i o n d e l nuevo tamaño de A
tamA=s i z e (A ) ;

%b u c l e de i t e r a c i o n e s s i m p l e x ; v a r i a b l e bandera s t o p
stop = f a l s e ;
%c u a r t o paso : busqueda d e l c o e f i c i e n t e con v a l o r a b s o l u t o mayor . f i l a
%p i v o t e
w h i l e s t o p==f a l s e
aux =0;
i n d e x=z e r o s ( 1 , 2 ) ;
f o r i =1:tamA ( 1 , 2 )
i f A(tamA ( 1 , 1 ) , i )<=aux
aux=A(tamA ( 1 , 1 ) , i ) ;

1
i n d e x (1 ,2)= i ;
end
end
aux =0;
%c u a r t o paso : busqueda d e l c o c i e n t e con v a l o r p o s i t i v o menor . columna
%p i v o t e
f o r i =1:tamA ( 1 , 1 )
i f (A( i , i n d e x ( 1 , 2 ) ) > 0 )
i f ( aux==0)
aux=A( i , tamA ( 1 , 2 ) ) /A( i , i n d e x ( 1 , 2 ) ) ;
i n d e x (1 ,1)= i ;
else
i f (A( i , i n d e x ( 1 , 2 ) ˜ = 0 ) )
i f (A( i , tamA ( 1 , 2 ) ) /A( i , i n d e x (1 ,2)) <= aux )
aux=A( i , tamA ( 1 , 2 ) ) /A( i , i n d e x ( 1 , 2 ) ) ;
i n d e x (1 ,1)= i ;
break
end
end
end
end
end

%paso 5
%d i v i s i o n de f i l a p i v o t e
A( i n d e x ( 1 , 1 ) , : ) =A( i n d e x ( 1 , 1 ) , : ) /A( i n d e x ( 1 , 1 ) , i n d e x ( 1 , 2 ) ) ;
%e l i m i n a c i o n g a u s s i a n a para l o s demas v a l o r e s
f o r i =1:tamA ( 1 , 1 )
i f i ˜=i n d e x ( 1 , 1 )
A( i , : ) =A( i , : ) − (A( i , i n d e x ( 1 , 2 ) ) ∗A( i n d e x ( 1 , 1 ) , : ) ) ;
end
end
%e v a l u a c i o n d e l c r i t e r i o de parada
s t o p=t r u e ;
%c o n t=c o n t +1;
f o r i =1:tamA ( 1 , 2 )
i f A(tamA ( 1 , 1 ) , i )<0
s t o p=f a l s e ;
break
end
end
end
optimo=A( : , tamA ( 1 , 2 ) ) ;