Original article: http://staff.um.edu.mt/jskl1/simul.html

Simulazione

"Das ganze tschechische Volk ist eine Simulantenbande"

Jaroslav Hašek: Il buon soldato Švejk

Cos'è la simulazione 
Simulazione continua 
Simulazione discreta 
Simulazione orientata agli oggetti 
Simulazione in linea 
Riferimenti 


Cos'è la simulazione

Al livello più generale, la simulazione dovrebbe essere considerata una forma di cognizione. (Cognizione = azione o processo di acquisizione di conoscenza.) Ci sono tre metodi di base su come ottenere un'informazione (conoscenza) della realtà oggettiva: Esperimento, Analisi, Simulazione.Facciamo un esempio pratico per dimostrare la natura di questi tre metodi. Il sistema oggetto di indagine è una stazione di servizio con un assistente. La domanda è "qual è il tempo medio trascorso da una macchina nella stazione di servizio". Per ottenere la risposta abbiamo tre possibilità:

Esperimento : prendi i cronometri e misura il tempo trascorso da ogni auto nella stazione. Contare le auto, alla fine sommare tutte le volte e dividerle per il numero di auto.

Analisi : utilizzare una formula della teoria della coda per calcolare direttamente il tempo medio trascorso nel sistema. Per usare una formula dovrai assumere un certo modello di accodamento che significa una notevole semplificazione del sistema reale e avrai bisogno di alcuni parametri quantitativi (qui intensità di arrivo - numero di auto in arrivo per unità di tempo e intensità di servizio - numero di auto servite per volta unità).

Simulazione : scrivere un modello di simulazione che genera arrivi casuali di automobili e durata dei servizi. Deve anche eseguire correttamente in sequenza tutte le attività per avere una corrispondenza uno a uno con il sistema reale. Anche l'osservazione, la raccolta di dati statistici e la valutazione devono essere programmati (per ogni auto calcolare il tempo trascorso, accumulare questi tempi, contare il numero di automobili, calcolare e visualizzare la media).

Questi tre metodi non possono essere classificati perché tutti hanno vantaggi e svantaggi. Possono essere confrontati solo nel contesto di determinati casi particolari tenendo conto di vari criteri. Tuttavia alcuni fatti di base sono ovvi:

L'esperimento è sempre il metodo più accurato, che dovrebbe essere usato ogni volta che è fattibile. Sfortunatamente molto spesso l'esperimento è: 
- Troppo pericoloso (comportamento di un reattore nucleare in situazioni critiche, atterraggio con un aereo con un getto spento, ecc.) 
- Troppo costoso (tutti i casi che causano un danno, lunghi esperimenti che studiano il throughput di una rete di dati utilizzando linee telefoniche dedicate, ecc.) 
- Non è possibile se il sistema oggetto di indagine non è disponibile (valutazione di più alternative possibili in fase di progettazione).

L'analisi (principalmente matematica) è tipicamente basata su ipotesi forti che raramente sono vere nella vita pratica. Un altro possibile inconveniente dei metodi analitici è l'utilizzo di apparecchiature troppo complicate e / o il calcolo troppo lungo. Un esempio di ciò è l'analisi delle reti di accodamento. D'altra parte l'utilizzo di formule fornisce risultati per lo più veloci ed è possibile controllare un gran numero di alternative semplicemente inserendo diversi valori di parametri nella formula (e). I metodi sperimentali richiedono molto più tempo. Un altro problema di analisi è la disponibilità dei parametri necessari. Anche la loro misurazione esatta non è necessariamente fattibile o è impossibile in fase di progettazione. L'uso di dati stimati o dati presi da altri sistemi simili diminuisce la credibilità dei risultati.

