TECNOLÓGICO DE ESTUDIOS SUPERIORES DE
JOCOTITLÁN
INGENIERÍA EN SISTEMAS COMPUTACIONALES
INVESTIGACIÓN DE OPERACIONES
ALUMNOS:
JOSE LUIS DOMINGUEZ BACILIO
JULIAN NICOLAS CAYETANO
SAMUEL GONZALEZ ROMERO
GERALDINE RAMIREZ NICOLAS
PROFESOR:
ING. JUAN CARLOS SUAREZ
PRÁCTICA 2: DESARROLLO DEL MÉTODO
VOGEL Y EL MÉTODO ESQUINA NORESTE
GRUPO: ISC-0301
TERCER SEMESTRE
OCTUBRE 2024
OBJETIVOS
OBJETIVO GENERAL
• Desarrollar y ejecutar un programa que implemente diversos métodos heurísticos,
como lo son el Método de la Esquina Noroeste y el Método de Vogel para poder
encontrar una solución efectiva a problemas complejos como los problemas de
transporte, evaluando sus características, funcionamiento y efectividad en la
optimización de recursos logísticos.
OBJETIVOS ESPECÍFICOS
• Diseñar un programa que aplique correctamente el Método de la Esquina Noroeste
para resolver problemas de transporte, garantizando que los valores de demanda y
oferta se respeten en todo momento.
• Programar el Método de Vogel para calcular una solución inicial que reduzca los
costos de transporte, considerando las penalizaciones asociadas a las
diferencias entre costos.
• Analizar y comparar los resultados obtenidos por el Método de la Esquina Noroeste
y el Método de Vogel en términos de costos, tiempo de ejecución y eficiencia.
• Verificar si las soluciones proporcionadas por ambos métodos cumplen con las
restricciones de oferta y demanda del problema de transporte y si son óptimas o
requieren ajustes
MÉTODO DE ESQUINA NORESTE
El Método de la Esquina Noroeste (o esquina superior izquierda) es un modelo
heurístico que se aplica a problemas de Programación Lineal, llamados Modelos de
Transporte. Estos modelos permiten encontrar una solución inicial que puede ser
mejorada en un futuro.
El Método de la Esquina Noroeste implica el mínimo de cálculos. Es uno de los
métodos más fáciles para determinar una solución inicial. Este también es
considerado el menos probable para dar una buena solución de “bajo costo” porque
ignora la magnitud relativa de los costos.
Pasos del método de la esquina noreste:
1. Iniciar en la esquina noreste: Se empieza en la celda de la esquina superior
izquierda (noreste) de la tabla de costos (matriz de costos).
2. Asignar oferta y demanda: En esta celda, se asigna la cantidad mínima
entre la oferta disponible de la fila y la demanda requerida de la columna.
Esta cantidad se resta tanto de la oferta de la fila como de la demanda de la
columna.
3. Moverse hacia la derecha o hacia abajo:
o Si la oferta de la fila se reduce a cero, se mueve hacia la siguiente fila
(abajo).
o Si la demanda de la columna se reduce a cero, se mueve hacia la
siguiente columna (a la derecha).
4. Repetir el proceso: Este proceso se repite hasta que todas las ofertas y
demandas sean satisfechas.
CARACTERISTICAS
• Este método es capaz de solucionar problemas de transporte o distribución
mediante la solución inicial que satisfaga todas las restricciones existentes,
sin que esto implique que se alcance el costo óptimo total.
• Tiene como ventaja frente a sus similares la rapidez de su ejecución, y es
utilizado con mayor frecuencia en ejercicios donde el número de fuentes y
destinos sea muy elevado.
VENTAJAS Y DESVENTAJAS DEL METODO ESQUINA NOROESTE.
Ventajas:
• El método de la esquina Noroeste proporciona una solución inicial básica,
pero casi nunca la solución óptima.
• Es fácil de aplicar y se llega a una solución de manera rápida.
• El método de la Esquina Noroeste proporciona una solución básica factible,
pero casi nunca la solución óptima.
Desventajas:
• No tiene en cuenta los costos de transporte de las mercancías, si no,
únicamente las cantidades
• Por la razón anterior difícilmente presenta una solución favorable.
Este método se utiliza frecuentemente como punto de partida para otros métodos
de optimización. Aunque es simple y rápido, tiende a no considerar los costos de
transporte, lo que puede resultar en soluciones subóptimas. A menudo se le
compara con el Método de Vogel, ya que este último busca minimizar los costos
desde el inicio, lo que puede llevar a soluciones más económicas. [1][2]
MÉTODO DE VOGEL
El Método de Vogel es un método heurístico que busca minimizar los costos de
transporte al considerar las penalizaciones por no asignar en las celdas de menor
costo. Se calcula la diferencia entre los dos costos más bajos de cada fila y columna
y se realiza la asignación en la celda con la mayor penalización. El Método de Vogel
produce la mejor solución básica desde el inicio.
Pasos del método Vogel:
1. Calcular las penalizaciones: Para cada fila y columna de la tabla de costos
(matriz de costos), se calcula la diferencia entre los dos costos más bajos.
Estas diferencias se denominan penalizaciones.
2. Seleccionar la penalización más alta: Se elige la fila o columna con la
penalización más alta. Este paso garantiza que la mayor pérdida en costo (o
la mayor "penalización") se minimice.
3. Asignación de oferta-demanda: Dentro de la fila o columna seleccionada,
se asigna la mayor cantidad posible a la celda con el costo más bajo. Esto
busca minimizar los costos en cada asignación.
4. Actualizar la tabla: Después de hacer una asignación, se reduce la oferta o
demanda de la fila o columna correspondiente. Si la oferta o la demanda se
reduce a cero, se elimina esa fila o columna de futuras consideraciones.
5. Repetir: El proceso se repite hasta que todas las ofertas y demandas sean
satisfechas.
Relación con otros métodos:
• Se considera más eficiente que el Método de la Esquina Noroeste, ya que
tiene en cuenta los costos desde el principio. Esto generalmente lleva a una
solución inicial más económica.
• El Método de Vogel se centra en problemas de transporte, pero también
puede ser utilizado como un paso previo antes de aplicar métodos de
optimización más complejos.[3][4]
Ventajas:
o Proporciona soluciones más económicas.
o Considera los costos desde el inicio.
Desventajas:
o Más complejo que el Método de la Esquina Noroeste.
o Puede ser más lento debido a los cálculos adicionales necesarios que
hay que realizar para poder sacar la solución óptima.
METODOLOGÍA
1. Para la elaboración del programa del método de esquina Noreste y método Vogel
se importaron las bibliotecas:
• NumPy, que realiza cálculos numéricos y permite la manipulación de
matrices de manera eficiente.
• Tkinter, que es la librería que nos permite crear interfaces gráficas de usuario
en Python, y con “from tkinter import messagebox” importamos la función de
la librería que nos permite mostrar mensajes emergentes al usuario en forma
de ventana. Véase la ilustración 1
Ilustración 1.- Importación de librerías
> > MÉTODO DE ESQUINA NORESTE < <
2. Posteriormente se define una función llamada esquina_noreste que recibe tres
parámetros: oferta, demanda y costos. Estos parámetros son esenciales para
aplicar el método de la esquina noreste en la resolución de problemas de transporte.
Véase la ilustración 2.
Ilustración 2.- Función esquina_noreste
3. Después, se realizó un comentario que explica el propósito de la función y
describe cada parámetro que recibe. Véase ilustración 3
Ilustración 3.- Comentario
4. Después se creó una matriz que se guardara en una variable llamada
asignación, y a esta variable se le asigna la función “np.zeros_like” donde np es
la abreviatura que se utiliza para llamar a la librería NumPy, zeros_like() es el
método de NumPy que crea del mismo tamaño y forma que tiene el parámetro
costos, pero esta está llena de ceros. Véase ilustración 4
Ilustración 4.- Matriz asignación
5. Seguido de lo anterior se inicializaron dos variables, i y j, que representan los
índices de fila y columna, respectivamente. Comienzan en cero, lo que significa que
el algoritmo comenzará desde la esquina noreste (esquina superior derecha) de la
matriz de costos. Véase la ilustración 5
Ilustración 5.- Inicialización de índice
6. El siguiente paso fue crear el bucle while, que este se ejecutará mientras se
cumplan las siguientes condiciones:
• i < len(oferta): Aquí nos indica mientras que i (que es un índice) debe ser
menor a la longitud que hay en oferta. Así que el bucle seguirá ejecutándose
mientras i no haya recorrido todos los elementos de oferta.
• j < len(demanda): Como en el caso anterior mientras que j sea menor a la
longitud que hay en demanda el bucle se seguirá ejecutando hasta que
termine de recorrer todos los elementos de demanda. Véase la ilustración
6
Ilustración 6.- Bucle principal del método esquina noreste
7. Inmediatamente se determina la cantidad a asignar, que es la menor entre la
oferta y la demanda actuales. Luego, se actualiza la matriz de asignaciones y se
restan las cantidades de la oferta y la demanda. Véase la ilustración 7
Ilustración 7.- Asignación de cantidades
8. El siguiente fragmento de código se puede expresar de la siguiente manera:
• if oferta[i] == 0: Verifica si la posición i de la lista/array oferta es 0, si es 0
ejecuta la siguiente línea de código dentro del bloque if, i += 1, donde si la
condición es verdadera incrementa el valor de i en 1, avanzando al siguiente
elemento de la lista oferta
• if demanda[i] == 0: realiza lo mismo que en el código anterior pero ahora
en la variable demanda. Véase la ilustración 8
Ilustración 8.- Movimiento a la siguiente fila o columna
9. Para finalizar con el método de esquina noreste se retornó la matriz de
asignaciones ya calculadas, que muestra cuántas unidades se han asignado entre
orígenes y destinos. Véase ilustración 9
Ilustración 9.- Retorno de resultados
>> MÉTODO DE VOGEL < <
10. Acto seguido del término del método noreste, se definió una nueva función
llamada penalizacion_vogel, que aplica el método de penalización de Vogel para
resolver problemas de transporte. Véase ilustración 10
Ilustración 10.- Función penalización_vogel
11. De igual manera se incluyó una descripción similar a la anterior, detallando los
parámetros y el valor de retorno. Véase ilustración 11
Ilustración 11.- Comentario Vogel
12. Seguidamente se hizo una copia de las ofertas y demandas originales para no
modificar los datos de entrada. También se inicializó una matriz de asignaciones en
ceros.
oferta = oferta.copy(): Crea una copia de la matriz de ofertas para evitar modificar
el original.
demanda = demanda.copy(): Crea una copia de la matriz de demandas para evitar
modificar el original.
asignacion = np.zeros_like(costos): Crea una matriz de asignaciones inicializada
con ceros, con la misma forma que la matriz de costos. Véase ilustración 12
Ilustración 12.- Inicialización de variables en Vogel
13. En este método también se creó un bucle que se ejecuta mientras haya ofertas
y demandas disponibles. Véase ilustración 13
Ilustración 13.- Bucle principal del método Vogel
14. Dentro del bucle se calculó la penalización para cada fila, evaluando la diferencia
entre el costo más bajo y el segundo costo más bajo para aquellas filas que tienen
oferta disponible.
Se Inicializa una lista para almacenar las penalizaciones de cada columna, luego
con for j in ran () Itera sobre cada columna (destino) de la matriz de costos.
Crea una lista de costos válidos para el destino j, es decir, aquellos orígenes cuya
oferta aún no ha sido agotada.
if len(costos_validos) > 1: Verifica si hay más de un origen con oferta disponible.
penalizacion_columna.append(max(costos_validos) - min(costos_validos)):
Calcula la penalización para la columna j como la diferencia entre el costo máximo
y mínimo de los orígenes disponibles. Si solo hay un origen disponible.
penalizacion_columna.append(0): Asigna una penalización de 0 ya que no hay
alternativas.Si la demanda del destino j está satisfecha.
penalizacion_columna.append(-1): Asigna una penalización de -1 para indicar
que esta columna no está disponible para asignación.Véase ilustración 14
Ilustración 14.- Cálculo de penalizaciones para filas
15. Similar al cálculo de penalizaciones para filas, se creó otro cálculo de
penalizaciones, pero ahora para las columnas, asegurándose de solo considerar
aquellas con demanda. Se realiza lo mismo hasta que se encuentre la penalización
de la columna Véase ilustración 15
Ilustración 15.- Cálculo de penalizaciones para columnas
16. Luego se compararon las penalizaciones calculadas y se seleccionó la fila o
columna con la mayor penalización para hacer la asignación. Véase ilustración 16
Ilustración 16.- Selección de la fila o columna con la mayor penalización
17. A continuación se asignó la cantidad mínima entre la oferta y la demanda
seleccionadas, y se actualizaron las matrices de asignación, oferta y demanda.
Véase ilustración 17
Ilustración 17.- Asignación de cantidades en VogeL
18. Se añadió el siguiente fragmento de código en donde representa que, si una fila
o columna se agota, los costos se actualizan a infinito para evitar futuras
selecciones. Véase ilustración 18
Ilustración 18.- Actualización de costos
19. Similar al método anterior, se agregó esta línea que retorna la matriz de
asignaciones calculadas, es decir va actualizar la tabla o matriz hasta que nos de
ceros tanto en la oferta como en la demanda. Véase ilustración 19
Ilustración 19.- Retorno de resultados en Vogel
>>PROCESAR DATOS DE USUARIO<<
20. Finalmente vamos a definir una función para que nos permita ingresar, leer y
aguardar los datos que se le pida al usuario, para lograr un buen procesamiento de
datos de usuario se escribió primeramente la función precesar_datos, la cual recoge
y procesa los datos ingresados por el usuario en la interfaz. Véase ilustración 20
Ilustración 10.- Función procesar_datos
21. Dentro de la función se obtuvieron los números de orígenes y destinos, leyendo
las matrices de costos, ofertas y demandas desde los campos de entrada, en
num_origenes nos va a permitir ingresar los datos que usuario ingrese asi mismo
como los va a leer y aguardar en la triz.. Véase ilustración 21
Ilustración 11.- Captura de datos desde la interfaz
22. Posteriormente se validaron las dimensiones de la matriz de costos y las
longitudes de ofertas y demandas, mostrando un mensaje de error en caso de que
hubiera incongruencias. Véase ilustración 22
Ilustración 122.- Validación de dimensiones
23. Dependiendo de la opción seleccionada por el usuario, se ejecutó a el método
correspondiente y se almacenó el resultado en una variable. Véase ilustración 23
Ilustración 23.- Ejecución del método seleccionado
24. Después se añadió una excepción, en donde cualquier error durante el
procesamiento se capturó y se mostró al usuario mediante un mensaje emergente.
Véase ilustración 24
Ilustración 24.- Manejo de errores
25. Con posterioridad se inició la ventana principal de la interfaz gráfica y se
estableció su título. Véase ilustración 25
Ilustración 25.- Creación de la ventana principal
26. Enseguida de lo anterior se crearon los elementos de la interfaz, como entradas
de texto y etiquetas, para que el usuario pudiera ingresar datos. Véase ilustración
26
Ilustración 26.- Definición de variables de interfaz
27. Acto seguido se añadieron etiquetas y se posicionaron los campos de entrada
en la cuadrícula de la ventana, es decir etiquetas que nos permitan saber los datos
que hay que ingresar. Véase ilustración 27
Ilustración 27.- Configuración de etiquetas y campos de entrada
28. Luego se proporcionaron opciones para que el usuario seleccionara el método
a utilizar, utilizando botones de radio, estos botones va a permitir seleccionar el
método que se vaya a utilizar para generar los resultados. Véase ilustración 28
Ilustración 28.- Opciones de selección de método
29. Se añadió un botón que, al ser presionado, ejecuta la función procesar_datos
para que nos permita calcular la opción deseada una vez seleccionada . Véase
ilustración 29
Ilustración 29.- Botón para ejecutar el cálculo
30. Inmediatamente se creó una etiqueta que mostrará el resultado de los cálculos
realizados. Véase ilustración 30
Ilustración 30.- Mostrar resultados
31. Finalmente se inició el bucle principal de la interfaz gráfica, permitiendo que la
ventana permanezca abierta y responda a las interacciones del usuario, es decir la
imagen onterfaz que nos va a mostrar. Véase ilustración 31
Ilustración 31.- Inicialización de ventana
RESULTADOS
Los resultados obtenidos son los esperados, se aprendieron los métodos
heurísticos, tanto sus funciones como características que nos llevó al siguiente
punto de los objetivos que se tenían, crear un código donde se vean implementados
los métodos que se acaban de llevar a cabo, dando así la culminación del proyecto.
En esta práctica se tuvieron que hacer muchas pruebas para al fin dar con el
resultado esperado, se podría decir que el proceso de cometer errores en la
fabricación del código nos llevó a ver como podíamos solucionar los problemas que
teníamos para que en el momento de la implementación el código funcionara de la
manera debida. Dando así el paso al código que genera un programa que pide al
usuario elegir entre cualquiera de los dos métodos vistos en clase y resuelve los
problemas correspondientes utilizando la lógica y algoritmos de los métodos vistos
para que así pueda generar un resultado correcto y optimo.
1. Se tomo el ejemplo de clase que se nos otorgó para trabajar, debido
a eso iniciamos hacer la tabla de prueba
2. Comenzamos ingresando el total de orígenes y el total de destinos.
Véase en la Img 1
Img 1ingreso de origen y destino
3. Por consiguiente, agregamos las ofertas separadas con un espacio
para que se separe en el momento de la tabla, es decir para que tome
los valores de la matriz, hacemos lo mismo con las demandas dejando
espacio para colocar los valores. Véase en la Img 2
Img 2Valores de ofertas y demandas
4. Seguimos con los costos, ahí los ingresamos en una matriz para que
sea más fácil ejecutar los pasos, como si estuviera en una tabla. Véase
en la Img 3
Img 3Matriz de costos
5. Ya por terminar damos la opción de realizar el tipo de método que
quisiéramos ya sea Vogel o Esquina Noreste. Véase en la Img 4
Img 4selección del método
6. Finalizamos con una matriz donde nos muestra donde se colocan los
valores óptimos, dándonos igual el resultado final. Véase en la Img 5,6
Img 5resultado Voguel
Img 6resultado método Esquina Noreste
Img 7Resultado final
CONCLUSIONES
A lo largo del proyecto se cumplió el objetivo principal, que consistía en implementar
y ejecutar un programa que aplicara diversos métodos de investigación de
operaciones, como el Método de la Esquina Noroeste y el Método de Vogel,
obteniendo resultados exitosos en el proceso.
Durante la implementación del Método de la Esquina Noroeste, se presentaron
algunos desafíos relacionados con el balance entre rapidez y precisión. Aunque este
método es eficiente para proporcionar una solución inicial en problemas de
transporte, se identificaron limitaciones al intentar optimizar los costos. El sistema
tendía a ofrecer una solución inmediata sin evaluar si era la opción más económica,
lo que evidenció una falta de optimización en la utilización de los recursos.
En cuanto al Método de Vogel, el principal reto residió en la complejidad del cálculo
de penalizaciones. El algoritmo requiere una mayor precisión para asignar
correctamente los recursos y reducir los costos adicionales, lo que resultó ser más
laborioso de lo anticipado. Sin embargo, una vez superadas las dificultades iniciales,
se comprendió la importancia de este método para optimizar la distribución de
manera eficiente.
La integración de ambos métodos en un único programa también resultó desafiante.
Fue necesario realizar ajustes continuos al código para garantizar que ambos
algoritmos funcionaran de manera coherente y lógica. Este proceso implicó
múltiples iteraciones y pruebas hasta que se logró una implementación robusta.
En resumen, el proyecto fue exitoso, aunque no estuvo exento de complicaciones.
Estos desafíos sirvieron como lecciones clave para comprender la importancia de
una buena planificación y ejecución en el ámbito de la investigación de operaciones,
destacando el valor del proceso de prueba y error.
REFERENCIAS
• [1] H. W. Kuhn, "El Método de Esquina Noroeste,” Revista de Logística Naval, vol.
2, no. 1, pp. 83-97, 1955.
• [2] W. L. Berry, "Programación lineal: métodos y aplicaciones,” John Wiley & Sons,
Nueva York, NY, EE. UU., 1989.
• [3] H. A. Taha, Investigación de Operaciones, 9a ed. Prentice Hall, 2012, pp. 175-
208.
• [4] E. R. Arias. “Método Vogel: Optimización de costes de transporte y logística”.
• [5] TAHA, HAMDY A. “Investigación de Operaciones”. PEARSON EDUCACION,
MÉXICO, 2012