# 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.&#x20;

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:

![](https://lh3.googleusercontent.com/n23p6I-goUua8mT_zu4LZXeBJmtHKGr-9y5OxKK21NwDFAuyu0ythR6Xt2mML7Cm1X2mVYDHuBShEnq7je-VC6umPxeuos4qAKPwURgb3ePGnP1j7tBrlCFGWAIZ8HNq54rSsNUX)

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**.

![](https://lh6.googleusercontent.com/Q5owRSuOmWcZCjPU35lWkBj0dJjeIHE7fFTrae9gk0ygRK0AIW2SJ83toPquxXAmrA78-GgCNDA-J5NBXSfF2emjM9WvfbJgl3THCsPDRyiiTc-EAYL8i8bkUPhSqUrBuMiJGA1L)

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**:

![](https://lh6.googleusercontent.com/SlQ_9rsymPBK0LmaWf4bPLauPHidh2KKKZN1viNSXf12tcMH4Uue4-TqpngZ--pk_l3U_x3oKYUv94zADqlqLDgxDQ0VPmw9x9TRqamPfeHETx4WePh5mXa2RJjnwuu7ZjdXUGrg)

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**:

![](https://lh5.googleusercontent.com/DHlI8BXBUyibULjcOBH5Hrv9lDYJwaGRs-5PmRn5SGPMLG7avPVlNA6z8BA1i3PvQnI1oW-4Dw9jjuKnHWaQqwS7JuGt7__-X1hgNZTlpxvrGV87kc96AKJCgGDwk33V0QX7GKN8)

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**.

![](https://lh6.googleusercontent.com/CrZb36OTIMFZOGmgNH9gdSf4ASEOhFpDY3x7fO0tNF-eIbTJm_Pj3IdrXCD_thtVMrcgXBNsaQsDxrB1WsaHv5UAfMrjdZcWQdkHoJDbE3qTx4qK1W4pXjmY5U7y-jmfb_Mik8Oi)

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:&#x20;

`agent.tempoEntrada = time()`

![](https://lh6.googleusercontent.com/YiN8pnBF1QJ8y7YlmDqZOPQ2i-jRUhhZ9Stdgzv0zaaUZTwZCuU3j_TqoxtyJ-QWjBB3Ep-7zyRC99GYvRVeVcSRG3KOfe2gKobXCXjgQR-z8wJqu0eYxRhJXXXRwY5uF01semQ7)

{% hint style="info" %}
**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:&#x20;
  {% endhint %}

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

ou

`agent.tempoEntrada -= time();`
