simulation
所属分类:论文
开发工具:Java
文件大小:260KB
下载次数:0
上传日期:2017-03-01 08:27:05
上 传 者:
sh-1993
说明: 一个关于模拟具有两个中心和两个队列的系统的学术项目。它需要生产pseud...
(An academic project about simulation of a system with two centers and two queues. It requires the production of pseudo-casual numbers for different distributions (exponential, poissonian, erlangian).)
文件列表:
classi.png (81741, 2017-03-01)
generale.png (60892, 2017-03-01)
grafici_media_varianza.png (24923, 2017-03-01)
grafici_media_varianza_convalida.png (24476, 2017-03-01)
grafici_media_varianza_variante.png (24125, 2017-03-01)
grafo_flusso.png (23043, 2017-03-01)
nbactions.xml (1716, 2017-03-01)
pom.xml (1515, 2017-03-01)
src (0, 2017-03-01)
src\main (0, 2017-03-01)
src\main\java (0, 2017-03-01)
src\main\java\mls (0, 2017-03-01)
src\main\java\mls\Calendario.java (4470, 2017-03-01)
src\main\java\mls\Evento.java (704, 2017-03-01)
src\main\java\mls\FramePlot.java (3966, 2017-03-01)
src\main\java\mls\Job.java (1366, 2017-03-01)
src\main\java\mls\Main.form (32772, 2017-03-01)
src\main\java\mls\Main.java (55897, 2017-03-01)
src\main\java\mls\Temp.java (1031, 2017-03-01)
src\main\java\mls\generatori (0, 2017-03-01)
src\main\java\mls\generatori\Generatore3Erlangiano.java (1099, 2017-03-01)
src\main\java\mls\generatori\GeneratoreEsponenziale.java (828, 2017-03-01)
src\main\java\mls\generatori\GeneratorePoissoniano.java (940, 2017-03-01)
src\main\java\mls\generatori\GeneratoreUniforme.java (1121, 2017-03-01)
src\main\java\mls\util (0, 2017-03-01)
src\main\java\mls\util\Coda.java (485, 2017-03-01)
src\main\java\mls\util\CodaFIFO.java (939, 2017-03-01)
src\main\java\mls\util\CodaLIFO.java (975, 2017-03-01)
src\main\java\mls\util\CodaSPTF.java (1139, 2017-03-01)
src\main\java\mls\util\ConfigurazioneConvalidaFactory.java (1384, 2017-03-01)
src\main\java\mls\util\ConfigurazioneSimulazioneFactory.java (983, 2017-03-01)
src\main\java\mls\util\ConfigurazioneStandardFactory.java (1282, 2017-03-01)
src\main\java\mls\util\EventoComparator.java (510, 2017-03-01)
src\main\java\mls\util\Generatore.java (407, 2017-03-01)
src\main\java\mls\util\JobComparator.java (519, 2017-03-01)
src\main\java\mls\util\TipoEvento.java (373, 2017-03-01)
src\main\java\mls\util\Util.java (482, 2017-03-01)
... ...
# Simulation Project
Introduzione
============
Il progetto consiste nell’implementare un
simulatore a sequenziamento di eventi e guidato da distribuzioni che
permetta di stimare la variabile di uscita U = tempo di risposta $t_q$
del sistema, ossia il tempo dall’arrivo dalla sorgente all’uscita,
nonche la sua media al 90% del livello di confidenza.
L’implementazione e stata realizzata utilizzando il linguaggio Java.
L’utilizzo delle interfacce grafiche Swing ha reso il software intuitivo
e versatile.
![Interfaccia grafica del simulatore](https://github.com/mmilidoni/simulation/blob/master/generale.png)
Dal pannello `Sistema Simulato` e possibile scegliere il sistema ad 1
CPU o a 2 CPU.
Dal pannello `Configurazione`, e possibile specificare i tempi
$T_a, T_{CPU}, T_{IO}$ ed il numero di run di stabilizzazione $p$.
Inoltre, e possibile avviare la simulazione attraverso i bottoni:
- `Simula` per eseguire il simulatore nella configurazione standard
($T_a = 30, T_{CPU} = T_{IO} = 2$, disciplina arrivi esponenziale,
disciplina centri 3-erlangiana, coda CPU di tipo SPTF, coda I/O di
tipo LIFO);
- `Convalida` per eseguire il simulatore nella configurazione di
convalida, ossia portandolo nelle condizioni della figura 6.36 del
libro di PQIS ($T_a = 30, T_{CPU} = T_{IO} = 2$, disciplina arrivi
poissoniana, disciplina centri esponenziale, coda CPU e coda I/O di
tipo FIFO)
Il pannello `Grafici` contiene i grafici di media e varianza
campionarie. Questi vengono popolati interattivamente durante
l’esecuzione della simulazione.
Il pannello in basso contiene le informazioni sui tipi di generatore
impostati (Poissoniano, Uniforme, ecc) e i tipi di coda (SPTF, FIFO,
ecc.). Inoltre, e presente il box informativo sui valori calcolati
dell’intervallo di confidenza.
La progettazione delle classi e stata effettuata nell’ottica di una
possibile e facile estensione per l’utilizzo di code e generatori di
diverso tipo. Per raggiungere tale obiettivo e stato utilizzato il
design pattern `Abstract Factory`. Lo schema delle classi e illustrato
in figura.
![Schema semplificato delle classi](https://github.com/mmilidoni/simulation/blob/master/classi.png)
Descrizione del simulatore
--------------------------
![Grafo di flusso del simulatore](https://github.com/mmilidoni/simulation/blob/master/grafo_flusso.png)
Il processo di simulazione ha inizio
con l’inizializzazione del modello, ossia delle variabili di stato,
delle variabili di carico, del clock e del calendario.
L’esecuzione procede nel sequenziatore, il quale effettua iterazioni
eseguendo i job provenienti dal calendario. L’iterazione termina quando
si e raggiunto il numero di run desiderati e viene eseguito il processo
di Fine Simulazione.
Il processo `arrivo` imposta il tempo di arrivo del job ed il tempo di
processamento prelevandolo dal corrispondente generatore. Il job passa
alla CPU, se questa e libera, altrimenti viene immesso nella coda CPU.
Il processo `fineIO` elimina il job dall’esecuzione dell’I/O. Il job
passa alla CPU, se questa e libera, altrimenti viene immesso nella coda
CPU. Infine, viene prelevato un nuovo job dalla coda IO, se quest’ultima
non e vuota.
Il processo `fineCPU` elimina il job dall’esecuzione della CPU. Il job
puo passare alla I/O se la variabile aleatoria di routing e minore di
0.9, altrimenti il job esce dal sistema e viene calcolato il tempo di
uscita.
Infine, viene prelevato un nuovo job dalla coda CPU, se quest’ultima non
e vuota.
Generatori pseudo casuali
-------------------------
Il modello di simulazione necessita dei seguenti generatori di sequenze
pseudocasuali:
- Generatore esponenziale per la stima dei tempi di arrivo, e per la
stima dei tempi di servizio CPU e IO del sistema di convalida
- Generatore 3-Erlangiano per la stima dei tempi di servizio CPU e IO
- Generatore uniforme per la scelta di routing
- Generatore poissoniano per la stima dei tempi di arrivo del sistema
di convalida
Esecuzione e convalida del simulatore
=====================================
L’esecuzione normale del simulatore viene effettuata portando il
simulatore nelle condizioni di distribuzioni di arrivi e servizi, e
discipline di servizio, del caso della configurazione standard.
In particolare, vengono impostati i generatori esponenziale per
gli arrivi e 3-erlangiano per i centri, e le code sono di tipo SPTF per
il centro CPU e LIFO per il centro I/O.
Le curve della media e della varianza, utili alla rimozione iniziale
(*initial bias*) sono illustrate graficamente nel software, e vengono
riportate in figura.
![Media e Varianza (Gordon)](https://github.com/mmilidoni/simulation/blob/master/grafici_media_varianza.png)
La tecnica utilizzata e quella dei run replicati.
Durante l’esecuzione dei run replicati si calcola la media campionaria
della variabile osservata U:
$$\overline{U}_j(n) = n^{-1} \sum_{i=1}^n U_{ij}$$
e, da questa, si calcolano gli stimatori di media e varianza di Gordon:
$$e(n) = p^{-1} \sum_{j=1}^p \overline{U}_j(n)$$
$$s^2(\overline{U}(n)) = (p-1)^{-1} \sum_{j=1}^p [\overline{U}_j(n) - e(n)]^2$$
Osservando gli stimatori di Gordon, si notera che la media $e(n)$
tendera ad essere stazionaria e la varianza $s^2(\overline{U}(n))$
tendera a decrescere linearmente. In tali condizioni si puo affermare di
aver raggiunto la stabilita del sistema.
Nel caso in esame possiamo osservare che a 1000 run si ha un buon grado
di stabilita del sistema, in quanto la media campionaria e abbastanza
stabile e la varianza campionaria linearmente decrescente.
Nella fase statistica, per la stima di $\mu$ e stato utilizzato il
metodo classico:
$$(\underline{\mu}, \overline{\mu}) = (\overline{f} - d \cdot \mu_{\alpha/2}, \overline{f} + d \cdot \mu_{\alpha/2})$$
I parametri $\overline{f}, d$ e $s^2$ sono
$$\overline{f} = \overline{x}/\overline{y}$$
$$d = \frac{s}{\overline{y}\sqrt{n}}$$
$$s^2 = s^2_{11} -2 \overline{f} s^2_{12} + \overline{f}^2 s^2_{22}$$
Per il calcolo della media al 90% del livello di confidenza, si ha:
$$0.90 = 1 - \alpha; \alpha = 0.1$$
$$\frac{\alpha}{2} = 0.05; 1-\alpha/2 = 0.95$$
Confrontando il valore 0.95 con la tavola della distribuzione normale
cumulativa, si ha che $\mu_{\alpha/2} = 1.***5$.
I risultati della media dei tempi di risposta e dell’intervallo di
confidenza sono i seguenti:
- Tempo di risposta: $113.28$
- Intervallo di confidenza: $(110.01, 116.55)$
Convalida del simulatore
------------------------
La convalida del simulatore viene effettuata portando il simulatore
nelle condizioni di distribuzioni di arrivi e servizi, e discipline di
servizio, del caso della Figura 6.36 del libro di PQIS.
Il simulatore viene quindi convalidato cliccando sul bottone
`Convalida`. Vengono impostati i generatori Poissoniano per gli arrivi
ed Esponenziale per i centri, e le code sono di tipo FIFO sia per CPU
che per I/O.
Le curve della media e della varianza del simulatore nelle condizioni di
convalida sono riportate in figura.
![Media e Varianza (Gordon) - caso convalida](https://github.com/mmilidoni/simulation/blob/master/grafici_media_varianza_convalida.png)
Nel caso della convalida, i risultati della media dei tempi di risposta
e dell’intervallo di confidenza sono i seguenti:
- Tempo di risposta: $103.83$
- Intervallo di confidenza: $(99.76, 107.9)$
Il tempo di risposta globale che ne scaturisce dall’analisi teorica e:
$$E(t_r) = \frac{E(n_1) + E (N_2)}{\gamma} = 105 sec$$
Pertanto, e possibile affermare che il risultato ottenuto dalla
simulazione e molto vicino a quello dell’analisi teorica.
Variante del simulatore
=======================
La variante del simulatore consiste nel portare il simulatore nelle
condizioni di avere due centri CPU, ciascuno di velocita operativa $1/2$
del singolo.
Dal corso di Prestazioni e Qualita di Impianti e Sistemi, confrontando i
due casi e noto che:
- il tempo di attesa $E(t_w)$ migliora con il centro a capacita
distribuita, ossia $ T_w(m, \lambda, C) \leq T_w(1, \lambda, C)$;
- il tempo di risposta $E(t_q)$ ha un comportamento opposto a quello
di attesa, in quanto peggiora aumentando $m$. In altre parole, il
centro a capacita concentrata genera tempi di risposta migliori
rispetto a quello a capacita distribuita, ossia
$ T_q(1, \lambda, C) \leq T_q(m, \lambda, C)$.
Per verificare il comportamento del simulatore e sufficiente cliccare
sul radio-button `2 CPU` dello schema simulato del software.
Quindi, si osserva facilmente che i tempi di risposta sono superiori al
centro a capacita concentrata.
![Media e Varianza (Gordon) - variante del simulatore](https://github.com/mmilidoni/simulation/blob/master/grafici_media_varianza_variante.png)
I valori di media dei tempi di risposta e intervallo di confidenza sono
confrontati nella seguente tabella.
| | 1 CPU | 2 CPU |
|--------------|--------|----------|
| E(T_q) | 113.28 | 135.73 |
| Limite inf. | 110.01 | 130.4 |
| Limite sup. | 116.55 | 141.06 |
近期下载者:
相关文件:
收藏者: