Ejemplo de modelado de simulación de estacionamiento de SimPy

Quería ampliar mi serie de ejemplos de SimPy para la cadena de suministro y la simulación de fabricación. En este artículo muestro cómo puedes modelar un estacionamiento en Python, usando SimPy. SimPy es una biblioteca de modelado de simulación de eventos discretos en Python. Otros ejemplos de SimPy y también modelos de simulación de estacionamiento a fuego lento basados ​​en R ya se han compartido en este blog en el pasado. Aquí hay unos ejemplos:

El modelo discutido aquí también podría usarse para modelar otros sistemas similares, por ejemplo, un almacenamiento intermedio de procesos con tiempos de permanencia mínimos (procesos de enfriamiento, procesos de endurecimiento y similares) y su utilización de ranuras/compartimentos.

Beneficio de las simulaciones de estacionamientos

Los modelos de simulación de estacionamientos son herramientas invaluables en la gestión de la cadena de suministro y ofrecen multitud de beneficios. Estos modelos facilitan la asignación eficiente de recursos, como espacio y mano de obra, optimizando su uso. Ayudan en la planificación de la capacidad, permitiendo decisiones bien informadas con respecto a la expansión o reducción de las instalaciones. El análisis del flujo de tráfico mejora el movimiento general de vehículos dentro de los centros de distribución, reduciendo la congestión y los tiempos de espera. La gestión eficiente de las colas garantiza que las mercancías se carguen y descarguen rápidamente.

Además, las simulaciones de estacionamientos ayudan a identificar oportunidades de reducción de costos al minimizar el tiempo de inactividad y mejorar la eficiencia operativa. La medición del desempeño en varios componentes de la cadena de suministro respalda la evaluación comparativa y el establecimiento de objetivos. Estos modelos permiten la exploración de escenarios hipotéticos, lo que permite probar y evaluar cambios en el diseño, la dotación de personal y los procesos. También ayudan a la mitigación proactiva de riesgos al identificar cuellos de botella y vulnerabilidades en las operaciones de los estacionamientos .

Además, sirven como herramientas valiosas para la capacitación de los empleados y el desarrollo de habilidades, proporcionando un entorno controlado para aprender las operaciones de estacionamiento y carga. Al apoyar iniciativas de sostenibilidad, las simulaciones de estacionamientos optimizan las rutas y reducen el impacto ambiental. Estas simulaciones generan conocimientos basados ​​en datos que informan la toma de decisiones estratégicas y promueven una cultura de mejora continua al facilitar la prueba de nuevas estrategias para la optimización continua. La integración de simulaciones de estacionamientos en la gestión de la cadena de suministro puede generar ahorros de costos, ganancias de eficiencia y mejoras generales del rendimiento en la cadena de suministro.

Un modelo de simulación de estacionamiento SimPy

A continuación se muestra un ejemplo de Python, también disponible en Github, que consume simpy para modelar un estacionamiento . El estacionamiento se modela como un Contenedor con capacidad definida. La capacidad modela el número de plazas de aparcamiento en el lote.

Se implementa un proceso SimPy en la clase de estacionamiento para modelar las llegadas de automóviles. Este proceso continúa durante un número definido de llegadas de automóviles. Cada automóvil llega después de un tiempo entre llegadas distribuido aleatoriamente. Luego ocupa un espacio disponible durante un período de tiempo distribuido aleatoriamente. Después de eso, se libera la plaza de aparcamiento.

import simpy
import random

# modeling framework
class ParkingLot:

    env         :simpy.Environment
    capacity    :int
    spots       :simpy.resources.container.Container

    def __init__(self, 
        
        env :simpy.Environment, 
        capacity :int
        ):
        
        """ constructor """
        
        self.env = env
        self.capacity = capacity
        self.spots = simpy.resources.container.Container(env, capacity, init=capacity)
    
    def car_arrival(self,
        car_id :int
        ) -> None:
        """ 
    
        implement simpy process; 
        models car arrivals in the parking lot, occupying a slot for a randomly distributed duration
    
        """
    
        print(f"Car {car_id} arrives at {self.env.now}")
    
        yield self.spots.get(1)
        
        print(f"Car {car_id} parks at {self.env.now}")
        
        yield self.env.timeout(random.randint(1, 5))
        
        print(f"Car {car_id} leaves at {self.env.now}")
        
        yield self.spots.put(1)
    
    def main(self,
            cararrivals :int,
            interarrivaltime_min :int,
            interarrivaltime_max :int
            ) -> None:
        
        """ implements simpy process for main parking lot simulation run """
        
        for car in range(1, cararrivals+1):

            t = random.randint(interarrivaltime_min, interarrivaltime_max)

            yield self.env.timeout(t)

            self.env.process(self.car_arrival(car))

# setup model 
env = simpy.Environment()
parking_lot = ParkingLot(env, capacity= 10)

# setup simulation run itself
env.process(parking_lot.main(cararrivals= 10, interarrivaltime_min= 1, interarrivaltime_max= 5))

# run the model
env.run()

Al ejecutar este modelo para 10 llegadas de automóviles, para un estacionamiento con 10 espacios de estacionamiento, se genera el siguiente resultado:

El auto 2 llega a las 4

Coche 2 aparcamientos a las 4

El auto 1 llega a 2

El coche 1 se aparca en 2

El coche 1 sale a las 3

El coche 3 llega a las 7

Coche 3 aparcamientos a las 7

El auto 4 llega a las 8

Coche 4 aparca a las 8

El coche 2 sale a las 9

El coche 5 llega a las 9

Coche 5 aparca a las 9

El coche 4 sale a las 10

El auto 6 llega a las 11

Coche 6 aparca a las 11

El coche 3 sale a las 12

El auto 7 llega a las 12

Coche 7 aparca a las 12

El coche 5 sale a las 13

El coche 6 sale a las 13

El coche 8 llega a las 16.

Coche 8 aparca a las 16

El coche 7 sale a las 17

El coche 8 sale a las 17

El coche 9 llega a las 20

Coche 9 aparca a las 20

El coche 10 llega a las 22.

Coche 10 aparca a las 22

El coche 10 sale a las 24

El coche 9 sale a las 25

En los próximos tutoriales mostraré cómo integrar estadísticas personalizadas en este modelo de simulación y, por último, cómo animarlo.

Comentarios finales sobre el modelado de simulación de estacionamientos de SimPy

En este artículo desarrollé un modelo base simple para un estacionamiento , usando SimPy en Python. Usaré este modelo en próximos tutoriales para analizar los procesos de llegada de automóviles y la utilización de la capacidad del estacionamiento a lo largo del tiempo, y animaré la utilización de los espacios a lo largo del tiempo. Además, detallaré el modelo e implementaré zonas de estacionamiento y estrategias de minimización de distancia de viaje.

Si desea obtener más información sobre SimPy y la simulación de eventos discretos en general, puede considerar estudiar las siguientes publicaciones y contribuciones del blog SCDA:

You May Also Like

Leave a Reply

Leave a Reply

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.