3.3.3.3 Il formalismo SAN, il tool Mobius e alcuni esempi di modelli sviluppati Per definire e valutare i modelli proposti, è stato utilizzato il flessibile e potente ambiente di modellazione Möbius [DCC02] implementato dall'omonimo tool [CGK09] (i cui componenti principali sono mostrati in Figura xx1), che supporta una molteplicità di formalismi di modellazione e di risolutori e le loro interazioni. Il modello complessivo dell'ambiente Möbius è ottenuto mediante uno o più sottomodelli composti gerarchicamente (come mostrato in Figure xx1) al livello di Abstract Functional Interface (AFI) [DCCDDDSW02,DKSC02] utilizzando operatori, come Join e Rep [SM91], basati sulla condivisione di variabili di stato o azioni. Ogni sottomodello può essere atomico o a sua volta composto. Sul modello risultante vengono definite prima le variabili di performance (che rappresentano le misure di interesse), basate su strutture di guadagno, ed infine gli studi da valutare in base alla variabilità dei parametri del modello. Tutti i formalismi e i risolutori supportati da Möbius sono basati sul linguaggio di programmazione orientato ad oggetti C++, consentendo l'utilizzo di codice C++ nei modelli. Pertanto, lo strumento supporta strutture dati C++ esterne staticamente definite al momento della compilazione ed il collegamento di librerie C++ esterne. Tra i formalismi per la definizione dei modelli atomici, è stato scelto quello delle Stochastic Activity Network (SAN) [SM01], una estensione stocastica delle reti di Petri basata sulle seguenti primitive grafiche: posti semplici o estesi (rappresentati da cerchi blu e arancioni, rispettivamente), attività temporizzate o istantanee (barre verticali vuote o sottili), porte di input e di output (triangoli con la punta a sinistra o a destra). In particolare, un posto semplice rappresenta il tipo "short" del linguaggio C++, mentre un posto esteso representa tipi di dati di base primitivi (come "short", "float", "double") e tipi "struct" o "array" di tipi primitivi o di posti estesi. Il tempo al completamento di una attività è una variabile casuale indipendente che può avere una qualunque delle numerose distribuzioni supportate dal tool. Ad ogni attività può essere associato uno o più case (piccoli cerchietti alla destra dell'attività) che rappresentano l'incertezza probabilistica al completamento dell'attività. Infine i gate permettono di specificare condizioni di abilitazione e regole di completamento. Il modello composto è ottenuto seguendo l'approccio modulare e composizionale DARep [CDM17,CDM21] che estende Möbius con un nuovo operatore D (basato su script Perl che modificano i file xml generati da Möbius) per la replicazione indicizzata di uno o più modelli atomici "template". Un template rappresenta un componente generico del sistema modellato in cui possono essere definite variabili di stato (SV) "dependency-aware", cioè SV che sono condivise solo tra alcune istanze del template in base ad una specifica topologia associata a ciascuna di esse (a differenza di quelle "common" o "local" che sono condivise tra tutte le istanze o solo locali a ciascuna di essere, rispettivamente). Figure 3.13 è il template di SAN atomica che rappresenta un generico generatore distribuito (DG). the generation of active and reactive power (gate WeatherChange and activity WPChange), the generation forecast and error (gates isWPset and ForecastError, activities WP NextSchedT and WPFore- castChange), the occurrence of failures and the recovery actions (at bottom and top right of the SAN ). Figura 6.3 è il template di SAN atomica (con una sola istanza) che rappresenta i cambiamenti dello stato elettrico dell'infrastruttura EI (mediante la risoluzione delle equazioni di flusso di potenza) e la politica di controllo della tensione elettrica (tramite risoluzione di un problema di ottimizzazione) come descritta in Figura 2, condividendo posti (cioè SV) con tutte le altre istanze di template SAN. In dettaglio, i posti P, Q, V, Delta, F (flusso di potenza sulle linee), I (flusso di corrente sulle linee) rappresentano le grandezze elettriche di EI e sono SV condivise tra tutti i l'attività ScheduledVoltageCTRL rappresenta gli intervalli di tempo tra successivi inteventi del sistema di controllo del voltaggo (MVGC o LVGC, a seconda del livello MV o LV rappresentato dal modello). it shares places with all the other SAN template instances and it is responsible for the PFEs solution and the optimization problem. • ESTATE SAN, depicted in Figure 6.3, is responsible for the EI state estimation and the voltage control policy formalized by Algorithm 1. The DARep approach replicates only once ESTATE SAN, producing ESTATESANSANDAREP0 depicted in Figure 6.4. Very briefly, SANs are a variant of Stochastic Petri Nets (SPN) with a graphical representation consisting of places, timed and instantaneous activities, and input and output gates. Activities are equivalent to transitions in SPN. The amount of time to complete a timed activity may be exponentially or nonexponentially distrib- uted. Cases can be associated to activities (represented graphically as circles on the right side of an activity) and permited to model uncertainty upon completion of an activity. The use of gates permits a greater flexibility in specifying enabling conditions and completion rules than simple SPN. The Mo ̈bius modeling framework and its supporting tool Mo ̈bius [3] are briefly recalled in the following. Our models are defined using the SAN formalism [28], a stochastic extension of Petri nets based on the following primitives: plain and extended places (blue and orange circles) represent SVs, timed and instantaneous activities (hollow and solid vertical bars) with linked input and output gates (triangles pointing left or right) represent actions. Extended places represent complex data types (like int, float, double, structures and arrays). Input gates control when an activity is enabled. The delay between enabling and completing of timed activities is a generally distributed random variable, whereas enabling and completing of instantaneous activities take place at the same time. SVs changes occur when an activity completes, as defined by the input and output gates. The SAN primitives are defined by C++ statements, supporting external C++ data structures and the linking to external C++ libraries. In Mo ̈bius, the Join and Rep state-sharing compositional operators [28] are supported at level of AFI [23, 3] as already described in Section 4. The auxiliary functions Index() and Deps(), and the operator D are implemented through a Perl program [34, 20] which manipulates the xml files describing the models defined in M ̈obius.