09/04/04. Michele Sonnessa, dottorando di ricerca.



Documenti analoghi
Indice generale. OOA Analisi Orientata agli Oggetti. Introduzione. Analisi

Capitolo 13: L offerta dell impresa e il surplus del produttore

Automazione Industriale (scheduling+mms) scheduling+mms.

TECNICHE DI SIMULAZIONE

Tecniche di Simulazione: Introduzione. N. Del Buono:

Principi di Economia - Macroeconomia Esercitazione 3 Risparmio, Spesa e Fluttuazioni di breve periodo Soluzioni

Sommario. Definizione di informatica. Definizione di un calcolatore come esecutore. Gli algoritmi.

COME SVILUPPARE UN EFFICACE PIANO DI INTERNET MARKETING

Il modello generale di commercio internazionale

PIL : produzione e reddito

Il mercato di monopolio

Soluzione dell esercizio del 2 Febbraio 2004

Aspettative, Produzione e Politica Economica

Capitolo V. I mercati dei beni e i mercati finanziari: il modello IS-LM

Risparmio, investimenti e sistema finanziario

5 Risparmio e investimento nel lungo periodo

GESTIONE DELLA CAPACITA

Analisi e diagramma di Pareto

1. Distribuzioni campionarie

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

Lezione 23 Legge di Walras

Capitolo Terzo Valore attuale e costo opportunità del capitale

La teoria dell offerta

Fasi di creazione di un programma

Come visto precedentemente l equazione integro differenziale rappresentativa dell equilibrio elettrico di un circuito RLC è la seguente: 1 = (1)

Corso di. Analisi e contabilità dei costi

Moneta e Tasso di cambio

Capitolo 26: Il mercato del lavoro

Diventa fondamentale che si verifichi una vera e propria rivoluzione copernicana, al fine di porre al centro il cliente e la sua piena soddisfazione.

CAPITOLO 10 I SINDACATI

13. Campi vettoriali

Il concetto di valore medio in generale

Area Marketing. Approfondimento

2. Leggi finanziarie di capitalizzazione

Lezione 1 Introduzione

LE FUNZIONI A DUE VARIABILI

DOMANDE a risposta multipla (ogni risposta esatta riceve una valutazione di due; non sono previste penalizzazioni in caso di risposte non corrette)

Indice di rischio globale

Calcolo del Valore Attuale Netto (VAN)

Lezione 3: Introduzione all analisi e valutazione delle azioni. Analisi degli Investimenti 2014/15 Lorenzo Salieri

Appunti sulla Macchina di Turing. Macchina di Turing

1. Definizione di budget e collocazione nel processo di programmazione e controllo

La gestione aziendale, il reddito e il patrimonio

Lezione 8. La macchina universale

professoressa: SPALLINI

MICROECONOMIA La teoria del consumo: Alcuni Arricchimenti. Enrico Saltari Università di Roma La Sapienza

FONDAMENTI di INFORMATICA L. Mezzalira

Esponenziali elogaritmi

Sistemi Informativi e Sistemi ERP

Scheduling della CPU. Sistemi multiprocessori e real time Metodi di valutazione Esempi: Solaris 2 Windows 2000 Linux

Dipartimento di Economia Aziendale e Studi Giusprivatistici. Università degli Studi di Bari Aldo Moro. Corso di Macroeconomia 2014

Marketing Vincente

Siamo così arrivati all aritmetica modulare, ma anche a individuare alcuni aspetti di come funziona l aritmetica del calcolatore come vedremo.

COSA ACCADE IN CASO DI VERSAMENTO CONTRIBUTIVO IN UN FONDO PENSIONE COMPLEMENTARE. Informazioni di approfondimento

IL SISTEMA INFORMATIVO

Il modello generale di commercio internazionale

rilascio del Prototipo Gestione SAL cantieri e subappalti. 3 mesi 4-8 mesi 20gg 90% Controllo di Gestione Avanzato del 2 mesi 6-10 mesi 15gg 90%

Indice. pagina 2 di 10

Il mercato mobiliare

Fondamenti e didattica di Matematica Finanziaria

SysAround S.r.l. L'efficacia delle vendite è l elemento centrale per favorire la crescita complessiva dell azienda.

IL MARKETING E QUELLA FUNZIONE D IMPRESA CHE:

03. Il Modello Gestionale per Processi

Capitolo 25: Lo scambio nel mercato delle assicurazioni

Technical Document Release Version 1.0. Product Sheet. MediaSpot. Creazione e gestione palinsesto pubblicitario

Scheda. Il CRM per la Gestione del Marketing. Accesso in tempo reale alle Informazioni di rilievo

Object Oriented Programming

Corso di Informatica

PRESENTARE UN IDEA PROGETTUALE

PowerSchedo. Un sistema di supporto alla decisione nel settore dell'oil&gas. For further information:

Esercitazione 23 maggio 2016

APPUNTI DI MATEMATICA LE FRAZIONI ALGEBRICHE ALESSANDRO BOCCONI

Concetti di base di ingegneria del software

La Metodologia adottata nel Corso

L ORGANIZZAZIONE AZIENDALE

Inflazione e Produzione. In questa lezione cercheremo di rispondere a domande come queste:

Introduzione alla Simulazione Numerica

Valutazione degli investimenti aziendali

DIMENSIONI CRITERI INDICATORI

Perché si fanno previsioni?

ECONOMIA CLASSE IV prof.ssa Midolo L ASPETTO ECONOMICO DELLA GESTIONE. (lezione della prof.ssa Edi Dal Farra)

Economia Internazionale e Politiche Commerciali (a.a. 12/13)

REGOLAZIONE (E TASSAZIONE OTTIMALE) DI UN MONOPOLIO CON PIÙ LINEE DI PRODUZIONE

Il modello generale di commercio internazionale

. A primi passi con microsoft a.ccepss SommarIo: i S 1. aprire e chiudere microsoft access Start (o avvio) l i b tutti i pro- grammi

SCUOLA PRIMARIA SCIENZE NATURALI E SPERIMENTALI. Competenza: 1. Comunicazione efficace Indicatore: 1.1 Comprensione

GESTIONE CONTRATTI. Contratti clienti e contratti fornitori

Progettaz. e sviluppo Data Base

STORE MANAGER.. LE COMPETENZE CARATTERISTICHE E I BISOGNI DI FORMAZIONE

Temi speciali di bilancio

Contabilità generale e contabilità analitica

LO SVILUPPO DELLE COMPETENZE PER UNA FORZA VENDITA VINCENTE

Il sistema monetario

Epoca k Rata Rk Capitale Ck interessi Ik residuo Dk Ek 0 S 0 1 C1 Ik=i*S Dk=S-C1. n 0 S

Pro e contro delle RNA

RISPARMIO, INVESTIMENTO E SISTEMA FINANZIARIO

Matematica generale CTF

IL FONDO OGGI E DOMANI

uadro Soluzioni software per L archiviazione elettronica dei documenti Gestione Aziendale Fa quadrato attorno alla tua azienda

