# 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();`


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://tutorial.anylogicbrasil.com.br/entidades-agentes-atributos-and-variaveis.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