La simulazione è anche un metodo sperimentale. Invece di sperimentare con il sistema reale, gli esperimenti vengono eseguiti con il modello di simulazione (il cui design è quindi il punto chiave degli studi di simulazione). Anche la simulazione ha molti svantaggi. Ecco i più importanti: 
- Creazione troppo impegnativa di modelli di simulazione. Programmare modelli di simulazione in lingue generali (come Pascal) è troppo difficile. Esistono linguaggi di simulazione efficienti ma la loro padronanza rappresenta un grande investimento iniziale non sempre giustificato. Esistono strumenti di simulazione basati tipicamente su alcune tecniche grafiche che semplificano o addirittura automatizzano la creazione di modelli di simulazione di determinate classi di sistemi. Se vuoi saperne di più su uno di questi strumenti, vai alla pagina Petri Nets . 
- Conoscenza limitata del sistema che viene simulato. Prima di tutto devono essere noti alcuni parametri quantitativi. Nell'esempio sopra è necessario generare intervalli casuali tra arrivi e tempi di servizio casuali. Qui la simulazione è molto più flessibile dell'analisi - i linguaggi di simulazione supportano la generazione di numeri casuali praticamente con qualsiasi distribuzione. Nell'esempio precedente entrambe le cifre casuali possono essere basate su qualsiasi distribuzione (ad es. Ottenuta sperimentalmente). Tuttavia, qualsiasi distribuzione necessita di diversi parametri (se è teorica) o direttamente della funzione di distribuzione (se la distribuzione viene ottenuta misurando). Possono esserci anche cose nel sistema (tipicamente in fase di progettazione) che non possono essere quantificate e spesso è necessario accettare il fatto che potrebbero esserci degli aspetti di cui non siamo affatto a conoscenza. 
- Calcolo troppo lungo. Un esempio è l'analisi di sistemi su larga scala con molti componenti che lavorano in parallelo. Poiché l'applicazione del parallelismo reale non è ancora comune, tali sistemi sono simulati da un programma eseguito da un singolo processore. Le attività parallele vengono quindi eseguite una alla volta (anche se l'utente ha un'impressione di parallelismo e durante la progettazione del modello di simulazione "pensa in parallelo"). Il risultato di ciò è il fatto che la simulazione potrebbe essere molto più lenta del tempo reale (1 secondo del tempo di modello impiega 10 minuti del tempo della CPU). Ciò ovviamente disabilita l'applicazione della simulazione in controllo in tempo reale.

Una regola empirica generale potrebbe essere così: 
"Se l'esperimento è fattibile, usalo, è sempre il metodo migliore perché tutti gli aspetti sono presi in considerazione, anche se sono stati utilizzati altri metodi durante la fase di progettazione, l'esperimento può servire come valutazione finale del sistema. non è possibile provare a trovare un metodo analitico appropriato, se non è disponibile, utilizzare la simulazione. " 
La simulazione non è solo l'ultima risorsa come sembra nella regola precedente. La simulazione può contribuire molto alla comprensione del sistema che viene analizzato non solo fornendo risposte alle domande originariamente fornite. Molto spesso la creazione del modello di simulazione è la prima occasione in cui alcune cose vengono prese in considerazione. Le specifiche del sistema simulato possono (e spesso lo fanno) rivelare errori o ambiguità nella progettazione del sistema. Quindi la simulazione può aiutare molto evitando futuri aggiornamenti costosi del sistema pronto.

Torna a Intestazione 
Torna alla Home page 


Simulazione continua

Linguaggi di simulazione continua sviluppati alla fine degli anni Cinquanta come simulatori di computer analogici. La simulazione su computer analogici si basa sulla creazione di un sistema elettronico analogico il cui comportamento è descritto dallo stesso modello matematico (insieme di equazioni differenziali) del sistema oggetto di indagine. Il sistema elettronico è creato collegando blocchi standard basati principalmente su amplificatori operazionali modificati per fungere da integratori, sommatori e altre unità funzionali. Quindi l'utente esegue esperimenti con questo sistema elettronico applicando opportuni ingressi e registrando la tensione in determinati punti di uscita (oscilloscopio, plotter). La tensione variabile rappresenta una funzione temporale, che è la stessa della funzione che descrive i cambiamenti nel sistema originale la cui natura fisica può essere totalmente diversa (spostamento meccanico, temperatura, ecc.). Il problema principale dei computer analogici è un'implementazione analogica di alcune operazioni come la moltiplicazione, la generazione di alcune funzioni, la generazione di ritardi e altri. I computer digitali eseguono tutte queste funzioni molto facilmente e oggi la simulazione continua viene eseguita solo su di essi. Tuttavia c'è una operazione in cui i computer analogici sono migliori - integrazione. I computer digitali utilizzano un'integrazione numerica generalmente più lenta e meno accurata rispetto all'integrazione di un integratore analogico. Alcune applicazioni speciali basate sulla risposta rapida utilizzano quindi i cosiddetti computer ibridi, che contengono parti analogiche e digitali collegate da convertitori A / D e D / A. La parte digitale fa tutto tranne l'integrazione. Calcola gli input degli integratori, che vengono quindi convertiti da convertitori D / A in segnali analogici immessi in integratori analogici. Le loro uscite sono trattate in modo opposto. La parte digitale controlla anche l'interconnessione della parte analogica, che potrebbe quindi cambiare durante il calcolo.

