Simulação AGV de rotas em AnyLogic

Neste artigo apresento um modelo simples de simulação de AGV. Ele serve como um exemplo de como simular roteamentos de peças em uma fábrica. Implementei a simulação no AnyLogic.

Já forneci algumas outras introduções básicas ao AnyLogic. Mais especificamente, tenho por exemplo, introduzido anteriormente alguns modelos básicos de transportadores em uma série de vídeos do YT. Aqui está uma lista de algumas introduções básicas à modelagem de simulação AnyLogic:

Eu ilustrei um layout conceitual da simulação AGV na figura mais abaixo no próximo parágrafo.

Usando AnyLogic para simulação AGV com roteamentos

Em postagens anteriores neste blog, já apresentei várias opções de software de simulação de eventos discretos. Listo alguns exemplos abaixo. Claramente, sou fã de ferramentas e estruturas de simulação
gratuitas e abertas (veja, por exemplo, “simmer”). No entanto, AnyLogic é uma ferramenta comercial.

Ao longo de vários projetos de simulação, trabalhei com várias ferramentas de simulação de eventos discretos, não apenas as listadas acima. No entanto, para simulações AGV incorporadas em estudos de
fluxo de materiais, considero o AnyLogic e o Simio entre as melhores ferramentas de simulação de eventos discretos. Também vi os recursos do FlexSim e Plant Simulation em relação à simulação de AGV e você também pode utilizá-los. No entanto, em termos de personalização, prefiro o AnyLogic.

Principalmente por sua estrutura, documentação e transparência – e pelo fato de AnyLogic ser codificado em JAVA.

Os estudos de simulação requerem um modelo de procedimento

Um erro comum que observo com frequência quando os analistas da cadeia de suprimentos entram na simulação é que eles pulam direto para a odelagem. No entanto, um bom modelo de simulação só pode ser desenvolvido quando o objetivo do estudo de simulação estiver claramente definido. Além disso, isso geralmente só é possível quando o sistema ou problema subjacente foi totalmente compreendido por todas as partes envolvidas. Eu recomendo usar um modelo de procedimento para qualquer estudo de simulação. A figura abaixo ilustra meu modelo de procedimento.

Aliás, o modelo de procedimento aplicado por mim já foi publicado neste blog em posts anteriores. Aqui estão dois artigos relacionados relevantes:

Consequentemente, nas fases iniciais do estudo de simulação é importante compreender completamente a situação. Os termos apropriados ara esta etapa são, por exemplo, análise de situação, análise de lacunas e definição de problemas. A coleta de dados faz parte desta etapa. Depois, costumo definir explicitamente o que faz e o que não faz parte do modelo de simulação a ser desenvolvido. Por exemplo, uma vez simulei uma operação de bonde e horários de bonde em Zurique (Suíça). Decidi naquele projeto que o fluxo de pedestres que bloqueia os trilhos do bonde não será implementado em detalhes. Em vez disso, descrevi a frequência e a duração do bloqueio ferroviário com uma curva de distribuição aleatória.

Eventualmente, o estudo de simulação prossegue desenvolvendo um layout e um modelo conceitual. A modelagem conceitual envolve, por exemplo, fluxogramas, bem como definição de diagramas de transição de estado para equipamentos relevantes. Isso torna a implementação de modelagem de simulação real muito mais fácil e garante um código bem estruturado.

Eu esbocei um layout simples da simulação AGV

Dependendo do projeto em que trabalho, geralmente faço um layout aproximado. Alternativamente, vou contar com um desenho AutoCAD (ou similar) entregue a mim pela equipe de engenharia do cliente.

Simple layout draft of AGV simulation model.

A figura acima mostra uma área central de recebimento que encaminha o material de entrada recebido por meio de transportadores de rolos. Guindastes ou robôs colocam peças em AGVs no final do transportador.

Os AGVs facilitam o fluxo de material desde o recebimento inicial

Os AGVs, representando o núcleo desta simulação de AGV em AnyLogic, roteiam peças para áreas de trabalho. Esse processo de roteamento pode exigir tomada de decisão, possivelmente em um nível muito complexo.

Por exemplo, talvez eu queira atribuir o AGV mais próximo à tarefa ou o AGV com a menor utilização. Também posso enfrentar uma situação em que quero modelar a decisão de roteamento real. Ou seja, um AGV seguea rota A e outro AGV segue a rota B através da rede de pistas AGV.

Implementando a simulação AGV no AnyLogic

Eu implementei esta simulação de AGV no AnyLogic. Uma captura de tela do modelo pode ser vista abaixo.

Essencialmente, o modelo é composto por uma fonte que gera chegadas de peças. Essas chegadas de peças são encaminhadas para o transportador. Assim que as peças chegam à posição final definida do transportador, uma tarefa de transporte é liberada. Na verdade, esse processo de despacho de tarefa é um processo AnyLogic padrão. No entanto, eu poderia ter implementado uma lógica de despacho de tarefa personalizada usando JAVA.

