Upload
kelly-rafael-o
View
13
Download
2
Embed Size (px)
Citation preview
Universidad Nacional Jorge Basadre Grohmann Facultad de Ingeniería/E.A.P de Ingeniería en Informática y Sistemas Asignatura: Investigación Operativa I año :Tercero-2015
Docente:, Ing. Porfirio Chata Página: 1
Práctica N°04: Investigación operativa I Objetivos:
Creando una GUI (Graphical User Interfase Development Environment) en Matlab Sentencias en matlab para solucionar problemas de optimización
Diagrama de Flujo del método Simplex
inicio
Datos de programacion
Lineal
MAX Z=CXAX <=bX>=0
Convertir todas las desiguladades en igualdades agregando variables de
holguraMax z-cx=0
AX+S=bX>=0
Construir el tablero con los coeficientes del PL.
Condicion de optimalidad
Zj-cj>=0
Seleccionese como vector de entrada aquel cuyo Zj-Cj sea el
mas negativo
Seleccione el vector de salida de la base actual
Aplique operaciones matriciales elementales en el pivote con el objetivo de convertir la
columna en vector unitario.
La solución XB mostrada es optima
fin
NO
SI
Universidad Nacional Jorge Basadre Grohmann Facultad de Ingeniería/E.A.P de Ingeniería en Informática y Sistemas Asignatura: Investigación Operativa I año :Tercero-2015
Docente:, Ing. Porfirio Chata Página: 2
Según el siguiente enunciado
La codificación propuesta en matlab es la siguiente. % fob=matriz de la función objetivo
% a=matriz de las restricciones
% b=matriz de los recursos
% constantes de la función objetivo
fob=[-300 -100];
% matriz con las inecuaciones
a=[40 8;10 5;0 1];
%% vector de recursos de las desigualdades
b=[800;320;60];
% número máximo de iteraciones
iterm=100;
% número de inecuaciones
in=size(a,1);
%creando la matriz
%concatenación de matrices horizontalmente
m_solucion=((horzcat((horzcat(a,eye(in))),b)))
m_objetivo=[(horzcat(fob,zeros(1,in))),0]
%concatenación de matrices verticalmente.
xsol=vertcat(m_objetivo,m_solucion)
for iter=1:1:iterm
fin=xsol(1,1:end-1)<0;
if fin==0
break
end %end if
% se determina la columna pivote donde a es el valor mínimo y c la columna pivote
%p= el valor mínimo de la primera fila
%q= la posicion de la columna
[p,q]=min(xsol(1,:));
% se divide los recursos entre la columna pivote (punto a punto)
xre=xsol(:,end)./xsol(:,q);
% encuentro de la columna de recursos aquellos negativos o cero
i=xre<=0;
%guarda la columna de recursos en d
d=xre;
% reemplazo los valores negativos y cero de la columna de recursos por valores infinitos
(necesito el valor positivo menor)
d(i)=inf;
% con esta función se encuentra la fila pivote (menor elemento positivo)
Universidad Nacional Jorge Basadre Grohmann Facultad de Ingeniería/E.A.P de Ingeniería en Informática y Sistemas Asignatura: Investigación Operativa I año :Tercero-2015
Docente:, Ing. Porfirio Chata Página: 3
[b,f]=min(d);
%b=el menor valor
% f=indica la posición del elemento pivote
% fila pivote dividida el elemento pivote hasta end-1 dado que este elemento fue operado ya
xsol(f,1:end)=xsol(f,1:end)/xsol(f,q);
% hace operación entre filas aplicar eliminación de gauss
for i=1:1:size(xsol,1)
if i~=f
xsol(i,:)=xsol(i,:)- (xsol(i,q)*xsol(f,:))
end%end if
end%end for
end%end for
Definir una carpeta de trabajo en matlab
Crear una carpeta en el directorio de matlab
Universidad Nacional Jorge Basadre Grohmann Facultad de Ingeniería/E.A.P de Ingeniería en Informática y Sistemas Asignatura: Investigación Operativa I año :Tercero-2015
Docente:, Ing. Porfirio Chata Página: 4
Agregar la carpeta al Path de matlab
Universidad Nacional Jorge Basadre Grohmann Facultad de Ingeniería/E.A.P de Ingeniería en Informática y Sistemas Asignatura: Investigación Operativa I año :Tercero-2015
Docente:, Ing. Porfirio Chata Página: 5
Para ejecutar el programa
Universidad Nacional Jorge Basadre Grohmann Facultad de Ingeniería/E.A.P de Ingeniería en Informática y Sistemas Asignatura: Investigación Operativa I año :Tercero-2015
Docente:, Ing. Porfirio Chata Página: 6
Guardar el archivo en la carpeta de trabajo
Universidad Nacional Jorge Basadre Grohmann Facultad de Ingeniería/E.A.P de Ingeniería en Informática y Sistemas Asignatura: Investigación Operativa I año :Tercero-2015
Docente:, Ing. Porfirio Chata Página: 7
Última iteración con la matriz optima
Universidad Nacional Jorge Basadre Grohmann Facultad de Ingeniería/E.A.P de Ingeniería en Informática y Sistemas Asignatura: Investigación Operativa I año :Tercero-2015
Docente:, Ing. Porfirio Chata Página: 8
Matalab permite hacer una codificación del algoritmo, haciendo uso de un diseñador gráfico (GUI), para hacer uso de esa interfaz, es recomendable definir antes un espacio de trabajo en la computadora, allí se guardaran todos los archivos generados.
Seleccionar el GUI
Universidad Nacional Jorge Basadre Grohmann Facultad de Ingeniería/E.A.P de Ingeniería en Informática y Sistemas Asignatura: Investigación Operativa I año :Tercero-2015
Docente:, Ing. Porfirio Chata Página: 9
Opción por defecto (en blanco)
Seleccionar de la barra de herramientas los controles a
usar
Universidad Nacional Jorge Basadre Grohmann Facultad de Ingeniería/E.A.P de Ingeniería en Informática y Sistemas Asignatura: Investigación Operativa I año :Tercero-2015
Docente:, Ing. Porfirio Chata Página: 10
Dejar un diseño como se muestra en la imagen, hacer la configuración de los controles en sus opciones según se detallan abajo.
Para poder ingresar matrices en los EDIT, se debe modificar
el valor máximo y mínimo
Universidad Nacional Jorge Basadre Grohmann Facultad de Ingeniería/E.A.P de Ingeniería en Informática y Sistemas Asignatura: Investigación Operativa I año :Tercero-2015
Docente:, Ing. Porfirio Chata Página: 11
Configurar los valores del EDIT2
Universidad Nacional Jorge Basadre Grohmann Facultad de Ingeniería/E.A.P de Ingeniería en Informática y Sistemas Asignatura: Investigación Operativa I año :Tercero-2015
Docente:, Ing. Porfirio Chata Página: 12
Configurar los valores del EDIT3
Universidad Nacional Jorge Basadre Grohmann Facultad de Ingeniería/E.A.P de Ingeniería en Informática y Sistemas Asignatura: Investigación Operativa I año :Tercero-2015
Docente:, Ing. Porfirio Chata Página: 13
Configurar los valores del Text1, en este control no es necesario hacer modificaciones de máximo y minimo, porque solo se usara para mostrar los resultados.
Universidad Nacional Jorge Basadre Grohmann Facultad de Ingeniería/E.A.P de Ingeniería en Informática y Sistemas Asignatura: Investigación Operativa I año :Tercero-2015
Docente:, Ing. Porfirio Chata Página: 14
Para poder ingresar el código o visualizar la codificación pulsar
en esa opción “callBAck”
Universidad Nacional Jorge Basadre Grohmann Facultad de Ingeniería/E.A.P de Ingeniería en Informática y Sistemas Asignatura: Investigación Operativa I año :Tercero-2015
Docente:, Ing. Porfirio Chata Página: 15
se usara el código propuesto en las primeras hojas de esta práctica, la única diferencia radica en la captura de valores de los controles EDIT, y la transformación a matrices, porque los valores ingresados por los controles están en formato de texto.
El código de esta pestaña, para la captura de valores de los
EDit
Universidad Nacional Jorge Basadre Grohmann Facultad de Ingeniería/E.A.P de Ingeniería en Informática y Sistemas Asignatura: Investigación Operativa I año :Tercero-2015
Docente:, Ing. Porfirio Chata Página: 16
La matriz solución se almacena en XSOL, la cual esta en formato de matriz, para lo cual se hace una transformación a tipo texto, haciendo uso de los comandos del GUI de matlab.
El código para visualizar la
matriz solución
Universidad Nacional Jorge Basadre Grohmann Facultad de Ingeniería/E.A.P de Ingeniería en Informática y Sistemas Asignatura: Investigación Operativa I año :Tercero-2015
Docente:, Ing. Porfirio Chata Página: 17