Classificazione delle lingue di simulazione continua

I linguaggi di simulazione orientati ai blocchi si basano sulla metodologia dei computer analogici. Il sistema deve essere espresso come un diagramma a blocchi che definisce l'interconnessione delle unità funzionali e i loro parametri quantitativi. "Programmazione" significa inserire l'interconnessione dei blocchi e la loro descrizione. Quindi l'utente aggiunge istruzioni e / o direttive che controllano la simulazione. Se il sistema è descritto come un insieme di equazioni, devono essere convertite in un diagramma a blocchi. Questa conversione è un processo semplice e diretto.I blocchi tipici disponibili nella maggior parte dei linguaggi orientati ai blocchi sono integratori, limitatori, ritardi, moltiplicatori, isteresi, valori costanti, sommatori, titolari, guadagno (coefficiente) e altro.

I linguaggi continui orientati all'espressione si basano su espressioni di scrittura (equazioni) che rappresentano il modello matematico. Quindi il sistema simulato deve essere espresso da un insieme di equazioni. Quindi l'utente aggiunge istruzioni e / o direttive che controllano la simulazione.Alcuni linguaggi abilitano sia metodi di definizione di sistema basati su blocchi che espressioni. Controllo della simulazione significa selezione di: il metodo di integrazione (perché alcuni linguaggi offrono di più), il passo di integrazione, le variabili (uscite di blocchi) che devono essere osservati, gli intervalli per la raccolta dei dati per la stampa e / o la stampa, il ridimensionamento delle uscite (che può anche essere eseguito automaticamente), la durata delle esecuzioni di simulazione, il numero di ripetizioni e il modo in cui determinati valori vengono modificati in essi, ecc.

Scarica il file model1.zip che contiene diversi modelli di simulazione continua scritti in linguaggio Turbo Pascal. I modelli vengono creati utilizzando un semplice ambiente di simulazione continuo basato sull'approccio orientato all'espressione e possono essere facilmente modificati per modellare qualsiasi altro sistema descritto dalle equazioni differenziali. 

Torna a Intestazione 
Torna alla Home page 


Simulazione discreta

La simulazione discreta si occupa di sistemi la cui dinamica può essere considerata (a causa del livello di astrazione) come una sequenza di eventi a punti di tempo discreti. Il punto chiave di un linguaggio di simulazione discreto è il modo in cui controlla il corretto sequenziamento delle attività nel modello. Questo è anche il modo in cui un utente deve "vedere il mondo" quando usa la lingua e una base per la classificazione dei linguaggi di simulazione discreti.

Classificazione dei linguaggi di simulazione discreti

Le lingue orientate al diagramma di flusso sono rappresentate dalla lingua GPSS (General Purpose Simulation System), che esiste in molte versioni su vari computer. L'utente deve visualizzare le dinamiche del sistema come un flusso delle cosiddette Transazioni attraverso uno schema a blocchi. Le transazioni vengono generate, seguono un percorso attraverso una rete di blocchi e vengono distrutte all'uscita. Nei blocchi le transazioni possono essere ritardate, elaborate e passate ad altri blocchi. I blocchi sono nel programma rappresentati da istruzioni che eseguono le attività del modello.

I linguaggi orientati all'attività non sono basati su una pianificazione esplicita delle attività future. Per ogni attività l'utente descrive la condizione in cui può avvenire l'attività (che copre anche la pianificazione se la condizione raggiunge un certo tempo). L'algoritmo del controllo di simulazione incrementa ripetutamente il tempo e verifica le condizioni di tutte le attività. Lo svantaggio di questo approccio è ovvio: è necessario valutare tutte le condizioni in ogni fase, che può richiedere molto tempo. D'altra parte è concettualmente molto semplice e l'algoritmo può essere facilmente implementato in linguaggi generali di alto livello (esistono linguaggi di simulazione basati su questo approccio, ma non ampiamente utilizzati). Scarica il file model2.zip che contiene due modelli di un semplice sistema di accodamento (in Turbo Pascal) che dimostrano l'approccio orientato all'attività. Questi modelli sono accompagnati da diverse unità che implementano operazioni su liste collegate bidirezionali che vengono successivamente utilizzate per implementare stack e code.

