Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
vuoi
o PayPal
tutte le volte che vuoi
Il campo "homeLocation" indica il posto in cui i Tugboat risiedono quando non si
stanno muovendo. Nel progetto in esame il valore è “animation.attraccoi” dove
l’indice i=1,..,6 indica a quale dei sei attracchi si sta facendo riferimento.
Il campo "quantity" indica quanti oggetti devono essere creati per la risorsa. Nel
progetto il valore è 1 perché ogni attracco ha un tugboat.
Il campo "newEntity" indica il tipo di entità che caratterizza la risorsa.
(Tugboati.class i=1,..,6).
Deposito. È un oggetto di tipo "network resource". È sempre connesso con l'oggetto
"network". Rappresenta i depositi, ovvero l’area sulla quale vengono scaricati i
container.
Il campo "type" definisce il tipo di risorsa. Il Deposito è di tipo static perché non si
muove, rappresenta un’area.
Il campo "visible" indica se la risorsa in questione sarà visibile in animazione. In
questo caso il valore è fissato a “false”.
Il campo "home location" indica dove la risorsa è posizionata nell’animazione.
(animation.depositiHomeLocation).
Il campo "quantity" indica quanti oggetti devono essere creati per la risorsa. (number
of pts on polyline, ossia vengono create tante entità quanti sono i punti di una
polyline, 12 nel caso in esame).
Il campo "newEntity" indica il tipo di entità che caratterizza la risorsa
(Deposito.class).
Genera. È un oggetto di tipo "network resource". È sempre connesso con l'oggetto
"network". Rappresenta un’area della nave nella quale vengono generati i container.
Il campo "type" definisce il tipo di risorsa. Genera è di tipo static perché non si
muove, rappresenta un’area. 9
Il campo "visible" indica se la risorsa il questione sarà visibile in animazione. In
questo caso il valore è fissato a “false”.
Il campo "homeLocation" indica dove la risorsa è posizionata nell’animazione.
(animation.generaHomeLocation).
Il campo "quantity" indica quanti oggetti devono essere creati per la risorsa. (number
of pts on polyline, ossia vengono create tante entità quanti sono i punti di una
polyline, 12 nel caso in esame).
Il campo "newEntity" indica il tipo di entità che caratterizza la risorsa (Genera.class).
Attracco. È un oggetto di tipo "network resource". È sempre connesso con l'oggetto
"network". Rappresenta l’area dove attraccano i tugboat e le navi.
Il campo "type" definisce il tipo di risorsa. Genera è di tipo static perché non si
muove, rappresenta un’area.
Il campo "visible" indica se la risorsa il questione sarà visibile in animazione. In
questo caso il valore è fissato a “false”.
Il campo "home location" indica dove la risorsa è posizionata nell’animazione.
(animation.attracchiHomeLocation).
Il campo "quantity" indica quanti oggetti devono essere creati per la risorsa. (number
of pts on polyline, ossia vengono create tante entità quanti sono i punti di una
polyline, 6 nel caso in esame).
Il campo "newEntity" indica il tipo di entità che caratterizza la risorsa
(Attracco.class).
5. Creazione del flow-chart
In questa sezione mostriamo il diagramma di flusso del nostro modello. Per simulare
i sei attracchi sono state create sei linee identiche e parallele. Per semplicità si
10
analizzerà di seguito la sola linea 1. Analoghe considerazioni potranno essere fatte
per le altre cinque linee.
In particolare vengono mostrate le quattro attività costituenti il macro processo di
arrivo, scarico, carico e partenza. Per ciascuna attività vengono mostrati e descritti gli
oggetti, i parametri e le variabili utilizzati.
5.1 Fase di arrivo
Ship. È un oggetto di tipo "source". Nel progetto serve per generare le navi (Ship);
Il campo "newEntity" indica quale entità deve generare la source (Ship.class).
Il campo "interrarivalTime" indica il tempo di interarrivo tra una nave e l'altra; viene
definito pari a exponential(1/TempoInterarrivoNavi). TempoInterarrivoNavi è
definito come parametro di tipo reale con valore di default 64800s (18h*3600s).
Il campo “entitiesPerArrival” indica quante entità devono essere generate ad ogni
esecuzione. Nella simulazione esaminata le navi arrivano una per volta, quindi il
parametro è settato al valore 1. 11
NetworkEnter. È un oggetto di tipo "networkEnter". Permette alla nave di entrare
nella rete.
Il campo "dest" indica in quale punto dell'animazione della rete la nave deve
comparire (animation.ingresso);
Il campo "network" indica in quale rete deve entrare la nave (network);
Il campo “onEnter” indica il codice che deve essere eseguito al momento in cui la
nave entra nel NetworkEnter.
nNavi++; quando la nave entra nella rete viene incrementata la variabile
- nNavi, creata per tenere traccia del numero di navi che entrano nel porto.
Queue12. È un oggetto di tipo “queue”. L’oggetto è utilizzato per simulare la
creazione delle code, ossia l’accumulo di entità in un punto del flow chart. In questo
caso raccoglie le navi generate e in attesa di essere trasportate in un attracco.
Il campo “animationShape” indica il punto in cui la coda verrà visualizzata in
animazione (animation.ingresso, la nave viene visualizzata all’ingresso del porto);
NetworkSeizeQ. È un oggetto di tipo "NetworkSeizeQ" e serve per impegnare una
risorsa statica della rete, in questo caso un attracco.
Il campo "staticResource" indica quale risorsa statica della rete si andrà ad
impegnare. (Attracco.class);
NetworkMoveToWithQ. È un oggetto di tipo "NetworkMoveToWithQ" che serve
per trasportare un’entità in un determinato punto della rete tramite una risorsa di staff.
Nel progetto la nave viene rimorchiata dal tugboat (staff) all’ingresso del porto e
trasportata verso un attracco.
Il campo "entities" indica qual è la risorsa di staff che si utilizza per veicolare l’entità
all’interno della rete. ({ Tugboat1.class }). 12
Il campo "dest" indica il punto della rete in cui verrà posizionata l’entità.
(animation.attracco1);
Il campo "releaseAfterMove" indica se la risorsa di tipo staff deve abbandonare
l’entità dopo averla portata a destinazione. Nel caso in esame il campo è settato a
“false” perché il tugboat deve rimanere con la nave finché non saranno terminate le
operazioni di carico e scarico per riaccompagnarla fuori dal porto;
Il campo “onExit” indica il codice che deve essere eseguito quando la nave
abbandona l’oggetto:
networkSeizeQ.block(); indica che da questo momento in poi il networkSeizeQ
- deve essere bloccato per impedire che altre navi occupino l’attracco già
impegnato da una nave che sta eseguendo le operazioni di scarico e carico.
Come si vedrà, sarà sbloccato in seguito, al termine della fase di carico.
5.2 Fase di scarico 13
Split. È un oggetto di tipo “Split”. Serve a creare copie di entità. Per ogni entità
(nave) arrivata, crea due nuove entità (container) che usciranno dalla porta “copy” per
andare nella linea di scarico. L’entità originale uscirà dalla porta orig e proseguirà il
percorso nel flow chart;
Il campo “newCopy” indica il tipo di entità che devono essere generate come copie
(container);
Il campo “numberOfCopies” indica il numero di copie che lo split dovrà generare.
Nella simulazione oggetto di studio vengono create solo due copie per evitare che si
abbia un problema successivamente. Infatti, a rigor di logica, avrebbero dovuto essere
generate un numero di copie tra 500 e 1400 secondo una distribuzione uniforme.
Copie da dividere attraverso un selectOutput per simulare le due gru. Il problema
sorge nel momento in cui nel selectOutput entrano più di 1000 entità. Infatti
quest’oggetto non può ospitare un numero maggiore di 1000 entità.
Le due copie generate dallo split arrivano in “selectOutput6” che, attraverso la
condizione “so1%2==0” (so1 è una variabile che conta quanti oggetti passano, creata
per definire la predetta condizione), ne farà uscire una dalla porta “true” e l’altra dalla
porta “false” al fine di generare due linee di scarico, una per ogni gru presente nella
posizione di attracco.
Quanto descritto di seguito è ambivalente per entrambe le linee di scarico. Uscendo
dal selectOutuput6, ad esempio dalla porta true, l’entità entra nello “split7” che
distruggerà l’entità originale, mandandola in “sink16” e creerà un numero di copie
pari a “nContainer1”/2, l’altra metà di copie verrà generata dallo split parallelo.
nContainer1 è una variabile che è stata creata per rendere intero il parametro nCont1
a sua volta creato per definire il numero di container che devono essere scaricati dalla
nave (uniform(500,1400)). Le copie entrano in “queue15”, coda che permetterà di
visualizzare i container da scaricare all’interno della nave. A questo punto i container
14
attraversano il “conveyor6”, che nel flow chart simula il comportamento della gru.
Esso scarica i container dalla nave al deposito. Quando la fase di scarico è terminata
questo oggetto consente l’avvio della fase di carico (split1.unblock()). I container
arrivano in queue29 (nel deposito) che funge da buffer per ospitare al massimo 50
container, passano quindi nel “delay10” dove si simula il loro stazionamento nel
porto per 1.5 minuti. Infine essi vengono distrutti in “sink15”.
SelectOutput6. È un oggetto di tipo “selectOutput”.
Il campo “onEnter” indica il codice che deve essere eseguito nel momento in cui
un’entità entra nel selectOutput. Nel caso in esame si ha:
so1++; si incrementa il contatore creato per assegnare un identificativo
- numerico ad ogni container.
Il campo “selectCondition” indica quale deve essere la condizione per la selezione
della porta d’uscita. Nel caso in esame la condizione è “so1%2==0”, ovvero si
decide la porta d’uscita in base al fatto che l’identificativo numerico dell’entità sia
pari o dispari.
Split7. È un