Entidades, agentes, atributos & variáveis

Embora o termo “atributo” não tenha aparecido neste tutorial, ele é usual em livros de simulação de eventos discretos. Na simulação baseada em agentes, em que se baseia o AnyLogic, o atributo é representado como uma variável que pertence ao agente.

Imagine, por exemplo, que queiramos criar um atributo que representa a hora de entrada do cliente que entra na agência. Neste caso, precisamos, inicialmente, criar um Agente que represente o cliente. No AnyLogic, criar um agente é tarefa para a paleta Agent. Clique nela e arraste o ícone vermelho para dentro da área do modelo:

O AnyLogic vai abrir um wizard para criação de agentes, populações ou tipos de agentes. Com a prática, você descobrirá diversas maneiras de criar agentes, mas o wizard sempre será a mais didática.

Queremos criar um tipo de agente, chamado Cliente, não estamos preocupados com uma população (com tamanho limitado, por exemplo), então nossa escolha deve recair na 3ª opção, Agent type only:

  • Clique em Agent type only;

  • No Agent type name coloque o nome Cliente com a primeira letra em maiúscula, pois é uma convenção adotada pelos usuários;

  • Clique no botão Next >;

  • Como não queremos utilizar animação, selecione None e, a seguir, o botão Finish.

O AnyLogic criou um novo tipo de agente chamado Cliente. Note que ele já abriu a tela do agente para que você possa modelá-lo como quiser. O agente também aparece na aba Projects:

Queremos criar um atributo tempoEntrada, que vai marcar a hora exata em que o cliente entrou no banco. Basta criar uma variável com o nome tempoEntrada:

Agora, volte ao Main e informe ao bloco chegadas (que é um bloco do tipo Source) que o agente a ser criado é do tipo Cliente, usando os seguintes passos:

  • Selecione o elemento chegadas;

  • Em Properties abra a barra (o menu) Agent;

  • Em New agent substitua para a opção Cliente.

Para atribuir o valor da hora atual de simulação a cada cliente que entra na agência, o AnyLogic dispõe da função time(). Assim, vamos atribuir o tempo de entrada logo no bloco chegadas:

  • Procure a barra Actions na janela Properties do elemento chegadas;

  • Em On exit, digite:

agent.tempoEntrada = time()

Observações:

  • agent é o nome genérico do agente que está passando no bloco. Como ele é do tipo Cliente, o AnyLogic sabe que ele possui a variável (atributo) tempoEntrada;

  • Todo bloco do AnyLogic possui as opções Actions onde você pode acrescentar comandos que são executados no momento que o agente entra no bloco, sai, é destruído etc;

  • Assim, se você quiser, por exemplo, calcular o tempo que o cliente ficou na fila do caixa eletrônico, basta acrescentar ao campo On exit do bloco queue, a linha de comando:

agent.tempoEntrada = time() - agent.tempoEntrada;

ou

agent.tempoEntrada -= time();