Interesse, sconto, ratei e risconti

Transcript:

TRACCIA 1.1. I livelli della simulazione per l impresa 1 : simulazione fondata sulla dinamica dei sistemi, simulazione dei processi ad eventi discreti e simulazione ad agenti. Tra i diversi mondi della simulazione esistono discriminanti metodologiche quali la riproduzione del tempo, il livello di realismo, il punto di osservazione dei fenomeni. Le differenze sono ovviamente motivate da differenti obiettivi: frequentemente però sono dovute alle caratteristiche degli strumenti informatici disponibili e possono anche corrispondere a simbologie differenti per rappresentare analoghe realtà. Ciò a causa delle diverse culture scientifiche e della intrinseca multidisciplinarità della materia. Nel confronto è fondamentale trattare il tema della rappresentazione dei modelli, che spesso coincide con la rappresentazione formale della conoscenza. In quanto riproduzioni della realtà, i modelli di simulazione devono essere dotati di autonoma capacità comunicativa (la rappresentazione UML, il flusso dei processi, la simbologia della system dynamics). 1 Michele Sonnessa, dottorando di ricerca. 1

Introduzione Premessa, che sarà riassorbita in altri capitoli nell edizione a libro. La simulazione è una metodologia di analisi sperimentale dei sistemi dinamici ed in particolare dei sistemi dinamici complessi. Prima di approfondire la trattazione sulle metodologie di simulazione, è importante chiarire che cosa si intende per sistema dinamico complesso. Il termine sistema deriva dal greco sun-istemi, che significa stare insieme. Si riferisce ad un insieme di entità che, pur essendo individualmente distinte, interagiscono attraverso relazioni di interdipendenza o di connessione reciproca (Forrester 1961). Si fa riferimento ai sistemi dinamici, ovvero caratterizzati dall'evoluzione nel tempo. L'attenzione non è posta soltanto sull'analisi del sistema nel suo stato di equilibrio, ma si concentra sul percorso attraverso cui si modifica nel tempo. Tecnicamente, la dinamica di un sistema si definisce come la successione dei suoi stati nel tempo, dove per stato del sistema si intende un insieme di grandezze misurabili e considerate rilevanti per l'osservatore (Bertuglia et al. 2003). L'ulteriore attributo è la complessità. Un sistema complesso ha caratteristiche proprie non ottenibili attraverso la semplice somma delle parti che lo costituiscono. In altre parole, la rete di relazioni tra le entità produce effetti non-lineari che non si possono spiegare studiando ogni componente separatamente (Von Bertalanffy 1969). Per comprendere meglio tale concetto è utile approfondire il concetto di non-linearità da un punto di vista matematico. I modelli analitici dei sistemi dinamici Nella matematica si è sviluppato un formalismo specifico per la descrizione dei processi dinamici: le equazioni differenziali, le quali sono in grado di descrivere la traiettoria evolutiva del sistema in funzione del tempo. Infatti un'equazione differenziale definisce una relazione tra una funzione e le sue derivate, in modo tale da descrivere un fenomeno il cui tasso di variazione dipende dal valore corrente della sistema. Le equazioni differenziali si dicono lineari quando la funzione incognita e le sue derivate compaiono sommate tra loro. Per questa ragione, la soluzione generale che descrive la dinamica di un modello lineare può essere ottenuta trattando la funzione come scomponibile in parti, che evolvono individualmente. Quando le incognite sono tra loro dipendenti il modello si dice non lineare e la sua soluzione non può normalmente essere ricavata attraverso la scomposizione del problema. Il formalismo delle equazioni differenziali è assai più idoneo a trattare problemi lineari, dato che la non-linearità comporta frequentemente l'impossibilità di trovare soluzioni analitiche. A tale proposito in Bertuglia et al. (2003) si fa notare che: I modelli dinamici lineari sono in grado sia di fornire soluzioni stabili, sia di prevedere situazioni di instabilità, ma le soluzioni di tali modelli si riducono soltanto a quattro tipi molto generali [...]. Essi possono dar conto dei cambiamenti a breve o medio termine, ma non riescono a racchiudere in sé tutta la ricchezza dei possibili sviluppi a lungo termine, tanto nell'ambito delle scienze naturali, quanto, e a maggior ragione, date le maggiori difficoltà concettuali che si presentano alla modellizzazione, in quello delle scienze sociali. La simulazione dei sistemi dinamici La presenza di non-linearità, caratteristica dominante nei sistemi complessi, induce ad adottare la simulazione come interessante alternativa ai modelli analitici nello studio dei sistemi dinamici complessi. Con un modello di simulazione si è infatti capaci di rappresentare il sistema tout court, studiandone il comportamento aggregato. 2

La simulazione è una metodologia che fa parte della cosiddetta matematica sperimentale. Si tratta di una rappresentazione del sistema, realizzata attraverso un linguaggio informatico, che consente di utilizzare il calcolatore per computarne numericamente il comportamento. Tale metodologia fornisce una valida alternativa di analisi, come si evince in Terna (2003): I modelli di simulazione realizzati nel computer rappresentano quindi una significativa risposta alle esigenze della flessibilità e adattabilità descrittiva, da un lato, e della possibilità di computazione, dall altro. Un codice informatico è insieme dotato di requisiti formali, di adattabilità e flessibilità e, ovviamente, di calcolabilità. L'adattabilità della simulazione si riferisce al fatto che attraverso i linguaggi di programmazione è possibile definire le proprietà del sistema nei minimi dettagli, determinandone il comportamento in modo dinamico, sulla base del suo stato corrente. I metodi analitici impongono spesso l'adozione di descrizioni generalizzate del comportamento del modello, a meno di non costruire complicati sistemi di equazioni differenziali, capaci di descrivere comportamenti diversi per intervalli diversi delle variabili di stato. Attraverso i costrutti condizionali, tipici dei linguaggi di programmazione (if then else), è possibile introdurre con semplicità tali comportamenti condizionali nei modelli di simulazione. A dispetto di questi vantaggi, la simulazione implica difficoltà nella generalizzazione dei risultati. Estrarre leggi di carattere generale da un modello di simulazione è certamente più arduo rispetto a farlo partendo da un modello analitico. Infatti, nel caso in cui si riesca a trovare la soluzione del sistema di equazioni, si ha piena informazione sul sistema rappresentato. La simulazione, invece, è in grado soltanto di fornire indicazioni su singole istanze del possibile percorso futuro del modello, spesso determinate dai parametri iniziali. Tale metodologia non promette, dunque, di fornire la stessa qualità e contenuto informativo di una soluzione analitica, ma certamente consente di analizzare e formalizzare sistemi complessi, altrimenti intrattabili. Potendo descrivere il sistema in modo dettagliato, la simulazione consente di rilassare molte ipotesi forti che si osservano di frequente nei modelli analitici. Inoltre, la simulazione è molto utile per effettuare analisi di tipo what..if, che consentono di quantificare l effetto delle variazioni applicate ad un sistema, attraverso la formulazione di scenari futuri. Un'analisi di questo tipo consente di pianificare con il computer le ipotesi di intervento sul sistema reale, con risparmio di costi e di rischi. Rappresentazione del tempo I sistemi dinamici possono essere distinti in continui e discreti. Un sistema discreto è caratterizzato da variabili di stato che cambiano soltanto in un insieme discreto di istanti di tempo. Al contrario, un sistema continuo presenta variabili di stato che cambiano continuamente nel tempo (Banks et al. 2003). Tale definizione è utile soltanto ai fini della simulazione, dato che ogni realtà esiste in un ambiente continuo. La distinzione è funzionale alla scelta degli elementi che si vuole osservare e del tipo di tecnica di simulazione da utilizzare. Dato che il calcolatori sono macchine discrete, non capaci di rappresentare i numeri reali (ma soltanto razionali), anche in presenza di modelli continui, l'insieme dei risultati della simulazione è una collezione discreta di fotografie del sistema. Nel caso della simulazione di sistemi continui, il simulatore utilizza una strategia di calcolo simile a quella proposta dal metodo di integrazione di Eulero. Lo stato del sistema è calcolato ad intervalli di tempo regolare, considerando costante il valore delle variabili di stato negli intervalli tra le rilevazioni. Come per il metodo di Eulero, la scelta di un opportuno intervallo di tempo nella iterazione della simulazione numerica è fondamentale per garantire un'accettabile approssimazione dei risultati. 3

