Visualizando estatísticas com salabim

Tendo introduzido o salabim para simulação de eventos discretos ( DES ) em Python, quero acompanhar sua funcionalidade relacionada às estatísticas. Faço isso no post de hoje: Stats with salabim !

Simulação de eventos discretos, job shop e Python

A simulação de eventos discretos é um dos vários métodos de simulação aplicáveis ​​por analistas de SCM, planejadores de produção e analistas de pesquisa operacional. O gráfico abaixo fornece uma categorização aproximada desses métodos de simulação .

stats com salabim para simulação de eventos discretos em Python

A simulação de eventos discretos é aplicada principalmente para objetivos operacionais e detalhados, como, por exemplo, planejamento de produção, projeto de fábrica ou projeto e melhoria de processos de negócios. É o método apropriado para sistemas complexos bem descritos por eventos sequenciais e filas. Aqui estão alguns exemplos de casos de uso de simulação que você pode ler para começar:

Uma job shop, por exemplo, é um sistema que pode se beneficiar da simulação de eventos discretos para seu projeto e/ou melhoria contínua.

Simulação e estatísticas de job shop com salabim

Abaixo, o código Python implementa um modelo de simulação de job shop em Python usando salabim . Eu usei esse exemplo simples em postagens anteriores do blog. Neste caso, estamos modelando um job shop simplificado com 2 máquinas e 100 jobs. Os trabalhos podem ser processados ​​em qualquer máquina, mas apenas por uma máquina por vez. As máquinas processam tarefas com um tempo de processamento especificado (duração). As máquinas, neste caso, têm uma capacidade de 1. Depois que uma máquina processa um trabalho, ela é concluída. A programação de produção, neste caso, é simplificada até certo ponto e modelada por um gerador de tarefas aleatórias. O gerador de tarefas cria novas tarefas em intervalos distribuídos aleatoriamente com um tempo médio especificado entre as tarefas. O código implementa estatísticas animadas, além de implementação de modelo e execução de simulação.

A primeira parte importa salabim e configura constantes, bem como tipos de dados relevantes (classe Produto). Produto estende a classe de componentes salabim . Ele implementa um método de processo. Este método é usado para solicitar e manter um recurso , por um período especificado .

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()}")

A próxima parte configura o ambiente de simulação e define os recursos. A fonte da peça, ou seja, o gerador de componentes, também é definida nesta seção:

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 fim, a execução da simulação e a animação são implementadas.

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)

Isso resulta em uma animação. A imagem abaixo mostra um instantâneo da animação.

A animação mostra o trabalho em andamento e o backlog/trabalho em espera ao longo do tempo.

Conteúdo Relacionado

Se você estiver interessado em simulação de eventos discretos e suas aplicações, ou suas implementações específicas em, por exemplo, R, AnyLogic, VisualComponents e Python, confira as seguintes publicações do SCDA:

You May Also Like

Leave a Reply

Leave a Reply

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.