Escolar Documentos
Profissional Documentos
Cultura Documentos
em AnyLogic
Objetivos
• Apresentar e discutir conceitos de modelagem e programação, que ampliam as
possibilidades de simulação do AnyLogic
• Explorar funcionalidades, elementos de modelagem e recursos de terceiros, capacitando o
aluno a construir e utilizar componentes avançados do AnyLogic no seu projeto, visando
aprofundamento de análises e melhorando a qualidade do modelo
• Ampliar as possibilidades de modelagem e simulação dos profissionais participantes, a
partir das tecnologias exclusivas que o AnyLogic oferece
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Sumário
• Dia 1
1. POO
2. Java e AnyLogic
3. Desafio 1: Construção programática de schedules
4. Estruturas de dados
5. Desafio 2: Modelagem de uma lanchonete
• Dia 2
1. Desafio 3: Modelagem de supply chain usando dinâmica de sistemas e modelagem de agentes
2. Versionamento de código
3. Desafio 4: Modelagem do processo de manutenção de turbinas eólicas
4. Desafio 5: Resolvendo um problema de Programação Linear
5. Desafio 6: Construção programática de objetos de animação
6. Importação de objetos 3D
• Dia 3
1. Recursos de conectividade
2. Desafio 7: Modelagem de um virador de vagões
3. Desafio 8: Desenvolvimento de blocos bibliotecas personalizados
4. Introdução ao Custom experiment
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Agenda - Desafios
• Dia 1
Desafio Tópicos abordados
1. Construção programática de schedules • Vetores de objetos
• Consulta ao banco de dados do
AnyLogic
• Uso de funções
• Consulta a APIs
2. Modelagem de uma lanchonete • Uso de listas
• Construção programática de gráficos
• Experimento Parameters Variation
com replicações
• Conectividade com Excel
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Agenda - Desafios
• Dia 2
Desafio Tópicos abordados
3. Modelagem de supply chain • Dois paradigmas de simulação:
dinâmica de sistemas e modelagem de
agentes
• Funções
• Comunicação avançada entre agentes
4. Programação de um otimizador • Importação de otimizador externo
• Propriedade de replicações de objetos
de animação
5. Criação de objeto animação via código • Uso de construtores
• Investigação do código Java interno do
AnyLogic
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Agenda - Desafios
• Dia 3
Desafio Tópicos abordados
6. Modelagem de um virador de vagões • Biblioteca ferroviária
• Listas
• Animação 3D: câmera no trem e
drone
• Custom distribution
7. Criação de um bloco e uma biblioteca • Construção de blocos personalizados
personalizados • Construção de uma Library
• Importação para a Paleta do AnyLogic
Introdução à programação
orientada a objetos
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Conceitos e Princípios da OO
Conceitos:
• Classe
• Objeto
• Mensagem
Princípios:
• Encapsulamento
• Polimorfismo
• Herança
• Composição
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Objetos
• Uma abstração é uma representação das características e do comportamento relevantes de
um conceito do mundo real para um determinado problema
• Dependendo do contexto, um mesmo objeto do mundo real pode ser representado por
diferentes abstrações:
̶ Carro (para uma transportadora de cargas)
̶ Carro (para uma fábrica de automóveis)
̶ Carro (para um colecionador)
̶ Carro (para uma empresa de kart)
̶ Carro (para um mecânico)
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Mensagens
• Para que um objeto realize alguma tarefa, deve haver algum estímulo externo para a ação
• Independentemente da origem do estímulo, quando ele ocorre, diz-se que o objeto em
questão está recebendo uma mensagem
• Uma mensagem é uma requisição enviada de um objeto a outro para que este último
realize alguma ação
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Encapsulamento
• O propósito do encapsulamento é o de organizar os dados que sejam relacionados, agrupando-os
(encapsulando-os) em objetos (classes). Este padrão ajuda a manter um programa com centenas
ou milhares de linhas de código mais legível e fácil de trabalhar e manter;
• O encapsulamento de dados leva ao conceito de POO de ocultação de dados, cujo objetivo é
proteger as decisões de projeto e implementação – aspectos que usualmente mais se modificam
num programa – de modificações não previstas;
• Protegendo as informações desta maneira, retira-se a exigência de um conhecimento íntimo do
projeto por parte do usuário, tornando qualquer módulo uma caixa preta, em que só precisamos
saber sobre sua interface: parâmetros e resultados;
• Assim, o usuário não deve se preocupar sobre como é implementada a lógica de determinados
métodos; apenas deve chamá-los (pela interface) e receber os seus resultados;
• O encapsulamento aumenta qualidade do SOO, em termos de:
̶ Legibilidade
̶ Clareza
̶ Reuso
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Encapsulamento
Herança
• A herança pode ser vista como um nível de abstração acima da encontrada entre
classes e objetos
• Na herança, classes semelhantes são agrupadas em hierarquias:
̶ Cada nível de uma hierarquia pode ser visto como um nível de abstração
̶ Cada classe em um nível da hierarquia herda as características das classes nos
níveis acima
(+)
Figura
Abstração
Figura
Linha
Geométrica
Quadrado Círculo
(-)
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Polimorfismo
• Capacidade de objetos derivados de uma mesma base reagirem de forma diferente. Por
exemplo:
̶ A Classe Animal possui operação andar()
̶ A Classe Pessoa derivada de animal, quando andar(), vai andar da sua forma
̶ A Classe Cachorro derivada de animal, quando andar(), vai andar da sua
forma
Refatoração
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Coesão e Acomplamento
• Código não coeso: implementação do módulo Calculadora e da operação somar.
Além de somar, envia e-mail para o usuário com o resultado da operação e mostra
mensagem na tela com o resultado
• Problema: mandar e-mail e mostrar mensagem em tela, é desnecessário para o
requisitado
• Buscar o código mais coeso possível (mais simples possível), afinal, o código sendo
coeso, facilita a sua reutilização em novos projetos
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Coesão e Acomplamento
• Código não acoplado: um programador implementa o módulo calculadora no
mesmo arquivo da tela de entrada de dados;
• Problema: a calculadora pode ser reutilizada em outro projeto, mas acaba levando
uma tela de entrada de dados desnecessária;
• Buscar sempre o código menos acoplado possível, afinal, um código menos
acoplado facilita a sua reutilização em outros projetos.
Java: histórico e
características
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
General remarks
• You do not have to learn full OO programming
• You need to understand Java data types, expression and statement syntax
• Please note:
̶ Java is case-sensitive: MyVar is different from myVar!
̶ Spaces are not allowed in names: “My Var” is illegal name!
̶ Each statement has to be finished with “;”: MyVar = 150;
̶ Each function has to have parentheses: time(), add(a)
̶ Dot “.” brings you “inside” the object: agent.event.restart()
̶ Array elements have indexes from 0 to N-1
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Data types
• Primitive Types
̶ double – represent real numbers: 1.43, 3.6E18, -14.0
̶ int – represents integer numbers: 12, 16384, -5000
̶ boolean – represents Boolean (true/false) values. Boolean values are only true and false, you
cannot use 1 and 0
• Compound Types – Classes
̶ String – represents textual strings, e.g. “MSFT”, “Hi there!”, etc
̶ ArrayList, LinkedList – collections of objects
̶ Shape3DPolyLine – represents AnyLogic polyline shape
̶ … many others. See AnyLogic and Java Class References
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Expressions
Arithmetic operations: Boolean operations:
+ addition and String concatenation && AND
- subtraction || OR
* multiplication ! NOT
/ division
% remainder from integer division
Conditional operator:
condition ? value-if-true : value-if-false
Mind integer division!!! 3/2 = 1, not 1.5
In integer divisions, the fraction part is lost, e.g. 3 / 2 Assignments and shortcuts:
equals 1, and 2 / 3 equals 0 = assignment
Multiplication operators have priority over addition operators += a+=b shortcut for a=a+b
The ‘+‘ operator allows operands of type String
-= a-=b shortcut for a=a-b
Comparison operations: *= a*=b shortcut for a=a*b
< less than /= a/=b shortcut for a=a/b
<= less than or equal ++ a++ shortcut for a=a+1
> greater than -- a-- shortcut for a=a-1
>= greater than or equal
== equal
!= not equal
Left-to-right precedence for operators; parentheses can be used to alter precedence
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Some examples
Agent populations
Built-in functions
• System functions
– time(), date(), pauseSimulation(), inState(…), etc
• Mathematical functions
– sqrt(), sin(), cos(), exp(), log(), round(), etc
• Random distributions
– uniform(), exponential(), bernoulli(), beta(), etc
• Print operators
– traceln() - prints text to Console
– traceToDB() - prints text to the model’s database
• And more…
– See Utilities, Engine, Agent classes in AnyLogic Class Reference
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Probability distributions
• Exponential
̶ It has been proven that if events occur at a exponential( rate )
constant rate but are independent, the time
between two subsequent events is distributed
exponentially
̶ Example: phone calls to a call center, client arrivals,
and so on.
• Triangular triangular( min, mode, max )
for loop
• The loop mostly used to iterate through agent populations and collections
• Population/collection iterator:
for ( agent_type name : population )
{
statements executed for each agent/element
}
• Index-based loop:
for ( int i=0; i<distributor.numberOfTrucks(); i++ )
{
Truck t = add_trucks();
t.setPosition(distributor.getPosition());
}
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
while loops
• "While" loops are used to repeatedly execute some code while a certain condition
evaluates to true
• While loop int i= 0;
while (excelFile.cellExists(i, 1))
while (continue condition )
{
{
Supplier s = add_suppliers();
statements
s.set_name(excelFile.
}
getCellStringValue(i,1));
i++;
}
double x;
• Do While loop double y;
do
do
{
{
statements
x = uniform(0, 1000);
}
y = uniform(0, 1000);
while (continue condition);
}
while (!citybounds.contains(x,y));
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
return
• Exits from the current function.
• The return statement has two forms: one that returns a value (e.g. result of
calculations), and one that doesn't. To return a value, simply put the value
after the return keyword.
FUNCTION
Return type: Truck
/*
The class represents AnyLogic 3D animation. It contains the canvas object.
author Daniil Chunosov
version 5.0
*/
public class Animation3DPanel extends javax.swing.JPanel;
Traceln
• traceln(Object o): Imprime uma representação textual do objeto especificado
• traceln(Color color, Object o):
Imprime uma representação textual do objeto especificado com a cor do texto definida pelo
argumento color
• traceln(String textFormat, Object... args): O mesmo que traceln (Object o), mas
permite a sintaxe do formato de texto como na função String.format (String, Object
...)
• traceln (Cor da cor, String textFormat, Objeto ... args): análogo ao anterior, mas
com a cor definida pelo argumento color
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Traceln
• É possível utilizar o traceln com formatação:
traceln("cenario: %d\nx: %.2f\ny: %.2f\nanimal: %s\n",
cenario, x, y, animal);
• Este tipo de formatação substitui códigos mais longos que concatenam texto com outros
formatos de dados (int, double, float). No exemplo dado, o equivalente sem a formatação
seria:
Traceln
Modo de utilização:
• O especificador de formato começa com o símbolo de porcentagem (%) seguido por uma
letra que indica o tipo do dado e o formato desejado.
• O texto deve ser escrito por inteiro dentro de aspas
• Após o texto, deve-se colocar os argumentos, separados por vírgulas, na ordem em que
aparecem no texto
Código: Resultado:
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Traceln
Replications
• As replicações são um recurso muito útil que permite que o usuário crie um número de um mesmo
objeto a partir um único elemento daquele objeto
• Isso faz com que o usuário não tenha que adicionar vários objetos e configurá-los um a um
• Ainda, isso dá a flexibilidade do número destes objetos variarem de simulação à simulação (e em uma
mesma simulação também) de acordo com dados definidos pelo usuário
• Podem ser replicados:
̶ Formas, textos, imagens e objetos 3D (paleta Presentation); todos os controles (paleta Controls); todos
os gráficos (paleta Analisys)
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Padrões de nomenclatura
• Padrões do java:
̶ Classes se iniciam com letra maiúscula
̶ Objetos se iniciam com letra minúscula
̶ Funções se iniciam com letra minúscula
• Padrões do AnyLogic - funções iniciadas em:
̶ get: retornam alguma informação do objeto, que pode ser um número, cor, String etc. Ex:
getFillColor()
̶ is: semelhante ao get, mas retornam necessariamente uma informação booleana sobre o objeto.
Ex: isMoving()
̶ set: alteram um parâmetro do objeto. Ex: setCapacity(2)
̶ add: adiciona um objeto novo. Ex: add_population()
̶ remove: Remove um objeto. Ex: remove_population(train)
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Cast
• É um mecanismo de conversão explícita, isto é, converter um objeto de um tipo, em outro
• Seu uso mais simples é no truncamento de números reais para inteiros:
Double a = 3.4
int b = (int) a
• Por outro lado, se o objeto “pessoa” fosse instanciado a partir da classe “Professor”,
poderíamos usar os métodos desta classe sem a necessidade de se usar o cast
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Referências: This
• Usado para referenciar o próprio objeto:
double getIdade() {
return this.idade;
}
Referências: Self
• Faz referência ao bloco/state chart onde está sendo escrito:
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Classes
• Todos os agent types do AnyLogic são classes
• Inclusive, qualquer classe criada no AnyLogic pode ser convertida em um agente
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Objeto
• Conforme exposto anteriormente, um objeto, no contexto da programação, é uma
abstração de um objeto ou fato real
• Suas características são representadas por atributos. Elas são acessadas por métodos
̶ Exemplo: objeto “carro”:
• características: cor, velocidade máxima, modelo, marca, etc
• Métodos: getColor(), setColor(blue), getSpeed(), setMaxSpeed(100), etc
objeto
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Funções
• Executam um trecho de código sempre que é chamada pelo usuário
• Úteis para:
̶ Organizar o ambiente de desenvolvimento, encapsulando partes do código
̶ Executar a mesma rotina várias vezes
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Funções
• Podem ou não retornar algum valor
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Funções
• Podem demandar argumentos (informações) de entrada:
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Sobrecarga de métodos
• O Java permite que criemos vários métodos em uma mesma classe ou agente, com
o mesmo nome. Isto se chama sobrecarga de métodos
• Para isto, basta evitar a ambiguidade, isto é, os argumentos deste método devem
ser diferentes:
• time(): retorna o tempo transcorrido da simulação na unidade de tempo do modelo
• time(HOUR): retorna o tempo transcorrido em horas
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Mensagem
• Mensagens são pacotes de dados que são passados entre agentes
• Podem modelar vários objetos do mundo real. Por exemplo, eles podem representar
agentes - peças, produtos, pessoas, caminhões, etc. ou pacotes de dados transmitidos em
uma rede ou comandos e sinais em um sistema de controle
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Mensagem
• A mensagem pode ser de qualquer tipo:
̶ int
̶ double
̶ String
̶ List
̶ Etc
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Mensagem
• As portas desempenham papel central no
envio de mensagens
• As portas são bidirecionais e podem servir
tanto para entrada quanto para saída de
mensagens
• Para poder acessar as propriedades da
porta referentes às mensagens, deve-se
acessar Tools > Preferences... >
Development e marcar a opção Library
developer mode
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Mensagem
Você pode definir uma ação a ser executado quando uma mensagem for enviada/recebida de
duas formas:
2. Nas do agente, há
uma propriedade Comunication,
onde, em On message received:, você
pode inserir um código
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Mensagem
• Mensagens podem ser enviadas para:
̶ Todos os agentes
̶ Agente aleatório
̶ Agente específico
̶ Lista de agentes que atendam a um critério
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Mensagem
• Existem duas funções principais para enviar mensagens: send(...) e deliver(...):
̶ send(...): agenda a entrega da mensagem em um evento separado que será executado após
o evento atual em tempo zero (imediatamente após)
̶ deliver(...): a mensagem é disparada imediatamente, no mesmo evento
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Mensagem
• Há ainda a possibilidade de um agente enviar uma mensagem para si próprio, usando a
função receive(...):
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Herança
• A título de exemplo, podemos criar no AnyLogic um Agente chamado Pessoa:
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Herança
• Um agente “Professor” teria todos os atributos e métodos da classe “Pessoa”, além de seus
próprios atributos e funções
• Para que não seja necessário definir novamente tais atributos, basta fazer com que o agente
“Professor” herde as características do agente “Pessoa”:
Herança
• Note que os atributos e métodos definidos
para o agente Pessoa aparecem esmaecidos
no agente Professor e podem ser acessados
• Pode-se, também, criar atributos e métodos
específicos para professores
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Herança
• Todos os agentes criados no AnyLogic estendem a classe Agent, isto é, herdam seus
atributos e métodos
• Todas as chamadas built in functions, citadas no slide #9, pertencem à classe Agent
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Glossário
Termo/Ação Definição
Agente/Classe Abstração das características relevantes de um grupo de coisas do mundo
real
Objeto Uma instância de uma classe/agente
Construtor Usado para inicializar um novo agente/objeto. Sempre usado com o
comando new
Método No AnyLogic é chamado de function. Usado para realizar ações ou
modificar variáveis de agentes. Pode ou não retornar valores
Parâmetro Comumente usado para guardar características que definem um agente
Variável Comumente usada para guardar informações de um agente que mudam ao
longo do tempo, isto é, temporárias
Cast Conversão de um tipo em outro. Muito usado, por exemplo, para truncar
um número double em um int: int a = (int) 2.0
This Refere-se ao agente onde está sendo chamado
delayMaterial(input, delayTime)
delay1(input, delayTime) Retorna os dados de entrada com um atraso exponencial de
ordens 1 e 3 do input.
delay3(input, delayTime)
forecast(input, averageTime, horizon) Retorna uma previsão do valor que o input assumirá no
horizonte horizon de tempo médio averageTime.
npv(stream, discountRate, initialValue, factor, retorna o valor presente líquido do stream calculado usando o
timeStep) discountRate. O valor inicial é determinado por
initialValue (geralmente 0) e o valor é relatado após a
npve(stream, discountRate, initialValue, factor,
timeStep)
multiplicação por factor (geralmente 1).
npve assume que o stream é avaliado no final do período.
pulse(startTime, pulseWidth) Retorna 1, começando em startTime e durando pelo intervalo
pulseWidth. 0 é retornado caso contrário.
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Motivação
• Schedules permitem que valores mudem ao longo do tempo, de maneira periódica:
̶ Chegada de carros
̶ Turnos de trabalhadores
̶ Horários de manutenção
• Podem ser criados manualmente, arrastando-se o elemento “Schedule” para o editor
gráfico
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Motivação
• Um schedule pode ser usado para organizar turnos de trabalho, e pode conter quantos
turnos quanto necessários
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Motivação
• Para situações/modelos pequenos ou que não mudam ao longo do tempo, esta abordagem
funciona bem
• Por outro lado, imagine um dos seguintes cenários:
̶ Temos que simular um número muito elevado de turnos
̶ Estes turnos mudam semanal/mensalmente
• Neste caso, digitar manualmente os turnos consumiria muito tempo e não seria producente
• A alternativa é criar o schedule e os turnos programaticamente, lendo as informações de
uma base de dados
• Desta forma, sempre que houver alterações, o modelo já estará atualizado
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
• Obs.: ao pesquisar por “Schedule API” no help do AnyLogic, há explicações para as funções
usadas e um modelo exemplo
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
return mySchedule;
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
• Desta forma, podemos inseri-los de maneira iterativa no schedule e de fato tirar proveito da
construção programática
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Para isso, siga os passos de maneira análoga ao que foi feito na Fase 1 – Passo 1
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
• Note que, nesta etapa, o aumento no número de turnos não se traduz em um aumento no
esforço empregado na modelagem, justificando o uso do schedule via código
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Arrays
• Em um código, podemos declarar algumas variáveis e usá-las:
̶ cargaPilha1 = 3000;
̶ cargaPilha2 = 5000;
̶ cargaPilha3 = 10000;
• Esta prática pode ser ruim quando o número de variáveis muda: caso tenhamos mais uma
pilha, no exemplo acima, teríamos que criar mais uma variável:
̶ cargaPilha4 = 7000;
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Arrays
• Para resolver esse problema, podemos usar arrays
• Existem duas formas de inicialização: já com o conteúdo ou vazio:
pilhas[0] = 3000;
pilhas[1] = 5000;
pilhas[2] = 10000;
pilhas[3] = 7000;
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Arrays
• A principal desvantagem no uso de arrays é que seu tamanho não pode ser alterado após
sua inicialização
tamanho do array
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Coleções
• São estruturas mais flexíveis que arrays para armazenamento de dados
• Representam grupos de objetos, chamados elementos
• Podem ou não permitir valores duplicados
• Podem ou não ser ordenadas ou garantir ordenação
• São utilizadas para armazenar, recuperar e manipular dados agregados
• Tipicamente, representam itens que formam um grupo “natural”, como:
̶ Ordens de serviço
̶ Caminhões em fila
̶ Linhas ferroviárias disponíveis
̶ Cardápio
̶ Agenda
• Existem três categorias de coleções:
̶ Listas (ArrayList e LinkedList)
̶ Conjuntos (LinkedHashSet e TreeSet)
̶ Mapas (TreeMap e LinkedHashMap)
• As classes entre parênteses são as mais utilizadas, mas não as únicas disponíveis
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Listas
• Permitem inserção de elementos repetidos e nulos
• Principais classes: ArrayList e LinkedList
• ArrayList: muito semelhante com arrays – internamente, os elementos são armazenados como
arrays. Aumenta seu tamanho dinamicamente em 50%
• LinkedList: implementação computacional diferente da ArrayList – lista ligada. Mais eficiente para
adicionar e remover elementos
• Permitem adição e remoção dinâmica de elementos, por meio das funções add() e remove():
̶ ArrayList<int> pilhas = new ArrayList();
̶ pilhas.add(3000);
̶ pilhas.add(7000);
• Para acessar algum elemento da lista, usa-se a função get(n), em que n é o n-ésimo termo da lista:
̶ pilhas.get(0) = 3000;
̶ pilhas.get(1) = 7000;
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Conjuntos (Sets)
• Não permitem inserção de elementos repetidos. Assim, dispensa uso da função
contains() antes da inserção
• Não permitem acesso por índice
• Principais classes: LinkedHashSet e TreeSet
• LinkedHashSet: garante ordenação, isto é, mantém os elementos armazenados na ordem
de inserção
• TreeSet: elementos armazenados de maneira “natural” – ordem crescente ou alfabética
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Mapas
• Diferentemente de listas e conjuntos, demanda inserção de elementos no formato <chave ,
valor> por meio da função put(key , value)
• Não permitem chaves duplicadas. Ao inserir mais de uma vez a mesma chave, o valor
associado é sobreposto
Chave Valor
“A” 3000
“B” 10
“C” 500
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Mapas
• Exemplo de uso: um cardápio com o nome dos pratos e seus preços:
̶ cardapio.put(“Lanche 1”, 20.00);
̶ cardapio.put(“Refrigerante”, 4.00);
̶ cardapio.put(“Batata”, 8.00);
Mapas
• Principais classes: TreeMap e LinkedHashMap
• TreeMap: não garante ordenação, ordenando chaves de maneira “natural”
• LinkedHashMap: mantém ordenação, isto é, mantém os elementos armazenados na ordem
de inserção
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Performance
Operação ArrayList LinkedList LinkedHashSet TreeSet TreeMap LinkedHashMap
Obter Constante Constante Constante Constante Constante Constante
tamanho
Adicionar Constante Constante Constante Log Log Constante
elemento
Remover Linear Linear Constante Log Log Constante
item
Remover Linear Linear – – – –
por índice
Acessar Constante Linear – – – –
por índice
Descobrir Linear Linear Constante Log Log Constante
se contêm
Motivação
• Construiremos uma lanchonete, em que clientes chegam, fazem e retiram seus pedidos
• O objetivo desta atividade é usar este modelo como base para utilizar os seguintes
conceitos:
̶ Funções
̶ Listas
̶ Experimento parameters variation com replicações
• Iremos utilizar também a paleta de conectividade:
̶ Excel
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Lanchonete
Este desafio é divido em duas fases:
1. Fase 1 – Construção do modelo
2. Fase 2 – Parameters Variation
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Cliente Pedido
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Agent Pedido:
lanche: String
vaiBatata: boolean
vaiRefri: boolean
cliente: Cliente
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
cenario (int)
taxaChegada (double): 1.0
numeroAnotadores (int): 2
numeroCozinheiros (int): 3
tempoFazerPedido (double): triangular(1.0, 3.0, 2.0)
esperaDesistencia (double): 5.0
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
agent.t0 = time();
Adicione itens à lista temposPreparo, na qual para cada item (chave -> String) associa-se um
determinado tempo (valor -> double):
temposPreparo.put("lanche1" , 2.0);
temposPreparo.put("lanche2" , 3.0);
temposPreparo.put("batata" , 1.0);
temposPreparo.put("refrigerante" , 0.5);
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
if(vaiBatata)
duracao += triangularAV(temposPreparo.get("batata"),
0.05);
if(vaiRefri)
duracao +=
triangularAV(temposPreparo.get("refrigerante"), 0.05);
}
return duracao;
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
if(vaiRefri)
duracao += triangularAV(temposPreparo.get("refrigerante"), 0.05);
}
catch(Exception e){
traceln("Item não cadastrado no cardápio");
}
return duracao;
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Selecione: minutes
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Lanchonete – Fase 2
Nesta etapa, utilizaremos o recurso Parameters
Variation para simular vários cenários e obter
resultados estatísticos.
Existem inúmeras maneiras de configurá-los no
AnyLogic:
Interface do ParametersVariation
• Interface do Parameters Variation
• If, else if, switch...
• Json
• Banco de dados
Em nosso exercício utilizaremos o switch
Banco de dados
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Lanchonete – Fase 2
Nesta fase do exercício, iremos:
• Configurar diferentes cenários utilizando o comando switch.
• Utilizar replicações no experimento
• Obter resultados estatísticos dos cenários simulados
• Passar os resultados para um arquivo excel
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Selecione a opção:
Parameter Variation
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
switch(cenario) {
case 0:
numeroAnotadores = 1;
numeroCozinheiros = 3;
break;
case 1:
numeroAnotadores = 1;
numeroCozinheiros = 3;
esperaDesistencia = 10;
break;
case 2:
numeroAnotadores = 3;
Para finalizar, é importante
numeroCozinheiros = 7;
break; usar o comando set_capacity
case 3: nos recursos para atualizá-los
numeroAnotadores = 5;
numeroCozinheiros = 5;
break;
}
anotadoresPedido.set_capacity(numeroAnotadores);
cozinheiros.set_capacity(numeroCozinheiros);
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Lanchonete – Fase 2
A coleta de estatísticas do modelo será feita por meio do bloco Statistics da biblioteca
Analysis.
Statistics:
statsEsperaFazerPedido
statsEsperaRetirarPedido
Atualize a statsEsperaFazerPedido no
bloco anotaPedido, conforme indicado
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
if(!mediasFazerPedido.containsKey(root.cenario)) {
Utilize o comando put para
mediasFazerPedido.put(root.cenario , new StatisticsDiscrete());
inserir um novo cenário na
mediasRetirarPedido.put(root.cenario , new StatisticsDiscrete());
LinkedHashMap e new para
criar um novo bloco
double[] valores = {root.numeroAnotadores,
Statistics
root.numeroCozinheiros,
root.esperaDesistencia};
parametrosCenarios.put(root.cenario , valores);
}
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
output.setCellValue("Cenário", 1, 1, 1);
output.setCellValue("# Anotadores", 1, 1, 2);
output.setCellValue("# Cozinheiros", 1, 1, 3);
output.setCellValue("Tempo desistência (min)", 1, 1, 4);
output.setCellValue("Tempo fazer pedido (min)", 1, 1, 5);
output.setCellValue("Tempo retirar pedido (min)", 1, 1, 6);
int i = 2;
for(Integer c : mediasFazerPedido.keySet()) {
output.setCellValue(c, 1, i, 1);
output.setCellValue(parametrosCenarios.get(c)[0], 1, i, 2);
output.setCellValue(parametrosCenarios.get(c)[1], 1, i, 3);
output.setCellValue(parametrosCenarios.get(c)[2], 1, i, 4);
output.setCellValue(mediasFazerPedido.get(c).mean(), 1, i, 5);
output.setCellValue(mediasRetirarPedido.get(c).mean(), 1, i, 6);
i++;
}
Motivação
• Neste exercício, construiremos um modelo difusão de um produto no mercado associada às
decisões da cadeia de suprimentos desse produto
• A modelagem mescla abordagem de Dinâmica de Sistemas e baseada em Agentes (AB –
Agent Based)
̶ A abordagem de DS é útil para modelar sistemas de uma perspectiva mais macroscópica, por
exemplo para observar a dinâmica de uma população diante da difusão de produto, doença etc.
̶ A abordagem baseada em agentes possibilita a implementação de decisões com base no estado
atual de um agente ou de características dele
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Motivação
• Este exercício está dividido em duas fases:
̶ Fase 1: modelagem de DS: difusão do produto e criação de demanda
̶ Fase 2: modelagem AB: fabricação dos produtos e atendimento da demanda
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Type: Time
Unit: days
Default value: 60
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
1 2
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
1
3
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
insira o seguinte:
Pedido( int quant ) { Construtor da classe Pedido
this.quantidade = quant;
}
Motivação
• Este exercício usará a importação de biblioteca externa para resolver um problema de
programação linear
• A importação de bibliotecas externas é útil quando se tem problemas para os quais se usa
ferramentas específicas para sua solução:
• Solução analítica de problemas de otimização. A biblioteca externa permite que se algoritmos
com métodos e/ou heurísticas consagradas sem a necessidade de implementá-los em cada
nova situação
• Importação de dados de arquivos com formatos não suportados originalmente pelo AnyLogic.
Este uso ocorre para a leitura de arquivos .json, por exemplo
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
• Em seguida, devemos importar as classes, presentes nos arquivos .jar, que iremos
utilizar
• Isso deve ser feito no agente onde iremos utilizar as classes, na seção Advanced Java
> Imports section, nas propriedades do agente.
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Carvão met.
Carvão térm.
Carvão MÓDULO
Rej. grosso
Rej. fino
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Modelo matemático
Biblioteca utilizada
• Para a escrita do código que resolverá o modelo matemático com os dados inseridos,
utilizaremos o solver CLP, implementado na biblioteca clp-java
(https://github.com/quantego/clp-java/releases/tag/v1.16.11)
• A documentação da biblioteca pode ser acessada em http://quantego.github.io/clp-
java/overview-summary.html
• No código, usaremos o seguinte:
̶ A enum CLP.STATUS, que permite acessar o status da solução obtida (ótimo, inviável etc.)
̶ A classe CLP, que é instanciada para criar o modelo de PL que será resolvido e contém os
métodos utilizados no solver
̶ As classes CLPVariable e CLPExpression para a criação das variáveis de decisão e restrições
do problema a ser resolvido
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Biblioteca utilizada
• Métodos utilizados
̶ addVariable(), para a adição das variáveis de decisão ao modelo, definindo
valores mínimos e máximos e o peso na função objetivo
̶ createExpression(), para a criação das restrições do problema, juntamente
com os métodos add(), para adicionar parcelas às restrições e leq() e eq(),
para estabelecer igualdades e desigualdades das restrições
̶ maximize(), para solução do problema
̶ getSolution(), para a obtenção dos resultados obtidos
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
import com.quantego.clp.CLP;
import com.quantego.clp.CLPExpression;
import com.quantego.clp.CLPVariable;
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
A. Nomeie-as numMateriais e
numEquipamentos
B. Em propriedades, mude seus tipos para int
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
root.numEquipos = numEquipos;
root.numMateriais = numMateriais;
Inicialização da variável
de status da solução e da
variável do modelo
matemático
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Inicialização das
restrições do modelo
matemático proposto
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Define o tipo de
solução que se
deseja obter
(maximizar, neste
caso) Inicialização da variável
de resultados
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Guarda e imprime os
resultados da otimização
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
//Variaveis de decisao
CLPVariable[][] y = new CLPVariable[numMateriais][numEquipos];
status = split.maximize();
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
if(status == CLP.STATUS.OPTIMAL){
for(int i = 0; i < numMateriais; i++){
for(int j = 0; j< numEquipos; j++)
result[i][j] = split.getSolution(y[i][j]);
}
String texto = split.toString()+ "\n\nResultado: \n";
for(int i = 0; i < numMateriais; i++){
for(int j = 0; j< numEquipos; j++)
texto += "y[" + (1+i) + "][" + (1+j) + "] = " + result[i][j] + "\n";
}
textoResultado.setText(texto);
return result;
}
else
return null;
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Merge
Branch
Commit
Motivação
• Qualquer objeto pode ser criado via código, inclusive blocos das bibliotecas do AnyLogic,
agentes, caminhos, trilhos, rodovias, animações etc.
• Aqui, objetiva-se mostrar construtores de objetos para criação programática destes
• Muito útil quando o número de objetos a serem construídos deve ser genérico ou
dependente de algum parâmetro externo:
̶ Número de rotas de empilhadeiras em um armazém
̶ Número de pátios de armazenamento em um terminal portuário
̶ Comprimento de uma ferrovia
̶ Layout de uma estação de trem, shopping etc.
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Em seguida, movem-se
para a targetLine da direita
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
• As coordenadas e pontos (vértices) podem ser copiadas da targetLine original, criada via
drag & drop:
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
• Aqui também podemos nos basear na parede criada via drag & drop
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
presentation.add(level);
• Levels são muito úteis pois permitem a modelagem de ambientes com mais de um andar ou
que estão em alturas diferentes, como estações de trem, shoppings, instalações de
mineração, armazéns etc.
• Além disso, facilitam a modelagem, uma vez que levels não selecionados ficam “travados”,
evitando movimentação acidental de objetos e figuras
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Navigation in 3D scene
2. Altere a “Additional scale” para 300%, para que o objeto fique visível na animação
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Recursos de conectividade
• A paleta de conectividade apresenta blocos
que permitem uma conexão rápida com
̶ Documentos de texto
̶ Planilhas do Excel
̶ Banco de dados
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Documentos de texto
• Para trabalhar com documentos de texto, basta arrastar um Text File para a área do editor
gráfico
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Documentos de texto
• Conexão com um documento de texto: você deve vincular o Text File criado a partir da
paleta a um documento de texto do computador criado previamente
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Documentos de texto
• Modo de utilização:
̶ Pode-se ler e escrever nos documentos de texto
̶ No caso da escrita, pode-se optar por limpar o arquivo a cada rodada (Write) ou não, isto é,
aproveitar o conteúdo previamente escrito (Write/Append)
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Função Ação
boolean canReadMore() Retorna true se ainda há conteúdo para leitura no
arquivo
String readString() Lê e retorna uma String do texto na posição de
leitura atual (ou seja, desde o separarador que o
antecede até o próximo separador)
Exemplo Resultado:
Código:
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Excel
• Para trabalhar com arquivos Excel basta arrastar um bloco Excel File da Paleta de
conectividade e vincular a um arquivo já existente
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Excel
• Também é possível arrastar o arquivo (.xls, .xlsx) diretamente na área do editor gráfico. O AL
cria automaticamente um com o arquivo adicionado
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Excel
• O AnyLogic possui diversas funções para a utilização de arquivos Excel (sobrecarga de
métodos)
• Por isso, o ideal é buscar aquela que melhor encaixe às suas necessidades
• Com o comando “Ctrl + Espaço” você sempre pode ver as opções e a descrição do que cada
função faz
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Excel - Leitura
• Para atualizar os dados antes de se executar o modelo, selecione a opção Load on model
startup ou utilize a função readFile() antes de realizar outras ações no arquivo Excel
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Excel - Leitura
• Algumas funções úteis para leitura de arquivos Excel
Função Ação
void readFile() Carrega os dados do arquivo
boolean getCellBooleanValue() Retorna o valor da célula como um valor booleano
Excel - Leitura
Exemplo:
A primeira planilha também é aquela
de número 1
Código:
Resultado:
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Excel - Leitura
Exemplo:
Código:
Resultado:
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Excel - Gravação
• Utilize sempre a opção Save on model termination ou a função writeFile() para salvar suas
alterações no arquivo Excel.
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Excel – Gravação
• Funções úteis para gravação de dados no Excel
Função Ação
void writeFile() Salva as mudanças no arquivo Excel
void setCellFormula() Atribui uma fórmula à celula
Excel - Gravação
Exemplo: Resultado:
Código:
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Excel - Gravação
Exemplo: Resultado:
Código:
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Database
(1)
(2)
(3)
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Seleciona as planilhas
do arquivo
Escolhe o arquivo
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Seleciona a tabela
Estabelece a condição
Seleciona a coluna de escolha dos valores:
dos valores desejados
Exibe o comando
que será inserido
no campo
selecionado
Desafio 7: Modelagem de
um virador de vagões
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Motivação
Motivação
• Neste projeto básico, iremos modelar um “virador” de vagões simplificado. Nos
preocuparemos apenas com as operações de movimentação do trem, desprezando o
tratamento dos estoques, equipamentos, carga e demais elementos que não dizem
respeito à biblioteca de ferrovias
• Neste sistema, o trem é criado e se move até um pátio de espera e, em seguida, vai até o
virador
• Os vagões são descarregados (virados) e dirigem-se para o final do trilho, onde esperam os
demais vagões
• Quando todos os vagões são descarregados, o trem vazio segue viagem e sai do sistema
considerado
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Motivação
• Ao longo do desenvolvimento do modelo, iremos utilizar:
̶ Listas
̶ Funções
̶ Database
̶ Custom distribution
• Iremos desenvolver formas de visualização 3D que enriquecem muito o modelo:
colocaremos uma câmera no trem e criaremos uma câmera “drone”, que observa o
processo de cima
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Sobre o desafio
• O exercício está organizado em 4 fases:
̶ Fase 1: construção da lógica e demais elementos básicos do modelo
̶ Fase 2: construção da visualização 3D do modelo e implementação de uma câmera que
acompanha o trem
̶ Fase 3: implementação de uma câmera “drone” e complementação da navegabilidade pela
interface gráfica do modelo
̶ Fase 4: Uso de recursos de conectividade (database) e dados (custom distribution)
• A fase 1 não traz conteúdos novos que fazem parte dos objetivos de aprendizagem deste
desafio, então será disponibilizado o modelo com a fase 1 pronta, e partiremos da fase 2
• Os passos para desenvolvimento da primeira fase estão disponíveis neste material para uma
breve passagem e para consulta posterior dos alunos
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Representação
dos pátios
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
• É importante que ela tenha estes trechos bem amplos para que os trens caibam. Caso
contrário, o modelo pode apresentar erros durante a simulação
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
patio3
patio2
aguardaPatio
patio1
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
finalLinha
virador
prepOp
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
trilhoVirador
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
RestrictedAreaStart object:
RestrictedAreaStart
Agent type: Train
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Este código selecionará a câmera do último vagão para ser exibida na janela 3D durante a
simulação
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
• Nas propriedades, insira câmera no trem (A) e drone (B) nos Label dos botões
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Um cuidado especial é dado para o primeiro botão, pois a câmera no trem só pode ser
selecionada se houver trem na ferrovia
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
trensNoSistema--;
if(trensNoSistema == 0){
vagaoReferencia = null;
tremAtual = null;
if(checkbox.isSelected())
checkbox1.setSelected(true, true);
}
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Debugger
1. Código em Java: permite ver o código sendo executado e adicionar novos breakpoints;
2. Breakpoints existentes: permite ativar e desativar os breakpoints
3. Variáveis: mostra todas as variáveis do agente atual sendo possível a navegação através da árvore
apresentada
4. Expressions: permite adicionar expressões que são executadas neste ponto em específico. Junto as
variáveis permite a verificação do que está acontecendo no modelo a cada momento
2
4
3
1
Desafio 8:
Desenvolvimento de
blocos e bibliotecas
personalizadas
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Motivação
• Blocos personalizados são muito úteis para tornar o fluxo mais conciso, facilitando a
interpretação
• Podem ser utilizados para a interconexão de modelos e para gerenciamento de trechos
repetitivos de código
• Neste exercício, vamos usar como base o modelo desenvolvido no Desafio #5:
construiremos um bloco representando o virador de vagões
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Este comando permite que, durante a execução do modelo, possamos clicar no ícone do
virador e “entrar” no agente
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Arraste um agente
ViradorVagoes na área do Main
Conecte o
novo bloco ao
fluxo
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
• Estes erros aconteceram pois os position on track e outros dados usados não estão no
virador, e a referência não está correta
• Podemos, simplesmente, corrigir a referência, adicionando main. antes da referência aos
position on track
• Porém, isto seria ruim para o uso deste bloco com outros agentes que não o Main, ou
mesmo em outros modelos, caso fosse compilado como uma biblioteca
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
• Isso associa a Custom Distribution criada no Main ao parâmetro dinâmico dentro do bloco
ViradorVagoes
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Por fim, note que blocos do AnyLogic possuem uma aba “Actions” com campos (On enter, On exit...)
onde o usuário pode programar certas ações. Em nosso bloco, no entanto, essa opção não aparece
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Finalmente, clique em Ok
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Custom experiment
• O AnyLogic possui vários experimentos, para muitas finalidades
• Entretanto, ainda assim, às vezes mais flexibilidade é necessária
• O Custom experiment dá ao usuário uma tela em branco para:
̶ Gerenciar parâmetros
̶ Executar outros experimentos (Ex: um experimento “chama” o outro)
̶ Criar experimentos com mais profundidade que os experimentos padrão
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Custom experiment
• Para ilustrar o uso do custom experimente, iremos desenvolver um experimento de
otimização
• Usaremos um modelo simples de um banco como ponto de partida
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Custom experiment
• Neste modelo de simulação simplificado de um banco, os clientes têm duas opções de
atendimento:
̶ Caixa
̶ Caixa eletrônico
• Cada serviço possui sua própria fila, de capacidade infinita, e uma distribuição de tempo de
atendimento distinta.
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Taxa de chegada:
5 clientes/minuto
Cada serviço
está associado
a um recurso
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
As estatísticas de tempo
em fila são coletadas e
armazenadas nos blocos
tempoFilaCaixaElet e
tempoFila Caixa
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Banco – Fase 1
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Banco – Fase 1
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Banco – Fase 1
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Banco – Fase 1
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Banco – Fase 1
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Banco – Fase 1
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Banco – Fase 1
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Banco – Fase 1
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Banco – Fase 1
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Banco – Fase 1
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Banco – Fase 1
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Banco – Fase 1
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Banco – Fase 1
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Banco – Fase 1
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Banco – Fase 1
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Banco – Fase 1
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Banco – Fase 1
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Banco – Fase 1
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Banco – Fase 1
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Fase 2 - Desafio
• Até o momento, otimizamos somente o número de caixas
• Nesta segunda fase, queremos otimizar também o número de caixas eletrônicos
• O tempo médio de espera em fila para o serviço de caixa eletrônico deve ser menor que 1.0
minuto
• O tempo médio de espera em fila para o serviço de caixa deve ser menor que 3.0 minutos
• Qual é o número mínimo de caixas e de caixas eletrônicos necessário para se atingir esse
novo nível de serviço?
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Solução da Fase 2
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Solução da Fase 2
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Solução da Fase 2
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Solução da Fase 2
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Solução da Fase 2
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Solução da Fase 2
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Solução da Fase 2
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Solução da Fase 2
Material provided free of charge for the exclusive use for Genoa's AnyLogic online training.
Any copy, reproduction, exploitation, display, alteration of any of its contents for any purpose is strictly prohibited.
Solução da Fase 2
• A solução ótima encontrada resulta em 11 caixas e 4 caixas eletrônicos