Le più diffuse tecniche di simulazione Di seguito presentiamo le tre più diffuse tecniche di simulazione numerica basata su calcolatore: la simulazione ad eventi discreti o simulazione di processo; la dinamica dei sistemi (system dynamics); la simulazione basata su agenti (agent-based modelling). Ognuna di esse è caratterizzata da una specifico formalismo per la rappresentazione delle entità, delle relazioni e del tempo. Allo scopo di semplificare la trattazione e di fornire un contributo applicativo al lettore si utilizzeranno le diverse metodologie per affrontare problemi relativi alla gestione di un ipotetica azienda Alpha, produttrice di servizi. 4

Simulazione di processo La simulazione ad eventi discreti (o simulazione di processo) è fondata su un meccanismo di ordinamento dinamico degli eventi nel tempo. Il sistema evolve attraverso una successione di salti temporali, in corrispondenza dei quali si verifica un evento che modifica lo stato del sistema. Taluni eventi sono programmati all inizio della simulazione, altri sono generati durante l esecuzione. L esperimento simulato consiste nella riproduzione sequenziale dei cambiamenti di stato. Si pensi al pagamento di una bolletta presso un ufficio postale. Il sistema è ben rappresentabile come una sequenza di eventi ed è caratterizzato da interazioni tra i suoi elementi: i clienti e gli impiegati. Volendo studiare il comportamento di tale sistema, ci si può dotare di un generatore stocastico, in grado di generare eventi futuri denominati arrivo di un cliente. Essi possono essere programmati tutti a priori poiché sono eventi indipendenti tra loro. Si supponga che il generatore casuale determini l'arrivo dei clienti secondo la sequenza in figura 1. Si potrebbe pensare che l evoluzione del sistema sia già completamente descritta. In realtà non è nota la durata del servizio che ciascun cliente richiederà e dunque non è nota l evoluzione della coda. Arrivo cliente Arrivo cliente Arrivo cliente 0.1 1.3 3.2 figura 1 Stato del sistema al tempo 0 Quando il sistema si troverà al tempo 0.1, conterrà un cliente e un nuovo evento di fine servizio sarà generato. Supponendo che il cliente 1 richieda un tempo di servizio di 2.4 minuti, lo stato del sistema sarà modificato come in figura 2. Arrivo cliente Arrivo cliente Fine servizio Arrivo cliente 0.1 1.3 2.5 3.2 figura 2 Stato del sistema al tempo 0.1 tempo tempo Siamo ora in grado di affermare che tra il tempo 1.3 e 2.5 ci sarà un cliente in coda, ma nient'altro può essere detto fino al tempo 2.5, in cui il secondo cliente richiederà il prossimo servizio. Questa metodologia di simulazione è molto utile per analizzare il tasso di utilizzazione delle risorse (i servitori o le unità produttive) e per evidenziare gli eventuali punti critici (colli di bottiglia) nel processo. Una simulazione di processo può essere descritta graficamente, con molta efficacia. I processi sono infatti sequenze di attività, descritte da simboli grafici, legate da relazioni sequenziali (le linee che li congiungono). Si veda l esempio in figura 3, che mostra un semplice schema di processo. All interno della catena descritta dal processo, fluiscono entità dette token 2. Il token rappresenta un segnaposto che si muove nel processo, occupando le code o le unità di servizio. Oltre al token possono fluire anche le informazioni. Facendo riferimento al processo in figura 3, si può osservare che le linee singole che uniscono i blocchi rappresentano i percorsi sui quali fluiscono le informazioni, mentre le linee doppie sono i percorsi lungo i quali si spostano i token. Ad ogni token possono essere associate variabili di stato che sono normalmente manipolate dalle unità. Tali attributi possono, per esempio, servire all'unità che compie scelte di instradamento per determinare il percorso del token. 2 Token è un sostantivo inglese che significa gettone. 5

Grazie alla rappresentazione grafica ed alla ricca libreria di simboli (building block), disponibili in un simulatore di processo, è possibile costruire modelli con un ridotto uso della programmazione. L adozione di blocchi programmabili consente, attraverso la definizione di opportune librerie di oggetti, di annegare gran parte della logica di funzionamento nei blocchi e di realizzare modelli sofisticati con relativa semplicità e con chiarezza espressiva. Tale logica di progettazione è simile al metodo con il quale si disegnano i circuiti elettronici. Impiegando i circuiti integrati, capaci di svolgere funzioni complesse, si può costruire un circuito complicato adottando uno schema decisamente semplice. Le funzionalità tipiche In commercio esistono diversi software di simulazione ad eventi discreti dotati di caratteristiche differenti, sebbene in tutti siano solitamente disponibili alcune funzioni (o librerie di funzioni) fondamentali. Di seguito se ne citano alcune tra le più comuni. Funzioni di gestione delle code: o FIFO (first in first out) queue: una classica coda sequenziale. o LIFO (last in first out) queue, anche detta pila: estrae dalla coda sempre l'ultimo elemento entrato. o Reneging queue: espelle gli elementi in coda dopo un determinato periodo di tempo. È utilizzata per simulare la disponibilità massima di un cliente ad attendere in coda. o Priority queue: ordina gli elementi non in base all'ordine con cui arrivano ma sulla base di un attributo di priorità. o Preempt queue and activity: una coda che gestisce le priorità ed è collegata ad attività che possono essere interrotte. Quando un elemento con priorità più elevata di tutti gli elementi nel sistema entra in coda, l'attività in corso è interrotta, l'elemento (token) in fase di lavorazione rientra nella coda e il nuovo arrivato è immediatamente processato dall'unità di servizio (o servitore ). Funzioni di raggruppamento: o o Batch: consente il raggruppamento di entità per effettuare talune lavorazioni che si applicano a gruppi di oggetti. Ad esempio, la cottura delle ceramiche richiede che un numero minimo di pezzi sia raccolto nel forno, prima di essere effettuata. Unbatch: dopo che le unità, che avevano richiesto una preventiva operazione di batch, terminano l'attività, è necessario inserire nuovamente gli oggetti nel sistema in modo indipendente. Questa operazione è detta unbatch. Operazioni di biforcazione parallela dei processi: o Split: nel caso un token debba compiere parallelamente due o più percorsi nel processo è necessario clonarlo, in modo che possa fluire in percorsi diversi. Si pensi, ad esempio, ad una pratica di concessione fidi, nella quale in un preciso momento del flusso sia necessario inviare alcuni documenti alla firma del direttore ed alcuni documenti alla segreteria. Queste due operazioni sono eseguite in parallelo, pur facendo riferimento alla stessa pratica. o Join: esegue la riunificazione di processi che sono stati precedentemente biforcati. Nell'esempio precedente, i due token saranno alla fine ricongiunti nell'unico elemento che rappresenta la pratica del cliente. Gestione delle risorse umane e tecniche: prevede la definizione dei turni di servizio ed è utile a condizionare l'esecuzione di un'attività alla disponibilità contemporanea di una o più risorse. Se un macchinario necessita di un tecnico per eseguire una determinata attività, il servizio non è erogato fino a che entrambe le risorse (tecnico e macchina) non siano contemporaneamente disponibili. Funzioni di salto condizionale e smistamento dei token. Chiaramente, un processo può prevedere diversi percorsi possibili e, dunque, è necessario definire elementi con capacità decisionale. Normalmente la decisione avviene sulla base degli attributi di un token oppure 6

Un esempio sulla base di variabili di stato del sistema (ad esempio, il carico di lavoro delle unità a valle del processo). Si propone un esempio molto semplificato di uso della simulazione per il dimensionamento ottimo di un sistema di produzione. Si immagini che l azienda Alpha, dopo una campagna di marketing, sia in grado di stimare la quantità e la frequenza di arrivo dei clienti. La società ha la possibilità di predisporre fino a sei unità produttive e si pone il problema di decidere quante attivarne per massimizzare il profitto. In questo esempio si ipotizza che la frequenza di interarrivo tra un cliente ed il successivo sia generato secondo un processo di Poisson 3, ovvero sulla base di una distribuzione di probabilità di tipo esponenziale negativa con media pari a 20 minuti. figura 3 Rappresentazione del processo di servizio (Extend) Nella figura 3 si può osservare la rappresentazione dello schema di processo relativo all attività di servizio, realizzato con un software commerciale di nome Extend 4. Dal modello si evince che il generatore casuale immette in una coda i clienti (token). Dalla coda, i clienti possono trasferirsi nel blocco che effettua il servizio oppure possono uscire dal sistema, quando il tempo di attesa è troppo elevato (superiore ad un ora). Il software consente di definire il numero di unità produttive disponibili nel sistema ed i loro turni di servizio. La gestione dei turni di servizio è molto utile per stimare il tasso di reale utilizzo delle risorse. Si ipotizza per semplicità che la durata del servizio per ciascun cliente sia costante e duri 80 minuti. Il modello simulato è in grado di calcolare i costi ed i ricavi dell'attività e, attraverso la simulazione di differenti scenari, è in grado di fornire una stima del profitto per ciascuna configurazione. 3 Il processo stocastico basato sulla distribuzione di Poisson è molto utilizzato in simulazione, poiché dotato della interessante proprietà dell assenza di memoria. Essa rende il processo indipendente dallo stato iniziale del sistema e rappresenta molto bene i processi di interarrivo di elementi indipendenti tra loro (l arrivo di un cliente non dipende dagli altri). In termini molto semplificati, un processo di Poisson presuppone che gli arrivi siano generati da scelte totalmente indipendenti da parte dei clienti e, dunque, in qualunque momento si osservi il processo di interarrivo, non è importante conoscere cosa sia avvenuto in precedenza. Al contrario, le distribuzioni di probabilità con presenza di memoria pongono il problema di definire uno stato iniziale della simulazione opportunamente calibrato. 4 http://www.imaginethatinc.com/ 7

Nella tabella 1 si possono osservare i parametri utilizzati nel modello ed i risultati ottenuti variando il numero delle unità di servizio. Risultati Numero servitori Parametri del modello Tempo di simulazione 60 giorni Costo di esercizio per ciascuna unità 300 al giorno Prezzo per prestazione 45 Interarrivo clienti (media della funzione esponenziale negativa) 20 minuti Durata del servizio 80 minuti Turni giornalieri di servizio 8.00-20.00 # clienti non serviti % clienti non serviti Utile Tasso utilizzo risorse Numero clienti serviti 1 6010 100% 532 1605 75% 2 11141 96% 1045 1091 51% 3 13715 92% 1501 634 30% 4 11471 86% 1849 286 13% 5 2151 76% 2044 91 4% 6-11288 65% 2114 21 1% tabella 1 Parametri e risultati della simulazione In figura 4 sono presentati i grafici relativi all utile operativo generato con le diverse configurazioni. Lo scenario che consente di ottenere il maggior profitto corrisponde all impiego di 3 unità di produzione. In corrispondenza di questo parametro il numero di clienti finali serviti è 1501 e quelli non serviti 634. Il modello ci dice, cioè, che nonostante un importante quota di domanda resti inevasa (30%), il massimo utile si raggiunge proprio con questa configurazione. Per soddisfare l intera domanda sarebbero necessarie 6 unità di servizio, con un tasso di utilizzo delle risorse di circa il 65% e con un utile operativo negativo. Utile 6010,665 Plotter, Discrete Event Utile 13715,22 Plotter, Discrete Event 5245,341 11958,84 4480,017 10202,47 3714,693 8446,095 2949,37 6689,72 2184,046 4933,346 1418,722 3176,972 653,3982-111,9256 0 15 30 45 60 Time Dif f erence Product Green Black 1420,597-335,7768 0 15 30 45 60 Time Dif f erence Product Green Black Utile 3171,924 Plotter, Discrete Event Utile 0 Plotter, Discrete Event 2661,762 2151,601 1641,439 1131,278 621,1165 110,9551-399,2063-909,3678 0 15 30 45 60 Time Dif f erence Product Green Black -1612,633-3225,266-4837,9-6450,533-8063,166-9675,799-11288,43-12901,07 0 15 30 45 60 Time Dif f erence Product Green Black figura 4 Utile operativo con 4 configurazioni differenti (1, 3, 5 e 6 servitori) 8