I linguaggi orientati agli eventi sono basati sulla pianificazione diretta e sulla cancellazione di eventi futuri. L'approccio è molto generale. L'utente deve visualizzare le dinamiche del sistema simulato come una sequenza di eventi relativamente indipendenti. Ogni evento può programmare e / o cancellare altri eventi. La routine di sistema deve tenere traccia degli eventi programmati. Ecco perché ogni evento è rappresentato dalla cosiddetta notifica di evento, che contiene l'ora, il tipo di evento e altri dati dell'utente. Le notifiche degli eventi sono conservate nel cosiddetto Calendario, dove le notifiche degli eventi sono ordinate in base all'orario pianificato. Dopo il completamento di una routine di evento, il sistema rimuove l'avviso di evento con il tempo minore dal calendario, aggiorna l'orario del modello in base alla sua ora e avvia la routine corrispondente. Questo viene ripetuto fino a quando il calendario non è vuoto o il programma si ferma a causa di altri motivi. Pianificazione significa inserire avvisi di eventi nel calendario entro il tempo pianificato, la cancellazione li rimuove. L'approccio basato sull'espressione esplicita di eventi è chiamato simulazione dell'evento discreto, che a volte è generalizzata alla simulazione discreta in quanto tale. Un tipico rappresentante di questo gruppo di lingue è la lingua SIMSCRIPT (ma la sua versione II.5 supporta anche la simulazione orientata al processo).

I linguaggi orientati al processo si basano sul fatto che gli eventi non sono indipendenti. Un evento è in genere una conseguenza di altri eventi precedenti. In altre parole, è spesso possibile definire sequenze di eventi che possono essere visualizzati come entità di un modello di simulazione a un livello superiore di gerarchia. Una sequenza di eventi si chiama Process . A differenza del processo degli eventi ha una dimensione nel tempo. I sistemi astratti basati sui processi sono molto vicini alla realtà, che è sempre composta da vari oggetti che esistono e agiscono in parallelo interferendo l'uno con l'altro. Il modo di vedere la dinamica del sistema è quindi molto naturale. Principalmente un processo modella un'attività di un oggetto reale. Si ritiene che la simulazione discreta orientata al processo sia il modo migliore per creare modelli di simulazione discreti.Rappresentanti tipici di questo gruppo di lingue sono MODSIM, SIMSCRIPT II.5 e SIMULATION della lingua di sistema del linguaggio Simula .

Torna a Intestazione 
Torna alla Home page 


Simulazione orientata agli oggetti

La simulazione orientata agli oggetti (OOS) può essere considerata un caso speciale di programmazione orientata agli oggetti (OOP). Alcuni principi di OOP come l'esistenza di un numero variabile di istanze di oggetti interferenti sono stati in uso standard nell'ambiente di simulazione per lungo tempo, spesso usando altra terminologia. Il linguaggio Simula (che si chiamava Simula 67) è il primo vero linguaggio orientato agli oggetti. Avendo più di 30 anni, ha ancora la maggior parte (e tutti i principali) meccanismi e principi dell'OOP. Alcune cose come classi, ereditarietà, metodi virtuali, ecc. Sono state definite in Simula molto tempo prima che venissero riscoperte dal boom dell'OOP negli ultimi anni. Per saperne di più su Simula, visitare la pagina di ASU (Associazione utenti Simula). Puoi anche consultare il documento Introduzione a OOP in Simula basato su un discorso presentato all'Università di Malta in occasione del 30 anniversario della Simula. MODSIM è un altro linguaggio di simulazione orientato agli oggetti. 

Queste sono le caratteristiche più comunemente accettate di OOS:

1. L'algoritmo o la dinamica del sistema sono espressi in termini di oggetti (attori) che esistono in parallelo e che interagiscono l'uno con l'altro. Ogni oggetto è rappresentato da: 
- parametri (che possono essere assegnati valori reali durante la generazione di oggetti) 
- attributi (chiamati anche attributi interni o attributi di valore) 
- metodi (chiamati anche attributi di azioni o procedure) 
- la vita, che rappresenta l'attività avviata alla creazione dell'oggetto. 
Gli oggetti possono interagire in questi modi: 
- accesso diretto a parametri e attributi 
- chiamata reciproca di metodi 
- comunicazione e sincronizzazione di oggetti vivi. 
Semplicemente parlando: Object = Data + Procedure che si chiama Incapsulamento . Molto spesso i dati dell'oggetto o parte di esso sono nascosti e i valori sono accessibili e modificati solo tramite metodi (ben definiti). Questo concetto è chiamato nascondere informazioni . 

