Uncategorized

Codigo en Octave del Metodo Simplex

Este es el código mejorado en Octave del algoritmo del Método Simplex, se puede utilizar con dos o mas variables tanto para maximizar o minimizar. Los parámetros a ingresar son los siguientes: “restric” , matriz con todos los coeficientes de las restricciones, sin incluir las variables solución; “fun_obj” es una matriz de una sola fila con la función objetivo; val es una matriz de una sola columna con los valores solución;”variab” es una matriz identidad que se debe ingresar de acuerdo a las variables de holgura o desición que tengamos.
Este algoritmo presentado está en fase de pruebas pero puede ser utilizado para la verificación de problemas de programación lineal…

function simplex = SimplexFinal(restric,fun_obj,val,variab,tipo)
ceros=zeros(1,size (variab,2).+1);%Crea una matriz de ceros para completar la parte donde se ubica la función objetivo
if tipo==true
ecuac=[restric variab val; (fun_obj) .* (-1) ceros]%Si se va a maximizar se multiplica  por menos uno la función objetivo para q se cumpla lo siguiente z=x1+x2 == z-x1-x2=0. Se crea la matriz principal donde se trabajara
else
ecuac=[restric variab val; (fun_obj) ceros]% Se deja igual para que se cumpla z=x1+x2 == -z+x1+x2=0.Se cra la matriz principal para trabajar
endif
nroCol=size(ecuac,2);%se saca el numero de columnas de la matriz principal
nroFil=size(ecuac,1);%se saca el numero de filas de la matriz principal
bandera=false;
while bandera==false
nc=1;
if tipo==true
menorRes=ecuac(nroFil,1);%se toma como menor resultado el primer elemento de la ultima fila para ir comparando con el resto de elementos de la misma fila
for i=2:(nroCol.-1)%Se calcula el menor de la fila ultima de la matriz, sin incluir lo de los valores resultado
if ecuac(nroFil,i)<menorRes && ecuac(nroFil,i)!=0
menorRes=ecuac(nroFil,i);
nc=i;
endif
endfor
nc
else
menorRes=ecuac(nroFil,1).*(-1);
for i=2:(nroCol.-1)
if ecuac(nroFil,i).*(-1)0
menorRes=ecuac(nroFil,i);
nc=i;
endif
endfor
nc
endif
%%dividimos la columna de los valores para la columna donde se encuentra el pivote
aux=zeros(size(val,1),1);
for i=1:nroFil.-1
if ecuac(i,nc)>0
aux(i,1)=[ecuac(i,nroCol)./ecuac(i,nc)];
else
aux(i,1)=val(i,1);
endif
endfor
aux
%verificamos el numero menor del resultado de la division asi como su posicion
nf=1;
menorVal=aux(1,1);
for i=2:(nroFil.-1)
if aux(i,1)<menorVal
menorVal=aux(i,1);
nf=i;
endif
endfor
nf
%teniendo en cuenta el numero de fila y numero de columna del pivote verificamos cual es el pivote
pivote=ecuac(nf,nc)
%En caso de que el pivote q nos salga sea negativo entonces procedemos a verificar un numero positivo de la misma columna
if pivote0
pivote=ecuac(i,nc)
break;
endif
endfor
endif
%dividimos todos los numeros de la fila donde esta el pivote para el pivote
ecuac(nf,:)=ecuac(nf,:)./pivote;
%Vamos llenando el resto de filas de acuerdo a la fila pivote
for i=1:nroFil
if i!= nf
ecuac(i,:)=ecuac(i,:).-(ecuac(i,nc).*ecuac(nf,:));
endif
endfor
ecuac
if tipo==true
for i=1:nroCol-1
if ecuac(nroFil,i)0
for i=1:(nroCol.-1)/2
if ecuac(nroFil,i)==0
cont=cont+1;
endif
endfor
if cont==(nroCol.-1)/2
ecuac(nroFil,:)=ecuac(nroFil,:).*(-1)%Si en la ultima fila, los valores de x y y son cero entonces se multiplica toda la fila por -1
simplex=ecuac(nroFil,nroCol);
bandera=true;
break;
else
bandera=false;
disp(ecuac(nroFil,i));
break;
endif
endif
endfor
endif
endwhile
disp("La solución óptima es: "), disp(simplex)
end

Licencia de Creative Commons
Codigo octave de Metodo simplex by Francisco Carrillo is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.

Anuncios

Un comentario en “Codigo en Octave del Metodo Simplex

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s