Um dia na vida de um modelo de restaurante


Este artigo descreve os novos componentes da estrutura para simulação, apresentados anteriormente no artigo "Um sistema simples de simulação em andamento" . À medida que a estrutura se expandia, tornou-se possível modelar sistemas mais complexos, por exemplo, para simular o trabalho de um restaurante.

Novos componentes


Existem vários componentes novos: Bifacilidade , Dividir , Agregar , Contar , Atribuir , Verificar . Vamos considerá-los com mais detalhes.

Bifacilidade é essencialmente a mesma que Facilidade , mas seu objetivo é fazer com que a transação ocupe não um único componente por um tempo, mas uma cadeia de componentes. Para isso, o construtor Bifacility forma dois componentes - IN e OUT. Depois que uma transação entra no componente IN, o Bifacility é considerado ocupado e outra transação não pode mais aceitá-lo. Quando uma transação atinge o componente OUT, o Bifacility é liberado e agora outra transação pode aceitá-lo. Somente a transação que a ocupou pode liberar o Bifacility . A analogia mais simples da Bifacility pode ser considerada uma instalação tecnológica que executa várias operações em uma parte. Até que a peça saia da instalação, é impossível enviar outra peça para ela.

Dividir - um componente projetado para dividir uma transação em partes - outras transações processadas em paralelo no futuro. Por exemplo, se considerarmos uma transação como um pedido, suas partes serão posições no pedido. Por padrão, na ausência de quaisquer parâmetros, o Split divide a transação resultante por uma quantidade igual aos componentes após ela. É possível especificar quantas partes e com qual modificador (para gerar um valor aleatório) a partição será executada. Como, na prática, pode ser necessário que a divisão em partes seja realizada de acordo com alguma lei, em Split há a oportunidade de conectar seu próprio manipulador para a divisão.

Emparelhado com Split é Agregado , como o nome indica, ele agrega uma série de transações em uma. Sua funcionalidade é bastante simples, tendo recebido qualquer parte de uma transação quebrada anteriormente, aguarda todas as outras partes e, após recebê-las, envia a transação ainda mais.

Contagem - componente para contagem. O construtor Count forma dois componentes - INC e DEC. Quando uma transação entra no INC, o contador de contagem aumenta; quando entra em um DEC, diminui. No construtor de Count, são definidos valores pelos quais o contador aumenta e diminui quando entra INC e DEC, respectivamente.

Atribuir - projetado para definir alguns parâmetros de transação. Uma transação tem uma lista de parâmetros, cada parâmetro tem um nome e um valor. O valor pode ser uma sequência, número, estrutura. Ao atribuir zero a um parâmetro, ele é removido da lista.

Cheque - um componente projetado para verificar o cumprimento de uma determinada condição e ignora uma transação somente quando é executada. Por padrão, a igualdade do parâmetro de transação com o valor especificado é verificada. No construtor Cheque , você pode especificar o bloco para o qual a transação será enviada se o resultado da verificação for falso . Para aumentar a flexibilidade, é possível conectar seu próprio manipulador para verificar a condição do salto da transação.

Vale ressaltar que, ao desenvolver a estrutura, o objetivo não era copiar completamente o GPSS; portanto, com o nome idêntico dos componentes, sua funcionalidade pode variar.

Modelo de restaurante


A decisão de tentar construir um modelo de restaurante surgiu não do zero. Em primeiro lugar, muitas pessoas os visitam; em segundo lugar, esse é um sistema de filas bastante complicado; em terceiro lugar, minha esposa trabalha no ramo de restaurantes há muitos anos e eu poderia consultá-la.

Então, começaremos a descrever o modelo do restaurante. O restaurante estará em 24 mesas. Os visitantes do restaurante são chamados de "convidados", os visitantes chegam aleatoriamente, essas transações serão geradas. Mas a transação não é uma pessoa, pode ser um grupo de pessoas que apenas tomou uma mesa. Para aumentar o realismo, se houver mais de 6 convidados na fila (são necessárias 6 mesas) aguardando uma mesa, os novos convidados sairão, não esperar.