Uma vez que um dos AGVs tenha sido atribuído ao transporte, usando a lógica padrão AnyLogic conforme descrito acima, o modelo decide para qual área de trabalho transportar a peça. Para isso, implementei uma lógica de decisão personalizada, porém simples, para fins de demonstração. Descrevo essa lógica personalizada no capítulo a seguir.

Sendo este um exemplo simples, não implementei as áreas de trabalho em nenhum detalhe. Além disso, também não implementei em detalhes a operação de pick and place de um robô ou guindaste na saída do transportador. Referindo-se ao meu modelo de procedimento, isso é totalmente bom. Tenho “permissão” para implementar essas etapas do processo em um nível de abstração mais alto, desde que o objetivo do estudo e a definição do problema não indiquem que preciso implementar essas etapas do processo em detalhes especificados. A operação de pegar e colocar pode, por exemplo, ser modelado com um atraso de tempo. Este atraso de tempo pode ser distribuído aleatoriamente, se apropriado para o equipamento de manuseio de material escolhido.

Na verdade, outra abstração é que não visualizei as áreas de trabalho e não implementei nenhum objeto customizado para representá-las. Em vez disso, simplesmente usei um objeto de nó padrão do AnyLogic. O nó de destino atualmente ativo, ou seja, a área de trabalho atualmente relevante, é referenciado pela variável de estação. Essa variável é atualizada por um algoritmo de roteamento personalizado. Vou explicar isso mais abaixo neste artigo.

Depois que as peças chegam à área de trabalho, a peça permanece na área de trabalho por um tempo padrão especificado. Eventualmente, a peça entra na pia. O coletor exclui a peça e, assim, a remove do modelo.

Implementando a decisão de roteamento personalizado

Ao implementar simulações de AGV, uma coisa que eu gostaria de influenciar são as decisões de roteamento. Claramente, isso ocorre porque os roteiros facilitam qualquer fluxo de material. Neste caso,
se eu assumir que cada peça que chega do recebimento representa o mesmo material de entrada, ex. peças brutas para fresamento ou outro processamento, não posso apenas rotear com base no tipo de material. Em vez disso, talvez eu queira rotear com base na utilização do centro de trabalho ou em algum outro critério. A questão é que a decisão de roteamento deve ser facilmente personalizável. Eu escrevi esta postagem no blog para fornecer um exemplo simples de como se pode fazer isso no AnyLogic.

Neste modelo de simulação AGV simples, facilito o roteamento personalizado com 4 variáveis e 1 função:

  • output_01 a output_03 mede o número total de peças entregues na respectiva área de trabalho
  • station referencia a área de trabalho de destino da peça (objeto de nó AnyLogic)
  • set_route é uma função que facilita a decisão de roteamento personalizada sob medida

A captura de tela abaixo exibe o conteúdo da função set_route.

A função set_route simplesmente implementa o roteamento cíclico. Ou seja, a primeira parte vai para station_a, a segunda parte vai para station_b e assim por diante. No entanto, eu poderia especificar
funções e variáveis adicionais e outros tipos de tomada de decisão, se necessário. No final, a lógica a ser implementada depende da situação específica.

A função set_route é chamada sempre que um agente está entrando no bloco moveTo_a abaixo da cadeia de blocos lógicos.

Esta cadeia de blocos lógicos implementa o seguinte fluxo:

  • src gera partes com tempos de intervalo distribuídos aleatoriamente
  • convey transporta a peça da posição inicial à final da marcação do transportador
  • get_transport solicita um AGV para pegar a peça na saída do transportador
    moveTo_a chama set_route e transporta parte para as referências de nó na estação
  • delay faz com que a peça permaneça no nó (representando a área de trabalho) por algum tempo
  • sink remove a peça do modelo

Posso especificar a chamada de função na seção OnEnter do bloco moveTo_a. Veja a imagem abaixo.

Conclusão e conteúdo relacionado

Neste exemplo simples de simulação de AGV, demonstrei como você pode personalizar os roteamentos de peças no AnyLogic. Os critérios de roteamento e a lógica de roteamento usados neste exemplo eram muito simples. Um algoritmo de roteamento real geralmente seria mais sofisticado e adaptado aos requisitos da fábrica em que opera. Esses algoritmos de roteamento rapidamente se tornarão complexos e podem ser desafiadores.

Ao longo deste artigo, já forneci uma grande variedade de links para conteúdo relacionado. No entanto, aqui estão alguns artigos adicionais que eu gostaria de compartilhar com o leitor interessado:

Leave a Reply

Deixe um comentário

O seu endereço de e-mail não será publicado.

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

Close

Meta