Visualización de estadísticas con salabim

Después de haber introducido salabim para la simulación de eventos discretos ( DES ) en Python, quiero hacer un seguimiento de su funcionalidad relacionada con las estadísticas. Lo hago en la publicación de blog de hoy: ¡ Estadísticas con salabim !

Simulación de eventos discretos, taller de trabajo y Python

La simulación de eventos discretos es uno de varios métodos de simulación aplicables por analistas de SCM, planificadores de producción y analistas de investigación de operaciones. El siguiente gráfico proporciona una categorización aproximada de estos métodos de simulación .

stats con salabim para simulación de eventos discretos en Python

La simulación de eventos discretos se aplica principalmente para objetivos operativos y detallados, como, por ejemplo, la planificación de la producción, el diseño de fábricas o el diseño y la mejora de procesos empresariales. Es el método apropiado para sistemas complejos bien descritos por eventos secuenciales y colas. Aquí hay algunos ejemplos de casos de uso de simulación que puede leer para empezar:

Un taller de trabajo, por ejemplo, es un sistema que puede beneficiarse de la simulación de eventos discretos para su diseño y/o mejora continua.

Simulación de taller de trabajo y estadísticas con salabim

A continuación, el código de Python implementa un modelo de simulación de taller de trabajo en Python usando salabim . He usado este ejemplo simple en publicaciones de blog anteriores. En este caso, estamos modelando un taller de trabajo simplificado con 2 máquinas y 100 trabajos. Los trabajos se pueden procesar en cualquier máquina, pero solo en una máquina a la vez. Las máquinas procesan trabajos con un tiempo de procesamiento específico (duración). Las máquinas, en este caso, tienen una capacidad de 1. Una vez que una máquina ha procesado un trabajo, está completo. El programa de producción, en este caso, se simplifica hasta cierto punto y se modela mediante un generador de trabajos aleatorios. El generador de trabajos crea nuevos trabajos a intervalos distribuidos aleatoriamente con un tiempo medio especificado entre trabajos. El código implementa estadísticas animadas, además de la implementación del modelo y la ejecución de la simulación.

La primera parte importa salabim y establece constantes y tipos de datos relevantes (clase de producto). El producto amplía la clase de componentes de salabim . Implementa un método de proceso. Este método se utiliza para solicitar y mantener un recurso durante un período específico .

import salabim as sim

SEED = 42
MACHINES = 2    # amount of machines
INTERVAL = 3    # mean time between two jobs
DURATION = 5.0  # mean processing time of a job
JOBS = 100      # number of jobs that have to be completed

class Product(sim.Component):
    def process(self):
        yield self.request(machines)
        print(f"{self.name()} started at time {env.now()}")
        yield self.hold(DURATION)
        print(f"{self.name()} completed at time {env.now()}")

La siguiente parte configura el entorno de simulación y define los recursos. La fuente de la pieza, es decir, el generador de componentes, también se define en esta sección:

env = sim.Environment(random_seed=SEED)
machines = sim.Resource("machines", capacity=MACHINES)

sim.ComponentGenerator(Product, iat=sim.Exponential(INTERVAL), force_at=True, number=JOBS)

Por último, se implementa la ejecución de la simulación y la animación.

env.animate(True)
env.modelname("jobshop demonstration")

machines.claimers().animate(x=700, y=100, title="work in progress", direction="e")

machines.requesters().animate(x=200, y=100, title="work waiting", direction="e")

machines.claimers().length.animate(x=10, y=300, width=1000, height=100, vertical_scale=15, horizontal_scale=20, title="number of work in prgress")

machines.requesters().length.animate(x=10, y=500, width=1000, height=100, vertical_scale=15, horizontal_scale=20, title="number of work waiting")

env.speed(5)
env.run(100)

Esto da como resultado una animación. La imagen de abajo muestra una instantánea de la animación.

La animación muestra el trabajo en curso y la acumulación/trabajo en espera a lo largo del tiempo.

Contenido relacionado

Si está interesado en la simulación de eventos discretos y sus aplicaciones, o sus implementaciones específicas en, por ejemplo, R, AnyLogic, VisualComponents y Python, consulte las siguientes publicaciones de 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.