Il modello presentato ha un scopo dimostrativo ed è assai semplificato. Se si considera, infatti, che ogni cliente entra mediamente ogni 20 minuti ed il tempo di servizio è di 80 minuti, si deduce immediatamente che per utilizzare al massimo le risorse produttive siano necessari almeno 3 servitori in parallelo. È inoltre ovvio notare che, se l impresa potesse intervenire sui prezzi, sarebbe possibile, con un loro opportuno aumento, massimizzare il profitto, saturando l intera domanda. Nonostante la semplicità, si possono intuire alcuni pregi della simulazione: la scalabilità e l'espressività. Il termine scalabilità associato alla simulazione si riferisce alla proprietà in base alla quale la complicazione del modello, attraverso l'aumento del numero di parametri o del numero di elementi, può procedere per gradi successivi e raramente implica la sua riprogettazione. Al contrario, la complicazione di un modello analitico richiede spesso una completa revisione e difficoltà sempre crescenti di calcolo. La rappresentazione grafica come quella in figura 4 ha il vantaggio di trasmettere intuitivamente la logica generale di funzionamento, in modo più immediato rispetto ad un modello ad equazioni. Nel caso dell'esempio appena mostrato, il modello è stato realizzato utilizzando blocchi grafici, dotati di funzionalità specifiche. È importante però far notare che il ricorso ad un linguaggio di programmazione è frequente, in particolare quando la libreria di oggetti non contiene una funzione adatta a risolvere una particolare esigenza dell'utente. In tal caso è necessario creare il blocco, programmandone le funzionalità. Ritornando alla metafora dei circuiti elettronici, si può osservare come la logica di un singolo chip possa essere assai più sofisticata di quella del circuito in cui esso è inserito. Fortunatamente, la gran parte dei processi sequenziali presenta problematiche ricorrenti che possono essere rappresentate dai blocchi funzionali già disponibili. 9

System dynamics La dinamica dei sistemi, introdotta da Jay Forrester nel 1961 presso il MIT (Massachusetts Institute of Technology), trae origine dallo studio dei sistemi di controllo. Tra le tecniche di simulazione è quella che più si avvicina al formalismo matematico, in quanto si basa su equazioni differenziali. Come anticipato in precedenza, è bene ricordare che, sebbene un modello differenziale sia basato su equazioni che trattano il tempo nel continuo, la sua simulazione informatica implica sempre una trattazione discreta. Qualunque tecnica di simulazione al computer deve coesistere con due limiti fisici: la rappresentazione discreta delle grandezze numeriche (e quindi anche del tempo); lo scarso parallelismo di esecuzione: gli eventi che nella realtà percepiamo come simultanei, nel calcolatore non possono essere rappresentati. Il simulatore compie sempre una scelta (casuale o ben determinata) sulla sequenza di azioni o operazioni da compiere. La dinamica dei sistemi si basa su una prospettiva piuttosto astratta, utile a rappresentare le relazioni di causa ed effetto nei fenomeni dinamici. Rispetto alle altre tecniche di simulazione prevede un ridotto utilizzo dei linguaggi di programmazione, consentendo estrema rapidità nella progettazione dei modelli. Le variabili Nel formalismo della dinamica dei sistemi sono previste tre tipologie di variabili: le variabili di livello (anche dette stock), le variabili di flusso, le variabili ausiliarie. Le variabili di livello si riferiscono allo stock o dotazione di un bene ad un determinato istante t, agendo come contenitori che si riempiono e si svuotano durante l evoluzione del sistema. Le variabili di flusso rappresentano il tasso con il quale una variabile di livello si modifica nel tempo. Il tasso netto di variazione di uno stock è la somma di tutti i flussi in ingresso meno la somma di tutti i flussi in uscita. Una variabile di livello accumula tale tasso netto di variazione, ad ogni intervallo di tempo. Da un punto di vista matematico, gli stock integrano i propri flussi netti, mentre il flusso netto rappresenta la derivata dello stock. Nella system dynamics, le variabili flusso sono rappresentate da due triangoli entrambi rivolti verso la doppia linea che rappresenta il verso del flusso. Le variabili livello sono invece rappresentate da rettangoli. Si può osservare un esempio in figura 5, nel quale la variabile Stock di magazzino rappresenta il livello di scorta in ogni istante t, le variabili Acquisti e Resi rappresentano flussi istantanei di merce in ingresso nel magazzino e le variabili Vendite e Merce scaduta i flussi in uscita dal magazzino. Ovviamente il tasso rappresentato dalle variabili flusso può essere espresso come un valore costante, una funzione stocastica o può dipendere da altre variabili del modello. 10

Resi Acquisti Stock di magazzino Vendite Merce scaduta figura 5 Variabili di flusso e di livello Un modello come quello appena descritto è banale e non può fornire informazioni interessanti. Introducendo le variabili ausiliarie, il formalismo diventa più potente. Nella figura 6 si mostra come la variabile ausiliaria Probabilità di ripensamento del cliente possa determinare dinamicamente il flusso dei resi, sulla base della merce venduta, come quota di essa. L equazione sottostante alla variabile Resi diventa, pertanto, la seguente Resi = Probabilità di ripensamento * Vendite. I ritardi Il flusso degli acquisti dipende da un obiettivo di livello del magazzino e dal livello corrente. La differenza tra i due valori rappresenta il flusso istantaneo. La variabile Acquisti è determinata dalla seguente relazione Acquisti = DELAY FIXED(Livello ideale di stock Stock di magazzino, 1, 0) 5. In questo caso, a causa della lunga durata tra il momento dell ordine e l effettiva consegna della merce, è stato inserito un ritardo temporale di un intervallo (la doppia barra posta sulla freccia che congiunge lo stock con gli acquisti). In base al ritardo, il flusso attuale di merce dipende dal livello passato del magazzino, che attualmente potrebbe essere mutato a causa di iterazioni dovute ad altri flussi (vendite, resi, merce scaduta), determinando oscillazioni nel sistema. Livello ideale di stock Resi Probabilità di ripensamento del cliente Acquisti Stock di magazzino Vendite Merce scaduta figura 6 Le variabili ausiliarie ed i ritardi temporali I ritardi temporali sono determinanti nella dinamica dei sistemi. Se non ci fosse la possibilità di gestire il ritardo decisionale ed il ritardo dovuto al movimento delle merci, le potenzialità dello strumento sarebbero assai limitate. I ritardi si dividono in due categorie: 5 Il parametro 1 rappresenta il tempo di ritardo e 0 è il valore iniziale dello stock. 11