As anfitriãs encontram os convidados na entrada; em grandes restaurantes, muitas vezes há duas ou mais; haverá duas no modelo. No caso de haver mesas gratuitas, as recepcionistas os levarão à mesa; se não houver mesas gratuitas, os convidados estarão esperando. Em restaurantes reais, há uma reserva e convidados VIP, por simplicidade, eles não estarão no modelo construído, mas esses planos devem ser levados em consideração.
Depois que os convidados estão sentados à mesa, eles são servidos por um garçom, geralmente um garçom para várias mesas; no modelo, haverá um para três mesas. Como em um restaurante comum, o garçom não pode servir várias mesas ao mesmo tempo, mas serve uma de cada vez. Durante o serviço, o garçom recebe um pedido dos convidados. Por encomenda entende-se vários pratos de vários tipos e bebidas. Quantos pratos e bebidas serão pedidos antecipadamente, mas contaremos pelo menos um e não mais que cinco, incluindo pedidos em um bar. O garçom, depois de receber o pedido, passa para os cozinheiros e garçons.

Tradicionalmente, entre os cozinheiros, há especializações: aperitivos e saladas, carnes, bolos e sobremesas, sushi. Também haverá no restaurante simulado - quatro chefs preparando pratos diferentes. Haverá dois barmen.

É uma prática comum que nem todos os pratos trazem imediatamente, mas assim que estiverem prontos. Consequentemente, os convidados não os comem todos de uma vez, mas gradualmente. E somente quando eles comeram todos os pratos você pode pagar pelo pedido. Depois disso, a tabela pode ser desocupada.

Parâmetros de tempo específicos podem ser visualizados no código .

Modelagem


Na fig. 1 mostra o diagrama estrutural do modelo. Para modelagem, quase todo o conjunto de componentes da estrutura está envolvido. Portanto, para estimar o número de convidados na fila, o componente Verificar é usado. Usando um manipulador especializado, ele verifica o número de convidados na fila e, se o número especificado for excedido, os envia para a saída. Verifique também se as tabelas gratuitas apareceram.


Fig. 1. O diagrama estrutural do modelo de restaurante

Com o Bifacility , você pode ocupar e liberar a mesa. E Atribuir emparelhado com Cheque permite especificar se o garçom transfere o pedido da mesa para a cozinha ou já entrega a louça pronta.

Como pode ser visto na fig. 1 cada um dos cozinheiros tem uma fila de pedidos; na realidade, é claro, é possível cozinhar vários pratos em paralelo, mas no modelo apresentado isso é omitido. Para os barmen, a linha de pedidos é comum.

Resultados da simulação


Os resultados da simulação podem ser encontrados aqui . O relatório mostra:

  • duas tabelas não foram utilizadas (23 e 24) e, em geral, um quarto das tabelas praticamente não é utilizado;
  • o restaurante atendeu 29 visitantes e nenhum deles saiu sem nunca entrar no restaurante;
  • os visitantes não precisavam esperar na fila;
  • ao final da simulação, 12 visitantes receberam parte do pedido e esperavam os demais pratos;
  • os cozinheiros 1 e 4 têm uma carga muito grande (91,46%, 88,33%);
  • Barman 2 não está carregado com trabalho (1,67%);
  • metade dos garçons não está particularmente ocupada;
  • a anfitriã 2 quase não está ocupada (9,38%).

Bottom line, o restaurante é grande e tem uma equipe extra. Ou o restaurante está aberto em um local com pouco tráfego (no modelo apresentado, os visitantes entram a cada 10 ± 5 minutos). Se você testar com maior tráfego (5 ± 3), a carga da equipe aumentará significativamente, mas alguns visitantes vão embora, sem ter que esperar por uma mesa.

Conclusão


O modelo apresentado, apesar de várias simplificações, permite razoavelmente simular o trabalho do restaurante e possivelmente possui um valor prático. Mas componentes, novos e antigos, certamente precisam ser mais desenvolvidos. Nem todas as exceções são tratadas ou tratadas incorretamente. É necessário cobrir o código da estrutura com testes e a documentação mais importante. Tudo isso é planejado e, na medida do possível, será realizado.

Source: https://habr.com/ru/post/pt450606/


All Articles