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 .
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:
- Enlace : Simulación de mina a cielo abierto para una mejor planificación
- Enlace : Simulador de estacionamiento con simmer en R
- Enlace : Simulación de la cadena de suministro avícola de extremo a extremo
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:
- Enlace : Casos de uso de simulación de eventos discretos (DES)
- Enlace : lista de software de simulación de eventos discretos
- Enlace : Métodos de simulación para analistas de SCM
- Enlace : modelo de procedimiento de simulación de eventos discretos
- Enlace : Simulación de inspección de recepción con simmer
- Enlace : Visualización de la simulación del taller de trabajo de SimPy
- Enlace : Cocine a fuego lento en R para simulación de eventos discretos
- Enlace : Simulación de patio de grúas en AnyLogic
- Enlace : Simulación de transportadores en AnyLogic
- Enlace : Simulación de KPI financieros de Visual Components
Ingeniero industrial especializado en optimización y simulación (R, Python, SQL, VBA)
Leave a Reply