Il ritardo materiale posticipa il flusso della merce in uscita da una variabile livello, garantendo che il totale di ciò che entra nello stock è uguale al totale di ciò che uscirà. I ritardi materiali si suddividono in due tipi: il ritardo di pipeline applica un'attesa a ciascun lotto di merce in ingresso nello stock. I lotti, o gruppi di oggetti, che entrano in un istante t escono dallo stock nella stessa quantità in cui sono entrati, dopo un certo tempo; i ritardi di ordine n distribuiscono nel tempo l'effetto di un impulso in ingresso. Dato un lotto in ingresso, l'uscita del materiale sarà distribuita nel tempo con una maggiore concentrazione in corrispondenza della distanza espressa dall'ordine del ritardo. Il ritardo di informazione non garantisce che la somma delle informazioni in input sia pari a quella in output. Nel processo cognitivo, infatti, le informazioni più recenti possono sovrapporsi a quelle percepite in precedenza. Esistono due tipi di ritardi informativi: il ritardo con tempo variabile ritarda le informazioni di un tempo pari ad un parametro dinamico. Il ritardo può variare nel tempo, determinando la potenziale sovrapposizione di informazioni giunte in tempi diversi; il ritardo smooth applica una funzione di smoothing per determinare il ritardo delle informazioni in ingresso. Serve a rappresentare quei fenomeni per i quali la reazione ad una cambiamento avviene solo se questo perdura nel tempo. I modelli di causa-effetto La system dynamics prevede un ulteriore simbologia grafica che consente di rappresentare i circuiti di retroazione (o feedback) positivi e negativi. Il circuito di retroazione pone in evidenza la presenza di relazioni che auto-alimentano un fenomeno nel tempo (feedback positivo) oppure che pongono un freno alla crescita del fenomeno descritto, riportando autonomamente il sistema verso l equilibrio naturale (feedback negativo). I circuiti di retroazione emergono dalla progettazione del modello. La loro esplicitazione, come in figura 7, è utile a porre in evidenza un fenomeno che condiziona il comportamento del sistema simulato. Dividendi percepiti + + Motivazione dei dipendenti R + Produttività dei dipendenti Domanda + Prezzo di mercato - B + - Differnenza tra valore nominale e reale Valore reale Reddito prodotto + Offerta + figura 7 Esempio di circuito di feedback positivo e negativo Nel circuito positivo in figura 7 si può facilmente comprendere come la catena la degli effetti si auto-alimenti. La produttività dei dipendenti ha un effetto positivo sul reddito, il quale può accrescere l'entità delle retribuzioni, che a loro volta incrementano la motivazione dei dipendenti. I collaboratori più motivati accrescono certamente la propria produttività. Tale circolo virtuoso produce un effetto di crescita incontrollata o esponenziale. Al contrario, nello schema di destra, si osserva che sebbene l'aumento del prezzo di mercato di un bene, causato dall'aumento della domanda, accresca il differenziale tra valore reale del bene stesso e suo valore nominale e sebbene tale effetto provochi l'aumento dell'offerta da parte dei produttori, ciò produce una spinta alla diminuzione dei prezzi a causa della maggiore concorrenza. Questo circuito ha un implicito sistema di bilanciamento che riporta il sistema, anche a seguito di impulsi esogeni, ad un prezzo di equilibrio, che tende ad annullare il differenziale tra valore reale e valore nominale. 12

I modelli di causa-effetto possono essere utilizzati in modo diretto, per descrivere un sistema dal mero punto di vista dei rapporti di causa ed effetto. Spesso sono ricavati dall'analisi a posteriori di un modello, osservando i segni delle relazioni che legano le variabili. In questo caso, la loro evidenziazione è utile a suggerire all'utente le ragioni dei fenomeni emersi dalla simulazione e, soprattutto, a suggerire come intervenire sul processo per modificarne il comportamento. Nel caso si evidenzi un feedback positivo e si desideri frenare la crescita inarrestabile delle variabili livello è necessario introdurre fenomeni che agiscano con segno opposto e bilanciante. Un esempio Proponiamo un modello utile a stimare una corretta politica in termini di investimento in marketing. Ritornando all esempio della società Alpha, dopo averne stimato la massima produttività in un contesto stabile, privo di variazione nella domanda, ci si pone il problema di decidere la giusta quota di ricavi da destinare alle politiche di marketing. Dall analisi puntuale del processo di arrivo e di servizio dei clienti, si sposta l attenzione ad un problema strategico di crescita dell impresa. La rappresentazione del tempo fa ora riferimento ad un orizzonte più ampio. Il sistema evolve nell arco di mesi e non se ne rappresenta più la dinamica quotidiana. Il modello, rappresentato in figura 8, è costituito da due fondamentali variabili di livello che interagiscono reciprocamente: il numero di clienti acquisiti, che periodicamente si servono presso la società, ed il valore corrente del bilancio. Il modello è stato realizzato con un software commerciale di nome VenSim 6, del quale è anche disponibile una versione gratuita per l apprendimento. Sebbene a prima vista lo schema possa sembrare confuso, un analisi delle relazioni per ciascuna variabile ne rende assai semplice l interpretazione. Si considera un mercato potenziale (di 30.000 unità) dal quale, attraverso il flusso Nuovi clienti, si alimenta lo stock dei clienti della società Alpha. Il flusso dipende dalla spesa per la campagna di marketing, dal costo stimato per ciascun contatto pubblicitario e da una funzione detta Efficacia del marketing. Tale funzione, che in system dynamics è chiamata funzione di lookup, rappresenta una relazione non lineare tra l'ampiezza del mercato potenziale e l'efficacia della pubblicità. La funzione è stata introdotta per rappresentare il fatto che una parte del mercato oppone maggiore resistenza alla sollecitazione pubblicitaria. Dunque, al decrescere del livello di clienti potenziali, decresce il tasso di successo della pubblicità. Nel frattempo lo stock di clienti si riduce di una quantità pari al numero di clienti in eccesso rispetto alla capacità produttiva (Clienti non serviti, che si ottiene dalla relazione Clienti acquisiti Clienti serviti). L ultimo elemento da considerare è il bilancio. Si tratta di una variabile livello, il cui valore iniziale è pari all investimento di capitale nel progetto. Il bilancio cresce in funzione dei ricavi, ovvero dei clienti serviti e del prezzo di servizio, decresce in funzione dei costi operativi e di quelli di investimento. 6 http://www.vensim.com 13

Investimento nel progetto Costi Bilancio Ricavi Costi fissi Quota investimento in marketing Investimento in marketing Prezzo Costo per contatto pubblicitario Efficacia del marketing Clienti serviti Nuovi clienti Clienti potenziali Clienti persi Clienti acquisiti Capacità produttiva figura 8 Modello di gestione degli investimenti (VenSim) Per semplicità, si ipotizza che una quota della liquidità disponibile ad dato un periodo sia investita in marketing. Sul valore del bilancio si effettua la scelta critica che rappresenta l obiettivo del modello: quanto destinare agli investimenti. Nella tabella 2 sono presentati i parametri utilizzati nella simulazione. Parametri del modello Tempo di simulazione 24 mesi Numero unità produttive 4 Costi operativi mensili 36000 Prezzo per prestazione 45 Capacità produttiva 1000 clienti/mese Costo contatto pubblicità 10 Investimento iniziale 50000 Clienti potenziali 30000 tabella 2Parametri della simulazione In figura 9 sono confrontate le curve dell'andamento del bilancio in corrispondenza di tre coefficienti di investimento in pubblicità: 10%, 16% e 30%. Attraverso il motore di ottimizzazione, integrato nel software, il simulatore ha indicato che il valore capace di garantire il più alto livello del bilancio è pari al 16%. Il grafico mostra che per quote inferiori l'azienda fallisce, mentre per quote superiori, ottiene risultati positivi sebbene inferiori alla quota ottima. 14