2. Oggetti simili (attori) sono raggruppati nelle cosiddette classi chiamate anche prototipi. Una classe descrive oggetti che hanno gli stessi parametri, attributi, metodi e vite. Una dichiarazione di classe è interpretata come un modello. È possibile creare un numero qualsiasi di singoli oggetti (attori) chiamati istanze di oggetti . Le istanze possono differire nei valori dei loro parametri e / o attributi. È necessario fare una chiara differenza tra una classe in quanto tale e le istanze dell'oggetto generate utilizzando la dichiarazione di classe. Una classe può anche essere interpretata come una conoscenza di determinati tipi di oggetti. Tale conoscenza è rappresentata da una parte di dati e da operazioni che possono essere eseguite sui dati. Questo è simile ai tipi di dati astratti, ma le classi sono molto più ricche. Un tipo di dati astratto può essere considerato in questo contesto come un caso degenerato di una classe che non fa uso dell'ereditarietà. 

3. Gli oggetti possono essere classificati gerarchicamente dalla cosiddetta ereditarietà . Molto spesso viene introdotto il termine sottoclasse . Una sottoclasse Y di una classe X eredita tutti i parametri, attributi e metodi dalla classe X. La sua dichiarazione può aggiungere qualsiasi numero di parametri, attributi e metodi aggiuntivi. Una sottoclasse può anche aggiungere alcune attività alla vita della classe genitore. Una sottoclasse può essere utilizzata come classe genitore di altre sottoclassi, ecc. Alcuni linguaggi OOP (non Simula) abilitano la cosiddetta ereditarietà multipla . In questo caso una sottoclasse può ereditare da più di una classe genitore. Una sottoclasse può essere interpretata come una conoscenza più dettagliata di quella definita dalla classe genitore. Quindi la classe genitore rappresenta una conoscenza generale, che può essere ulteriormente specializzata da dichiarazioni di sottoclassi in qualsiasi numero di passaggi. L'ereditarietà agisce in un certo modo contro una forte tipizzazione di lingue come Pascal. In genere è possibile dichiarare variabili di riferimento che possono riferirsi a un'istanza di una determinata classe e alle istanze di tutte le sue sottoclassi. Potrebbe essere auspicabile che determinati metodi si comportino in modo diverso a seconda dell'istanza oggetto corrente a cui si fa riferimento, che potrebbe cambiare dinamicamente durante l'esecuzione del programma. Questo concetto chiamato polimorfismo è supportato dal meccanismo chiamato late binding e i metodi coinvolti sono chiamati metodi virtuali, che possono cambiare a ogni livello della gerarchia. 

4. L'esistenza parallela di istanze di oggetti richiede strutture che supportino la cooperazione e la sincronizzazione delle loro vite. La vita dell'oggetto non ha necessariamente una dimensione temporale, ma nel caso di OOS lo ha. Gli oggetti Simula come tali possono interagire senza la nozione di tempo. La classe di sistema Simula SIMULATION definisce la classe "Processo" la cui vita esiste nel tempo. Ci sono strutture per i processi di comunicare e sincronizzare le loro vite 

Torna a Intestazione 
Torna alla Home page 


Simulazione in linea

Internet insieme a Java e JavaScript offrono incredibili possibilità di risoluzione dei problemi. Invece di perdere tempo a scaricare e installare pacchetti software, è possibile aprire direttamente vari solutori, soprattutto per problemi che non sono frequenti e che non richiedono un calcolo dispendioso in termini di tempo. Come primo passo in questa direzione, ho scritto semplici modelli di simulazione in JavaScript che risolvono e simulano sistemi a coda singola e reti di accodamento. Procedi alla pagina Solutori e simulatori online per provare subito la simulazione.

Torna a Intestazione 
Torna alla Home page 


Riferimenti

Questa pagina contiene un estratto dal testo: 
Sklenar, J .: Simulation (Università di Malta, 2000) che viene utilizzato in diversi corsi relativi alla ricerca operativa insegnati all'Università di Malta. 
Puoi anche trovare un sacco di cose su Internet perché tutti i motori di ricerca restituiscono molte voci su "simulazione". Puoi iniziare con i seguenti luoghi, che contengono altri collegamenti, riferimenti, informazioni su istituzioni, conferenze, ecc. 

Torna a Intestazione 
Torna alla Home page