Documentos de Académico
Documentos de Profesional
Documentos de Cultura
i
ii
Trabajo Fin de Grado
Ingeniería de Tecnologías Industriales
Autor:
Carlos Pita Manzanares
Tutor:
Alicia Robles Velasco
Profesor Colaborador
iii
iv
Proyecto Fin de Carrera: Aplicación del modelo de transporte para optimizar el
aprovisionamiento de supermercados a nivel provincial y regional
El tribunal nombrado para juzgar el Proyecto arriba indicado, compuesto por los
siguientes miembros:
Presidente:
Vocales:
Secretario:
Sevilla, 2022
vii
viii
Agradecimientos
A mi madre por ser la razón por la que empecé y acabé esta carrera, cada aprobado
conseguido tiene su sello. A mis amigos de la escuela, por ser el motor para continuar
cada día y hacer bonitas las tardes en el fondo de la biblioteca. A mi tutora Alicia Robles
por su apoyo y guía para conseguir los objetivos marcados. A Alex, por su ayuda
inestimable en el proyecto.
ix
x
Resumen
El protagonismo que está tomando la logística en la actualidad nace del acercamiento de la red
comercial al usuario final. La competencia obliga a las grandes superficies a disminuir costes, y el de
transporte es uno de ellos. En este trabajo se pretende aplicar el modelo de optimización conocido
como problema de transporte para minimizar el coste total de Mercadona en abastecer a sus
supermercados.
Se profundizará en el marco teórico del modelo matemático y se propondrá, haciendo uso de este, una
solución para transportar de los centros logísticos a los supermercados de la provincia de Sevilla y de
Andalucía, variando la elección de los costes. Ante la problemática de los excesos de demanda
respecto a la oferta de los bloques logísticos, se pretende determinar los supermercados que quedarán
desatendidos, las consecuencias y soluciones.
En este trabajo se resuelven dos casos, los cuales requieren del uso de dos herramientas distintas. En
primer lugar, se utiliza el Solver de Excel para determinar la estrategia óptima de envíos en la provincia
de Sevilla. En segundo lugar, y debido al mayor número de variables y restricciones del modelo, se
utiliza la colección de paquetes Pyomo en Python para resolver el caso de la comunidad autónoma de
Andalucía. En ambos casos, se demuestra que los resultados obtenidos reducen al máximo los costes
de transporte, y siendo estos coherentes.
xi
xii
Abstract
The prominence that the field of logistics is currently gaining stems from a closer approach of the
commercial network to the end user. Competition forces department stores to reduce costs, and
transport is one of them. This paper aims to apply the optimization model known as the transportation
problem to minimize Mercadona's total cost of supplying its supermarkets.
The theoretical framework of the mathematical model will be addressed and, making use of it, a
solution will be proposed to optimize the costs of transporting from logistics centers to supermarkets
in the province of Seville and Andalusia. Facing the problems of excess demand, the objective will be
to determine the undersupplied supermarkets and how to solve the challenge.
In brief, an optimal transport strategy for the Valencian supermarket chain will be determined using
both Python packages and tools and the Excel Solver.
In this paper two cases are solved, which require the use of two different tools. Firstly, the Excel Solver
is used to determine the optimal shipping strategy in the province of Seville. Secondly, and due to the
greater number of variables and restrictions of the model, the collection of Pyomo packages in Python
is used to solve the case of the region of Andalusia. In both cases, it is shown that the results obtained
minimize transport costs, and these are consistent.
xiii
xiv
Índice
Agradecimientos ix
Resumen xi
Abstract xiii
Índice xv
Índice de tablas xviii
Índice de figuras xxi
1. Introducción 1
2. Marco teórico 5
3.1 Variables 13
3.3 Costes 16
4.2 Python 20
xv
4.2.1 Pyomo 21
4.2.2 Pandas 21
4.2.3 Geopy 22
5. Implementación y resultados 23
6. Conclusiones 85
Referencias 87
Anexo. Códigos de Python 89
Programa 1. Cálculo de distancias geodésicas entre centros logísticos supermercados. 89
Programa 2. Resolución del problema de transporte para el caso regional. 90
Programa 3. Creación de grafos con coordenadas UTM 94
xvi
xvii
Índice de tablas
Tabla 1. Tabla de costes del problema de transporte. Fuente: Elaboración propia .......... 8
Tabla 2. Tabla de flujos del problema de transporte. Fuente: Elaboración propia ........... 9
Tabla 3. Problema de transporte. Fuente:Elaboración propia ........................................ 10
Tabla 4. Distancia entre centros logísticos y supermercados de municipios. Fuente:
Elaboración propia .......................................................................................................... 18
Tabla 5. Tabla de flujos antes de ser rellenada por el Solver. Fuente: Elaboración propia
........................................................................................................................................ 19
Tabla 6:Centros logísticos, superficie y oferta. Fuente: Elaboración propia.................. 23
Tabla 7. Supermercados por municipio de la provincia. Fuente: Elaboración propia.... 24
Tabla 8. Distancia en línea recta entre centros logísticos y supermercados de la provincia.
Fuente: Elaboración propia ............................................................................................. 25
Tabla 9. Solución de problema de transporte con la distribución de camiones a cada
supermercado. Fuente: Elaboración propia. ................................................................... 27
Tabla 10. Tabla resumen caso provincial km línea recta. Fuente: Elaboración propia .. 28
Tabla 11. Distancia en carretera entre centros logísticos y supermercados de la provincia.
Fuente: Elaboración propia ............................................................................................. 29
Tabla 12.Solución de problema de transporte con la distribución de camiones a cada
supermercado. Fuente: Elaboración propia. ................................................................... 30
Tabla 13. Tabla resumen caso provincial km en carretera. Fuente: Elaboración propia 35
Tabla 14. Tabla de nodos origen para exceso de producción. Fuente: Elaboración propia
........................................................................................................................................ 35
Tabla 15.Solución de problema de transporte. Exceso producción. Fuente: Elaboración
propia. ............................................................................................................................. 37
Tabla 16. Comparación problema equilibrado y sobreproducción. Fuente: Elaboración
propia .............................................................................................................................. 38
Tabla 17. Tabla de nodos origen para exceso de demanda. Fuente: Elaboración propia 42
Tabla 18.Solución de problema de transporte. Exceso de demanda. Fuente: Elaboración
propia .............................................................................................................................. 44
Tabla 19. Comparación demanda y abastecido. Fuente: Elaboración propia ................. 48
Tabla 20. Corrección al problema de exceso de demanda. Fuente: Elaboración propia 51
Tabla 21. Supermercados por municipio de Andalucía. Fuente: (Mercadona, 2021) .... 52
Tabla 22. Distancia entre supermercados y centros logísticos de Andalucía. Fuente:
(Elaboración propia). ...................................................................................................... 55
Tabla 23. Capacidad de los centros logísticos para el caso regional. Fuente: Elaboración
propia .............................................................................................................................. 59
Tabla 24. Camiones abastecidos desde el centro de Antequera. Fuente: Elaboración
propia .............................................................................................................................. 62
xviii
Tabla 25. Camiones abastecidos desde el centro de Guadix. Fuente: Elaboración propia
........................................................................................................................................ 63
Tabla 26. Camiones abastecidos desde el centro de Huévar. Fuente: Elaboración propia
........................................................................................................................................ 64
Tabla 27.Tabla resumen caso regional y equilibrado. Fuente: Elaboración propia ....... 72
Tabla 28. Capacidad de los centros logísticos. Caso regional con exceso de producción.
Fuente: Elaboración propia ............................................................................................. 73
Tabla 29.Camiones abastecidos desde el centro de Antequera Exceso Producción. Fuente:
Elaboración propia .......................................................................................................... 74
Tabla 30. Camiones abastecidos desde el centro de Guadix Exceso Producción. Fuente:
Elaboración propia .......................................................................................................... 75
Tabla 31. Camiones abastecidos desde el centro de Huévar. Exceso Producción. Fuente:
Elaboración propia .......................................................................................................... 76
Tabla 32. Análisis exceso de producción. Fuente: Elaboración propia .......................... 77
Tabla 33. Tabla resumen caso regional y exceso de producción. Fuente: Elaboración
propia .............................................................................................................................. 77
Tabla 34. Capacidad de los centros logísticos. Caso regional con exceso de demanda.
Fuente: Elaboración propia ............................................................................................. 78
Tabla 35. Camiones abastecidos desde el centro de Antequera. Exceso demanda. Fuente:
Elaboración propia .......................................................................................................... 78
Tabla 36. Camiones abastecidos desde el centro de Guadix. Exceso demanda. Fuente:
Elaboración propia .......................................................................................................... 79
Tabla 37.Camiones abastecidos desde el centro de Huévar. Exceso demanda. Fuente:
Elaboración propia .......................................................................................................... 80
Tabla 38. Supermercados sin abastecer. Caso regional. Fuente: Elaboración propia. ... 81
xix
xx
Índice de figuras
Figura 1.Cuota de mercado cadena de supermercados 2021. Fuente: (Orús, 2022) ........ 2
Figura 2. Esquema de la Estrategia del 8. Fuente: (Palau, 2020) ..................................... 3
Figura 3.Representación gráfica del problema de transporte. Fuente: Elaboración propia
.......................................................................................................................................... 7
Figura 4. Esquema del algoritmo Branch & Bound. Fuente:(Shokrhy & Tanaka, 2018)
........................................................................................................................................ 11
Figura 5. Mapa con lo centros logísticos de Mercadona. Fuente:(Brines, 2018) ........... 14
Figura 6. Centro logístico de Huévar. Fuente: (Mercadona, 2018) ................................ 15
Figura 7. Interior del centro logístico de Guadix. (Mercadona,2013) ............................ 15
Figura 8. Interfaz del Solver antes de ser ejecutado. Fuente: Elaboración propia ......... 20
Figura 9. Distancia geodésica. Fuente:(Pandey, s.f.)...................................................... 22
Figura 10. Grafo de abastecimiento del centro de Antequera. Caso Provincial y
Equilibrado ..................................................................................................................... 32
Figura 11. Grafo de abastecimiento del centro de Huévar. Caso Provincial y Equilibrado
........................................................................................................................................ 33
Figura 12. Superposición de grafos de las Figuras 10 y 11 ............................................ 34
Figura 13.Interfaz del Solver antes de ser ejecutado para problema exceso de
producción. Fuente: Elaboración propia ......................................................................... 36
Figura 14. Grafo de abastecimiento del centro de Antequera. Caso Provincial y Exceso
de Producción ................................................................................................................. 39
Figura 15. Grafo de abastecimiento del centro de Huévar. Caso Provincial y Exceso de
Producción. ..................................................................................................................... 40
Figura 16. Grafos de las figuras 15 y 14 superpuestos ................................................... 41
Figura 17. Interfaz del Solver antes de ser ejecutado para problema exceso de demanda.
Fuente: Elaboración propia ............................................................................................. 43
Figura 18. Grafo de abastecimiento del centro de Antequera. Caso Provincial y Exceso
de Demanda. ................................................................................................................... 45
Figura 19. Grafo de abastecimiento del centro de Huévar. Caso Provincial y Exceso de
Demanda ......................................................................................................................... 46
Figura 20. Grafos de la figura 19 y 18 superpuestos ...................................................... 47
Figura 21. Distribución de supermercados sin abastecer. Fuente: Google Maps ........... 49
Figura 22. Coordenadas en fichero Excel. Fuente: Elaboración propia ......................... 55
Figura 23. Abastecimiento del centro de Antequera para el caso regional y equilibrado.
........................................................................................................................................ 66
Figura 24. Abastecimiento del centro de Huévar para el caso regional y equilibrado. .. 67
xxi
Figura 25. Zoom de la figura 24 ..................................................................................... 68
Figura 26. Abastecimiento desde Guadix. Caso Regional y equilibrado ....................... 69
Figura 27. Zoom Figura 26 ............................................................................................. 70
Figura 28. Mapa de la provincia de Granada. Fuente: (Ideal Granada, 2017) ............... 82
Figura 29. Localización de los supermercados sin abastecer. Fuente: Elaboración propia
........................................................................................................................................ 82
Figura 30. Propuesta de ubicación de nuevo centro logístico. Fuente: Elaboración propia
........................................................................................................................................ 83
Figura 31. Localización centro San Isidro respecto a localidades en Almería. Fuente:
Elaboración propia .......................................................................................................... 84
xxii
xxiii
xxiv
1. INTRODUCCIÓN
El transporte es uno de los pilares fundamentales en el campo de la logística. Su coste es, en
definitiva, el que más impacto genera y sobre el que recae mayor importancia a la hora de
optimizar procesos en este ámbito.
Tanto las grandes multinacionales como las pequeñas empresas tratan de reducir los costes de
transporte de diferentes maneras. En (Or, 2020) y (Melero, 2020) se detallan algunas de ellas:
• Monitoreando la carga y colocando “checkpoints” en cada etapa del proceso para evitar
no solo perdidas de material, si no también discrepancias entre los receptores del material
y los transportistas.
En este documento se desarrollará un análisis y estudio para optimizar las rutas de transporte entre
los centros logísticos y los supermercados a nivel provincial y regional de la cadena Mercadona.
1
Figura 1.Cuota de mercado cadena de supermercados 2021. Fuente: (Orús, 2022)
Otra medida de esta estrategia y que tiene un impacto notable en la reducción de los costes de
transporte es la “descarga silenciosa”. Mercadona descarga mercancía en horarios con poco
tráfico, lo cual permite transportar más ágilmente y reduce costes en combustible y ahorro de
tiempo.
En logística, como en cualquier otro sector, es importante reconocer las habilidades de otras
empresas y utilizarlas en beneficio propio. En (Miranda, 2021) se afirma que cambiar las cajas
rígidas por las plegables que desarrolla Logifruit, empresa nacional experta en procesos logísticos,
ha ahorrado 96.710 trayectos a la empresa valenciana. En el artículo, la responsable de
comunicación de la empresa asegura que este tipo de caja ocupa el mismo lugar que 3 de las
rígidas y convencionales, además de tener una larga vida útil.
Todo esto, sumado a una diversa flota que cuenta con vehículos de gran capacidad como
megatrailers y bitrailers, estos últimos con una capacidad de pallets aun mayor a los camiones
convencionales, justifican el dominio de la cadena sobre su competencia.
2
Figura 2. Esquema de la Estrategia del 8. Fuente: (Palau, 2020)
En este escrito, por tanto, se buscará resolver el problema de transporte desde los centros
logísticos de Mercadona a sus supermercados, primero a nivel provincial y ampliándolo al caso
de Andalucía.
Primero, en la Sección 2, se hará un estudio del marco teórico del problema de transporte,
explicando su origen, detallando el modelo matemático y su cabida en la programación lineal,
además de desarrollar sus variantes.
Una vez introducidos en materia, se describirá el problema a resolver en la Sección 3. Con los
conceptos introducidos en el primer apartado, habrá que modelar la problemática de como
abastecer los supermercados desde los distintos centros logísticos. Se identificarán variables y
quedará el modelo definido y claro, listo para su resolución.
En la Sección 4, antes de mostrar y comentar los resultados, abordaré que herramientas se han
utilizado (Excel para el abastecimiento provincial y Python para el regional) y sus respectivos
módulos, librerías, paquetes… Explicaré paso a paso el procedimiento a seguir en ambos casos.
Una vez presentadas las soluciones, estas se compararan en la Sección 5 en cada uno de los niveles
para tres casos: problema equilibrado donde se oferta lo demandado, problema con exceso de
demanda y con exceso de producción. Las particularidades de cada caso y los resultados más
importantes serán analizados en detalle, comparando costes, distribuciones y planteando posibles
soluciones para supermercados sin abastecer.
3
4
2. MARCO TEÓRICO
2.1 El modelo de transporte. Origen.
Sin embargo, (Schrijver, 2002) afirma que ya en la década de 1930 A.N Tolstoi en su artículo
“Métodos para encontrar el kilometraje total mínimo en la planificación del transporte de carga
en el espacio” (traducido del ruso) estudió el problema del transporte aplicado a la distribución
de sal y cemento entre orígenes y destinos mediante la red ferroviaria soviética. Tolstoi desarrolló
una heurística para resolver un problema de transporte con 10 orígenes y 68 destinos.
Con el desarrollo de la Segunda Guerra Mundial, creció el interés en este campo. Tjalling
Koopman, matemático y economista estadounidense-neerlandés, escribió en 1942 “Exchange
Ratios between Cargoes on Various Routes” en el que resolvía el problema de seleccionar las
rutas de envío óptimas de cargueros minimizando el coste del transporte.
5
2.2 El problema del transporte
La programación lineal pretende maximizar o minimizar, es decir, optimizar, funciones lineales
sujetas a una serie de restricciones (también lineales). El problema de transporte, por su
naturaleza, pertenece a este tipo de problemas.
El objetivo del modelo es determinar el plan de distribución de una serie de orígenes a una serie
de destinos, minimizando el coste del transporte.
Sea !!" la cantidad de producto a ser transportada del origen i al destino j, el coste total será
∑!," #!" !!" siendo #!" el coste unitario de transportar el producto de i a j.
En relación con las restricciones que se deben respetar, la cantidad a transportar !!" debe ser igual
a la oferta del origen %! , es decir:
Además, y como es obvio, la cantidad a transportar !!" debe ser igual a la demanda del destino
(" , es decir:
Para modelar el problema suponemos que esta balanceado o equilibrado, y por tanto, que la
oferta total de los orígenes es igual a la demanda total de los destinos, esto es:
) %! = ) (" (3)
! "
sujeto a
6
2.3 Análisis desde la teoría de grafos
Al analizar gráficamente este problema, definimos dos tipos de nodos: de origen y de destino.
Junto a los nodos de origen se sitúan las cantidades producidas por cada nodo y en los nodos de
destino, los valores de demanda. Como se observa en la Figura 3, asociado a cada arco hay un
coste #!" y una cantidad !!" .
Los grafos asociados al modelo de transporte son grafos bipartitos completos. En (Diestel, 2017)
se definen estos tipos de grafos como aquellos que admiten una división en 2 particiones y todos
los vértices de una partición están conectados a los de la otra partición y viceversa. En
(Ekanayake, Daundasekara, & Perera S, 2021) se explica un algoritmo heurístico que aprovecha
las características de estos tipos de grafo para resolver problemas de transporte.
7
2.4.1 Tabla de costes
En las filas se sitúan los nodos de origen :! y en las columnas los nodos de destino ;" , que
tendrán asignada una oferta %% y una demanda (& respectivamente, de tal forma que cada casilla
(i,j) se asocie a la variable #!" , es decir, el coste de transportar el material de :! a ;" . Son siempre
datos del problema.
!! !" !# … !$ Oferta
… … … … … … …
8
2.4.2 Tabla de flujos
Esta tabla tiene las mismas dimensiones que la de costes. Contiene las variables del problema.
Las filas seguirán siendo los orígenes y las columnas, los destinos. La variable !!" será la cantidad
transportada del nodo origen :! al nodo destino ;" .
!! !" !# … !$ Oferta
… … … … … … …
Esta tabla permite identificar rápidamente si el problema está equilibrado. La suma de las
ofertas de los nodos origen ∑! %! debe coincidir con la suma de las demandas ∑" (" de los
nodos destino.
Para iniciar este método, se debe obtener una solución básica inicial. Uno de los métodos para
hallarla es el método de la esquina noroeste. El algoritmo a seguir viene descrito detalladamente
en (OpenCourseWare , s.f.).
9
Tabla 3. Problema de transporte. Fuente:Elaboración propia
;' ;( ;) … ;* Oferta
… … … … … … …
Demanda (' (( () … (*
Elegimos la esquina noroeste de la tabla, es decir, la casilla !'' y asignamos el mayor flujo
posible. Es decir, o toda la oferta correspondiente a ese origen /' o toda la demanda del destino
;' . Para que se cumplan las restricciones, elegiremos el mínimo entre estos dos. Por lo tanto, la
expresión formal para esta asignación sería !!" = min@/! , A" B.
Tras esta primera asignación, volvemos a repetir el algoritmo. En el caso en el que solo quede
una fila o columna, se asignan todas las unidades que estén sin asignar. Cabe destacar de este
método que no tiene en cuenta los costes de transporte, lo que no lo hace muy interesante.
Otro método de obtención de solución básica inicial a tener en cuenta es el de Vogel. Es muy
similar al de la esquina noroeste, pero este si tiene en cuenta los costes a lo largo del algoritmo.
Una vez se ha definido una solución admisible de partida, el algoritmo Simplex trata de encontrar
nuevas soluciones que tengan un menor coste que la solución actual. Para ello, se recurre a las
variables del dual asociadas a las restricciones del modelo original, o modelo primal. El algoritmo
Simplex es un método iterativo que siempre encuentra el óptimo de modelos de programación
lineal.
Realizada la formulación asociada al problema de transporte, habrá que calcular los valores
indicadores asociados a las variables no básicas para determinar si la solución básica inicial puede
mejorar o no. El valor de estos indicadores y sus signos reflejarán si la variable no básica debe
enterar en la base.
10
2.6 Branch and Bound
El algoritmo de Branch and Bound, que en español se traduce como Ramificación y poda, es un
método de optimización. De (Guerequeta & Vallecillo, 1998), donde se hace un profundo análisis
del algoritmo y sus aplicaciones, podemos extraer sus características principales. Cabe destacar
que es una variante del Backtracking o la técnica de vuelta atrás, que viene igualmente detallada
en el capítulo 6 del texto referido.
Branch and Bound se basa en la generación de un árbol decisión como el de la Figura 4, creando
descendientes de una manera sistemática. De cada nodo ramifican posibles soluciones posteriores
a la actual. La característica principal del algoritmo es que detecta cuando la ramificación
escogida deja de ser óptima, por lo que descarta o “poda”.
Figura 4. Esquema del algoritmo Branch & Bound. Fuente:(Shokrhy & Tanaka, 2018)
Se denomina nodos vivos aquellos con posibilidad de ser ramificados. Se deben almacenar en una
estructura para que puedan ser recorridos durante la estrategia de búsqueda y se hará de manera
distinta dependiendo de la estrategia de búsqueda. Para un problema de transporte, al incluir la
particularidad de tener costes #!" existe una estrategia que prioriza la existencia de estos y utiliza
una función de costes para el proceso de ramificación.
Por lo tanto, y resumiendo el texto referenciado anteriormente, primero se debe seleccionar uno
de los nodos vivos según la estrategia seguida. Una vez escogido, se ramifica, es decir, se expande
el nodo con los posibles nodos hijos del seleccionado. Finalmente, se poda algunos de los nodos
creados al expandirse el escogido inicialmente (también dependiendo del criterio escogido) y los
no podados vuelven a la estructura de nodos vivos.
La razón por la que se ahonda en este algoritmo es que es el que utiliza internamente el solver
GPLK. Este utiliza el método simplex revisado y el método de punto interior primal-dual para
problemas no enteros y el algoritmo de Branch and Bound junto con cortes enteros mixtos de
Gomory para problemas enteros (mixtos).
Las variables de decisión !!" son binarias y valdrán 1 si el origen :! es asignado al destino ;"
y 0 si no se da este caso.
La principal diferencia de este modelo con el de transporte radica, por lo tanto, en la naturaleza
de sus variables !!" . Además, en este modelo se asocian igual numero de orígenes que destinos.
Se formula tal que:
11
*+,+-+./0 . = ) #!" !!" (8)
!,"
sujeto a
Como se explica en (OpenCourseWare , s.f.), los costes de cada origen a cada destino vienen
condensados en una matriz de costes, de misma estructura y naturaleza que la explicada para el
problema de transporte.
Puede darse el caso de que el problema no esté balanceado. Recordando lo que se explico al
definir el problema de transporte, esto se da cuando la oferta total de los orígenes no es igual a
la demanda total de los destinos, es decir,
(12)
) %! ≠ ) ("
! "
Cuando esto ocurre, se deberán crear destinos u orígenes ficticios dependiendo del caso.
Si la oferta total es mayor que la demanda total, es decir, ∑! %! > ∑" (" , significa que hay parte
de la oferta que se queda sin distribuir. Para resolverlo, se crea un destino ficticio que tendrá una
demanda ficticia.
+ * (13)
(*,' = ) %! − ) ("
!-' "-'
Si la demanda total de los destinos es mayor que la oferta total de los orígenes, significa que la
oferta no es capaz de satisfacer lo pedido y se deben crear orígenes ficticios que tendrán una oferta
ficticia:
* +
(14)
%+,' = ) (" − ) %!
"-' !-'
12
3. PROPUESTA DE CASO: LA LOGÍSTICA
DE MERCADONA
El objetivo principal de este trabajo es optimizar la distribución de los centros logísticos de la
cadena Mercadona a sus supermercados, tanto a nivel provincial como regional. Para ello, se
aplicará el modelo de transporte anteriormente explicado con el objetivo de minimizar el coste
total. El modelo en cuestión adoptará la siguiente forma para el caso de estudio:
3.1 Variables
En el marco teórico se explicó que las variables !!" eran las cantidades a ser transportadas. En
este caso, serán camiones que llevarán la mercancía. Se supondrá que todo el material que se
transporta es del mismo tipo para eliminar cualquier variable sobre el orden o la importancia de
ser distribuido primero de ciertos productos. Por lo tanto, !!" = , equivaldrá a n camiones a ser
transportados de i a j.
Cada nodo de destino lleva asignada una demanda consigo. Para obtener los valores de la
demanda se ha seguido la siguiente lógica. Hemos determinado que las variables !!" corresponden
a camiones. Por lo tanto, tanto los valores de demanda como de oferta deberán tener la misma
unidad.
Para determinar la demanda, hemos definido que cada supermercado necesita un camión para ser
abastecido. De esta manera, la demanda de un municipio con m supermercados será m.
Los nodos de destino serán municipios y no supermercados porque los costes de transporte a cada
uno de los supermarcados de un mismo municipio son prácticamente iguales, por lo tanto no se
diferencian unos de otros y se agrupan. Los datos con los supermercados en cada municipio se
obtienen de (Mercadona, 2021). Provienen de un documento que recoge todos los supermercados
de la cadena que participaron en una recogida de alimentos con carácter solidario en 2021. En
ella hay 1603 supermercados de los 1632 que hay en el país, por lo que es una muestra
prácticamente idéntica a la realidad.
Los centros logísticos que harán de nodos origen son los que aparecen en la figura 5. En cada
caso de estudio se especificará cuáles son los escogidos. Para medir la oferta de cada centro
logístico se ha elegido como dato la superficie construida de cada centro. Es una medida que
refleja la capacidad de cada centro de abastecer y distribuir, de ahí su elección.
Sin embargo, dado que se debe operar con las mismas unidades, habrá que transformar las
unidades de superficie en número de camiones que puede proporcionar cada centro para distribuir
el material. Para ello, se sigue la siguiente ecuación:
13
I%4H0J+#+H ! (15)
,º#/-+6,HI! = ∗ 7H-/,7/ 565/K
I%4H0J+#+H 565/K
Siendo I%4H0J+#+H ! la superficie del centro logístico, s%4H0J+#+H 565/K la suma de las
superficies de los centros logísticos del caso en cuestión y 7H-/,7/ 565/K el número total de
camiones de demanda.
De esta manera, estamos forzando a que el problema de transporte sea equilibrado y demanda
total= oferta total. También se analizarán los casos en los que esto no ocurra y haya exceso de
oferta o de demanda.
Para el caso de la provincia de Sevilla, se escogen los centros de Huévar y Antequera. Se añade
el de Guadix para el regional. Se explicará en cada caso el criterio de esta elección.
El centro logístico de Huévar es el más grande de Andalucía al contar con 119700 metros
cuadrados de superficie construida (Mercadona, 2018). Su reciente ampliación y modernización,
en 2021, introdujo un sistema de Picking Puerto Grúa (PPG), un sistema innovador de preparación
automática de palés. El objetivo de la automatización del proceso es delegar las labores exigentes
físicamente en robots, como la recepción de mercancía o la preparación de palés, mejorando la
eficiencia y reduciendo las lesiones de los trabajadores.
14
Figura 6. Centro logístico de Huévar. Fuente: (Mercadona, 2018)
El centro logístico de Guadix se inauguró en 2013 con una inversión de 60 millones de euros
(Mercadona, 2013) y con 41000 metros cuadrados construidos y se divide en 5 naves para
productos fríos, secos, tratamientos de envases, un edifico de servicios e incluso una fábrica de
pan. También cuenta con el sistema PPG, como el de Huévar, que puede mover 30000 cajas de
productos frescos en 6 horas según la web citada.
Este bloque, como los otros, se unió al conjunto de mejoras llevadas a cabo en 2021 en todos los
centros de Andalucía. En Guadix, se invirtieron más de 8 millones de euros para, entre otras cosas,
edificar una nueva planta de congelados de 19200 metros cuadrados (Granada Hoy, 2021).
15
3.3 Costes
Gran parte de la problemática del caso radica en la elección de los costes. Se eligen dos casos
distintos.
Para el primer caso de estudio, se consideran como costes los kilómetros en línea recta entre los
centros logísticos y los supermercados en cuestión. Es una elección que no tiene en cuenta la
topografía del lugar y obvia carreteras y rutas. Sin embargo, se ha escogido por dos razones:
• Para el caso provincial, es una buena medida para ser comparado posteriormente con los
costes como kilómetros en carretera y ver como varía la función objetivo, es decir, el
coste total.
• Se usará también para el caso regional. Dado que no hay ningún programa que obtenga
distancias en carretera entre municipios, y hacerlo a mano mediante Google Maps
ocuparía mucho tiempo, se opta por calcular la distancia geodésica entre municipios.
Estas si se pueden hallar mediante un programa de Python (que se adjunta en el anexo y
de elaboración propia) que lee las coordenadas de los municipios y calcula las distancias
entre estas y los centros logísticos.
Las coordenadas se han obtenido mediante el geocodificador online (Willems, s.f.) del que se
obtiene un listado de coordenadas geográficas al introducir la lista de localizaciones.
Se utiliza solo para uno de los casos en el estudio de abastecimiento provincial. Al abastecer solo
33 municipios y tener solo 2 nodos de origen, calcular la distancia en Google Maps no es
especialmente largo. Entre todas las opciones, he escogido la que suponía menor distancia en
kilómetros, sin tener en cuenta el tipo de vía (carretera, autopista, límites de velocidad, peajes...).
Es un coste más cercano a la realidad que el anterior, al tratar con las rutas reales que hacen los
transportistas.
16
4.HERRAMIENTAS PARA LA RESOLUCIÓN
DEL PROBLEMA DE TRANSPORTE
La web de soporte de Microsoft establece un límite de 200 variables. Por lo tanto, para el análisis
provincial del transporte, es una manera de resolver el problema.
Para resolver el problema de transporte establecemos como función objetivo a minimizar la suma
de los productos entre el número de camiones de cada centro a cada supermercado por el coste.
Para ello, se habrá construido una tabla de costes con los datos rellenos (Tabla 4) y una tabla de
flujos con los datos a rellenar (Tabla 5). Se utilizan los datos del primer caso que se resolverá,
como ejemplo.
17
Tabla 4. Distancia entre centros logísticos y supermercados de municipios.
Fuente: Elaboración propia
Distancia en km en línea
recta
Municipios Huevar Antequera
Alcalá de Guadaíra 34,8 122,9
Alcalá del Río 28,7 139,2
La Algaba 23,0 140,0
Arahal 63,3 93,6
Bormujos 16,6 141,0
Brenes 38,5 131,9
Las Cabezas de San 50,5 125,4
Juan
Camas 19,4 139,2
Cantillana 46,4 130,9
Carmona 54,4 109,7
Castilleja de la Cuesta 18,1 139,9
Coria del Río 19,7 137,9
Dos Hermanas 30,4 126,7
Écija 105,3 73,2
Espartinas 12,0 145,7
Estepa 121,3 42,2
Gines 15 142,6
Lebrija 52 138,3
Lora del Río 71,5 112
Mairena del Alcor 45,7 113,4
Mairena del Aljarafe 16,9 140
Marchena 74,3 84,5
Morón de la Frontera 76 81,8
Osuna 101,6 56,4
Los Palacios y 36,0 125,6
Villafranca
Pilas 8,6 160,1
La Rinconada 28,6 135,6
San Juan de 19,2 137,9
Aznalfarache
Sanlúcar la Mayor 4,9 153,2
Sevilla 22,3 135,7
Tomares 18,3 139,2
Utrera 45,6 112,8
El Viso del Alcor 47,7 112
18
Tabla 5. Tabla de flujos antes de ser rellenada por el Solver. Fuente: Elaboración propia
En la Tabla 5 hay dos columnas demanda ya que la primera de ellas (vacía) es la suma de demanda
de cada municipio para ambos centros, y como están las celdas vacías, está en cero. La otra
columna, rellena, es la demanda total del municipio. En el Solver se establecerá como restricción
19
la igualdad entre la columna de la sumas y la columna ya rellena, de este modo los municipios
recibirán el número de camiones necesarios, ni más ni menos. Ocurre lo mismo con la capacidad.
Al abrir el Solver seleccionamos como objetivo a minimizar la celda que contiene la formula
SUMAPRODUCTO de Excel que multiplica las celdas vacías de la tabla por las celdas de la tabla
3. Se eligen como celdas de variables las de la tabla 5, que serán las que se rellenen. Como
restricciones, las mencionadas anteriormente de igualdad entre la suma de lo que abastece cada
centro a un municipio y la demanda del mismo.
Ídem para la capacidad, donde debe ser igual lo que suministra cada centro logístico a los
municipios con su capacidad. La ventana de Solver donde se rellena esta información se muestra
en la figura 8. El método de resolución es el Simplex, por tratarse de un problema de programación
lineal.
Figura 8. Interfaz del Solver antes de ser ejecutado. Fuente: Elaboración propia
Como se ha comentado, este problema tiene límites. Cuando cambiamos del caso provincial al
caso regional, este método quedará obsoleto al superar el límite de variables permitidas y
tendremos que hacer uso de otra herramienta.
4.2 Python
Al tratar un número elevado de municipios, el número de variables se dispara y cualquier
parámetro o valor que se quiera obtener requerirá de mayor complejidad. Tanto para obtener los
20
costes como para resolver el problema de transporte a nivel regional, requeriremos de apoyarnos
en un lenguaje de programación.
Escogemos Python por su versatilidad, al contar con numerosas librerías que resuelven problemas
de optimización. Además, al estar orientada hacia al usuario, no requiere de un amplio
conocimiento en programación. Todo el desarrollo se realizará en el entorno Spyder 4.3.2 y la
versión 3.9 de Python.
Para resolver el problema que nos concierne, haremos uso de librerías que facilitan el modelado
y la resolución del problema. Sin embargo, como se afirma en (Tafakkori, 2021), hay que
diferenciar interfaces o lenguajes de modelado con solucionadores:
4.2.1 Pyomo
Los archivos que genera son compatibles con solucionadores comunes como el GLPK. Además,
es gratuito y ofrece mucha documentación por su amplio uso.
4.2.2 Pandas
Librería de código abierto diseñada para el análisis de datos. Entre sus múltiples utilidades, es de
especial interés para este caso porque permite la posibilidad de leer y escribir datos desde y sobre
distinto tipos de archivos.
Se utilizará para leer de archivos de Excel, tantos las coordenadas de los municipios de Andalucía
para el cálculo de las distancias, como las demandas, ofertas y demás datos necesarios para
modelar el problema. Además, permite generar un archivos Excel con la solución del problema.
21
4.2.3 Geopy
Se utilizará en el programa 1 del anexo para la obtención de las distancias entre los municipios
de Andalucía.
22
5.IMPLEMENTACIÓN Y RESULTADOS
Una vez modelado y definido el problema y tras haber detallado la resolución para cada caso, se
presentan los resultados obtenidos.
Se han seleccionado como nodos de destino los 33 municipios de la provincia de Sevilla donde
se encuentran los 74 supermercados de esta.
Nodos de origen:
Nodos de destino:
23
Tabla 7. Supermercados por municipio de la provincia. Fuente: Elaboración propia
Municipios Número de
supermercados
Alcalá de Guadaíra 4
Alcalá del Río 1
Algaba, La 1
Arahal 1
Bormujos 2
Brenes 1
Cabezas de San Juan, 1
Las
Camas 1
Cantillana 1
Carmona 1
Castilleja de la Cuesta 1
Coria del Río 2
Dos Hermanas 7
Écija 3
Espartinas 1
Estepa 1
Gines 1
Lebrija 1
Lora del Río 1
Mairena del Alcor 1
Mairena del Aljarafe 3
Marchena 1
Morón de la Frontera 2
Osuna 1
Palacios y Villafranca, 1
Los
Pilas 1
La Rinconada 2
San Juan de 2
Aznalfarache
Sanlúcar la Mayor 1
Sevilla 21
Tomares 2
Utrera 2
El Viso del Alcor 2
TOTAL 74
24
Costes
Tabla 8. Distancia en línea recta entre centros logísticos y supermercados de la provincia. Fuente: Elaboración
propia
Distancia en km en línea
recta
Municipios Huevar Antequera
Alcalá de Guadaíra 34,8 122,9
Alcalá del Río 28,7 139,2
La Algaba 23,0 140,0
Arahal 63,3 93,6
Bormujos 16,6 141,0
Brenes 38,5 131,9
Las Cabezas de San 50,5 125,4
Juan
Camas 19,4 139,2
Cantillana 46,4 130,9
Carmona 54,4 109,7
Castilleja de la 18,1 139,9
Cuesta
Coria del Río 19,7 137,9
Dos Hermanas 30,4 126,7
Écija 105,3 73,2
Espartinas 12,0 145,7
Estepa 121,3 42,2
Gines 15,0 142,6
Lebrija 52,0 138,3
Lora del Río 71,5 112,0
Mairena del Alcor 45,7 113,4
Mairena del Aljarafe 16,9 140,0
Marchena 74,3 84,5
Morón de la Frontera 76,0 81,8
Osuna 101,6 56,4
Los Palacios y 36,0 125,6
Villafranca
Pilas 8,6 160,1
La Rinconada 28,6 135,6
San Juan de 19,2 137,9
Aznalfarache
Sanlúcar la Mayor 4,9 153,2
Sevilla 22,3 135,7
Tomares 18,3 139,2
Utrera 45,6 112,8
El Viso del Alcor 47,7 112,0
25
Se observa que el supermercado más lejano del centro de Huévar es el de Estepa, mientras que
el más lejano de Antequera es el de Pilas. El más cercano de Huévar es Sanlúcar la Mayor y el
de Antequera, Estepa.
Con estos datos, se procede a resolver el problema con el Solver de Excel como se ha descrito en
el apartado 4.2, arrojando los siguientes resultados. Estos se representan en una tabla de transporte
que, como se definió en el marco teórico, muestra las variables !!" .
26
Tabla 9. Solución de problema de transporte con la distribución de camiones a cada supermercado. Fuente:
Elaboración propia.
27
La tabla se interpreta de la siguiente manera. Los 4 supermercados de Alcalá de Guadaira se
abastecerán mediante un camión procedente del centro logístico de Antequera y 3 camiones del
centro logístico de Huévar, siguiendo la misma lógica para los demás municipios.
Del resultado obtenido concluimos que el centro logístico de Antequera cobra importancia para
ciertos municipios de la provincia. Osuna, Marchena, Utrera y Morón de la Frontera, entre otros,
se abastecen únicamente de este centro a pesar de encontrarse en otra provincia. La lejanía de
estas localidades del Aljarafe, al menos hablando de distancia en línea recta sobre el mapa,
justifica esta situación. Veremos mas adelante si lo hace también al variar el criterio de elección
de los costes. La trayectoria de las carreteras y la existencia de autopistas podrán alterar esta
distribución.
Tabla 10. Tabla resumen caso provincial km línea recta. Fuente: Elaboración propia
La razón por la que un camión deba recorrer 138,3 kilómetros para transportar material al
supermercado de Lebrija solo se justifica por el hecho de que se hayan agotado los provenientes
de Huévar y sea necesario recurrir a tan lejana opción.
Sin embargo, resulta interesante destacar que aunque Huévar abastezca 34 establecimientos más,
el número de localidades que abastece cada uno sea muy parejo. Esto quiere decir que el centro
de Huévar abastece a localidades que aglutinan más supermercados como es el caso de Sevilla
con 21, mientras que el de Antequera transporta a localidades que en su mayoría solo tienen un
supermercado.
De esta reflexión podemos extraer una conclusión. Si aumentásemos la capacidad de los camiones
que parten de Huévar de tal forma que uno pueda dar cobertura a 3 supermercados, rebajaría
mucho el coste porque son muchos los casos en los que muchos camiones deben ir a una sola
localidad. El transporte dentro de la ciudad para abastecer a esos supermercados apenas tendría
un coste de combustible ni de tiempo si se realiza en horarios con poco tráfico, como hace
Mercadona. El coste de transporte a Dos Hermanas o Sevilla se rebajaría enormemente, ya que
con la lógica actual necesitan 7 y 21 camiones respectivamente.
El dato de distancia media de camiones ofrece la media de las distancias que recorren los
camiones que salen de cada uno de los centros logísticos.
28
5.1.1.2 Kilómetros en carretera como coste
Los nodos de origen y destino no cambian. La tabla de costes cambia en este caso:
Tabla 11. Distancia en carretera entre centros logísticos y supermercados de la provincia. Fuente: Elaboración
propia
Distancia en km en carretera
Municipios Huévar Antequera
Alcalá de Guadaíra 51,1 150,0
Alcalá del Río 44,8 184,0
La Algaba 36,7 172,0
Arahal 81,1 119,0
Bormujos 23,7 178,0
Brenes 52,0 166,0
Las Cabezas de San Juan 83,5 156,0
Camas 26,3 174,0
Cantillana 62,1 175,0
Carmona 66,6 143,0
Castilleja de la Cuesta 23,8 176,0
Coria del Río 29,6 181,0
Dos Hermanas 47,9 165,0
Écija 118,0 90,2
Espartinas 18,3 183,0
Estepa 147 53,6
Gines 20,7 180,0
Lebrija 96,1 173,0
Lora del Río 89,8 141,0
Mairena del Alcor 62,0 146,0
Mairena del Aljarafe 25,7 175,0
Marchena 97,6 109,0
Morón de la Frontera 100,0 104,0
Osuna 123,0 77,3
Los Palacios y Villafranca 58,4 157,0
Pilas 13,8 206,0
La Rinconada 41,3 180,0
San Juan de Aznalfarache 28,0 173,0
Sanlúcar la Mayor 10,5 195,0
Sevilla 31,0 172,0
Tomares 25,7 173,0
Utrera 62,5 142,0
El Viso del Alcor 65,1 149,0
29
Cambiando el criterio de costes, se observa que el supermercado más lejano del centro de
Huévar sigue siendo el de Estepa y el de Antequera sigue siendo Pilas.
Las localidades más cercanas también se mantienen aun cambiando el criterio.El Solver de
Excel arroja los siguientes resultados:
Tabla 12.Solución de problema de transporte con la distribución de camiones a cada supermercado. Fuente:
Elaboración propia.
30
Con un coste total de 4307,8 kilómetros.
Como se ha cambiado el criterio para la elección de los costes, no es comparable con el caso
anterior, pero es obvio que trazar las rutas de los camiones por carreteras sea más costoso que
hacerlo en línea recta.
Los grafos construidos a partir de esta solución se han creado mediante el algoritmo del Programa
3. Este programa sitúa los nodos con coordenadas UTM, un sistema basado en la proyección
cartográfica de Mercator. Es una proyección cilíndrica del globo terráqueo. Este código servirá
como base para el resto de grafos y viene detallado en el anexo de este documento.
Se representan grafos distintos para cada centro logístico, pues así se puede visualizar y analizar
gráficamente el resultado.
Cabe destacar que solo se han representado aquellos arcos o conexiones por los que se envían
camiones. Asimismo, sobre cada arco se ha escrito el número de camiones que recorren el mismo.
El grafo con los dos centros se muestra para tener una idea general, pero el solapamiento de
nombres y la lejanía entre municipios fuerza a que apenas podamos obtener información de este.
Se insta al lector a recurrir a las tablas para conocer los datos. La geolocalización de los nodos
origina la lejanía entre estos y su difícil lectura.
31
Figura 10. Grafo de abastecimiento del centro de Antequera. Caso Provincial y Equilibrado
32
Figura 11. Grafo de abastecimiento del centro de Huévar. Caso Provincial y Equilibrado
33
Figura 12. Superposición de grafos de las Figuras 10 y 11
34
Como se puede observar en la Figura 12, en general, las distancias que deben recorrerse desde el
centro de Antequera son mayores que desde el centro de Huévar, lo cual queda también reflejado
en la siguiente Tabla 13.
Tabla 13. Tabla resumen caso provincial km en carretera. Fuente: Elaboración propia
Si bien es cierto que se reducen las máximas distancias desde cada centro, y por lo tanto, los
costes del total de la operación, cada bloque logístico surtirá el mismo número de localidades
(aunque no sean las mismas).
Tabla 14. Tabla de nodos origen para exceso de producción. Fuente: Elaboración propia
Se ha aplicado la Ecuación 15 para forzar ese incremento de producción, por lo que repartiendo
según la superficie construida de cada centro, queda la tabla anterior con los nodos origen.
)+,(-.&#&( ! (16)
!º#$%&'!()! = ∗ 82
)+,(-.&#&( 0'0$1
Puesto que los costes no cambian, la única modificación en el Excel para resolverlo mediante
Solver son las nuevas ofertas de cada centro (60 y 22). Ya en el Solver, dado que hay mas
producción que demanda, la restricción de igualdad entre la oferta de un centro y la suma de lo
35
abastecido por este a cada supermercado carece de sentido. Nunca podrá ser igual por el hecho
de que es mayor la producción que la demanda, por ello, se cambia por un menor o igual, como
se muestra en la figura 13.
Figura 13.Interfaz del Solver antes de ser ejecutado para problema exceso de producción. Fuente: Elaboración
propia
36
Tabla 15.Solución de problema de transporte. Exceso producción. Fuente: Elaboración propia.
La disminución del coste se explica de la siguiente manera. El exceso de producción permite una
mayor flexibilidad para diseñar la estrategia de distribución. En el caso equilibrado, al producirse
37
lo mismo que se necesita, gran parte de la relevancia del centro logístico de Antequera reside en
que el centro de Huévar tiene un límite y lo usa como apoyo.
Esto viene recogido en la tabla 16. Cuantos más camiones pueda abastecer Huévar, mas barata
será la estrategia de transporte.
Los 60 camiones de los que dispone Huévar serán utilizados. Antequera, dejará 7 inoperativos.
Se vuelven a representar grafos a partir del Programa 3, modificando datos para este caso.
38
Figura 14. Grafo de abastecimiento del centro de Antequera. Caso Provincial y Exceso de Producción
39
Figura 15. Grafo de abastecimiento del centro de Huévar. Caso Provincial y Exceso de Producción.
40
Figura 16. Grafos de las figuras 15 y 14 superpuestos
41
5.1.3 Exceso de demanda
Otra situación para analizar es tener mayor demanda que oferta. Dado que el objetivo de este
caso es ver cuáles son los supermercados que se verían afectados y desabastecidos por esta
situación, no modificamos la demanda respecto al caso original. Sin embargo, disminuimos en
un 10% la producción. Esto dejaría la demanda total en 67 camiones.
)+,(-.&#&( ! (17)
!º#$%&'!()! = ∗ 67
)+,(-.&#&( 0'0$1
Tabla 17. Tabla de nodos origen para exceso de demanda. Fuente: Elaboración propia
Además, ya si podemos obligar a que todo lo ofertado por los centros sea abastecido, por lo que
esta restricción recupera su signo de igualdad respecto al caso de exceso de producción.
42
Figura 17. Interfaz del Solver antes de ser ejecutado para problema exceso de demanda. Fuente: Elaboración propia
43
Tras ejecutar, se arroja la siguiente tabla con la distribución de camiones.
44
El coste total será de 3704,4 km. Este dato, sin embargo, no nos es de utilidad, porque hay
supermercados que se quedan sin abastecer y no es comparable con los casos en los que si se
reparte toda la demanda.
Figura 18. Grafo de abastecimiento del centro de Antequera. Caso Provincial y Exceso de Demanda.
45
Figura 19. Grafo de abastecimiento del centro de Huévar. Caso Provincial y Exceso de Demanda
De nuevo, el gráfico con ambos centros apenas se ve. Realmente, al tratarse de coordenadas
geográficas, es difícil combinar una situación correcta de los nodos con una buena visibilidad.
Por ello, se insiste en que es solo orientativa y para conocer el resultado se debe recurrir a las
tablas anteriores. Los nodos en rojo son los centros desabastecidos.
46
Figura 20. Grafos de la figura 19 y 18 superpuestos
47
Es interesante ver cuáles son los 7 (diferencia entre los 74 de demanda y los 67 de oferta) que
quedan desabastecidos. Para ello, ampliamos la información que recoge la tabla 19.
48
De la tabla 19 se observa que Los Palacios, Lebrija, Cantillana, Las Cabezas de San Juan y Brenes
quedarían sin abastecer. Todos estos son los únicos de la cadena en su respectivo municipio, por
lo que obligaría a los ciudadanos a recurrir a otra cadena o a viajar a otro pueblo. Los otros 2 que
quedan sin abastecer son los de Alcalá de Guadaira, pero al haber 4 en la localidad, no es
especialmente crítica la situación.
La razón por la que son esos los que quedan sin abastecer es.
La figura muestra la disposición en el mapa de los municipios con los supermercados que quedan
sin ser aprovisionados en azul y los centros logísticos en rojo.
La solución a este problema se puede tratar de diversas maneras. Para evitar variar de forma
exagerada el presupuesto del problema con la creación de un nuevo centro logístico en un punto
cercano a estos, podemos cambiar el enfoque y ofrecer la posibilidad de utilizar un nuevo tipo de
camión, más grande, que pueda abastecer a 2 supermercados.
La elección de donde utilizar los camiones dobles se basa en el siguiente criterio. Tendremos que
utilizarlo para las localidades más cercanas a Huevar, de esta manera, consumirá menos gasolina
y aunque no tratemos los costos de adquirir ese tipo de camiones en este caso, supondrá una
mejora notable.
Además, suponemos que los nuevos camiones están disponibles en la flota de Huévar y Antequera
y no hay que aumentar la oferta de los nodos de origen.
49
• En referencia a la Figura 21 y por cercanía, se agrupan Brenes y Cantillana, cuya demanda
pasa a ser 2. Utilizando un camión grande, esta se reduce a la mitad. Mantenemos el coste
de transportar a Cantillana, ya que el camión pasará por Brenes y después irá a Cantillana
• Hacemos lo mismo con Lebrija y Las Cabezas de San Juan. Cada uno con demanda de 1
camión, el conjunto pasará a ser 2. A su vez, puesto que usamos un camión grande para
abastecer los dos municipios, se quedará en 1. Mantenemos el coste de llegar a Lebrija
por la misma lógica que el caso anterior.
50
Tabla 20. Corrección al problema de exceso de demanda. Fuente: Elaboración propia
Municipios Demanda
Alcalá de Guadaíra 2
Alcalá del Río 1
La Algaba 1
Arahal 1
Bormujos 2
Brenes- Cantillana 1
Camas 1
Carmona 1
Castilleja de la Cuesta 1
Coria del Río 2
Dos Hermanas 4
Écija 3
Espartinas 1
Estepa 1
Gines 1
Lebrija- Las Cabezas 1
Lora del Río 1
Mairena del Alcor 1
Mairena del Aljarafe 3
Marchena 1
Morón de la Frontera 2
Osuna 1
Los Palacios y Villafranca 1
Pilas 1
La Rinconada 2
San Juan de 2
Aznalfarache
Sanlúcar la Mayor 1
Sevilla 21
Tomares 2
Utrera 2
El Viso del Alcor 2
TOTAL 67
51
5.2 Abastecimiento a nivel regional.
Se afronta ahora el problema de abastecer a los supermercados en Andalucía. Para ello, se añade
un nuevo centro logístico en Guadix (Granada) y nuevos supermercados a ser aprovisionados en
las 8 provincias.
52
Medina-Sidonia 1 Baza 1
Puerto Real 2 Chauchina 1
Valverde del Camino 1 Churriana de la Vega 1
Alcalá la Real 1 Rincón De La Victoria 2
Andújar 2 Ronda 2
Baeza 1 Torremolinos 5
Bailén 1 Torrox 1
Jaén 5 Vélez-Málaga 4
Villacarrillo 1 Alcalá De Guadaira 4
Linares 2 Alcalá Del Rio 1
Mancha Real 1 Arahal 1
Martos. 1 Bormujos 2
Torredonjimeno 1 Brenes 1
Úbeda 2 Camas 1
Alhaurín de la Torre 3 Cantillana 1
Alhaurín el Grande 1 Carmona 1
Algarrobo 1 Castilleja de La 1
Cuesta
53
Ogíjares 1 Los Palacios Y 1
Villafranca
Otura 1 Mairena Del Alcor 1
Peligros 1 Mairena Del Aljarafe 3
Pinos Puente 1 Marchena 1
Pulianas 1 Morón De La Frontera 2
Salobreña 1 Osuna 1
Santa Fe 1 Málaga 23
Aljaraque 1 Manilva 1
Almonte 1 Marbella 6
Ayamonte 1 Mijas 4
Aracena 1 Nerja 2
Bollullos Par del 1 Estepona 5
Condado
Cartaya 1 Fuengirola 3
Cortegana 1 Las Cabezas De San 1
Juan
Gibraleón 1 Lebrija 1
Huelva 5 La Palma 1
Hay un total de 318 supermercados en este caso que se deben abastecidos, es decir, se necesitan
318 camiones para cubrir la demanda.
Los nodos origen, como se ha comentado, serán los mismos, añadiéndoles el centro logístico de
Guadix. Se comentará en cada uno de los próximos casos.
Respecto a la tabla de costes, se ha seguido otro proceso distinto al provincial. Puesto que se
deben abastecer 156 municipios, calcular los kilómetros en carretera entre centros y
supermercados manualmente con Google Maps es inviable, y no hay una base de datos con todas
las distancias en carretera entre los centros logísticos y los municipios.
Por ello, recuperamos el primer criterio establecido, los kilómetros en línea recta como coste.
Gracias al módulo geodesic de la librería geopy, podemos calcular distancias geodésicas entre
coordenadas geográficas.
Mediante el programa 1 adjunto en el anexo final y de elaboración propia, obtenemos todas las
distancias entre centros logísticos y supermercados. Puesto que las coordenadas son referentes a
los municipios y no a las localizaciones exactas de centros y tiendas, las distancias entre los
centros logísticos de una ciudad y los supermercados de la misma ciudad (para el caso de Guadix
y Antequera, puesto que Huevar no tiene supermercado) serán 0. Por ello, para esos dos casos
(Centro de Guadix-Supermercado de Guadix e idem con Antequera), se trazará la distancia en
línea recta sobre las localizaciones exactas para evitar costes nulos.
54
Figura 22. Coordenadas en fichero Excel. Fuente: Elaboración propia
Tabla 22. Distancia entre supermercados y centros logísticos de Andalucía. Fuente: (Elaboración propia).
55
Níjar 364,2 209,7 90,6
Olula del Río 352,9 204,6 74,9
Vera 391,2 240,6 112,7
Vícar 327,9 171,7 68,9
Algeciras 155,1 127,0 244,0
Arcos de la Frontera 78,4 115,5 245,8
Barbate 133,0 152,6 277,5
Cádiz 95,9 128,9 258,3
Chiclana 104,3 156,5 285,6
Conil de la Frontera 120,3 159,4 286,7
El Puerto de Santa María 84,5 156,5 286,6
Jerez 75,3 144,3 274,6
La Línea de la Concepción 155,9 118,0 234,1
Los Barrios 147,8 124,5 243,7
Medina-Sidonia 103,5 136,8 265,6
Puerto Real 91,7 155,2 285,1
Rota 80,2 165,4 295,7
San Fernando 99,4 159,2 288,7
San Roque 150,0 116,2 234,2
Sanlúcar de Barrameda 64,3 161,5 291,4
Tarifa 160,6 145,5 262,6
Ubrique 105,7 87,5 216,7
Villamartín 78,8 98,0 228,1
Aguilar de la Frontera 144,7 55,4 136,6
Baena 175,5 69,8 110,7
Cabra 163,2 51,4 117,1
Córdoba 144,9 98,2 159,2
Fernán Núñez 141,8 73,7 146,4
Hinojosa del Duque 161,3 172,0 221,3
La Carlota 123,7 78,9 164,2
Lucena 158,9 43,8 120,2
Montilla 147,4 63,1 136,6
Montoro 183,1 112,7 136,4
Palma del Río 96,2 98,5 194,6
Peñarroya-Pueblonuevo 137,8 155,2 218,1
Pozoblanco 169,6 152,8 192,4
Priego de Córdoba 184,4 56,4 95,3
Puente Genil 134,0 44,8 144,8
Rute 169,3 37,8 109,3
Albolote 233,4 84,3 46,2
Almuñécar 239,0 82,6 80,1
Armilla 235,9 83,4 47,8
56
Atarfe 229,9 80,4 50,0
Baza 310,8 167,1 38,7
Chauchina 222,8 72,3 58,0
Churriana de la Vega 234,7 82,6 48,3
Granada 251,2 99,0 33,2
Guadix 278,5 130,3 5,6
Huétor Tájar 198,8 49,9 81,4
La Zubia 240,6 87,6 44,5
Las Gabias 232,8 80,4 50,6
Loja 190,1 40,1 91,0
Maracena 234,8 84,6 45,7
Monachil 244,4 91,8 40,3
Motril 254,6 97,8 69,7
Nigüelas 247,0 91,2 50,3
Ogíjares 238,3 85,4 46,4
Otura 237,2 83,4 49,6
Peligros 234,5 85,1 45,2
Pinos Puente 224,3 76,4 54,8
Pulianas 237,5 88,0 42,3
Salobreña 248,9 92,2 73,3
Santa Fe 227,8 77,3 53,0
Aljaraque 66,8 220,4 344,7
Almonte 23,6 175,8 299,8
Ayamonte 100,8 253,4 378,4
Aracena 64,6 201,6 309,5
Bollullos Par del Condado 23,1 179,1 301,6
Cartaya 78,1 232,2 356,2
Cortegana 78,2 223,0 332,3
Gibraleón 61,1 217,2 339,6
Huelva 66,4 222,2 339,7
La Palma 24,5 181,4 302,8
Lepe 82,7 236,1 360,6
Moguer 50,2 203,9 328,0
Punta Umbría 63,9 214,5 340,0
Valverde del Camino 48,5 203,8 321,5
Alcalá la Real 208,8 74,8 72,0
Andújar 210,7 121,8 115,1
Baeza 257,7 144,9 82,7
Bailén 235,5 138,0 104,8
Jaén 258,8 145,9 82,7
Villacarrillo 293,8 178,2 90,7
Linares 247,3 144,7 98,5
57
Mancha Real 240,7 119,8 68,4
Martos 207,8 93,4 87,2
Torredonjimeno 210,6 98,7 88,7
Úbeda 266,7 152,5 82,2
Alhaurín de la Torre 171,0 39,9 145,3
Alhaurín el Grande 162,1 43,7 156,4
Algarrobo 209,5 54,1 99,1
Álora 151,9 25,2 149,0
Antequera 156,9 4,2 130,3
Archidona 170,2 17,5 113,4
Benahavis 143,4 70,0 190,5
Benalmádena 174,0 47,1 149,4
Campillos 130,2 27,0 155,8
Cártama 163,3 34,6 147,7
Coín 155,9 43,6 160,7
Estepona 144,0 84,0 203,6
Fuengirola 172,5 53,2 157,0
Málaga 176,8 35,6 134,8
Manilva 142,1 94,2 214,4
Marbella 151,4 67,8 184,9
Mijas 168,9 47,6 154,5
Nerja 224,3 68,3 88,7
Rincón De La Victoria 191,9 42,2 119,9
Ronda 120,0 61,6 190,4
Torremolinos 177,7 43,9 142,4
Torrox 217,2 61,6 94,0
Vélez-Málaga 204,1 49,2 103,2
Alcalá De Guadaira 39,2 118,7 239,3
Alcalá Del Rio 32,1 137,4 252,9
Arahal 65,9 91,3 213,5
Bormujos 18,3 139,8 260,3
Brenes 41,9 130,2 243,7
Camas 22,3 137,2 256,8
Cantillana 49,2 129,6 240,2
Carmona 57,2 108,5 223,3
Castilleja De La Cuesta 20,7 138,1 258,2
Coria Del Rio 21,4 135,7 258,5
Dos Hermanas 32,5 124,4 247,0
Écija 107,9 73,8 174,2
El Viso Del Alcor 49,8 110,6 228,9
Espartinas 13,2 145,2 265,7
Estepa 124,4 41,3 154,3
58
Gines 17,9 140,8 261,0
La Rinconada 30,1 136,2 252,8
Las Cabezas De San Juan 51,3 122,6 251,4
Lebrija 51,6 135,3 264,6
Lora Del Rio 74,3 111,2 215,4
Los Palacios y Villafranca 38,2 122,2 247,9
Mairena Del Alcor 46,8 112,5 231,8
Mairena Del Aljarafe 19,7 137,9 258,8
Marchena 76,5 83,2 202,1
Morón De La Frontera 77,6 80,2 206,6
Osuna 104,6 54,2 175,0
Pilas 6,2 157,4 280,3
San Juan De Aznalfarache 21,2 136,4 257,3
Sanlúcar La Mayor 7,7 151,0 271,6
Sevilla 26,7 132,2 252,1
Tomares 21,0 137,3 257,7
Utrera 48,0 109,9 234,9
Establecemos las capacidades de los nodos origen para el problema equilibrado, forzando a que
la suma de las ofertas de los centros logísticos iguale a la suma de las demandas, 318 camiones.
Esto se hace como en el caso provincial, mediante la ecuación 15, pero adaptada a este caso.
)+,(-.&#&( ! (18)
!º#$%&'!()! = ∗ 318
)+,(-.&#&( 0'0$1
Tabla 23. Capacidad de los centros logísticos para el caso regional. Fuente: Elaboración propia
Teniendo ya los datos de costes, oferta y demanda podemos resolver el problema. Como se ha
comentado, por la magnitud del problema en lo referente al alto número de variables y
restricciones, nos apoyamos en la programación. Abordaremos el problema de transporte con
restricciones usando Python. El código se estructura de la siguiente manera:
59
En primer lugar, se importa la librería pandas para poder leer los ficheros en Excel; y el conjunto
de paquetes Pyomo. Por comodidad, la función SolverFactory incluida en Pyomo es importada
explícitamente, pues así es posible tenerla localizadas cuando realicemos la elección del solver.
Comenzamos leyendo el archivo de Excel (en formato xlsx) con la librería pandas, especificando
la hoja donde se hallan los datos que vamos a necesitar. Es preciso tener en cuenta que para
facilitar el tratamiento de datos, la columna de la izquierda debe reservarse para la designación
numérica de las filas. Acto seguido, creamos una lista (N) cuya longitud se corresponderá con la
longitud de las columnas leídas inicialmente.
Haciendo uso de este parámetro, creamos diccionarios que contengan las localidades origen y
destino, así como sus coordenadas. Repetimos el proceso (leyendo la hoja correspondiente) para
crear diccionarios que contengan los datos de oferta y demanda. Asimismo, creamos un
diccionario que contenga los costes (distancias calculadas) desde cada centro logístico hasta cada
posible destino. Por último, creamos diccionarios para las capacidades de oferta y demanda. Es
preciso tener en cuenta que sólo estamos considerando tres centros logísticos en Andalucía, por
lo que el diccionario Ofertas tendrá únicamente los tres primeros elementos como no nulos.
Una vez leídos y definidos los datos, comenzamos a hacer uso de Pyomo. El primer paso en
cualquier problema de optimización es definir el modelo (por simplicidad, llamado "modelo").
La función ConcreteModel() indica que estamos comenzando a definir un modelo. Dado que
vamos a abordar un problema de transporte, es preciso crear los nodos de oferta (centros
logísticos) y demanda (destinos).
Usando la nomenclatura habitual en Pyomo, los datos de oferta para el modelo los definimos
mediante el subíndice i, mientras que los de salida los definimos mediante el subíndice j. Usamos
la función Set para ello, cuyo argumento principal —initialize— precisa especificar las listas que
habremos creado previamente.
Tras definir los nodos de oferta y demanda, definimos las capacidades de oferta y demanda. Para
ello, crearemos un diccionario que se componga de: {Localidad_destino: Demandas}. Para poder
hacer eso, lo mas cómodo es convertir los dos diccionarios implicados a listas (que designamos
por _lst). Acto seguido, usamos la funcion zip. Definimos las capacidades de oferta y demanda
mediante la función Param de pyomo, utilizando las letras a y b como designación, y los modelos
i,j descritos antes como principal argumento.
Llegados a este punto, nuestro siguiente objetivo es crear un diccionario cuyo key-value sea la
tupla (origen, destino) y el valor sea el coste calculado. Vamos a iterar sobre una lista
(Localidad_destino_lst) cuyos componentes son 'strings'. La forma de hacer eso es por 'for i in
range(len(LISTA)):'. Si lo hiciéramos con 'for i in LISTA:' obtendríamos el siguiente error:
TypeError: list indices must be integers or slices, not str. Se trata de un error habitual en Python,
que no se obtiene cuando la lista contiene sólo elementos numéricos. Dado que queremos un gran
diccionario final con todos los costes, por comodidad crearemos tres listas origen-destino (cada
una con un origen) haciendo uso de bucles, y luego las uniremos.
Una vez hecho esto, convertimos en listas los tres diccionarios de costes creados al principio.
Acto seguido, uniremos las tres listas, y la uniremos a la lista 'Ori_dests', creando finalmente un
nuevo diccionario. Nuevamente, usaremos la funcion 'zip' para crear el nuevo diccionario a partir
de las dos listas: 'Ori_dests' y 'Costes_todos_lst'.
60
En este punto, crearemos una nueva variable para el modelo (designando con la letra d),
nuevamente usando los nodos de origen (i) y destino (j) como argumentos, para almacenar los
costes de transporte (km recorridos). Para poder trabajar con estos datos, definiremos una función
'f_costo' que tome los argumentos anteriores junto con los datos almacenados del modelo, y
devuelva un diccionario bidimensional con los costes [i,j] del modelo, de cara a poder realizar los
cálculos.
Definimos una nueva entrada cuyos argumentos sean, además de los modelos i,j, un 'initialize =
f_costo', almacenando los costes de transporte en un espacio bidimensional. Por último, es preciso
definir una variable (x) cuyo significado es 'cantidad de producto distribuido'. Esta variable se usa
mas adelante, al imponer las restricciones.
Fijando todo lo anterior como base, imponemos las restricciones del problema. Una de las
ventajas de Pyomo es poder escribir explícitamente las ecuaciones que definen las diferentes
restricciones, que en nuestro caso serán:
Estas restricciones actuarán sobre la función objetivo, que la definimos a continuación y cuyo
único argumento es el modelo definido inicialmente. Gracias a esto, podemos hacer uso de la
función Objetive de Pyomo, donde podremos especificar que el solver actúe sobre la función
definida y que nuestro objetivo es minimizar los costes (existiendo otras opciones, dependiendo
del problema).
El resultado que se obtiene por consola es la cantidad transportada desde cada centro logístico a
cada municipio. El código de este programa viene adjunto en el anexo como Programa 3.
Para facilitar la lectura y la compresión, se divide el resultado total en 3 tablas, una para cada
centro logístico. A diferencia de el caso provincial, se filtra y se omiten las filas donde no se
abastece nada a un municipio.
61
Tabla 24. Camiones abastecidos desde el centro de Antequera. Fuente: Elaboración propia
Destino Cantidad
Algarrobo 1
Alhaurín de la Torre 3
Alhaurín el Grande 1
Antequera 4
Archidona 1
Benalmádena 3
Cártama 1
Fuengirola 3
Huétor Tájar 1
Loja 1
Málaga 23
Mijas 4
Nerja 2
Priego de Córdoba 2
Rincón de la Victoria 2
Rute 1
Torremolinos 5
Torrox 1
Vélez-Málaga 4
Álora 1
62
Tabla 25. Camiones abastecidos desde el centro de Guadix. Fuente: Elaboración propia
63
Tabla 26. Camiones abastecidos desde el centro de Huévar. Fuente: Elaboración propia
64
Siendo el valor de la función objetivo 22998,9. Es decir, para abastecer a toda Andalucía los
camiones deben recorrer esa distancia en kilómetros.
Los grafos presentados a continuación tienen la función de orientar al lector del número de
localidades abastecidas. La geolocalización de los nodos y el alto número de municipios hace
imposible construir grafos perfectamente legibles y coherentes. Por ello, para leer los datos se
debe acudir a las tablas anteriores.
65
Figura 23. Abastecimiento del centro de Antequera para el caso regional y equilibrado
66
Figura 24. Abastecimiento del centro de Huévar para el caso regional y equilibrado.
67
Figura 25. Zoom de la figura 24
68
Figura 26. Abastecimiento desde Guadix. Caso Regional y equilibrado
69
Figura 27. Zoom Figura 26
70
Figura 28. Abastecimiento total de Andalucía
71
La figura 28 muestra el abastecimiento total de toda Andalucía, con los 3 centros logísticos y sus
respectivos arcos.
Como era previsible por su capacidad, el radio de influencia de Huévar es muy amplio, llegando
a municipios como Andújar (Jaén). La figura 24 permite ver todo el área de acción del centro
logístico, y la figura 25, aunque haya solapamientos de letras, ofrece la posibilidad de identificar
los nodos más lejanos.
El desarrollo que está teniendo la provincia de Málaga y la Costa del Sol en particular,
desbancando incluso a Sevilla como puntal tecnológico y turístico del sur de España, provoca que
no pueda ser abastecido solo por el centro de Antequera. Resulta curioso que, aun teniendo un
centro en su propia provincia, haga tanto uso del centro de Huévar, llegando incluso a transportar
6 camiones a Marbella.
Esto se debe principalmente a la poca capacidad de Antequera, no estando a la altura este centro
de la situación privilegiada que está viviendo la zona. Se deben seguir llevando labores de
ampliación y actualización para que no sea necesario recurrir a Huévar.
Como aclaración, se observa que para el caso provincial el supermercado más cercano a Huévar
era el de Sanlúcar la Mayor. La razón por la que ahora es Pilas es simplemente por el cambio en
la herramienta de medición de distancias.
Para el caso provincial se utilizó Google Maps y se midió entre el centro logístico y el
supermercado. Al cambiar al caso regional, y por el volumen de datos a manejar, optamos por
usar el Programa 1. Este mide localidades entre si, y no tiene en cuenta que el centro logístico de
Huévar no se encuentra en el núcleo urbano de la población, si no un poco alejado. De ahí surge
la discordancia, que no deja de ser una curiosidad puntual.
Los camiones que salen de Huévar, por ser este el centro logístico más grande, lideran el total de
la operación de transporte y son los que más kilómetros hacen de media. Los salientes de
Antequera, sin embargo, abastecen a supermercados cercanos hasta agotarse su oferta, siendo la
distancia media que estos recorren menos de la mitad que los de Huévar.
Los supermercados de las provincias de Huelva, Sevilla y Cádiz son exclusivamente abastecidos
por el centro de Huévar.
72
El centro de Antequera abastece a localidades de la provincia de Málaga y Córdoba. El de Guadix,
a supermercados de Jaén, Almería y Granada. El de Huévar reparte a Sevilla, Cádiz, Málaga,
Córdoba y Jaén.
La media de las distancias medias desde cada centro resulta en 64,8 kilómetros. Es decir, de
media, un camión de Mercadona debe hacer 64,8 kilómetros para abastecer su supermercado
objetivo.
Hay que ajustar, de este modo, las capacidades de los centros logísticos para que sumen 350 y
sea siempre acorde a su superficie. Haciendo uso de las mismas ecuaciones que para el caso
anterior, imponemos la ecuación 19.
)+,(-.&#&( ! (19)
!º#$%&'!()! = ∗ 350
)+,(-.&#&( 0'0$1
Tabla 28. Capacidad de los centros logísticos. Caso regional con exceso de producción. Fuente: Elaboración propia
En este caso, debemos modificar el código del Programa 2 para cambiar una de las restricciones.
Como se vio en el caso provincial, cuando hay exceso de producción, no se puede cumplir la
restricción de que se abastezca todo lo que se produce, pues infringiría la restricción de que los
supermercados deben ser abastecidos con su demanda, sin superarla.
Por ello, modificamos la función f_oferta en el código para cambiar la condición de igualdad.
La nueva condición será que la cantidad que es abastecida por un centro es menor o igual a la
capacidad de este, tal que:
Además, habría que sustituir los nuevos valores de oferta en la lectura de los datos de oferta.
73
Tabla 29.Camiones abastecidos desde el centro de Antequera Exceso Producción. Fuente: Elaboración propia
Destino Cantidad
Aguilar de la 1
Frontera
Algarrobo 1
Alhaurín de la 3
Torre
Alhaurín el Grande 1
Antequera 4
Archidona 1
Benalmádena 3
Cabra 1
Campillos 1
Coín 1
Cártama 1
Fuengirola 3
Loja 1
Lucena 2
Malaga 23
Marbella 4
Mijas 4
Montilla 1
Puente Genil 1
Rincón de la 2
Victoria
Rute 1
Torremolinos 5
Vélez-Málaga 4
Álora 1
74
Tabla 30. Camiones abastecidos desde el centro de Guadix Exceso Producción. Fuente: Elaboración propia
75
Tabla 31. Camiones abastecidos desde el centro de Huévar. Exceso Producción. Fuente: Elaboración propia
76
Siendo el coste total de la solución 21819,6 km. Se reduce el coste respeto al caso equilibrado.
Esto se debe esencialmente a que al tener más capacidad, los centros podrán abastecer a los
supermercados que mejor les convenga. En el caso equilibrado, muchos transportes eran el
resultado de que un centro cercano a un supermercado no podía aprovisionarlo por haber agotado
su capacidad, y este tenía que ser abastecido por otro más lejano, incrementando el coste total.
El centro logístico de Antequera utiliza todos sus camiones, al igual que le de Guadix. Los 32
camiones de exceso de producción serán los que no salgan del centro de Huévar. Esto repercute
de la siguiente manera:
Tabla 33. Tabla resumen caso regional y exceso de producción. Fuente: Elaboración propia
La media entre las distancias medias que cada camión recorre desde cada centro resulta en 63,8
km. Por lo tanto, el exceso de producción prácticamente no varía la distancia media de todos los
camiones.
Además, la máxima distancia que recorren los camiones de los centros solo disminuye para los
de Huévar. Los de Antequera apenas varían y los de Guadix incrementan. Ocurre algo similar con
las distancias medias, que incrementan para los camiones de Guadix, se mantienen prácticamente
para los de Antequera y disminuyen para Huévar.
Aun así, producir un 10% más y tener en cuenta que esa sobreproducción se reparte
equitativamente respecto a los bloques logísticos y sus superficies ahorra al proceso total de
transporte 1179.3 kilómetros.
En este caso, analizamos el efecto del exceso de demanda. Para no modificar los datos de
demanda, pues implicaría alterar el número de supermercados por municipio, reducimos la
oferta actual en un 10%, resultando en la siguiente tabla:
77
Tabla 34. Capacidad de los centros logísticos. Caso regional con exceso de demanda. Fuente: Elaboración propia
De nuevo, debemos modificar las restricciones. Al tener un 10 % más de demanda que de oferta,
no todos los supermercados podrán ser abastecidos, y la restricción que obliga a suplir todos los
supermercados con su demanda carecería de sentido. Por ello, en el Programa 2 debemos cambiar
la restricción para permitir que lo que les llegue a los supermercados sea el valor de su demanda
o un valor menor que esta. El código quedaría intacto, pero modificando:
Además, habría que sustituir los nuevos valores de oferta en la lectura de los datos de oferta. El
resultado obtenido sería el siguiente:
Tabla 35. Camiones abastecidos desde el centro de Antequera. Exceso demanda. Fuente: Elaboración propia
Destino Cantidad
Alhaurín de la 3
Torre
Alhaurín el 1
Grande
Antequera 4
Archidona 1
Benalmádena 3
Coín 1
Cártama 1
Loja 1
Lucena 2
Málaga 23
Mijas 4
Rincón de la 2
Victoria
Rute 1
Torremolinos 5
Vélez-Málaga 4
Álora 1
78
Tabla 36. Camiones abastecidos desde el centro de Guadix. Exceso demanda. Fuente: Elaboración propia
79
Tabla 37.Camiones abastecidos desde el centro de Huévar. Exceso demanda. Fuente: Elaboración propia
80
El coste total del transporte, y por tanto, el valor de la función objetivo, es de 18819 kilómetros.
Este valor, sin embargo, no es de especial interés. Su bajo valor se debe a que no abastece a todos
los supermercados y por lo tanto, no cumple con el objetivo de la estrategia logística.
Aislando los supermercados que quedan sin abastecer resulta la siguiente tabla:
Tabla 38. Supermercados sin abastecer. Caso regional. Fuente: Elaboración propia.
Los 32 supermercados que quedan sin abastecer coinciden con la diferencia entre la demanda
(318) y la oferta (286) lo cual indica una buena resolución del problema.
El pleno abastecimiento de los supermercados granadinos puede darse también por la ventajosa
situación geográfica del centro de Guadix en su provincia, que se muestra en el mapa posterior, y
del hecho de contar con un centro en una provincia limítrofe como es el de Antequera.
81
Figura 29. Mapa de la provincia de Granada. Fuente: (Ideal Granada, 2017)
Los supermercados desabastecidos están situados en azul en el mapa posterior, junto a los 3
centros logísticos, en rojo.
Figura 30. Localización de los supermercados sin abastecer. Fuente: Elaboración propia
82
La Línea de la Concepción, Tarifa y Algeciras destacan por su lejanía de Huévar y Antequera.
Situándose en el Campo de Gibraltar, son los supermercados más al sur de Andalucía y por lo
tanto, no ofrecen una situación geográfica favorable para el transporte.
Nerja, Fuengirola y Torrox, en la Costa del Sol, están también desabastecidos. Fuengirola, a pesar
de tener sus 3 supermercados desabastecidos, tiene a Benalmádena con 3 supermercados,
Marbella con 6 e incluso a Málaga con 23 que le sirven de apoyo y que no supondrían un desastre
para la población del municipio, contando con alternativas relativamente cercanas.
Para los municipios cordobeses y jienenses, puede plantearse la creación de un centro logístico.
Es una zona muy alejada de los otros centros, que aglutina muchos supermercados que no cuentan
con grandes alternativas si no son abastecidos, al no haber grandes núcleos urbanos en la zona.
Tan solo las capitales de provincia, Jaén y Córdoba, cuentan con más de 2 supermercados. Por
ello, construir un centro logístico de pequeño tamaño podría ser una solución.
La ubicación de este supuesto nuevo centro, en verde en el mapa, se obtiene calculando la media
de longitud y latitud de los 9 municipios desabastecidos que aprovisionaría. Quedaría ubicado
entre Montoro y Villa del Río, existiendo por tanto la posibilidad de estar situado en un polígono
industrial de la zona, cerca de los dos municipios (favoreciendo a los trabajadores) y
posicionándose como un lugar estratégico para todo el norte de Andalucía
Figura 31. Propuesta de ubicación de nuevo centro logístico. Fuente: Elaboración propia
83
La zona más oriental de la provincia de Almería aglutina también varios supermercados sin
abastecer. Al ser una zona turística, no es concebible el desabastecimiento de toda esta área, sin
ofrecer alternativas y dejando la comarca prácticamente abandonada. Al ser una zona en el
extremo de Andalucía, su dependencia a Guadix es total y la hace vulnerable. No tiene la
alternativa de Antequera o Huévar, al estar estos centros situados en el otro extremo de Andalucía.
Este problema puede tener solución al incluir un centro logístico como el de San Isidro, en
Alicante, que aparece en la Figura 5 en la Sección 3. Este centro se encuentra a una distancia lo
suficientemente razonable como para plantear abastecimiento a Vera, Huércal-Overa, Mojacar,
Garrucha, Carboneras y Cuevas de Almanzora.
La distancia en carretera entre este centro y Vera, por ejemplo, es de 168 kilómetros. Es una
alternativa mucho más interesante que Antequera o Huévar aunque este en otra comunidad
autónoma.
Este centro, además, ha tenido recientes inversiones y ampliaciones, con hasta 98 millones de
euros de inversión en 2021 (Mercadona, 2021). Con más de 930 trabajadores, parece una
alternativa fiable y a tener en cuenta.
Figura 32. Localización centro San Isidro respecto a localidades en Almería. Fuente: Elaboración propia
84
6.CONCLUSIONES
Tras resolver los diferentes casos de problemas de transporte y la influencia de sus costes y el
equilibrio entre oferta y demanda, queda demostrada la importancia de invertir recursos en
construir una estructura logística sólida, flexible y a la altura de los avances tecnológicos actuales.
En este trabajo se ha pretendido aplicar un modelo matemático planteado hace más de 80 años
para resolver la problemática actual de muchas empresas. Mediante la elaboración de un código
en un lenguaje de programación de vigencia actual pero haciendo uso de conceptos matemáticos
con años de revisión y demostración, se han podido resolver problemas con un gran número de
variables y restricciones, que se podrían extender incluso a un hipotético caso de abastecimiento
a nivel nacional, por lo que su utilidad y versatilidad da lugar a futuras aplicaciones.
Se ha concluido que los excesos de producción disminuyen el coste total de transporte porque
ofrecen más flexibilidad al proceso, permitiendo a los centros abastecer a los que mejor les
convengan, mientras que en las situaciones de equilibrio de demanda y oferta muchos transportes
eran forzados por el agotamiento de otros centros, y no por la optimalidad de este.
Se han analizado los casos de exceso de demanda, habituales en este sector comercial, para
analizar y valorar los supermercados más vulnerables y las medidas a tomar en estos casos. Se ha
demostrado que en la mayoría de los casos estos centros siguen un patrón común. La lejanía a los
centros logísticos ha sido el factor determinante, pero el interés reside en encontrar soluciones en
función de la situación geográfica de estos supermercados. Se han tratado opciones como la
decisión de invertir en un nuevo centro logístico o de recurrir a otro en otra comunidad autónoma.
Las limitaciones del caso planteado son varias y provocan que el algoritmo de resolución
propuesto no sea útil en casos reales por los siguientes motivos:
• Se ha tenido en cuenta un único tipo de mercancía. En la práctica, las empresas del sector
retail transportan según la naturaleza del producto. El factor de ser fresco, seco o
congelado condiciona la estrategia de distribución. Procesos como la cadena del frío en
los artículos congelados influyen mucho en el diseño del plan logístico a seguir.
• La elección de las unidades de las variables !!" como número de camiones a transportar
no es la más acertada. Los datos de oferta y demanda deben tener la misma unidad que
esta variable para modelar el problema, por lo que establecer que 1 camión equivalía a 1
supermercado facilitaba enormemente la tarea. Es evidente que un camión no abastece a
un solo supermercado y que emplear 318 camiones para el mismo número de
supermercados es irreal. Sin embargo, esta elección permite modelar la problemática del
transporte de Mercadona como un problema matemático de transporte y por lo tanto,
aplicar los algoritmos conocidos.
• Las distancias escogidas para el caso regional son, en definitiva, distancias en línea recta
sobre un plano. Esto es consecuencia de la inexistencia de una base de datos con las
85
distancias en carretera entre todos los municipios de Andalucía. Haber conocido este dato
hubiese cambiado los resultados, pues hay municipios con difícil accesibilidad que
aumenta su coste de llegada en carretera y esto no se refleja en las distancias geodésicas.
• Los datos de oferta presentados no son reales. Estos se han obtenido a partir de la
demanda, forzando a que sean igual a esta o inferior o superior en un porcentaje
determinado. Mercadona no ofrece los datos de producción de sus centros, por lo que se
tuvo que ponderar los datos de demanda respecto a la superficie de los centros, que si se
pudo obtener tanto por datos ofrecidos por la web oficial como por distintos artículos de
periódicos. Conocer estos datos hubiese supuesto aproximarse más a la realidad de la
empresa valenciana.
En conclusión, hay mucho camino por recorrer en proyectos de investigación cuyo objetivo sea
la optimización del coste de transporte. Considerar la naturaleza de las mercancías, sofocar los
casos de exceso de demanda con transportes alternativos o agrupar municipios con algoritmos de
clustering para un reparto con menos municipios son líneas de investigación con futuro y trabajos
como este aportan al desarrollo de procesos logísticos óptimos.
86
REFERENCIAS
Ahmed , M. M., Sultana, N., A. R., & Udin, M. S. (Diciembre de 2017). An Innovative
Approach to Obtain an Initial Basic Feasible Solution for the Transportation
Problems. Journal of Physical Sciences, 22, 23-42.
Babu, A. (3 de Julio de 2020). Towards Data Science. Obtenido de Towards Data
Science: https://towardsdatascience.com/optimization-in-transportation-
problem-f8137044b371
Brines, J. (17 de Marzo de 2018). Expansio. Obtenido de
https://www.expansion.com/empresas/distribucion/2018/03/17/5aad4699e2704e
13428b4575.html
Carreño, E. M., Toro Ocampo, E. M., & Escobar, A. (Mayo de 2004).
OPTIMIZACIÓN DE SISTEMAS LINEALES USANDO MÉTODOS DE
PUNTO INTERIOR. Scientia et Technica Año X(24), 43-48.
Clemente, J. (22 de Enero de 2000). El Pais. Obtenido de
https://elpais.com/diario/2000/01/22/cvalenciana/948572299_850215.html
Diestel, R. (2017). Graph Theory: 5th edition (Vol. 17). Springer.
Ekanayake, Daundasekara, & Perera S. (2021). Solution of a Transportation Problem
using Bipartite Graph. Global Journal of Science Frontier Research: F
Mathematics and Decision Sciences, 21, 55-66.
El Español. (28 de Julio de 2021). Obtenido de El Españoñ:
https://www.elespanol.com/malaga/economia/20210728/mercadona-invierte-
automatizar-mejorar-logistico-antequera-malaga/599941412_0.html
Garcia Narvaez, M. (2014). Problemas de transporte y problemas de transporte con
carga fija. Zaragoza, Aragon, España. Obtenido de
https://zaguan.unizar.es/record/15108/files/TAZ-TFG-2014-932.pdf
Granada Hoy. (28 de Julio de 2021). Obtenido de
https://www.granadahoy.com/granada/inversion-Mercadona-Granada-
2020_0_1596442436.html
Guerequeta, R., & Vallecillo, A. (1998). Técnicas de Diseño de Algoritmos. Malga:
Servicio de Publicaciones de la Universidad de Málaga.
Hitchcock, F. L. (1941). The Distribution of a Product from Several Sources to
Numerous Localities. Journal of Mathematics and Physics, 224-230.
Ideal Granada. (28 de Abril de 2017). Recuperado el Junio de 2022, de
https://www.ideal.es/granada/201704/28/provincia-granada-tiene-este-
20170427173304.html
Kantoróvich,, L. V., & Gavurin, M. K. (1949). Application of mathematical methods to
problems of analysis of freight flows. En ,. L. Kantoróvich, & M. K. Gavurin,
Problems of raising the efficiency of transport performance (págs. 110-138).
Moscú-Leningrado.
Kantoróvich, L. V. (1942). On the traslocation of masses. Doklady Akademii Nauk ,
37(7-8), 227-229.
Logistica Profesional. (1 de Enero de 2016). Obtenido de
https://www.logisticaprofesional.com/texto-diario/mostrar/1570693/imp-
mercadona-abre-nuevo-almacen-guadix-granada
Melero, J. (17 de Junio de 2020). Transgesa. Obtenido de
https://www.transgesa.com/blog/costos-de-transporte/
87
Mercadona. (s.f.). Obtenido de https://info.mercadona.es/es/supermercados
Mercadona. (18 de Octubre de 2013). Obtenido de Mercadona:
https://info.mercadona.es/es/actualidad/mercadona-pone-en-marcha-su-nuevo-
bloque-logistico-en-guadix-granada-0/news
Mercadona. (13 de Agosto de 2018). Obtenido de
https://info.mercadona.es/es/actualidad/mercadona-invertira-35-millones-de-
euros-en-la-ampliacion-de-su-bloque-logistico-de-huevar/news
Mercadona. (Noviembre de 2021). Obtenido de
https://info.mercadona.es/document/es/listado-tiendas-participantes-de-
mercadona-en-la-gran-recogida-2021.pdf?blobheader=application/pdf
Mercadona. (2021 de Junio de 2021). Recuperado el Junio de 2022, de
https://info.mercadona.es/es/conocenos/sala-de-prensa/hemeroteca/mercadona-
amplia-su-bloque-logistico-de-san-isidro-alicante-con-una-inversion-total-de-
98-millones-de-euros/news
Miranda, F. (28 de Junio de 2021). La Estrategia del Ocho para que no haya viajes de
vacío. Diario Jaen.
Muñuzuri, J., Onieva, L., Cortés, P., Guadix, J., & Ibañez, J. N. (2010). Métodos
Cuantitativos y Organización de la Producción. Madrid: Sintesis.
OpenCourseWare . (s.f.). Obtenido de OpenCourseWare :
https://ocw.ehu.eus/pluginfile.php/41788/mod_resource/content/1/6._transporte_
asignacion.pdf
Or, S. (19 de Noviembre de 2020). PTV Group. Obtenido de
https://blog.ptvgroup.com/es/ciudad-y-movilidad/reducir-costos-de-transporte-
logistica/
Orús, A. (Enero de 2022). Obtenido de
https://es.statista.com/estadisticas/540894/porcentaje-de-ventas-de-los-grandes-
supermercados-en-espana/
Palau, J. C. (27 de Octubre de 2020). El Mercantil. Obtenido de
https://elmercantil.com/2020/10/27/mercadona-alcanza-la-plena-ocupacion-de-
sus-camiones-gracias-a-la-logistica-inversa/
Pandey, A. (s.f.). Math Ideas That Click! . Obtenido de
https://www.anshoo.in/2021/05/shortest-linear-distance-vs-geodesic.html
Pedregal, P. (2003). Introduction to Optimization, vol. 46. Springer.
Schrijver, A. (2002). On the History of the Transportation and Maximum Flow
Problems. Mathematical Programming(91), 437-445.
Shilpa, P., Jagadeesh, D., & Kumar, R. A. (s.f.).
Shokrhy, S., & Tanaka, S. (2018). Bandwidth Maximization Approach for Displaced
Left-Turn Crossovers Coordination under Heterogeneous Traffic Conditions.
Journal of Traffic and Transportation Engineering, 183-196.
Tafakkori, K. (29 de Diciembre de 2021). Supply Chain Data Analytics. Obtenido de
https://www.supplychaindataanalytics.com/es/modelado-y-resolucion-de-
problemas-de-optimizacion-en-python/
Verschik, A. M. (2013). Long History of the Monge-Kantorovich Transportation
Problem. The Mathematical Intelligencer volume , 35, 1-9.
Vershik, A. M. (2006). KANTOROVICH METRIC: INITIAL HISTORY AND
LITTLE-KNOWN APPLICATIONS. Journal of Mathematical Sciences,
133(4), 1410-1417.
Willems, E. (s.f.). Geocode Local Focus. Obtenido de https://geocode.localfocus.nl
88
ANEXO. CÓDIGOS DE PYTHON
Programa 1. Cálculo de distancias geodésicas entre centros logísticos
supermercados.
from geopy.distance import geodesic
import pandas
import numpy as np
print('Leyendo datos')
df = pandas.read_excel('DATOS MERCADONA TFG BIS1.xlsx',
sheet_name='Coordenadas', header=0, index_col=[0])
N = list(df.index.map(int))
# Localidad_destino:
Localidad_destino = {(i): df.at[i, 'Localidad_destino'] for i in N}
# X_destino:
X_destino = {(i): df.at[i, 'X_destino'] for i in N}
# y_destino:
Y_destino = {(i): df.at[i, 'Y_destino'] for i in N}
# Localidad_origen:
Localidad_origen = {(i): df.at[i, 'Localidad_origen'] for i in N}
# X_origen:
X_origen = {(i): df.at[i, 'X_origen'] for i in N}
# Y_origen:
Y_origen = {(i): df.at[i, 'Y_origen'] for i in N}
# - Documentacion: https://geopy.readthedocs.io/en/stable/
print(' ')
print('Las distancias desde Guadix son: ')
print(' ')
for i in X_destino:
print(geodesic(Guadix,(X_destino[i],Y_destino[i])))
89
print('Las distancias desde Antequera son: ')
print(' ')
for i in X_destino:
print(geodesic(Antequera,(X_destino[i],Y_destino[i])))
N = list(df.index.map(int))
# Localidad_destino:
Localidad_destino = {(i): df.at[i, 'Localidad_destino'] for i in N}
# X_destino:
X_destino = {(i): df.at[i, 'X_destino'] for i in N}
# y_destino:
Y_destino = {(i): df.at[i, 'Y_destino'] for i in N}
# Localidad_origen:
Localidad_origen = {(i): df.at[i, 'Localidad_origen'] for i in N}
# X_origen:
X_origen = {(i): df.at[i, 'X_origen'] for i in N}
# Y_origen:
Y_origen = {(i): df.at[i, 'Y_origen'] for i in N}
# Se lee la hoja con los costes (distancias calculadas) dentro del Excel.
90
Costes_Guadix = {(i): dc.at[i, 'Guadix'] for i in N}
# Capacidades_oferta:
Ofertas = {(i): dg.at[i, 'Oferta'] for i in N}
# Capacidades_demanda:
Demandas = {(i): dg.at[i, 'Demanda'] for i in N}
modelo = pe.ConcreteModel()
Localidad_origen_lst = list(Localidad_origen.values())[0:3]
Ofertas_lst = list(Ofertas.values())[0:3]
Localidad_destino_lst = list(Localidad_destino.values())
Demandas_lst = list(Demandas.values())
modelo.i =
pe.Set(initialize=[Localidad_origen[1],Localidad_origen[2],Localidad_orig
en[3]], doc='Origenes')
91
# El primer elemento del diccionario es una tupla con dos elementos no
#numericos (strings).
for i in range(len(Localidad_destino_lst)):
Ori_dest_Huevar =
Ori_dest_1.append([Localidad_origen_lst[0],Localidad_destino_lst[i]])
print(Ori_dest_1)
for i in range(len(Localidad_destino_lst)):
Ori_dest_Antequera =
Ori_dest_2.append([Localidad_origen_lst[2],Localidad_destino_lst[i]])
print(Ori_dest_2)
for i in range(len(Localidad_destino_lst)):
Ori_dest_Guadix =
Ori_dest_3.append([Localidad_origen_lst[1],Localidad_destino_lst[i]])
92
print(Ori_dest_3)
# Se crea una lista Origen - Destinos que agrupe las tres listas
# creadas arriba:
Costes_Huevar_lst = list(Costes_Huevar.values())
Costes_Antequera_lst = list(Costes_Antequera.values())
Costes_Guadix_lst = list(Costes_Guadix.values())
93
def f_demanda(modelo, j):
return sum(modelo.x[i,j] for i in modelo.i) == modelo.b[j]
modelo.demanda = pe.Constraint(modelo.j, rule=f_demanda,
doc='Máximo demandado por cada Mercadona')
def f_objetivo(modelo):
return sum(modelo.c[i,j]*modelo.x[i,j] for i in modelo.i for j in
modelo.j)
modelo.objetivo = pe.Objective(rule=f_objetivo, sense=pe.minimize,
doc='Función Objetivo')
opt = SolverFactory("glpk")
resultados = opt.solve(modelo)
# Resultados:
print("\Solución óptima encontrada\n" + '-'*80)
pyomo_postprocess(None, None, resultados)
print("\Valor función objetivo es\n", value(modelo.objetivo))
class Dupla:
def _init_(self, x, y):
self.x = x
self.y = y
94
vertices_G = ['Huevar','Alcalá de Guadaira','Alcalá del Río','La
Algaba','Bormujos','Brenes',
'Camas','Cantillana','C.C.','Coria del Río',
'Dos Hermanas','Espartinas','Gines',
'Mairena del Aljarafe','Pilas',
'La Rinconada','San Juan','Sanlúcar la Mayor',
'Sevilla','Tomares']
G.add_nodes_from(vertices_G)
Pesos_G = [('3'),('1'),('1'),('2'),('1'),('1'),('1'),('1'),('2'),('7'),
('1'),('1'),('3'),('1'),('2'),('2'),('1'),('21'),('2')]
zipped = dict(zip(aristas_G,Pesos_G))
G.add_edges_from(aristas_G)
95
# Se crea un diccionario con los datos decada vertice y su ubicacion en
#el plano X Y. Despues, se asignan los valores X Y de cada vertice
#extrayendolos del diccionario:
puntoA = Dupla()
puntoA.x = ubica['Huevar'][0]
puntoA.y = ubica['Huevar'][1]
puntoC = Dupla()
puntoD = Dupla()
puntoE = Dupla()
puntoG = Dupla()
puntoG.x = ubica['Bormujos'][0]
puntoG.y = ubica['Bormujos'][1]
puntoH = Dupla()
puntoH.x = ubica['Brenes'][0]
puntoH.y = ubica['Brenes'][1]
puntoJ = Dupla()
puntoJ.x = ubica['Camas'][0]
puntoJ.y = ubica['Camas'][1]
puntoK = Dupla()
puntoK.x = ubica['Cantillana'][0]
puntoK.y = ubica['Cantillana'][1]
puntoM = Dupla()
puntoM.x = ubica['C.C.'][0]
96
puntoM.y = ubica['C.C.'][1]
puntoN = Dupla()
puntoO = Dupla()
puntoQ = Dupla()
puntoQ.x = ubica['Espartinas'][0]
puntoQ.y = ubica['Espartinas'][1]
puntoS = Dupla()
puntoS.x = ubica['Gines'][0]
puntoS.y = ubica['Gines'][1]
puntoW = Dupla()
puntoBeta = Dupla()
puntoBeta.x = ubica['Pilas'][0]
puntoBeta.y = ubica['Pilas'][1]
puntoGamma = Dupla()
puntoDelta = Dupla()
puntoEpsilon = Dupla()
97
puntoDseta = Dupla()
puntoDseta.x = ubica['Sevilla'][0]
puntoDseta.y = ubica['Sevilla'][1]
puntoEta = Dupla()
puntoEta.x = ubica['Tomares'][0]
puntoEta.y = ubica['Tomares'][1]
carac = pd.DataFrame({'ID':['Huevar'],
'type':['String']})
carac = carac.set_index('ID')
carac = carac.reindex(G.nodes())
carac['type'] = pd.Categorical(carac['type'])
carac['type'].cat.codes
# Se dibuja:
98