Bilancio 60 40 20 0-20 -40-60 1 2 3 4 5 6 7 8 9 10 11 12 13 30% 16% 10% -80-100 -120 Mesi figura 9 Comparazione dei risultati con politiche di marketing diverse (10%, 16% e 30%) Dalla figura 10 si osserva un interessante fenomeno. Scegliendo una quota marketing superiore al valore ottimo l'azienda si garantisce un flusso più elevato di nuovi clienti nel breve periodo, ma in condizioni di equilibrio, date le maggiori spese per la pubblicità, il suo bilancio si attesta su livelli inferiori. Nuovi clienti 1.600 1.400 1.200 Clienti 1.000 800 600 30% 16% 10% 400 200 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 Mesi figura 10 Dinamica dei clienti acquisiti con le diverse politiche di marketing (10%, 16% e 30%) 15

Clienti potenziali - + Bilancio - Nuovi clienti + + + Efficacia del marketing + Marketing figura 11 Diagramma di causa-effetto del modello Nella figura 13 si evidenzia il diagramma di causa/effetto del modello. Dall'analisi delle relazioni si giustificano i risultati: un effetto esplosivo dovuto all'impulso del marketing sulle vendite è controbilanciato dall'aumento dei costi e dalla diminuzione dell'efficacia della pubblicità. 16

Simulazione basata su agenti L agent-based modelling (ABM) è una metodologia di rappresentazione dei modelli di simulazione che si basa sul formalismo della programmazione orientata agli oggetti. La storia dei linguaggi di programmazione è stata dominata fino agli anni '90 da una tecnica detta programmazione imperativa e che si basa sul concetto di routine o funzione. Attraverso una routine è possibile organizzare sequenze di istruzioni in blocchi che agiscono come scatole nere, in grado di ricevere parametri e restituire risultati. La programmazione funzionale consente di produrre un codice ordinato e permette di definire librerie di funzioni riutilizzabili, proprio come nel caso dei blocchi utilizzati nel simulatore di processo. La programmazione ad oggetti Nei primi anni 70 Alan Kay, prendendo spunto dai sistemi biologici (Kay 1996), sviluppò, nei laboratori del PARC (Palo Alto Research Center), un rivoluzionario paradigma di programmazione: la OOP (object-oriented programming). La programmazione ad oggetti introdusse il concetto di classe come evoluzione della routine. Una classe è un contenitore di codice informatico dotato di un interfaccia pubblica, ovvero di un elenco di funzioni e variabili visibili dall esterno. Le funzioni e i dati privati sono nascosti ed utilizzabili soltanto dal codice interno alla classe, poiché utili al funzionamento dell oggetto e non interessanti per chi lo utilizza. La classe definisce una categoria concettuale, dalla quale possono essere derivate (o istanziate) uno o più esempi reali, detti oggetti. Si pensi al concetto di albero, come insieme di caratteristiche che lo rendono tale, ed alla moltitudine di esempi di albero che si possono ritrovare in natura. Quando si richiede al computer di fabbricare un oggetto appartenente ad una classe, tecnicamente il calcolatore riserva una porzione della memoria all'oggetto, che potrà così modificare il suo stato ed agire in modo indipendente da altri oggetti della stessa classe. Dall'OOP ai modelli ad agenti Questo paradigma ha dato un grande impulso allo sviluppo di applicazioni complesse ed è anche stato la fonte di ispirazione per alcuni ricercatori del Santa Fe Institute (Istituto per gli Studi sulla Complessità), i quali hanno intuito la possibilità di creare una metafora tra oggetti software ed agenti dei sistemi sociali (Minar et al. 1996). Volendo, ad esempio, realizzare un software che riproduca un sistema dinamico come un formicaio, è possibile descrivere le formiche come oggetti informatici, che assumono, nel formalismo dell ABM, il ruolo di agenti del sistema. Il punto di forza della OOP sta anche nel fatto che il codice che rappresenta una classe di oggetti è unico ma, attraverso essa, è possibile creare un infinito 7 numero di oggetti indipendenti, ognuno caratterizzato dalla propria differente esperienza. Un modello ad agenti del formicaio sarà dunque composto da alcune classi che rappresentano le diverse tipologie di formiche (allevatrici, guardiane, maschi,...), mentre la simulazione di tale modello avverrà attraverso la generazione di numerosi esemplari di agente per ciascuna classe definita. Fabbricando n agenti da una o più classi si ottengono sistemi multi-agente, nei quali le singole entità si differenziano e co-evolvono in modi diversi a seconda dei propri parametri iniziali e delle interazioni (che potremmo chiamare esperienze) avute durante l evoluzione della simulazione. Il linguaggio UML La OOP ha consentito lo sviluppo di un formalismo grafico utile a rappresentare le interfacce delle classi e le loro relazioni. Tale formalismo è detto unified modelling language (UML). 7 Ovviamente il limite è dettato dalla capacità di memoria del calcolatore. 17

Il linguaggio UML è stato progettato per rispondere alle esigenze di descrizione del codice informatico. Per tale ragione la sua utilizzazione per la descrizione dei modelli ad agenti richiede uno sforzo di adattamento. In particolare, dei numerosi schemi proposti dal paradigma UML, quelli necessari alla descrizione di un modello ABM sono due: i diagrammi di classe, i diagrammi di sequenza. I primi offrono una rappresentazione statica e gerarchica delle relazioni tra le classi e quindi tra le categorie del sistema. Il fatto che la classe formica operaia possa essere in relazione con la classe formica guardiana, non implica che tutte le formiche di queste classi, durante la simulazione, saranno realmente in relazione le une con le altre. In figura 12 si può osservare un semplice diagramma delle classi, realizzato secondo le regole definite dall'uml. Sono poste in evidenza le variabili (o proprietà) e le funzioni (o metodi) di cui ciascun oggetto di quella classe é dotato. Le funzioni (indicate con il circoletto) che ciascun oggetto espone rappresentano le azioni che è capace di compiere. Il diagramma di sequenza, di cui si può osservare un esempio in figura 13, fornisce una rappresentazione della dinamica temporale del modello. Le frecce indicano la catena di chiamate alle funzioni dei diversi oggetti, generata dal manifestarsi di un evento. Nel caso dei modelli ad agenti, il diagramma rappresenta sulla sinistra l'asse del tempo, sul quale è posta la sequenza degli eventi. I modelli ad agenti sono prevalentemente modelli continui. Ad intervalli periodici il sistema ripete una o più operazioni con una precisa sequenza. In realtò, data la flessibilità della tecnica ABM, non è esclusa la possibilità di realizzare modelli ad eventi discreti. Il paradigma modello-osservatore Finora si è affermato che i modelli ad agenti si basano sulla programmazione ad oggetti. In realtà qualunque simulazione potrebbe essere realizzata con la OOP. Ciò che caratterizza i modelli ad agenti è la distinzione tra quattro categorie di classi: Le classi di servizio sono utilizzate dal programma di simulazione per svolgere attività tecniche non prettamente inerenti alla logica del sistema simulato. Possono essere, ad esempio, usate per fare la contabilità, per definire strutture spaziali, per gestire le statistiche, ecc. L'agente è una classe che corrisponde ad un'omologa entità che si può osservare nel sistema reale. Il modello è una classe speciale che ha il compito di coordinare la simulazione. Si occupa della creazione degli oggetti a partire dalle classi, imposta i parametri della simulazione e definisce la struttura degli eventi che hanno il compito di determinare la dinamica del modello. L'osservatore è una classe che non interferisce con il modello ma si occupa di leggere lo stato delle variabili e rappresentare graficamente la simulazione all'utente. Un esempio Volendo applicare questa tecnica per fornire contributi di conoscenza al gestore della società Alpha, possiamo analizzare il comportamento dell impresa in un contesto concorrenziale. Nel modello di dinamica dei sistemi abbiamo potuto evidenziare relazioni stabili tra le variabili ed abbiamo stimato i parametri ideali per la sua crescita. Abbiamo, però, trascurato il mondo esterno, semplificando l interazione della società Alpha con i clienti, attraverso generiche campagne di marketing. È stato completamente trascurato il problema della concorrenza e, cioè, dell interazione dell azienda con un mercato in cui le risorse sono in competizione. 18

