Mudanças entre as edições de "ADS29009-2020-1"
Linha 262: | Linha 262: | ||
*[https://www.dropbox.com/s/bgfm277qhjdxbfv/SimulacaoAEventosDiscretos.pdf?dl=0 Introdução a Simulação de Eventos Discretos] | *[https://www.dropbox.com/s/bgfm277qhjdxbfv/SimulacaoAEventosDiscretos.pdf?dl=0 Introdução a Simulação de Eventos Discretos] | ||
+ | |||
+ | =AULA VIRTUAL Dia 17/06/2020= | ||
+ | |||
+ | ==Objetivos== | ||
+ | |||
+ | *Introdução a Simulação em ADS | ||
+ | *Fila MM1 com Simulador baseado no site do Apache | ||
+ | |||
+ | ==Slides Aula== | ||
+ | |||
+ | *[https://www.dropbox.com/s/bgfm277qhjdxbfv/SimulacaoAEventosDiscretos.pdf?dl=0 Introdução a Simulação de Eventos Discretos] | ||
+ | |||
+ | *Ver [http://stdcxx.apache.org/doc/stdlibug/11-3.html Projeto Apache] | ||
+ | *Proposição de Exercício: simulação de uma rede de filas; | ||
+ | |||
+ | |||
+ | #Adaptar o código de tratamento de uma fila MM1 simples, conforme colocado no slide para um formato de um simulador de eventos discretos com filas. Use o código abaixo como apoio. | ||
+ | |||
+ | <syntaxhighlight lang=c> | ||
+ | //Basead em http://stdcxx.apache.org/doc/stdlibug/2-2.html#225 | ||
+ | |||
+ | #include <queue> | ||
+ | #include <iostream> | ||
+ | #include <cstdlib> | ||
+ | |||
+ | //================================================================== | ||
+ | // classes evento e simulação - base para o desenvolvimento da simulação | ||
+ | //================================================================== | ||
+ | |||
+ | class event { | ||
+ | public: | ||
+ | // Construct sets time of event. | ||
+ | event (double t) : time (t) | ||
+ | { } | ||
+ | |||
+ | // Execute event by invoking this method. | ||
+ | virtual void processEvent () = 0; | ||
+ | |||
+ | const double time; | ||
+ | }; | ||
+ | |||
+ | |||
+ | class simulation { | ||
+ | public: | ||
+ | simulation () : simtime (0), eventQueue () | ||
+ | {} | ||
+ | void run (); | ||
+ | void scheduleEvent (event * newEvent) { | ||
+ | eventQueue.push (newEvent); | ||
+ | } | ||
+ | double simtime; | ||
+ | protected: | ||
+ | class eventComparator { | ||
+ | public: | ||
+ | bool operator() (const event * left, const event * right) const { | ||
+ | return left->time > right->time; | ||
+ | } | ||
+ | }; | ||
+ | std::priority_queue<event*, | ||
+ | std::vector<event *, std::allocator<event*> >, | ||
+ | eventComparator> eventQueue; //fila de eventos | ||
+ | }; | ||
+ | |||
+ | void simulation::run () { | ||
+ | |||
+ | while (! eventQueue.empty ()) { //enquanto exisitr eventos na fila de eventos | ||
+ | |||
+ | event * nextEvent = eventQueue.top (); //captura evento no topo da fila | ||
+ | eventQueue.pop (); //retira evento da fila | ||
+ | simtime = nextEvent->time; //ajusta tempo de simulação | ||
+ | nextEvent->processEvent (); //processa evento | ||
+ | delete nextEvent; //remove evento | ||
+ | } | ||
+ | } | ||
+ | |||
+ | //=================================================================== | ||
+ | //Customização dos eventos e do simulador | ||
+ | //=================================================================== | ||
+ | |||
+ | class standardArrival : public event { | ||
+ | public: | ||
+ | standardArrival (double t) | ||
+ | : event (t) | ||
+ | { } | ||
+ | virtual void processEvent (); | ||
+ | }; | ||
+ | |||
+ | void standardArrival::processEvent () { | ||
+ | std::cout << "processando evento no tempo " << time << '\n'; | ||
+ | } | ||
+ | |||
+ | class simuladorFilas : public simulation { | ||
+ | public: | ||
+ | simuladorFilas () | ||
+ | { } | ||
+ | |||
+ | } oSimulador; | ||
+ | |||
+ | // from https://stackoverflow.com/questions/2704521/generate-random-double-numbers-in-c | ||
+ | |||
+ | double fRand(double fMin, double fMax) | ||
+ | { | ||
+ | double f = (double)rand() / RAND_MAX; | ||
+ | return fMin + f * (fMax - fMin); | ||
+ | } | ||
+ | |||
+ | int main () { | ||
+ | |||
+ | // Inicializar aqui a fila de eventos | ||
+ | double t; | ||
+ | |||
+ | oSimulador.scheduleEvent (new standardArrival (t=fRand(1.0,10.0))); | ||
+ | oSimulador.scheduleEvent (new standardArrival (t=t+fRand(1.0,10.0))); | ||
+ | oSimulador.scheduleEvent (new standardArrival (t=t+fRand(1.0,10.0))); | ||
+ | |||
+ | // Executar simulador | ||
+ | oSimulador.run (); | ||
+ | |||
+ | |||
+ | return 0; | ||
+ | } | ||
+ | |||
+ | </syntaxhighlight> |
Edição das 07h39min de 17 de junho de 2020
AULA 1 - Dia 30/07/2019
Objetivos
- Apresentação da Disciplina (SIGA A)
- Plano de Ensino (SIGA A)
- Avaliação (SIGA A)
Introdução a ADS
Questões Iniciais:
- Que projeto estou fazendo?
- Como procedo para fazer uma ADS?
Tarefa A1.1
- Pesquisar um artigo sobre ADS em uma área de seu interesse. Analisar um arquivo a luz das etapas e conceitos discutidos nesta semana.
Fazer slides que devem ser postados na data anterior da apresentação. O slide deve apresentar:
- Objetivo da ADS no artigo
- Métricas
- Parâmetros
- Fatores
- Workload
- Técnicas usadas
- Resumo de como são apresentados os dados
- Conclusão Pessoal
APRESENTAÇÃO: Dia 20/02/2020
Material de Referência
AULA 2 - 19/02/2020
Objetivos
- Conceitos básicos de ADS
- Tarefa em SAla
TAREFA
Considere o texto em: http://ieeexplore.ieee.org/document/997208/
Responda (em grupo) as seguintes questões:
- 0) Qual o objetivo principal do experimento?
- 1) Quais fatores estão sendo considerados no experimento? Explique cada um deles.
- 2) Quais os níveis que estão sendo utilizados para cada fator?
- 3) Quais as métricas que estão sendo avaliadas? Explique cada uma delas.
- 4) Quais parâmetros/características do cenário foram fixados? Liste pelo menos 5.
- 5) Na sua visão a carga de trabalho está sendo definida em que parâmetro?
- 6) No experimento, todos os nodos transmitem e recebem informação?
- 7) Quantas repetições foram previstas para cada simulação.
- 8) O experimento testa exaustivamente todas as possibilidades de variação de nível entre os parâmetros?
- 9) Qual o modelo de mobilidade escolhido? Explique sucintamente o funcionamento.
- 10) Sintetize as conclusões do trabalho.
- 11) Qual o significado de "main effect of a factor" no contexto do trabalho?
AULA 3 - 20/02/2020
Objetivos
- Conceitos básicos de ADS
- Apresentação da tarefa A1.1
- Introdução a projetos fatoriais
AULA 4 - 04/03/2020
Objetivos
- Introdução a Cadeias de Markov Discretas
Material de Referência
https://www.dropbox.com/s/ynnb16ytldd1pbx/CadeiasDeMarkovDiscretas_Parte1.pdf?dl=0
AULA 5 Dia 5/03/2020
Objetivos
- Introdução a DTMC
- DTMC: Holding Time, Média de primeira transição
- Simulação de DTMC
- Tarefa
Slides Aula
Programa Simulação Cadeia Markov
TAREFA 8 - Simulação de Caddeia de Markov.
Segundo discutido em sala e exercício do slide
https://www.dropbox.com/s/hvgk42nhhcsyjlt/SimMarkovAlunos.m
P = [
0.2 0 0.8 0 0 0 0 0 0 0;
0 0.2 0.3 0.3 0.2 0 0 0 0 0;
0 0 0.1 0 0 0.9 0 0 0 0;
0 0 0 0 0 0 1.0 0 0 0;
0 0 0 0 0 0.3 0.7 0 0 0;
0 0 0 0 0 0 0 0.2 0 0.8;
0 0 0 0 0 0 0 0 0.8 0.2;
1.0 0 0 0 0 0 0 0 0 0;
0 1.0 0 0 0 0 0 0 0 0;
0.2 0.6 0 0 0 0 0 0 0 0.2;
];
AULA 6 Dia 11/03/2020
Objetivos
- Aplicações de DTMC
Slides Aula
https://www.dropbox.com/s/0zxzg8dx5qe2b2e/AplicacoesCadeiasDeMarkovDiscretas.pdf?dl=0
AULA VIRTUAL 7 Dia 1/04/2020
Objetivos
- Revisão Distribuição Exponencial e Propriedade Sem Memória
- Cadeia de Markov em tempo Contínuo.
Slides Aula
https://www.dropbox.com/s/vs8yifvdulsqdwd/CadeiasDeMarkovContinuas_Parte1.pdf?dl=0
Material Auxiliar
- https://mast.queensu.ca/~stat455/lecturenotes/set4.pdf
- https://mast.queensu.ca/~stat455/lecturenotes/set5.pdf
- https://www.youtube.com/watch?v=vKF-RJ_bPVY
AULA VIRTUAL 8 Dia 2/04/2020
Objetivos
- Instruções para instalação do Omnet
- Cadeia de Markov em tempo Contínuo (Continuação)
Slides Aula
https://www.dropbox.com/s/vs8yifvdulsqdwd/CadeiasDeMarkovContinuas_Parte1.pdf?dl=0
Fazer a instalação do omnet e do inet.
Material Auxiliar
- https://mast.queensu.ca/~stat455/lecturenotes/set4.pdf
- https://mast.queensu.ca/~stat455/lecturenotes/set5.pdf
- https://www.youtube.com/watch?v=vKF-RJ_bPVY
Omnet
AULA VIRTUAL 9 Dia 16/04/2020
Objetivos
- Introdução a Teoria de Filas (continuação)
- Fila MM1
- Desempenho da Fila MM1
Slides Aula
AULA VIRTUAL 10 Dia 22/04/2020
Objetivos
- Discussão da lista de Exercícios
- Filas MM1k
- Filas MMn
Slides Aula
- https://www.dropbox.com/s/1nfastsaorr5eyy/FilaMM1_CapacidadeLimitada.pdf?dl=0
- https://www.dropbox.com/s/zaul2rq4xzdzw2k/FilaMMc_MultiplosServidores.pdf?dl=0
AULA VIRTUAL 11 Dia 29/04/2020
Objetivos
- Discussão da lista de Exercícios
- Filas MM1k (Revisão)
- Desempenho da Fila MM1k
- Filas MMn
- Desempenho da Fila MMn
Slides Aula
- https://www.dropbox.com/s/1nfastsaorr5eyy/FilaMM1_CapacidadeLimitada.pdf?dl=0
- https://www.dropbox.com/s/zaul2rq4xzdzw2k/FilaMMc_MultiplosServidores.pdf?dl=0
Reunião/AULA VIRTUAL 12 Dia 20/05/2020
Objetivos
- discussão sobre o desenvolvimento das ANPS;
- entregar A1.5 até 27/05 - não vale nota. Anotar pontos que tem dificuldade
- dia 27/05 - aula síncrona - correção dos exercícios -
- dia 27/05 - postagem de nova lista - valendo nota
- dia 28/05 - aula síncrona - Filas MMn e Redes de Filas
AULA VIRTUAL Dia 27/05/2020
Objetivos
- Resolução da Lista de Exercícios sobre CTMC e Introdução a Teoria de Filas
Lista Resolvida
AULA VIRTUAL Dia 28/05/2020
Objetivos
- Filas MM1k (Nova Revisão)
- Desempenho da Fila MM1k
- Filas MMn
- Desempenho da Fila MMn
Slides Aula
- https://www.dropbox.com/s/1nfastsaorr5eyy/FilaMM1_CapacidadeLimitada.pdf?dl=0
- https://www.dropbox.com/s/zaul2rq4xzdzw2k/FilaMMc_MultiplosServidores.pdf?dl=0
AULA VIRTUAL Dia 3/06/2020
Objetivos
- Lista de Exercícios A1.5 - Comentários
- Introdução a Rede de Filas
Slides Aula
AULA VIRTUAL Dia 10/06/2020
Objetivos
- Introdução a Simulação em ADS
Slides Aula
AULA VIRTUAL Dia 17/06/2020
Objetivos
- Introdução a Simulação em ADS
- Fila MM1 com Simulador baseado no site do Apache
Slides Aula
- Ver Projeto Apache
- Proposição de Exercício: simulação de uma rede de filas;
- Adaptar o código de tratamento de uma fila MM1 simples, conforme colocado no slide para um formato de um simulador de eventos discretos com filas. Use o código abaixo como apoio.
//Basead em http://stdcxx.apache.org/doc/stdlibug/2-2.html#225
#include <queue>
#include <iostream>
#include <cstdlib>
//==================================================================
// classes evento e simulação - base para o desenvolvimento da simulação
//==================================================================
class event {
public:
// Construct sets time of event.
event (double t) : time (t)
{ }
// Execute event by invoking this method.
virtual void processEvent () = 0;
const double time;
};
class simulation {
public:
simulation () : simtime (0), eventQueue ()
{}
void run ();
void scheduleEvent (event * newEvent) {
eventQueue.push (newEvent);
}
double simtime;
protected:
class eventComparator {
public:
bool operator() (const event * left, const event * right) const {
return left->time > right->time;
}
};
std::priority_queue<event*,
std::vector<event *, std::allocator<event*> >,
eventComparator> eventQueue; //fila de eventos
};
void simulation::run () {
while (! eventQueue.empty ()) { //enquanto exisitr eventos na fila de eventos
event * nextEvent = eventQueue.top (); //captura evento no topo da fila
eventQueue.pop (); //retira evento da fila
simtime = nextEvent->time; //ajusta tempo de simulação
nextEvent->processEvent (); //processa evento
delete nextEvent; //remove evento
}
}
//===================================================================
//Customização dos eventos e do simulador
//===================================================================
class standardArrival : public event {
public:
standardArrival (double t)
: event (t)
{ }
virtual void processEvent ();
};
void standardArrival::processEvent () {
std::cout << "processando evento no tempo " << time << '\n';
}
class simuladorFilas : public simulation {
public:
simuladorFilas ()
{ }
} oSimulador;
// from https://stackoverflow.com/questions/2704521/generate-random-double-numbers-in-c
double fRand(double fMin, double fMax)
{
double f = (double)rand() / RAND_MAX;
return fMin + f * (fMax - fMin);
}
int main () {
// Inicializar aqui a fila de eventos
double t;
oSimulador.scheduleEvent (new standardArrival (t=fRand(1.0,10.0)));
oSimulador.scheduleEvent (new standardArrival (t=t+fRand(1.0,10.0)));
oSimulador.scheduleEvent (new standardArrival (t=t+fRand(1.0,10.0)));
// Executar simulador
oSimulador.run ();
return 0;
}