Proviamo ora ad inserire la società Alpha in un contesto concorrenziale e ad osservarne le conseguenze. Per fare ciò si devono progettare due tipologie di agenti: le imprese concorrenti (competitor) ed i clienti. In figura 12 si osservano le interfacce delle classi Competitor, Consumatore e delle due classi che rappresentano il modello e l'osservatore del modello. Il software di simulazione utilizzato in questo caso è JAS (Java Agent-based Simulation library): una libreria di classi open source che fornisce gli strumenti per costruire modelli ad agenti. MarketingCompetitorModel capacitaproduttiva: int capitaleiniziale: double costioperativi: double costocontattopubblicitario: double listacompetitor: ArrayList listaconsumatori: ArrayList maxquotamarketing: double minquotamarketing: double numerodicompetitor: int numerodiconsumatori: int prezzo: double buildmodel() controllafinanze() euncompetitorattivo() faicampagnapubblicitaria() setparameters() shuffle() Consumatore Consumatore() acquistaservizio() performaction() ricevipubblicitada() Competitor cassa: double clientipersi: int clientiserviti: int id: int Competitor() aggiornaconti() azzeraconti() campagnapubblcitaria() getclientipersi() getclientiserviti() getoccupazioneunita() performaction() richiestadiservizio() MarketingCompetitorObserver buildmodel() setparameters() figura 12 Rappresentazione UML delle classi Competitor e Consumer Ciascuna azienda risponde a quattro stimoli, meglio detti metodi: azzeraconti() è chiamato all inizio di ciascun periodo, permettendo di azzerare le variabili per la contabilità. Successivamente invoca il metodo campagnapubblicitaria per sollecitare i clienti. richiestadiservizio() è invocato da parte di un cliente che desidera acquistare il servizio. Il metodo risponde positivamente se il cliente può essere servito, negativamente se la capacità produttiva è esaurita. aggiornaconti() crea un bilancio di fine periodo. campagnapubblicitaria() effettua una campagna di marketing, invocando il metodo ricevipubblicitada() del cliente per notificargli il messaggio pubblicitario; Ciascun cliente possiede due metodi: acquistaservizio() è chiamato ad inizio di ciascun periodo e spinge il consumatore a richiedere il servizio ad una tra le aziende che lo hanno contattato precedentemente; ricevipubblicitada() consente la ricezione di pubblicità dalle aziende. Quando il cliente riceve pubblicità da parte di un azienda che in passato non lo ha servito, la scarta. Ciò avviene grazie alla gestione di una opportuna black list ( lista dei cattivi ). 19

: Competitor : MarketingCompetitorModel : Consumatore Tempo #0: Azzera la contabilità Effettua la campagna pubblicitaria Ricevi pubblicità Aggiorna la black e la best list #0: Acquista Richiede il servizio Aggiorna la black e la best list #0: Aggiorna la contabilità #0: Controlla l'equilibrio finanziario if ( Bilancio in rosso ) Controlla bilancio figura 13 Il diagramma di sequenza UML del modello ad agenti Per ogni intervallo di tempo, la simulazione genera una sequenza di quattro eventi, rappresentati dal diagramma in figura 13. Il primo evento richiama il metodo azzeraconti di ciascun competitor. Come descritto in precedenza, il metodo azzera le variabili della contabilità e richiama il metodo campagna- Pubblicitaria. Per una scelta tecnica, la campagna di marketing è delegata alla classe modello, la quale sceglie casualmente i clienti da contattare. La logica è rappresentata dalla sequenza di frecce che originano dal primo evento. Il secondo evento richiama il metodo acquistaservizio di ciascun cliente. Ognuno possiede una lista nella quale conserva la memoria degli ultimi quattro messaggi pubblicitari ricevuti. Sceglie a caso uno di questi messaggi e richiede il servizio al fornitore prescelto. Se il servizio è correttamente erogato, il cliente si continuerà nel mese successivo a rivolgersi presso questo fornitore, con una probabilità del 98%. E stato introdotto un piccolo elemento di variabilità al fine di aumentare il realismo del modello. Nella realtà spesso i clienti sperimentano altri fornitori, sebbene siano soddisfatti da quello abituale. Nel caso in cui il competitor prescelto non sia in grado di erogare il servizio, il consumatore lo inserisce in una black list. Quando un azienda si trova nella black list di un consumatore, nonostante provi ad inviargli messaggi pubblicitari, non riuscirà ad acquisirlo come cliente. La black list memorizza gli ultimi quattro elementi, consentendo ad un'azienda esclusa di rientrare in competizione qualora altre quattro aziende rifiutino di servire lo stesso cliente. Al termine dell erogazione del servizio per ciascun cliente, le aziende ricevono il comando di aggiornare i propri bilanci (terzo evento). L'ultimo evento fa si che le aziende con un bilancio negativo sono dichiarate fallite. Questa operazione è svolta dal model, che impersona il ruolo di autorità di controllo. Lo schema appena presentato è ripetuto indefinitamente. In tabella 3 sono indicati i parametri utilizzati, prendendo in considerazione una capacità produttiva costante relativa a quattro unità di servizio. Dalle numerose simulazioni si è osservato che, come prevedibile, in presenza di strategie uguali e con un numero di imprese inferiore a 30, tutti i concorrenti raggiungono l'equilibrio nel lungo 20