POLITECNICO DI BARI FACOLTA’ DI INGEGNERIA CORSO DI LAUREA IN INGEGNERIA CIVILE DIPARTIMENTO DI INGEGNERIA DELLE ACQUE _________________________________________________________________________________________ TESI DI LAUREA IN MISURE E CONTROLLI IDRAULICI CALCOLO DELLE RETI IDRAULICHE IN PRESSIONE MEDIANTE UNA TECNICA MISTA ALGORITMI GENETICI / METODO GAUSS-NEWTON Relatore: Chiar.mo Prof. Ing. MICHELE MASTRORILLI Correlatore: Dott. Ing. ORAZIO GIUSTOLISI Laureando: ENRICO MASINI ________________________________________________________________ ANNO ACCADEMICO 1998-99 INDICE PREMESSA pag.3 Capitolo I – Reti di distribuzione: il problema ingegneristico Premessa pag.6 1.1 Ipotesi ingegneristiche pag.6 1.2 Definizione del comprensorio pag.9 1.3 Ipotesi sul tracciato della rete pag.10 1.4 Profondità e modalità di posa in opera della condotta pag.11 1.5 Studio demografico e urbanistico del comprensorio pag.12 1.6 Tracciamento planimetrico della rete pag.12 1.7 Verifiche di pressione pag.14 1.8 Scelta dei diametri pag.16 1.9 Scabrezza di progetto pag.17 Capitolo II – Reti di distribuzione: l’impostazione analitica Premessa pag.18 2.1 Definizione delle variabili analitiche pag.18 2.2 Determinazione del tracciato planimetrico pag.19 2.3 Determinazione del tracciato altimetrico pag.24 2.4 Determinazione delle portate distribuite uniformemente lungo ogni tronco pag.25 2.5 Verifiche di pressione pag.27 2.6 Vincoli per i diametri pag.29 Capitolo III – Il sistema matriciale di equazioni delle reti in pressione Premessa pag.31 3.1 Equazioni fondamentali delle reti in pressione pag.31 3.2 L’impostazione matriciale pag.33 3.2.1 Matrice di connessione dei tronchi pag.33 3.2.2 Equazioni di continuità dei nodi pag.35 3.2.3 Le due forme delle equazioni del moto lungo i lati pag.36 3.2.4 Equazioni del moto riferite alle maglie. Matrice di connessione maglie-tronchi pag.38 3.2.5 Sistema completo delle equazioni della rete pag.39 3.2.6 Sistema ridotto nelle portate incognite pag.41 3.2.7 Sistema ridotto nelle quote piezometriche incognite pag.41 Capitolo IV – Sistemi non lineari di equazioni e problemi di ottimizzazione non vincolata Premessa pag.43 4.1 Sistemi non lineari di equazioni trasformati in problemi di ottimizzazione pag.44 4.2 Ipersuperficie d’errore pag.50 4.3 Algoritmi risolutori di problemi di ottimizzazione non vincolata pag.52 Capitolo V – Algoritmi genetici Premessa pag.56 5.1 Cenni sulla Teoria dell’Evoluzione pag.56 5.2 Introduzione agli algoritmi genetici pag.58 5.3 Come funzionano gli algoritmi genetici pag.59 5.4 Alcune definizioni preliminari pag.62 5.5 Il problema della codifica e della rappresentazione pag.63 5.5.1 Rappresentazione binaria pag.63 5.5.2 Rappresentazione floating-point pag.66 5.6 Funzione di adattività pag.69 5.7 Selezione pag.69 5.8 Riproduzione pag.74 5.8.1 Operatori genetici nella rappresentazione binaria pag.75 5.8.1.1 Crossover binario pag.75 5.8.1.2 Mutazione binaria pag.77 5.8.2 Operatori genetici nella rappresentazione floating-point 5.8.2.1 Crossover floating-point pag.78 pag.78 5.8.2.2 Mutazione floating-point 5.9 Parametri degli algoritmi genetici Conclusione pag.80 pag.82 pag.86 Capitolo VI – Metodi classici di ottimizzazione non vincolata: algoritmi di Newton, quasi-Newton e Gauss-Newton Premessa pag.88 6.1 Metodi classici di ottimizzazione pag.89 6.2 Metodo di Cauchy (o metodo “steepest-descent”) pag.90 6.3 Metodo di Newton pag.94 6.4 Metodi quasi-Newton pag.98 6.4.1 Metodo di Broyden, Fletcher, Goldfarb e Shanno (BFGS) 6.4.2 Metodo di Davidon, Fletcher e Powell (DFP) 6.5 Ricerca di linea pag.99 pag.102 pag.104 6.5.1 Interpolazione quadratica pag.105 6.5.2 Interpolazione cubica pag.106 6.6 Problema di ottimizzazione dei “minimi quadrati” pag.107 6.6.1 Metodo di Gauss-Newton pag.111 6.6.2 Metodo Levenberg-Marquadt pag.112 6.7 Metodo di Newton-Raphson Conclusione pag.114 pag.116 Capitolo VII – Implementazione di una tecnica mista: algoritmi genetici / metodo di Gauss-Newton Premessa pag.117 7.1 Scelta del linguaggio di implementazione: Matlab ver.5.3 pag.119 7.2 Descrizione del programma pag.120 7.2.1 Implementazione degli algoritmi genetici: scelta dei parametri 7.2.2 Implementazione del metodo di Gauss-Newton pag.120 pag.127 7.3 Determinazione delle portate concentrate equivalenti alle portate distribuite mediante iterazione del metodo di Gauss-Newton pag.129 7.4 Calcolo delle perdite di carico con le formule pratiche o con la formula di Colebrook 7.5 Ulteriori considerazioni sulla scelta del punto iniziale pag.141 pag.146 7.6 Scelta di alcune reti “test” e raffronto dei risultati col metodo delle VPH pag.148 7.7 Convergenza degli algoritmi genetici applicati alle reti “test” e problema dello “slow -finish” Riferimenti bibliografici pag.155 pag.161 Appendici pag.163 Appendice A – Listato delle funzioni principali del programma Appendice B – Caratteristiche delle reti usate per “testare” il programma Appendice C – Risultati ottenuti applicando il programma ed il metodo VPH alle reti “test” PREMESSA Premesse e finalità della tesi Lo scopo del presente lavoro è quello di porre in evidenza come la progettazione delle reti idrauliche in pressione con l’ausilio dell’elaboratore elettronico sia fortemente condizionata dal problema numerico. Difatti lo studio ingegneristico della rete, ovvero la determinazione delle condizioni al contorno che la rete deve rispettare, sfocia quasi sempre nella risoluzione di un sistema matematico non lineare condizionato. Diventa allora quanto mai importante focalizzare l’attenzione, a livello di ricerca, non solo sull’impostazione matematica del problema ingegneristico, cioè sulla definizione del sistema di equazioni che governano la rete, ma anche sugli algoritmi risolutori del sistema stesso. A questi ultimi è legato il tempo di elaborazione ma soprattutto la possibilità stessa di risolvere il problema. I sistemi non lineari presentano infatti più soluzioni “locali” per cui risulta spesso difficile, relativamente agli algoritmi risolutori, determinare l’unica soluzione “globale” del sistema. In effetti le metodologie risolutive più frequentemente adoperate restituiscono una soluzione finale del sistema in funzione di un punto iniziale assegnato. La scelta del punto iniziale è quindi determinante al fine di garantire la “globalità” 3 della soluzione. Si propone quindi, per ovviare alle suddette difficoltà, l’utilizzo degli “algoritmi genetici” per la risoluzione di tali sistemi di equazioni non lineari. Si tratta di una metodologia sviluppata negli anni ’80 per risolvere svariati problemi matematici caratterizzati da una spiccata non linearità, in grado di prescindere totalmente dall’assegnazione di un punto iniziale di ricerca. In particolare, dopo aver esaminato nei primi due capitoli il problema generale della progettazione delle reti idrauliche in pressione, si concentra l’attenzione, nel resto di questo lavoro, sul problema specifico della verifica delle reti in pressione, evidenziando come il sistema di equazioni su cui si basa la verifica della rete sia anch’essa affetta dalle problematiche accennate di non linearità con le annesse complicanze numeriche. Si applicano allora gli algoritmi genetici alla risoluzione del problema di verifica delle reti idrauliche in pressione, dall’implementazione dei quali emerge tuttavia un evidente rallentamento progressivo della velocità di convergenza a fronte, comunque, dei vantaggi legati alla capacità di determinare la soluzione “globale”. Si decide pertanto di optare per una tecnica mista algoritmi genetici/metodo di Gauss-Newton in modo da poter usufruire allo stesso tempo dei vantaggi degli algoritmi genetici, capaci di determinare soluzioni “globali”, e dei vantaggi dei tradizionali metodi di Newton, notoriamente molto efficienti. Nell’algoritmo si sono implementate, inoltre, la possibilità di erogare portate uniformemente distribuite lungo i tronchi e la possibilità di calcolare le perdite di 4 carico con la formula di Colebrook allargando il campo d’investigazione del moto anche al regime turbolento di transizione. Il programma è infine testato su alcune reti, già risolte con altri metodi “accreditati”, per confrontare i risultati. 5 CAPITOLO I Reti di distribuzione: il problema ingegneristico Premessa Si premette, innanzitutto, che la rete di distribuzione non è che una delle parti che compongono un acquedotto di acqua potabile. L’acquedotto è costituito schematicamente da un’opera di presa, una condotta di adduzione esterna, un serbatoio, una rete di distribuzione interna e impianti privati di consegna. In questa tesi, come da premessa, ci si occuperà solo della rete di distribuzione dell’acquedotto. 1.1 Ipotesi ingegneristiche La prima ipotesi ingegneristica sulla rete di distribuzione è che sia una rete in pressione. Tale è ipotesi ha le seguenti motivazioni: 1) consentire la regolazione da valle delle portate ovvero far sì che le portate che attraversano la rete siano funzione univoca della richiesta d’acqua istantanea delle utenze (cioè del numero di rubinetti contemporaneamente in un certo istante), 6 regolazione altrimenti attuabile solo in regime di corrente lenta. 2) consentire una maggiore flessibilità per il tracciato altimetrico in modo da poter seguire il profilo delle strade attraversate, senza necessità di ulteriori scavi o rinterri con i relativi costi, quando non risulti addirittura impossibile servire alcuni tratti della rete con condotte a pelo libero per motivi altimetrici (eventualità che si verifica in special modo in aree poco pianeggianti). 3) assicurare la potabilità dell’acqua in quanto l’acqua del terreno o l’acqua delle eventuali condotte fognarie, essendo a pressione inferiore, non può infiltrarsi nelle tubazioni. 4) proteggere la rete da manomissioni e attacchi esterni (per esempio avvelenamenti) in quanto eventuali immissioni dovrebbero vincere la pressione interna dell’acqua 5) rendere più agevoli e snelle le opere di presa che non sarebbero più condizionate dai livelli idrici della condotta. Tale ipotesi consente già di definire il profilo altimetrico della rete in quanto esso può ritenersi quasi sempre coincidente con il profilo altimetrico del terreno attraversato a meno di una grandezza costante che è rappresentata dalla profondità di posa in opera delle condotte. La seconda ipotesi riguarda invece il tracciato planimetrico della rete che verrà per lo più sovrapposto al tracciato della rete stradale già esistente per le seguenti ragioni: 1) evitare l’attraversamento di proprietà private (suoli o eventuali fabbricati) con i conseguenti oneri di espropriazione fortemente incidenti sul costo totale dell’opera 7 2) facilitare le operazioni di scavo e posa in opera essendo la strada il luogo più facilmente raggiungibile dai mezzi di scavo e di trasporto delle tubazioni. 3) agevolare l’allacciamento alla rete da parte delle utenze private grazie alla facile esecuzione degli scavi sul bordo stradale, nonché per le distanze modeste che usualmente corrono dal punto di allacciamento all’erogazione vera e propria potendo la rete anche seguire strade secondarie (reti di distribuzione III ordine). Per quanto concerne la tipologia di rete si avranno due possibilità: reti ramificate e reti a maglie chiuse o magliate. Nelle reti ramificate, ogniqualvolta si verifichi un’interruzione per guasto o per manutenzione in un punto qualsiasi della rete, resta senza fornitura d’acqua il tronco di rete a valle del punto stesso con i gravi disagi che ciò comporta. A questo grave inconveniente si può porre rimedio adottando il secondo tipo di reti: a maglie chiuse. La maglia chiusa permette all’acqua di raggiungere qualsiasi punto della rete mediante più percorsi e quindi by-passando il punto di interruzione. Difatti ciascun tronco della rete può essere percorso in due sensi creando così una molteplicità di possibili percorsi ed elevando consequenzialmente l’elasticità e l’affidabilità del sistema. L’ultima delle ipotesi sulla rete di distribuzione concerne l’introduzione di una nuova grandezza: la portata distribuita uniformemente lungo il percorso. 8 Essa è chiaramente un’astrazione teorica in quanto nella realtà le portate consegnate ai singoli utenti della rete sono prelievi concentrati nei punti di allacciamento. Per l’enorme difficoltà di poter prevedere a priori sia l’esatta localizzazione dei punti di allacciamento sia le rispettive portate di consegna, si è introdotta la portata uniformemente distribuita che si calcola assommando le singole portate consegnate in tratto di condotta e quindi ipotizzando di distribuire tale portata in modo uniforme lungo lo stesso tratto di condotta. L’approssimazione che si compie nell’ipotizzare questo tipo di distribuzione è ovviamente duplice. In primo luogo, infatti, si approssima una serie discreta di distribuzioni con una distribuzione continua. In secondo luogo si ipotizza che tale distribuzione continua sia anche costante e pari alla distribuzione media delle distribuzioni puntuali nel tratto corrispondente. 1.2 Definizione del comprensorio Il passo successivo, nell’ambito delle ipotesi generali fin qui schematicamente enunciate, è la definizione del comprensorio che la rete dovrà servire. Si ipotizza in questa sede (al fine di poter meglio schematizzare la progettazione dell’acquedotto) che si sia già stabilito, al momento della progettazione della rete, il numero e l’ubicazione dei serbatoi, e quindi non si entrerà nel merito della scelta, né del numero, né dell’ubicazione degli stessi, supponendo già risolta tale questione. 9 1.3 Ipotesi sul tracciato della rete Il passo successivo è il tracciamento della rete. Questa la si suppone suddivisa gerarchicamente su più livelli o ordini. La rete di I ordine corrisponde alle condotte di distribuzione principale del comprensorio. E’ questa la porzione di rete che segue le strade principali e che trasporta i più elevati volumi d’acqua; viene usualmente progettata a maglie chiuse in quanto ad essa si relega il compito di consegnare l’acqua alle reti di II e III ordine collegate in cascata (la rete magliata assicura maggiormente la consegna delle portate in caso di guasti localizzati) La rete di II e III ordine hanno invece, usualmente, una struttura ramificata che segue le strade di importanza minore, per giungere il più vicino possibile alle utenze finali dell’acquedotto. Si opta normalmente per una struttura ramificata per ovvi motivi di costo. Difatti, eventuali rotture creerebbero disagi di entità molto più modesta (il bacino di utenza a valle della rottura sarebbe alquanto limitato) e a cui sarebbe molto più semplice porre rimedio (si tratta infatti di tubazioni di modesto diametro). Da questo momento quindi si rivolgerà l’attenzione sulla rete principale (cioè di I ordine) in quanto è per essa che si vengono a creare i maggiori problemi legati alla progettazione essendo la sua struttura a maglie chiuse; mentre non crea particolari difficoltà la progettazione delle rete secondaria e terziaria trattandosi, come appena detto, di una struttura ramificata. 10 1.4 Profondità e modalità di posa in opera della condotta Terminata l’enumerazione delle ipotesi principali, il passo successivo consiste nello stabilire il tracciato planimetrico e altimetrico della condotta. Restando fedeli alle ipotesi fatte sinora, si fanno passare le condotte principali dell’acquedotto lungo le arterie stradali principali della località in esame in modo che esse formino un reticolo composto di maglie chiuse. La profondità di scavo deriva invece da un’attenta analisi costi-benefici che metta a confronto il costo dello scavo con i vantaggi derivanti da una maggiore profondità di posa in opera quali: un miglior isolamento termico dell’acqua, una maggiore protezione delle tubazioni dai sovraccarichi stradali e dalle possibili manomissioni esterne. Inoltre la profondità sarà legata alla presenza concomitante di una fogna (nera). Qualora sulla stessa strada si debba far passare sia la condotta dell’acquedotto sia quella della fogna le norme raccomandano di porle in opera in due scavi diversi e distanti tra loro ponendo la condotta della fogna ad una profondità maggiore rispetto all’altra di modo che eventuali perdite della fogna (a pelo libero) non raggiungano l’acquedotto. Ove ciò non sia possibile, per motivi di spazio e di costo, è consentita la posa in opera nello stesso scavo a condizione che la fogna si trovi sempre a quota inferiore rispetto all’acquedotto e che le due condotte siano poste ad una certa distanza di sicurezza. 11 1.5 Studio demografico e urbanistico del comprensorio Preliminarmente si effettua un attento studio demografico ed urbanistico della località per poter determinare la popolazione residente, turistica e pendolare nonché l’effettiva dislocazione sul territorio, nel periodo di vita dell’acquedotto. Occorre conoscere la distribuzione degli abitanti di ciascun isolato; ove tali dati non siano direttamente accessibili o esistenti, e stante l’importanza dell’opera, un studio in tal senso può essere commissionato a parte. Come ultima possibilità si possono utilizzare gli indici di fabbricabilità delle singole zone del piano regolatore come stimatori, per quanto approssimati, della popolazione residente. Quindi si deve stabilire la vita dell’opera che si va a progettare. Si ipotizza che un acquedotto abbia una vita media di 50 anni. Occorre pertanto fare delle previsioni sia demografiche, al fine di determinare la popolazione e quindi le portate da distribuire fino al termine della vita dell’opera, sia urbanistiche, per poter stabilire come la popolazione futura sarà distribuita nelle aree di espansione (a tal uopo è necessario consultare il piano regolatore della località). 1.6 Tracciato planimetrico della rete Una volta nota l’effettiva distribuzione della domanda d’acqua sul territorio, all’inizio ed al termine della vita dell’opera, occorre stabilire l’effettivo tracciato planimetrico della rete. Questo passo della progettazione è probabilmente il più delicato. Si premette che una rete magliata si compone di maglie chiuse, di nodi e di tronchi. 12 Un nodo è un punto di confluenza di più condotte della rete; un tronco è un tratto di rete che unisce due nodi adiacenti; le maglie sono costituite da più tronchi consecutivi che formano un percorso chiuso. Le maglie della rete andranno tracciate sul reticolo stradale avendo cura che tutti i punti di consegna dell’acquedotto siano coperti dalle maglie ovvero che le distanze tra i punti e la rete principale (da coprire mediante la rete di II e III ordine) non siano eccessive. Distanze elevate comporterebbero perdite di carico eccessive rispetto alla rete principale rischiando di consegnare l’acqua con pressione troppo bassa o non riuscire a consegnarla affatto. La rete dovrebbe essere pertanto distribuita in modo uniforme sul territorio con una densità del reticolo direttamente proporzionale al numero di utenze da servire nella stessa zona ed indipendente dalle portate. Queste ultime condizionano i diametri finali delle condotte mentre il numero di allacciamenti per unità di area (sempre che essi siano distribuiti in modo all’incirca uniforme nell’area in questione) condiziona la densità del reticolo. Sarebbe inoltre opportuno che, trattandosi della rete principale (con portate e quindi diametri rilevanti), essa percorra le strade principali sia per ragioni di spazio sia perché le strade principali seguono usualmente percorsi poco tortuosi e sono ben collegate tra loro. Lo spazio è necessario per interrare i maggiori diametri, i pezzi speciali di intersezione, intercettazione e derivazione per le reti di importanza inferiore, poiché gli 13 allacciamenti alla rete degli utenti che si affacciano su tali strade non avvengono sulla rete principale (per le difficoltà e gli inconvenienti che ciò comporterebbe), ma sulle condotte della rete secondaria poste parallelamente alle condotte principali sulle stesse strade e connesse ad esse solo in alcuni punti. La strada deve poter quindi alloggiare entrambe le tubazioni più l’eventuale rete fognaria. Esiste quindi un limite massimo per i diametri delle condotte connesso all’ampiezza della strada, a sua volta funzione dell’importanza della stessa. Per quanto concerne la dimensione ed il numero di maglie della rete principale si evince che sarebbe opportuno, per motivi di affidabilità, progettare una rete con maglie molto fitte (ossia piccole e numerose) assicurando a quanti più punti è possibile una fornitura d’acqua senza interruzioni per guasti o manutenzioni. Ciò evidentemente si scontra con l’esigenza di contenere i costi in quanto una rete fittamente magliata è altamente ridondante e questo implica ovviamente costi maggiori dovuti ai tronchi di tubazione aggiunti alla rete ramificata, cioè a maglie aperte, per “chiudere” le maglie. Come accennato in precedenza, le necessità economiche implicano che le maglie siano abbastanza larghe (la magliatura si opera solo al livello di rete principale) e che il resto della rete (condotte di secondo e terzo ordine) resti conformata ad albero. 1.7 Verifiche di pressione A questo punto si introduce il problema della pressione dell’acqua nell’acquedotto. Innanzitutto occorre verificare, per tutta la rete, non solo che le piezometriche non 14 taglino mai le condotte, ma anche che esse non scendano mai sotto i 5 metri sopra il piano stradale al fine di garantire che la condotta sia sempre in pressione e scongiurare così la formazione di sacche d’aria nelle condotte e l’eventuale ingresso di sostanze inquinanti dall’esterno. Il progettista deve inoltre preoccuparsi che le portate consegnate all’utenza abbiano valori di pressione soddisfacenti, ove per “valore soddisfacente” non si intende uno specifico valore bensì un range entro cui la pressione possa variare. Gli estremi del range dipendono dal tipo di utenza cioè dall’uso che si deve fare dell’acqua, sebbene particolari esigenze di pressione siano da considerarsi a carico dell’utente e non del fornitore nel senso che sarà cura dell’utente stesso, mediante impianto privato di sollevamento, ottenere la pressione desiderata. E’ il caso, ad esempio, delle elevate pressioni necessarie per un grattacielo o per un impianto di irrigazione a pioggia (sempre che la rete in esame sia adibita anche ad uso agricolo). Il progettista dovrà curarsi invece dei casi più comuni, quali la consegna dell’acqua a condomini di pochi piani. Difatti, per i centri abitati, si richiede che la pressione di consegna, nelle ore di punta, non scenda sotto i 5 metri dal rubinetto più alto del fabbricato idraulicamente più distante dal serbatoio, al fine di poter assicurare acqua con sufficiente pressione anche all’ultimo piano di tale edificio (per quanto riguarda l’altezza del fabbricato si fa riferimento di solito alla tipologia media dei fabbricati del centro abitato). Si richiede inoltre che nelle ore notturne, di minimo prelievo, le pressioni di 15 consegna non superino i 70 metri dal livello stradale onde non provocare danni agli apparecchi di erogazione (ad esempio la rottura delle guarnizioni) posti nei piani più bassi dei fabbricati. Infine, sempre nei centri abitati, è richiesta dai vigili del fuoco la verifica sulle bocchette antincendio. Si richiede che concomitantemente al prelievo normale di acqua (prelievo medio nel giorno di massimo consumo) la pressione sulla bocchetta antincendio idraulicamente più lontana sia di almeno 20 metri sul livello stradale. 1.8 Scelta dei diametri Un ulteriore vincolo imposto alla progettazione riguarda la scelta dei diametri e degli spessori delle tubazioni. E’ ovvio che le aziende produttrici non possono fornire tutti i diametri possibili. Del range di diametri compatibile con il materiale e con le sollecitazioni a cui la tubazione andrà sottoposta, saranno disponibili al progettista solo i diametri fondamentali: usualmente i valori disponibili sono multipli di 100,50,25 mm e raramente di 10 mm (le graduazioni inferiori valgono ovviamente solo per i diametri minori). Il progettista è quindi vincolato ad impiegare per le tubazioni della rete solo i diametri commerciali al momento reperibili sul mercato. Inoltre, per i motivi accennati nel paragrafo 1.6, il diametro massimo utilizzabile per ogni tronco di condotta è legato alla larghezza della strada su cui si vuole far passare 16 la tubazione. 1.9 Scabrezza di progetto Resta infine da considerare la problematica relativa alla scabrezza delle condotte. Il coefficiente di scabrezza fornito dalla ditta è riferito alla tubazione nuova in quanto, con l’usura, la scabrezza aumenta. Ciò complica ovviamente la progettazione in quanto vincola la rete a dover soddisfare tutte le condizioni di vincolo per la pressione, che si sono poc’anzi elencate, durante tutta la vita dell’opera e quindi sia nella condizione di “tubi nuovi” sia in quella di “tubi usati”. 17 CAPITOLO II Reti di distribuzione: l’impostazione analitica Premessa Nel presente capitolo verrà esaminato il problema della rete di distribuzione dal punto di vista analitico ossia si proverà a tradurre in forma analitica i concetti espressi in modo discorsivo nel precedente capitolo. 2.1 Definizione delle variabili analitiche Trattandosi di rete in pressione le grandezze da definire analiticamente saranno innanzitutto le quote piezometriche H nella rete e nei serbatoi (le prime incognite e le ultime note). E’ inoltre indispensabile conoscere le quote altimetriche h assolute oppure relative ad un punto noto (ciò che infatti interessa sono i dislivelli tra i vari punti) di tutta la rete. Di ogni singolo tronco j-esimo di rete è inoltre necessario conoscere il diametro Dj, che si suppone costante all’interno del tronco. Il tracciato planimetrico della condotta resterà definito mediante la conoscenza delle coordinate X , Y di tutti i punti della rete ed in particolare dei nodi Xi e Yi. Dalla conoscenza del tracciato seguirà facilmente il calcolo delle lunghezza Lj dei singoli tronchi di rete. 18 2.2 Determinazione del tracciato planimetrico Scelto preliminarmente il comprensorio da servire occorre delineare il tracciato planimetrico della rete. A tal fine, per quanto si è detto nel precedente capitolo, occorre conoscere l’andamento planimetrico delle arterie stradali principali esistenti, sulle quali si adagerà la rete principale. Si è ipotizzato infatti che le condotte principali dell’acquedotto siano poste in opera lungo le strade principali del comprensorio. In tal maniera si considera la planimetria della rete acquedottistica come un sottoinsieme della planimetria stradale. I metodi per giungere alla conoscenza analitica del reticolo di arterie stradali principali (per conoscenza analitica si intende in questo caso la conoscenza delle coordinate X,Y dei punti del reticolo rispetto ad un sistema di riferimento opportuno) possono essere molteplici: si possono effettuare rilievi in loco così come si possono importare tali informazioni direttamente da elaborati grafici preesistenti (manualmente o in modo automatico con ausilio di elaboratori elettronici collegati a dispositivi per l’acquisizione digitale di immagini). Una volta acquisiti analiticamente gli elementi dell’insieme principale “planimetria stradale”, restano da definire i criteri per determinare gli elementi di questo che andranno a far parte del sottoinsieme “planimetria acquedottistica”. Tali criteri sono stati enunciati in forma discorsiva nel precedente capitolo. Essi sono: 1) densità del reticolo uniforme e proporzionale al numero di utenze da servire 19 2) distanza tra le utenze e la rete non eccessiva 3) magliatura del reticolo omogenea ma non troppo fitta Si esamineranno ora i tre punti singolarmente con l’intento di assegnare una forma analitica a ciascuno di essi: 1) Si introduce la grandezza scalare densità del reticolo DR relativa all’area A definendola nel seguente modo: DR = ∑i Li / A dove Li = lunghezza del singolo tronco di rete contenuto in A Il vincolo sull’uniformità della distribuzione può essere posto delimitando il range di variabilità per la densità del reticolo, cioè imponendo che: DRmin < DR < DRmax ∀ A ⊂ comprensorio con A > Amin (2.1) dove Amin rappresenta l’area minima per cui ha ancora significato parlare di densità, mentre DRmin e DRmax dipendono, in maniera direttamente proporzionale, dal numero di utenze da servire distribuite sulla stessa area ovvero dalla densità di utenza DU, quest’ultima definibile come: DU = N / A dove N è il numero complessivo di allacciamenti nell’area A 20 DRmin e DRmax risultano quindi esprimibili mediante la seguente formulazione: DRmin = a DUα DRmax = b DUβ dove a,b,α,β sono costanti che devono verificare: a < b e α,β>0 In definitiva, dunque, la relazione (2.1) diventa: a DUα < DR < b DUβ ∀ A ⊂ comprensorio con A > Amin (2.1a) a sua volta esprimibile in funzione di N, ∑i Li ed A: a (N/A)α < (∑i Li / A) < b (N/A)β ∀ A ⊂ comprensorio con A > Amin (2.1b) 2) Poiché la distanza tra i punti da servire ed il reticolo è legata linearmente alle perdite di carico tra la condotta principale ed il punto di consegna (le quali, se eccessive, farebbero scendere la pressione di consegna sotto i valori minimi richiesti) è opportuno che tale distanza non sia troppo grande. Si noti che la distanza andrebbe a rigore valutata lungo l’effettivo percorso dell’acquedotto, ma in fase progettuale non ci è dato di conoscere preventivamente né il percorso, né i diametri della rete secondaria e terziaria, per cui risulta più opportuno approssimarla alla distanza in linea d’aria, aggiungendo dei fattori correttivi. 21 Formalmente ciò può esprimersi come segue: Min[(X − X i ) 2 + (Y − Yi ) 2 ] ≤ dmax (2.2) dove: dmax è una costante X,Y sono le coordinate dei punti della rete principale Xi ,Yi sono le coordinate dei singoli punti di allacciamento delle utenze. 3) Imporre che la magliatura non sia eccessivamente fitta equivale a porre un limite superiore alla densità reticolare in quanto si è ipotizzato in precedenza che la rete principale (la sola di cui ci si occupa in questa sede) fosse magliata. La densità delle maglie coincide quindi con la densità del reticolo e porre dei vincoli all’uno è equivalente al porli all’altro. Ma la densità del reticolo è stata già vincolata al punto 1) per cui risulta vincolata anche la densità delle maglie. Resta allora da determinarsi la forma matematica più appropriata per imporre innanzitutto che il reticolo della rete principale sia magliato e quindi che tale magliatura risulti omogenea. Per imporre la magliatura del reticolo si verificherà che i tronchi del reticolo siano disposti sempre ad anello, ossia che formino sempre percorsi chiusi. Sono ovviamente possibili eccezioni quali, ad esempio, la condotta maestra che connette il serbatoio (o i serbatoi) al resto della rete ovvero altre situazioni particolari 22 lasciate alla discrezione del progettista. Per tali tronchi è allora cura del progettista immetterne preventivamente le coordinate X,Y lasciando come incognita progettuale la porzione restante di rete. Solo a quest’ultima si imporrà quindi la magliatura, verificando che: ∀ (Pi ,Pj) ∈RETE con i ≠ j ∃ 2 percorsi distinti che uniscono Pi a Pj (2.3) E’ sufficiente che la verifica sia soddisfatta fissando il punto Pi e facendo variare Pj. Inoltre, una volta determinati i nodi (coincidenti con i punti di intersezione di più percorsi) ed i tronchi (tratti di rete tra 2 nodi adiacenti) del tracciato in esame, è possibile restringere ulteriormente la verifica ad un punto solo per ogni tronco (il punto può essere scelto casualmente ma deve essere interno al tronco). Per vincolare l’omogeneità della distribuzione delle maglie si può imporre che le dimensioni delle maglie elementari (intese come maglie che non contengono altre maglie) siano inversamente proporzionale al numero degli allacciamenti per unità di area (grandezza già definita come densità di utenza DU). Come dimensione della maglia si adotta il diametro equivalente, ovvero il diametro del cerchio avente pari area. Si può porre quindi: DEmin < DE < DEmax ∀ maglia ∈ RETE dove: DE = diametro equivalente della maglia = (Area ⋅ 4/π)1/2 Area = area della singola maglia elementare DEmin e DEmax sono quindi esprimibili nella seguente forma: 23 (2.4) DEmin = c DUγ DEmax = d DUδ dove c,d,γ,δ sono costanti che devono verificare: c < d e γ,δ <0 in definitiva dunque la relazione (2.4) diventa: c DEγ < DR < d DEδ ∀ maglia ∈ RETE (2.4a) 2.3 Determinazione del tracciato altimetrico Per esso si opera analogamente al tracciato planimetrico. Occorre importare l’altimetria del tracciato stradale operando come per l’acquisizione della planimetria, cioè mediante rilievo diretto in loco oppure indirettamente, avvalendosi della cartografia esistente. In tal modo avremo una conoscenza non solo planimetrica, ma anche spaziale, del reale sviluppo stradale; ovvero saranno conosciute tutte e tre le coordinate X,Y,Z dei punti della rete. Per poter definirne anche l’andamento altimetrico della rete è necessario solo definire a che profondità la condotta sarà collocata rispetto alla quota del piano stradale. Come descritto nel primo capitolo, la profondità sarà da determinarsi mediante un’analisi costi-benefici che esula dagli obiettivi di questo studio e pertanto si considererà una costante nota. In definitiva quindi, per ogni punto della rete, deve risultare : h=Z–p+ D/2 (2.5) 24 dove: h = quota dell’asse-condotta (riferita ad un punto stabilito) Z = quota del piano stradale (relativa allo stesso riferimento scelto per la condotta) p = profondità del letto di posa della tubazione (rispetto al piano stradale) D = diametro della tubazione 2.4 Determinazione delle portate distribuite uniformemente lungo ogni tronco Il tracciamento planimetrico della rete di distribuzione necessita la conoscenza dell’esatta ubicazione dei punti di domanda nel comprensorio di competenza dell’acquedotto. Per poter giungere alla determinazione dei diametri è necessario conoscere anche le portate massime richieste dai singoli utenti, riferite all’ora di punta del giorno di massimo consumo. Note queste ultime, è possibile determinare le portate distribuite da ogni tronco della rete operando in due modi distinti. 1) Il primo metodo è applicabile qualora, oltre alla dislocazione dei punti di domanda, sia noto anche il punto esatto di allacciamento di ciascuna utenza. Allora la portata massima distribuita lungo il tronco j-esimo si calcola come segue: qj dist = ∑i qij (2.6) dove qj dist = portata distribuita massima lungo il tronco j-esimo qij sono le singole portate massime prelevate lungo il tronco j-esimo 25 2) Qualora sia nota preventivamente solo l’ubicazione delle utenze e non quella dei punti di allacciamento alla rete, si deve operare in modo più approssimato. Per ogni maglia elementare della rete si calcola la domanda totale (calcolo che si può agevolmente fare moltiplicando la popolazione totale risiedente all’interno di ogni maglia per la dotazione idrica giornaliera pro capite e per un opportuno coefficiente di punta). Quindi si ipotizza di distribuire tale portata in modo uniforme lungo tutta la maglia. Per ultimo si vedranno quali tronchi appartengono a due maglie elementari adiacenti in quanto essi dovranno distribuire le portate relative ad entrambe le maglie. In definitiva la portata distribuita lungo il tronco j-esimo si calcolerà: qj dist = L j tronco ⋅ ∑i (Qi maglia / Li maglia) (2.7) con Qi maglia = Pi maglia ⋅ DI ⋅ Cp / 86400 (2.8) dove: i sono le maglie adiacenti al tronco j Qi maglia = domanda totale all’interno della i-esima maglia Pi maglia = popolazione residente all’interno della i-esima maglia Li maglia = lunghezza della i-esima maglia DI = dotazione idrica giornaliera pro capite Cp = coefficiente di punta 26 2.5 Verifiche di pressione Le verifiche di pressione da compiere sono le seguenti: 1) pressione superiore alla minima nelle condotte, nel caso di massima erogazione 2) pressione superiore alla minima nel rubinetto più alto del fabbricato idraulicamente più distante, sempre nel caso di massima erogazione 3) pressione inferiore alla massima nel rubinetto più basso del fabbricato idraulicamente più vicino, nel caso di minima erogazione 4) pressione superiore ai 20 m nelle bocchette antincendio nel caso di erogazione normale (uguale alla erogazione media del giorno di massimo consumo) 1) La prima verifica consiste nell’assicurarsi che la piezometrica non sia mai inferiore a 5 metri sopra il piano stradale durante l’ora di punta (l’orario di punta del prelievo di acqua usualmente si aggira intorno alle 7 del mattino) del giorno di massimo consumo (condizione che comporta le massime perdite di carico) , e cioè: H – ( h + p – D / 2) < 5 m (2.9) dove: h, p e D sono stati definiti in precedenza H = quota piezometrica della condotta (cioè dell’asse-tubazione) valutata rispetto allo stesso riferimento adottato per le quote altimetriche 2) Nelle stesse condizioni di erogazione relative al caso 1) va verificato che la 27 piezometrica, nel rubinetto più alto del fabbricato idraulicamente più lontano dal serbatoio, non scenda sotto i 5 m. Ovvero, nell’ipotesi in cui le portate distribuite siano quelle massime previste (cioè quelle calcolate con le metodologie poc’anzi descritte), deve risultare: Min ( H - h) > (Hf - Hr) + 5 (2.10) dove: H, h sono state definite in precedenza Hf = altezza media del fabbricato tipologicamente più diffuso Hr = dislivello tra il punto più alto (rispetto al quale si è misurata l’altezza Hf) del fabbricato tipologicamente più diffuso e la quota del rubinetto del piano più alto 3) Occorre verificare che la pressione, nel rubinetto più basso del fabbricato idraulicamente più prossimo al serbatoio, non superi i 70 m di colonna d’acqua nelle condizioni di minimo consumo. Quindi, ipotizzando che in tali condizioni di consumo le portate siano un’aliquota di quelle massime calcolate per il giorno di massimo consumo, deve valere: Max ( H - h) – Ht < 70 (2.11) Con Qi min = g Qi max ∀ tronco i-esimo (2.12) dove: Ht = quota del rubinetto più basso del fabbricato tipologicamente più diffuso, rispetto al 28 piano stradale Qi max e Qi min sono rispettivamente le portate distribuite massime e minime lungo il tronco i-esimo g = aliquota costante < 1 4) L’ultima verifica di pressione va effettuata sulle bocchette antincendio supponendo che si sia in condizioni di prelievo normale, pari al prelievo medio del giorno di massimo consumo. Quindi, per portate uniformemente distribuite calcolate mediante la (2.8) a meno del coefficiente di punta Cp, dovrà valere: ( Hi - hi ) > 20 ∀ i-esima bocchetta antincendio (2.13) 2.6 Vincoli per i diametri Occorre definire l’insieme discreto di diametri commerciali effettivamente disponibili. Sia tale insieme: I.D. = { D1,D2,D3, … , Dn} (2.14) Si imporrà quindi che il diametro di ogni tubazione soddisfi la verifica: D ∈ I.D. (2.15) L’ulteriore vincolo per il diametro di ogni tronco è dato dalla larghezza della strada in cui passa la condotta, ossia: Di < e (LSi) ε ∀ tronco i-esimo (2.16) 29 dove: Di = diametro del tronco i-esimo LSi = larghezza strada del tronco i-esimo e ed ε sono coefficienti che devono verificare: 30 e,ε>0 CAPITOLO III Il sistema matriciale di equazioni delle reti in pressione Premessa Nei primi due capitoli si sono analizzate le equazioni di vincolo per un eventuale processo automatico di progettazione delle reti di distribuzione. In questo lavoro ci si limiterà a sviluppare un programma di calcolo per la verifica delle reti di distribuzione, essendo questo uno stadio indispensabile per poter effettuare qualsiasi tipo di progettazione. Un programma di calcolo che comprenda l’intero processo progettuale supera, d’altra parte, anche le odierne capacità dei normali personal computers, sia in termini di memoria sia in termini di velocità. Si ritiene utile, comunque, l’aver in qualche modo gettalo le basi, mediante la formalizzazione delle condizioni di vincolo per la progettazione proposta nei precedenti capitoli ed il programma di verifica delle reti idrauliche di cui si tratterà nel seguito di questa tesi, per una futura implementazione di un processo completamente automatico di progettazione delle reti idrauliche in pressione. Per quello che è invece lo scopo di questo lavoro si supporrà, a partire da questo momento, che la rete, manualmente o tramite tale ipotetico processo automatico, sia stata preliminarmente tracciata, per cui resta da risolvere il problema di verificarne il funzionamento idraulico. 31 A tal fine si prenderà in esame il sistema classico di equazioni che governa le reti idrauliche in pressione ed in particolare la forma matriciale proposta in [Curto, G. et al.] da due autori dell’Istituto di Idarulica di Palermo, G. Curto e A. Tumbiolo. Essa si è infatti mostrata di grande ausilio sia per la chiarezza formale sia per una efficiente stesura del codice del programma per la risoluzione di tale sistema, in quanto, (come si vedrà nei capitoli successivi) si è adoperato un linguaggio particolarmente dedicato al calcolo matriciale. 3.1 Equazioni fondamentali delle reti in pressione Le equazioni fondamentali per una rete idraulica in pressione sono di due tipi: equazioni di continuità nei nodi ed equazioni delle perdite di carico lungo i tronchi. 1) equazioni di continuità: ∑i Qi + ∑j Qj = 0 ∀ nodo (3.1) dove Qi e Qj sono rispettivamente le portate entranti ed uscenti dal nodo, assumendo convenzionalmente segno positivo se entranti e negativo se uscenti. 2) equazioni della perdita di carico: hj – hj+1 = Li ki Qi2 Di-ni = βi Qi2 ∀ tronco i-esimo (3.2) dove: hj e hj+1 sono le quote piezometriche agli estremi del tronco i-esimo Li = lunghezza del tronco i-esimo ki e ni costanti che caratterizzano il tipo di tubazione impiegato nel tronco i-esimo 32 βi = Li ki Di-ni costante che ingloba in sé più costanti caratterizzando il tronco i-esimo 3.2 L’impostazione matriciale 3.2.1 Matrice di connessione dei tronchi Si definiscono: S il numero dei serbatoi ed L il numero di tronchi della rete. Quindi si fissano, in modo arbitrario, i versi di percorrenza dei tronchi individuando così, per ciascuno di essi, il nodo di monte ed il nodo di valle. Il dislivello piezometrico Hi nel tronco i-esimo è dato dalla differenza tra la quota piezometrica hmi dell’estremo di monte e quella hvi dell’estremo di valle: Hi = hmi - hvi (3.3) Tale relazione può essere scritta nella forma più generale: N +S Hi = - ∑ (a ijh j ) (3.4) j=1 Introducendo i coefficienti aij definiti nel seguente modo: aij = 1 se il nodo j-esimo è l’estremità di valle del tronco i-esimo; aij = -1 se il nodo j-esimo è l’estremità di monte del tronco i-esimo; aij = 0 se il nodo j-esimo non appartiene al tronco i-esimo; Evidentemente, poiché ciascun tronco ha due estremità, per ogni valore dell’indice i i coefficienti aij, che compaiono nella sommatoria a secondo membro della (3.4), risultano tutti nulli ad eccezione di due: quello che si riferisce al nodo di valle e (aij=1) e quello che si riferisce al nodo di monte (aij=-1). Il sistema delle equazioni (3.4), in forma compatta si scrive: H=-Axh (3.5) 33 dove: H = [H1,H2,………,HL] = vettore di dimensioni [L x 1] dei dislivelli piezometrici Hi negli L tronchi della rete; h = [h1,h2,…….,hN,hN+1,hN+S] = vettore di dimensioni [(N+S) x 1] delle quote piezometriche hj negli (N+S) nodi della rete A = […aij…] = matrice [L x (N+S)] di connessione tronchi-nodi i cui elementi sono i coefficienti aij Al fine di separare i termini noti dalle incognite, è opportuno decomporre il vettore h in due vettori hn [N x 1] e hs [S x 1] cui componenti sono rispettivamente le N quote piezometriche (incognite) dei nodi interni, e le S quote piezometriche (note) dei serbatoi: h = [hN , hS] (3.6) Analogamente è opportuno decomporre la matrice di connessione tronchi-nodi A in due matrici AN [L x N] ed AS [L x S] i cui termini sono, rispettivamente, i coefficienti aij relativi ai nodi interni e quelli relativi ai serbatoi: A = [AN , AS] (3.7) Tenendo conto delle decomposizioni del vettore h e della matrice A, la (3.5) diviene: H = - (AN hN + AS hS) (3.8) 34 Si fa notare che il prodotto AN hN rappresenta un vettore [L x 1] le cui componenti dipendono dalle quote piezometriche (incognite) dei nodi interni; mentre AS hS è un vettore [L x 1] le cui componenti dipendono dalle quote piezometriche (note) dei serbatoi. 3.2.2 Equazioni di continuità dei nodi Considerando il fluido incomprimibile, le equazioni di continuità esprimono per ogni nodo interno alla rete (ovvero per ogni nodo distinto dai serbatoi) il bilancio delle portate in entrata ed in uscita. Avendo fissato a priori il verso di percorrenza di ciascun tronco ed assumendo la convenzione che le portate sono positive se entranti nel nodo e negative se uscenti, l’equazione di continuità per il generico nodo j-esimo si scrive: L ∑ (a , q ) + Q i =1 ji i j =0 (3.9) dove a’ji sono dei coefficienti definiti nel seguente modo: a’ji = 1 se il tronco i-esimo ha verso di percorrenza entrante nel nodo j-esimo; a’ji =-1 se il tronco i-esimo ha verso di percorrenza uscente dal nodo j-esimo; a’ji = 1 se il tronco i-esimo non è connesso con il nodo j-esimo; Le equazioni di continuità (3.9) costituiscono un sistema di N equazioni lineari indipendenti. In forma compatta il sistema (3.9) diventa: 35 A’N q + Q = 0 (3.10) dove: q = [q1 , q2 , …….. , qL ] = vettore [L x 1] delle portate qi (incognite); Q = [Q1 ,Q2 , …….. , QN] = vettore [N x 1] delle portate Qj (note); A’N = […….a’ji ………] = matrice [N x L] di connessione nodi interni-tronchi i cui elementi sono i coefficienti a’ji . Si noti che la matrice di connessione nodi interni-tronchi A’N si ottiene dalla matrice di connessione tronchi-nodi interni AN, introdotta nel paragrafo precedente, scambiando le righe con le colonne, cioè A’N è la matrice trasposta di AN. Indicando quest’ultima con ANT, la (3.10) si scrive: ANT q + Q = 0 (3.11) 3.2.3 Le due forme delle equazioni del moto lungo i lati Le equazioni del moto forniscono il legame tra i dislivelli piezometrici nei tronchi e le portate. Per il generico tronco i-esimo, si scrive: Hi = ri qiα (3.12) dove ri è la perdita di carico per portata unitaria che dipende, nel regime di moto assolutamente turbolento (di prevalente interesse tecnico), dal diametro, dalla scabrezza e dalla lunghezza del tronco; mentre l’esponente α della portata, nelle situazioni di pratico interesse, assume valori compresi tra 1,8 e 2. 36 L’equazione del moto (3.12) può anche essere espressa in un’altra forma apparentemente lineare rispetto alla portata qi : Hi = di qi (3.13) dove il coefficiente di = ri | qi | α -1 (3.14) dipendente dalla portata qi , assume valori positivi o nulli. Si osserva, dalla (3.13) e dalla (3.14), che il dislivello piezometrico Hi ha lo stesso segno della portata qi. In forma matriciale compatta, il sistema delle equazioni del moto si scrive: H=D q (3.15) dove D è la matrice diagonale [L x L], i cui termini sono i coefficienti di già definiti. L’equazione del moto (3.12) può anche essere posta in una seconda forma: Hi = gi qi (3.16) dove il coefficiente gi = ri 1 / α | Hi | 1 – 1 / α (3.17) dipende questa volta dal dislivello piezometrico Hi. Anche per le equazioni del moto nella forma (3.16) si osserva che il dislivello piezometrico Hi ha lo stesso segno della portata qi. Il sistema delle equazioni (3.16) si scrive in forma compatta: H=Gq (3.18) dove G è la matrice diagonale [L x L] i cui elementi diagonali sono i termini gi. 37 Riepilogando, il sistema delle equazioni del moto lungo i lati, si può scrivere in una prima forma (3.15) o in una seconda forma (3.18). Tali espressioni si differenziano per la struttura delle due matrici diagonali D e G che dipendono: la prima dalle portate qi e la seconda dai dislivelli piezometrici Hi. Tendendo conto dell’equazione (3.8), le due forme del sistema delle equazioni del moto lungo i tronchi si scrivono, infine, nel seguente modo: D q = - (AN hN + AS hS) (3.19) G q = -(AN hN + AS hS) (3.20) 3.2.4 Equazioni del moto riferite alle maglie. Matrice di connessione maglietronchi Per una maglia effettiva, la somma algebrica dei dislivelli piezometrici lungo i tronchi deve essere nulla; per una maglia virtuale (si ricorda che per maglia virtuale si intende una maglia che si chiude su due serbatoi contigui tramite un tronco di rete fittizio) tale somma deve invece eguagliare la differenza tra le due quote dei nodi esterni che delimitano la maglia stessa. Pertanto per ciascuna maglia effettiva può scriversi una relazione del tipo: L ∑δ i =1 ki Hi = 0 (3.21) mentre per ciascuna maglia virtuale si ha: L L N +S i =1 i =1 j= N +1 ∑δ ki H i = − ∑δ ki ∑ (a ij hj ) (3.22) 38 I coefficienti δki sono definiti nel seguente modo: δki = 1 se il tronco i-esimo ha verso concorde con la maglia k-esima; δki =-1 se il tronco i-esimo ha verso discorde con la maglia k-esima; δki = 1 se il tronco i-esimo non appartiene alla maglia k-esima; Le sommatorie a primo membro delle equazioni (3.21) e (3.22) rappresentano ovviamente le somme algebriche dei dislivelli piezometrici lungo i tronchi di ciascuna maglia; mentre il secondo membro della (3.22) rappresenta la differenza tra le quote piezometriche dei serbatoi che delimitano la maglia virtuale. In forma compatta tale sistema si scrive nella forma: C H = - C AS hS (3.23) in cui compare la matrice C, di dimensioni [(M+S-1) x L], detta matrice di connessione maglie-tronchi, i cui termini sono i coefficienti δki prima definiti. Se si esprime il vettore H mediante la (3.13), la (3.23) si trasforma infine nella: C D q + C AS hS = 0 (3.24) che rappresenta il sistema delle M+S-1 equazioni del moto riferite alle maglie. 3.2.5 Sistema completo delle equazioni della rete Nel problema di verifica di una rete bisogna dunque risolvere il sistema formato dalle N equazioni di continuità (3.11) e dalle L equazioni del moto lungo i tronchi. Poiché per queste ultime sono state dedotte due forme, la (3.19) e la (3.20), il 39 sistema completo delle equazioni della rete, a seconda che si sceglie l’una o l’altra, assume la forma: ANT q + Q = 0 D q = - (AN hN + AS hS) (3.25) oppure la forma: ANT q + Q = 0 G q = -(AN hN + AS hS) (3.26) Le due formulazioni si differenziano soltanto per le matrici D e G, attraverso le quali si esprime in forma apparentemente lineare la legge di resistenza, e che dipendono rispettivamente dalle portate circolanti nei tronchi e dalle quote piezometriche nei nodi. Pertanto, in realtà, il sistema (3.25) è non lineare rispetto alle portate qi, mentre il sistema (3.26) è non lineare rispetto alle quote piezometriche hj. In entrambi i casi, è necessario risolvere un sistema misto di L+N equazioni in altrettante incognite (le N quote piezometriche hj e le L portate qi). Tuttavia, la particolare struttura dei due sistemi consente di eliminare alcuni gruppi di incognite riducendo il numero delle equazioni da risolvere. Più esplicitamente è possibile, operando sul sistema (3.25), eliminare le incognite relative alle quote piezometriche nei nodi interni hj, per cui il problema viene ricondotto alla soluzioni di un sistema di sole L equazioni, alcune lineari ed altre non lineari, nelle L incognite qi. Operando sul sistema (3.26), invece, si riesce ad eliminare le incognite relative alle 40 portate qi, riconducendosi ad un sistema di sole N equazioni non lineari nelle N incognite hj. 3.2.6 Sistema ridotto nelle portate incognite Considerando nel sistema (3.25) le equazioni del moto riferite alle maglie al posto di quelle riferite ai tronchi, si eliminano le incognite quote piezometriche, e si ottiene un sistema ridotto di sole L equazioni nelle L incognite qi, che si scrive: ANT q + Q = 0 C D q + C AS hS = 0 (3.27) Tale sistema è costituito da N equazioni lineari e da M+S –1 equzioni non lineari nelle L portate qi. 3.2.7 Sistema ridotto nelle quote piezometriche incognite Nell’ipotesi che la matrice G sia invertibile (G è invertibile se tutti i coefficienti gi(Hi)≠0, ovvero se i dislivelli piezometrici Hi sono non nulli) dall’equazione (3.20) può ricavarsi il vettore q: q = -(G-1 AN hN + G-1 AS hS) (3.28) Sostituendo questa espressione nelle (3.11) si ottiene infine: ANT G-1 AN hN + ANT G-1 AS hS – Q = 0 41 (3.29) Tale sistema è costituito da N equazioni non lineari nelle N incognite quote piezometriche hj. Infatti si ricorda che i termini della matrice G dipendono dai dislivelli piezometrici e quindi dalle quote hj stesse. 42 CAPITOLO IV Sistemi non lineari di equazioni e problemi di ottimizzazione non vincolata Premessa Nel precedente capitolo si è analizzata la forma matriciale del sistema di equazioni che governa le reti idrauliche in pressione. Delle varie formulazioni proposte in [Curto, G. et al.] dagli autori Curto e Tumbiolo, si è scelto, per gli scopi di questo studio, di utilizzare il sistema “completo”: ANT q + Q = 0 D q = − (AN hN + AS hS) (3.25) seppure leggermente modificato come di seguito: ANT q + Q = 0 R abs(q) q + (AN hN + AS hS) = 0 (4.1) dove: R è sempre una matrice diagonale [L x L] ed i suoi elementi ri = ui Li abs(q) = vettore valore assoluto di q (ossia è quel vettore le cui componenti sono uguali ai valori assoluti delle componenti di q) Da tale forma si evince meglio la non linearità della seconda parte del sistema di equazioni (si tratta infatti di un sistema “misto”) che, pertanto, pur ammettendo 43 soluzione, questa non risulta di immediata determinazione. Ad essa si può giungere soltanto per approssimazioni successive adoperando opportuni algoritmi iterativi poiché non esiste una “forma chiusa” per determinare le soluzioni come, per esempio, nei sistemi lineari del tipo: Ax+B=0 dove, nell’ipotesi che A sia non singolare e prescindendo da eventuali problemi di condizionamento, si ha che: -1 x = −A B Si fa presente che, per la trattazione di questi argomenti, si è fatto riferimento alle pubblicazioni [Comincioli] e [Branch et al.]. 4.1 Sistemi non lineari di equazioni trasformati in problemi di ottimizzazione Non esistendo “forme chiuse” per la soluzione di un sistema non lineare di equazioni (4.1) (d’ora innanzi il sistema “misto” (4.1) sarà considerato più generalmente “non lineare”) occorre rifarsi ad un algoritmo iterativo in grado di giungere alla soluzione per approssimazioni successive. Si tratterà in definitiva (come si farà vedere nel seguito di questo capitolo) di risolvere, per via numerica, un problema di ottimizzazione non vincolata, cioè di determinare il minimo “ globale” non vincolato di una data funzione obiettivo (dove tale funzione rappresenterà proprio l’errore della generica soluzione di tentativo e sarà quindi denominata funzione d’errore). Per prima cosa, quindi, introduciamo la funzione che si intenderà minimizzare. 44 Trattasi di una funzione vettoriale di variabile vettoriale dove il “vettore variabile” è il vettore X avente come elementi le incognite del nostro sistema: X = [q1 q2 … qL hn1 hn2 … hN] = [q hN] (4.2) di dimensioni [N+L x 1], dove (come si è già visto in precedenza): L = numero dei tronchi della rete N = numero dei nodi interni (cioè i nodi distinti dai serbatoi) Mentre il “vettore funzione” è definito dal vettore: F (X) = [ANT q + Q] ∪ [R abs(q) q + (AN hN + AS hS)] (4.3) sempre di dimensioni [N+L x 1] in quanto unione dei due vettori [ANT q + Q] e [R abs(q) q + (AN hN + AS hS)] aventi dimensioni rispettivamente [N x 1] ed [L x 1]. Risolvere il sistema (4.1) diviene in tal modo equivalente a ricercare quel vettore X tale da annullare il vettore F. Impostato così il problema non è ancora, a rigore, un problema di ottimizzazione non vincolata, in quanto non esiste una relazione d’ordine totale (≤) per F, non essendo una grandezza scalare. Si tratta in effetti di un problema di ottimizzazione non vincolata più complesso, detto anche problema di ottimizzazione non vincolata multi-obiettivo. In tal caso infatti la funzione obiettivo è la funzione vettoriale denominata funzione errore, definita come segue: 45 errore (X)= ( |F1| |F2| |F3| … |FN+L| ) (4.4) Si evince immediatamente la impossibilità di minimizzare “globalmente” tale funzione vettoriale non esistendo per esso una relazione di ordine totale (≤) che permetta di stabilire se, per due distinti valori del vettore variabile X1 e X2, valga: errore1 ≤ errore2 oppure errore2 ≤ errore1 Ciò non è possibile in quanto è noto che l’insieme ℜN+L non è dotato della relazione d’ordine totale, per cui non è possibile determinare se, ad esempio, il vettore [1, 2] sia maggiore o minore rispetto al vettore [10,11]. Difatti in ℜN+L esiste solo una relazione di uguaglianza tra gli elementi, cioè si può solo dire se due vettori sono uguali (il che avviene se le componenti dei due vettori sono ordinatamente uguali) oppure no. In tale prospettiva, non potendo confrontare due distinte soluzioni di tentativo, le uniche ricerche iterative possibili sono la ricerca casuale e la ricerca “a tappeto”. Entrambi i metodi esplorano lo spazio delle soluzioni ℜN+L in tutta la sua estensione, il primo in maniera random ed il secondo con step di ricerca costante. Tali modalità di ricerca assicurano ovviamente la determinazione della soluzione ma con tempi lunghissimi di elaborazione che, per problemi con elevato numero di incognite, possono diventare tempi “storici” anche per le macchine più veloci. Tra l’altro, la precisione della soluzione finale è funzione dello step della ricerca, il che pone anche dei grossi limiti alla precisione della soluzione finale, non potendosi 46 diminuire eccessivamente lo step per i motivi di carattere temporale di cui sopra. Tornando alla ottimizzazione non vincolata multi-obiettivo, per ovviare agli inconvenienti precedentemente discussi, è necessario “scalarizzare” la funzione obiettivo in quanto è solo per le grandezze scalari, cioè per gli elementi di ℜ, che esiste una relazione d’ordine totale (≤). Per far ciò esistono nel campo dell’analisi numerica varie metodologie, tra cui una delle più usate è quella denominata metodo dei minimi quadrati, che consiste nell’adottare come funzione obiettivo scalare una nuova funzione errore, definita come segue: errore(X) = F2 = N+L ∑F 2 i (4.5) i =1 dove Fi è l’ i-esima componente del vettore F. Il metodo è detto dei minimi quadrati in quanto, il problema di ricercare il vettore X che annulli il vettore F, si trasforma nella ricerca del vettore X che minimizzi (o al più annulli, se esiste una soluzione esatta) la funzione scalare errore definita come sommatoria dei quadrati delle componenti del vettore errore. La risoluzione del sistema di equazioni (4.2) diventa, pertanto, un problema classico di ottimizzazione non vincolata ovvero un problema di ottimizzazione monoobiettivo, dove la funzione obiettivo da “ottimizzare” (in questo caso da “minimizzare”) è appunto la funzione errore definita in (4.5). E’ inoltre evidente come la funzione errore sia dotata di almeno un minimo 47 globale, uguale a zero, in corrispondenza della soluzione del sistema. Infatti il modulo di F è per definizione sempre positivo e si annulla solo quando il vettore F coincide con il vettore nullo (il che, per come si è definito F, si avvera solo per la soluzione del sistema). Lo stesso vale anche per il modulo di F elevato al quadrato. In definitiva il sistema iniziale di equazioni (4.1) : ANT q + Q = 0 R abs(q) q + (AN hN + AS hS) = 0 è stato trasformato nel seguente problema di ottimizzazione: min errore(X) = F2 = N+L ∑F 2 i (4.6) i =1 X ∈ ℜN+L dove : X = [q1 q2 … qL hN1 hN2 … hNN] = [q hN] F (X) = [ANT q + Q] ∪ [R abs(q) q + (AN hN + AS hS)] mentre per le matrici AN AS R ed il vettore Q si vedano le definizioni del capitolo III. Esiste anche un altro metodo molto utilizzato per “scalarizzare” la funzione vettoriale obiettivo definita in (4.4) (e quindi rendere mono-obiettivo il problema di ottimizzazione non vincolato che altrimenti risulterebbe multi-obiettivo). Si tratta del metodo delle somme pesate, che è in un certo modo analogo al metodo dei minimi quadrati, anzi si vedrà come quest’ultimo non sia che un caso particolare del metodo delle somme pesate. 48 Per tale metodo la funzione errore scalare è definita come segue: N+L errore(X) = ∑w i Fi2 (4.7) i =1 dove: wi sono N+L coefficienti scalari detti pesi Fi sono le componenti del vettore F Con tale metodo è possibile attribuire un peso diverso alle singole equazioni del sistema di equazioni (4.2). Fi è infatti proprio l’errore della soluzione di tentativo riferito all’i-esima equazione del sistema. Moltiplicando Fi per wi si può così calibrare l’importanza relativa delle singole equazioni del sistema ed ovviare ad eventuali discriminazioni indesiderate di tipo numerico, dovute per esempio a particolari unità di misura che potrebbero privilegiare alcune grandezze anziché altre in quanto non è detto che le incognite di un sistema siano grandezze omogenee. Nella fattispecie del sistema (4.2) in studio, infatti, le incognite non sono grandezze omogenee, in quanto le prime N incognite sono portate mentre le restanti L incognite sono quote piezometriche. L’adozione di un particolare tipo di unità di misura potrebbe pertanto penalizzare la ricerca delle portate rispetto alle altezze piezometriche o viceversa in quanto gli errori Fi delle singole equazioni non sono né grandezze adimensionali né grandezze omogenee 49 tra loro e quindi non sono direttamente sommabili indiscriminatamente. L’introduzione dei pesi wi serve appunto a risolvere questo problema. Con questo secondo metodo (che degenera nel precedente qualora i pesi wi siano uguali) il problema di ottimizzazione non vincolata diviene: N+L min 2 errore(X) = ∑ w i Fi (4.8) i =1 X ∈ ℜN+L Nel seguito di questo studio saranno utilizzate entrambe le metodologie fin qui esposte. 4.2 Ipersuperficie d’errore A questo punto il problema è identificare il miglior metodo di ottimizzazione non vincolata per risolvere il problema (4.6) o il problema (4.8) a seconda del metodo di scalarizzazione scelto. E’ ovvio che il metodo più idoneo dipende dal tipo di problema che si vuole affrontare. Per ogni problema è diverso infatti il tipo di ipersuperficie di errore nell’iperspazio delle soluzioni possibili (si utilizza il prefisso iper per indicare spazi e superfici di ℜN quando N>3). Dove, sia ℜN+L l’iperspazio delle soluzioni possibili (ovvero il dominio di F(X) o ancora l’insieme dei possibili X), l’ipersuperficie d’errore si definisce come quel sottospazio di ℜN+L+1 avente la proprietà seguente: 50 IS-errore ={(x1 x2 … xN+L+1) ∈ ℜN+L+1 xN+L+1 = errore(x1 x2 … xN+L)} quindi come l’insieme dei vettori di ℜN+L+1 che (4.9) hanno la componente lungo la dimensione N+L+1-esima uguale al valore della funzione errore calcolata rispetto al vettore delle prime N+L componenti. Nel caso in cui si ha X = vettore ∈ ℜ 2, l’iperspazio delle soluzioni possibili coincide con il piano x-y mentre l’ipersuperficie d’errore degenera in una superficie dello spazio avente le stesse coordinate planimetriche x,y del punto e altezza z = errore (x,y); di qui le denominazioni Ipersuperficie d’errore e Iperspazio delle possibili soluzioni. Come accennato, l’ipersuperficie d’errore può essere di diversi tipi a seconda del problema in studio. Si cercherà pertanto di individuare le caratteristiche dell’ipersuperficie d’errore che caratterizza il problema di ottimizzazione in esame. Si può subito dire, innanzitutto, che si tratta di una superficie continua in quanto i termini che compaiono in ogni singola equazione del sistema di equazioni (4.2) sono funzioni continue e pertanto sono continue anche le funzioni Fi componenti della funzione vettoriale F in quanto somme e differenze di funzioni elementari continue. E’ quindi continua anche la funzione errore definita in (4.5), o in (4.7), essendo una combinazione lineare di quadrati di funzioni continue. Di conseguenza è continua anche l’ipersuperficie d’errore per come essa è definita. In modo analogo può dimostrarsi che la funzione errore (e di conseguenza 51 l’ipersuperficie d’errore) è continua anche rispetto alle derivate prime e seconde. Si può quindi assumere che l’ipersuperficie d’errore è una funzione di classe C(2). 4.3 Algoritmi risolutori di problemi di ottimizzazione non vincolata A questo punto occorre identificare un buon metodo e pertanto un buon algoritmo per la risoluzione del problema di ottimizzazione non vincolata, in funzione del tipo di ipersuperficie d’errore. Come in precedenza visto, tra gli innumerevoli algoritmi afferenti la disciplina dell’analisi numerica finalizzati alla risoluzione di problemi di ottimizzazione, è possibile distinguere quelli che utilizzano il calcolo delle derivate di ordine n-esimo da quelli che non lo usano affatto. Ai primi appartengono il metodo di Cauchy o steepest descent, i metodi di Newton, quasi-Newton, Gauss-Newton e tanti altri ancora. I secondi sono in genere di più recente ideazione, e molti sono ancora in fase di “validazione” da parte della comunità scientifica. A questi ultimi appartengono gli algoritmi genetici, dei quali si è fatto menzione nella premessa e dei quali si tratterà estensivamente nel capitolo successivo. Difatti uno dei principali obiettivi di questo lavoro consisterebbe proprio nel fornire un piccolo contributo scientifico a tale “validazione” mediante l’applicazione di questa metodologia, congiuntamente ad altre più classiche per i motivi di cui si dirà nel seguito di questo capitolo, alla risoluzione del problema di ottimizzazione in esame. Si cercherà ora di analizzare l’enorme differenza concettuale e applicativa esistente 52 tra gli algoritmi di tipo derivativo (cioè che utilizzano le derivate di ordine n-esimo) e quelli di tipo non derivativo quali gli algoritmi genetici. Gli algoritmi derivativi utilizzano infatti l’informazione derivativa per spostarsi, per ogni ciclo dell’iterazione, da un punto generico dell’iperspazio delle soluzioni possibili ad un punto più prossimo alla soluzione (ossia al valore che ottimizza la funzione obiettivo). Per far ciò l’algoritmo deve determinare sia la “direzione” sia il “modulo” dello “step di avanzamento”. L’informazione derivativa serve all’algoritmo per conoscere l’andamento della ipersuperficie d’errore (ad esempio calcolando la pendenza mediante le derivate prime e la curvatura mediante le derivate seconde) nell’intorno del punto dato. In tal modo l’algoritmo determina la direzione di “massima pendenza” dell’ipersuperficie mediante il vettore “gradiente” e stima la distanza dal punto di minimo attraverso la conoscenza delle derivate di ordine superiore (attraverso la matrice “hessiana” nel caso delle derivate del second’ordine). Si può ad esempio determinare il valore da assegnare allo step di ricerca sfruttando l’osservazione che la curvatura usualmente aumenta con l’approssimarsi del punto di ricerca al punto di minimo. Questo tipo di algoritmi è molto “efficiente” in termini di velocità e robustezza nel ricercare la soluzione del problema, ma ha il grave “handicap” qualora l’ipersuperficie d’errore assuma una configurazione tale da presentare più punti di minimo locali, cioè qualora l’ipersuperficie abbia un minimo globale e più minimi 53 locali. La soluzione finale dipende allora dal punto iniziale di ricerca in quanto, come appena detto, i metodi derivativi sono degli “algoritmi di discesa”, ossia in grado di “discendere il pendio” dell’ipersuperficie d’errore fino al fondo (dove restano “catturati”) ma non hanno la possibilità di poter stabilire se il “pendio” che stanno discendendo è il pendio del minimo globale oppure quello di un minimo locale. L’unico modo per essere sicuri di raggiungere il minimo globale sarebbe quello di fornire all’algoritmo un punto iniziale di ricerca situato all’interno della concavità del minimo globale. L’efficienza e la velocità di questi algoritmi si scontra, in definitiva, con la grossa limitazione di fornire una soluzione finale dipendente dal punto iniziale di ricerca. Al contrario gli algoritmi che non usano l’informazione derivativa sono molto più lenti nel convergere verso il minimo della funzione obiettivo, ma sono al contempo esenti dalle limitazioni appena viste ingenerate proprio dall’uso dell’informazione derivativa. Si tratta di una classe di algoritmi di recente sviluppo tra cui spiccano, per novità e per efficienza, gli algoritmi genetici (l’efficienza è tuttavia, come accennato, in fase di “validazione”). Data la non linearità del sistema di equazioni (4.1) l’ipersuperficie d’errore (4.9) relativa al problema (4.6) o (4.8) può presentare più punti di minimo locale. Per la determinazione del minimo globale con i classici algoritmi derivativi è pertanto necessaria la determinazione di un punto iniziale di ricerca all’interno della 54 concavità del minimo globale. La risoluzione del problema (4.6) o (4.8) si scinde pertanto nella risoluzione di due sotto-problemi distinti: 1) scegliere un punto iniziale di ricerca interno alla concavità del minimo globale 2) determinare il minimo globale a partire dal punto iniziale Nel capitolo VII verrà mostrato come si possa risolvere il primo sotto-problema mediante gli algoritmi genetici ed il secondo mediante una metodologia derivativa particolarmente efficiente denominata metodo di Gauss-Newton. Nei capitoli 5 e 6 saranno illustrate invece le rispettive metodologie nel dettaglio. 55 CAPITOLO V Algoritmi genetici Premessa In questo capitolo si descrivono gli algoritmi genetici ed il loro funzionamento. Parte delle informazioni sono tratte da [Schneider, O. et al.] e da [Poyhonen, H.O. et al.]. 5.1 Cenni sulla Teoria dell’Evoluzione Gli algoritmi genetici si ispirano alla moderna teoria dell’evoluzione. Essa si fonda sulla teoria darwiniana dell’evoluzione ideata da Charles Darwin e divulgata dallo stesso nel 1859 nella pubblicazione dal titolo “On the Origin of Species by Means of Natural Selection”. In quest’opera egli enunciò una teoria evoluzionistica sull’origine delle specie viventi basata sui seguenti presupposti: 1) Tutti gli organismi generano più discendenti di quanti in realtà ne possano sopravvivere. 2) Il gran numero di individui è causa di una continua lotta fra loro per l’esistenza. 3) Gli organismi appartenenti ad una data specie presentano una certa variabilità. 4) Di ogni specie, sopravvivono gli individui migliori o quelli che meglio si adattano. 5) Gli organismi che sopravvivono trasmettono le loro variazioni ai discendenti. 56 Darwin aveva quindi contemplato la variabilità e l’ereditarietà dei caratteri della specie fra i presupposti per l’evoluzione, ma non poteva conoscere a fondo i fattori che le determinavano e i meccanismi in esse implicati in quanto non erano ancora stati scoperti. Nel 1901 il botanico olandese Hugo De Vries propose una teoria del processo evolutivo basato sulle mutazioni ribadendo i concetti di Darwin sulla variabilità degli individui e sulla sopravvivenza del più adatto, e spiegando l’insorgenza delle variazioni con le mutazioni e con altre variazioni del patrimonio genetico. Oggi la biologia è andata oltre nella spiegazione dei meccanismi che governano l’evoluzione traendo profitto dai recenti progressi scientifici della genetica e della biochimica per spiegare la variazioni e la trasmissione del patrimonio genetico. Si può oggi ritenere che la variabilità degli individui si attui attraverso i seguenti meccanismi: -mutazioni geniche -mutazioni cromosomiche -ricombinazione di geni Le mutazioni geniche e cromosomiche, insieme alle ricombinazioni geniche, costituiscono dunque le basi della variazione negli organismi, ma è sempre l’ambiente (come nella teoria di Darwin) a governare il processo selettivo determinando quali variazioni siano favorevoli o sfavorevoli alla sopravvivenza dell’individuo. 57 Di conseguenza è l’ambiente a determinare il senso cui si svolge l’evoluzione. La variabilità dei caratteri, da sola, non è in grado di garantire il processo evolutivo senza la contemporanea “pressione selettiva” che l’ambiente esercita sulle specie mediante la “selezione naturale”. In definitiva quindi l’evoluzione della specie sarebbe frutto, secondo la moderna teoria evoluzionistica, della contemporanea azione di tre fattori: 1) mutazioni geniche e cromosomiche 2) ricombinazione dei geni 3) selezione naturale 5.2 Introduzione agli algoritmi genetici Le fondamenta teoriche degli algoritmi genetici sono state gettate da J.H. Holland in [Holland, J.H.] ed approfondite successivamente da D.E. Goldberg in [Goldberg, D.E.] e da Z. Michalewicz con [Michalewicz, Z.]. Gli algoritmi genetici (detti anche in modo abbreviato GA dall’anglosassone genetic algorithms) sono stati sviluppati per risolvere problemi di ottimizzazione non risolvibili con le tecniche tradizionali (algoritmi derivativi ecc.). Gli algoritmi genetici si sono dimostrati validi soprattutto per risolvere problemi caratterizzati da una spiccata “non linearità” che presentano pertanto una ipersuperficie d’errore con numerosi punti di minimo locale. A partire da una popolazione iniziale di individui (la popolazione è un insieme di soluzioni possibili) usualmente scelta in modo casuale nell’iperspazio delle soluzioni 58 possibili, gli algoritmi genetici, mutuando il meccanismo evolutivo delle specie teorizzato da Charles Darwin (si veda il precedente paragrafo a proposito), generano popolazioni sempre più evolute, ossia soluzioni sempre più prossime alla soluzione di ottimo (cioè quella che risolve il problema di ottimizzazione). 5.3 Come funzionano gli algoritmi genetici Il meccanismo evolutivo è simulato tramite un processo iterativo in cui ogni iterazione rappresenta una singola generazione della popolazione a partire dalla popolazione immediatamente precedente. Ogni generazione, a sua volta, si compone essenzialmente di due fasi denominate: selezione e riproduzione. La selezione, il cui nome deriva dalla selezione naturale della teoria darwiniana, è il meccanismo selettivo che ad ogni successiva generazione determina gli individui più adatti (in inglese “fittest individuals”) mediante una funzione di adattività (in inglese “fitness function”) che coincide con la “funzione obiettivo” del problema di ottimizzazione (si noti sin d’ora che la funzione obiettivo non influenza la struttura dell’algoritmo genetico). Gli individui più adatti sono pertanto quelle soluzioni a cui corrisponde un valore maggiore della funzione obiettivo. Questi individui saranno quelli a cui è concesso di riprodursi, trasferendo ai figli parte della loro informazione genetica (si vedrà meglio in seguito come), mentre gli altri saranno scartati. Utilizzando invece il “gap generazionale”, un numero prestabilito di individui 59 viene trasferito alla generazione successiva senza alterazioni di sorta, ipotizzando quindi la sopravvivenza di alcuni individui particolarmente “adatti”. La riproduzione avviene mediante due distinti meccanismi: il crossover (termine traducibile in “incrocio” ma ormai entrato pienamente in uso anche nella vulgata italiana) e la mutazione. Il primo simula la riproduzione “sessuata” di due individui in cui mediante l’incrocio (crossover) dei cromosomi dei due genitori si ottengono i cromosomi dei figli. In tal modo, generazione dopo generazione, la popolazione “evolve” verso la “soluzione ottimale”. Il secondo invece rappresenta, come facilmente intuibile dal nome stesso, l’evento aleatorio per il quale si attua l’alterazione di un gene a caso del cromosoma soggetto a mutazione. La mutazione è importante almeno quanto e, come si vedrà in seguito, forse più del crossover perché è grazie alla mutazione che l’algoritmo è in grado di esplorare tutto l’iperspazio delle soluzioni possibili senza venire intrappolato in un minimo locale come succedeva invece alle procedure derivative tradizionali esaminate nel capitolo IV. La probabilità della mutazione è quindi uno dei parametri più influenti ed interessanti sul funzionamento degli algoritmi genetici. Un valore troppo potrebbe non consentire all’algoritmo di esplorare in modo adeguato tutto l’iperspazio delle soluzioni possibili e quindi di determinare minimo globale. 60 START Crea popolazione iniziale Valuta l’adattività Selezione per ciascun cromosoma Crossover riproduzione Mutazione Sostituisci vecchia generazione con generazione nuova no Condizione terminale ? si END Fig.5.1 – struttura dell’algoritmo 61 Viceversa, un valore troppo alto della probabilità di mutazione tramuterebbe l’algoritmo genetico in una mera ricerca casuale con la conseguente perdita di efficienza. In figura 5.1 è rappresentata la struttura fondamentale dell’algoritmo genetico 5.4 Alcune definizioni preliminari Come si è visto innanzi, gli algoritmi lavorano con una popolazione di individui, ciascuno rappresentante una possibile soluzione. Il termine “individuo” potrebbe essere causa di fraintesi in quanto gli algoritmi genetici operano sui cromosomi piuttosto che sugli esseri viventi che i cromosomi codificano. Pertanto si preferisce parlare di cromosomi invece che di individui. Ogni cromosoma porta le informazioni per costruire un essere vivente, cioè la soluzione del problema in questione. Pertanto il cromosoma identifica il genotipo mentre la soluzione rappresenta il fenotipo. Un cromosoma è un insieme di elementi, i cosiddetti geni, posti in un certo ordine. Il posto che ciascun gene occupa all’interno del cromosoma è denominato loci, e lo stato del gene è detto allele. In natura ogni gene definisce una o molteplici caratteristiche dell’essere vivente (ad esempio il sesso o il gruppo sanguigno). Allo stesso modo, negli algoritmi genetici, i geni definiscono le caratteristiche del fenotipo quale potenziale soluzione del problema da risolvere. 62 5.5 Il problema della codifica e della rappresentazione Per assicurare che ogni potenziale soluzione sia presa in considerazione, occorre un’appropriata “codifica del problema” ed una adeguata “rappresentazione dei parametri”. Per codifica del problema si intende la determinazione del set di parametri capaci di descrivere ogni possibile soluzione del problema in questione. Ciò risulta abbastanza semplice quando si tratta di risolvere un problema di ottimizzazione non vincolata, ove il set di parametri coincide semplicemente con le componenti del vettore X, incognita del problema di ottimizzazione (4.6) o (4.8), ossia con le incognite scalari del sistema (4.1). Esiste anche una rappresentazione “floating point” (cioè in virgola mobile) di più recente implementazione che si è rivelata “numericamente più efficiente”. Nel seguito si esamineranno più in dettaglio entrambe le rappresentazioni. 5.5.1 Rappresentazione binaria La rappresentazione dei parametri nella forma originaria degli algoritmi genetici, proposta da Holland nel 1975, è la rappresentazione binaria. In tal caso i geni sono costituiti proprio dai bit della stringa binaria che rappresenta il set di parametri, mentre la stringa binaria completa costituisce il cromosoma. Nel caso in studio occorre effettuare la decodifica binaria del vettore variabile X, nel quale le componenti sono le incognite del sistema (4.1), come si è visto nel paragrafo 63 precedente analizzando il problema di rappresentazione. Dopo aver risolto il problema della codifica, il primo passo per effettuare la rappresentazione binaria consiste nell’assegnare un certo numero mi di bit della stringa binaria “cromosoma” alla decodifica di ciascuna componente xi del vettore X come in figura 5.2 . Fig. 5.2 – Assegnazione dei bit Poiché ogni stringa binaria di n bit individua 2n possibili combinazioni, ne consegue che la stessa stringa rappresenta biunivocamente un numero intero compreso tra 0 e 2n –1 . Per poter decodificare la stringa binaria nel vettore X è necessario quindi, dopo aver assegnato a ciascuna componente xi un numero di bit mi, convertire previamente xi in un numero intero compreso tra 0 e 2mi – 1. Per passare poi dai valori interi ai valori effetivi (cioè in virgola mobile) delle xi occorre definire per ciascuna di esse un intervallo di variabilità. Detti xi,min e xi,max rispettivamente gli estremi inferiori e superiori dell’intervallo di variabilità di ciascuna xi, la decodifica del segmento di stringa binaria (di mi bit) relativa alla i-esima componente sarà data dalle espressioni: 64 mi vi = ∑b j =1 (i) j xi = xi,min + ⋅ 2 j−1 (5.1) vi ⋅ (xi,max − xi,min) 2m i − 1 (5.2) dove: (i) bj è il j-esimo bit dell’i-esima componente vi rappresenta la decodifica intera del segmento di stringa binaria e la forma usata per la decodifica è quella più comune detta “decodifica con ordine normale”. Esiste infatti anche un’altra forma denominata “decodifica con ordine inverso”: mi vi = ∑b j =1 (i ) j ⋅ 2 mi − j−1 (5.3) che ha l’intento di assicurare che i bit più significativi di due parametri adiacenti siano vicini fra loro (ciò è ovviamente possibile quando i parametri sono due) come rappresentato in figura 5.3 . Fig. 5.3 – decodifica binaria con ordine inverso E’ chiaro quindi che la precisione massima con cui è possibile rappresentare xi è direttamente proporzionale al numero di bit mi assegnato a ciascuna componente e 65 inversamente proporzionale all’ampiezza dell’intervallo di variabilità (ximax - ximin). Difatti la precisione è ottenibile mediante la seguente relazione: ε = (xi,max − xi,min) / 2mi (5.4) In definitiva il numero totale di bit componenti il cromosoma (ovvero la stringa binaria “complessiva”) risulta essere: N+L lunghezza cromosoma = ∑m i =1 (5.5) i Di fatto la rappresentazione binaria non è altro che una discretizzazione del dominio così come lo step di ricerca delle procedure tradizionali, per cui, se si desidera un’elevata precisione per la soluzione, occorre “infittire” la discretizzazione e viceversa. 5.5.2 Rappresentazione floating point A partire dalla formulazione originaria degli algoritmi genetici di Holland il problema della rappresentazione è stato oggetto di molta investigazione. Michalewicz ha infatti mostrato, in [Michalewicz, Z.], come rappresentazioni più “naturali” del problema siano più efficienti e producano soluzioni migliori. L’attenzione di Michalewicz si è concentrata soprattutto sulla rappresentazione cosiddetta floating point (ossia in virgola mobile) dove i geni di ciascun cromosoma, anziché bit, sono numeri in virgola mobile vi. In tal modo le componenti xi del vettore variabile X non necessitano di alcuna 66 decodifica ma rappresentano esse stesse i geni vi del cromosoma: xi = vi (5.6) Un’altra possibilità, al posto di porre direttamente xi = vi , è quella di definire un intervallo di variabilità per i parametri xi e vi (analogamente a quanto visto per la rappresentazione binaria), imponendo che xi,min ≤ xi ≤ xi,max e vi,min ≤ vi ≤ vi,max, dopodiché si definisce la seguente relazione: xi = xi,min + vi ⋅ ( xi,max − xi,min) vi , max − vi , min (5.7) Il vantaggio di quest’ultimo modo di determinare xi sta nel fatto che l’algoritmo genetico non abbisogna più della conoscenza degli estremi dell’intervallo di variabilità xi,min e xi,max e pertanto, invece di dover maneggiare due vettori contenenti i limiti inferiori e superiori di tutte le componenti xi, l’algoritmo usa solo due costanti vi,min e vi,max poste pari a 0 e 1 rispettivamente. Per ogni parametro xi è necessario quindi un gene vi; pertanto il cromosoma consiste in un vettore di numeri in virgola mobile V = [ v1 …..vN+L] delle stesse dimensioni di X. La precisione non dipende più quindi dal numero di bit, ma dalla precisione interna del computer in uso, oltre che, nel caso della rappresentazione (5.7), dall’ampiezza dell’intervallo di variabilità delle xi (in modo inversamente proporzionale). Per ottenere con la rappresentazione binaria una precisione equivalente a quella 67 della rappresentazione floating-point (riferita agli elaboratori comunemente in uso) occorre un numero m di geni (pari alla lunghezza delle stringhe binarie) superiore a 30 che diventano N⋅m nel caso di problemi pluridimensionali (quello in corso di studio è un problema ad N+L dimensioni) con grossi problemi di velocità e di occupazione di memoria. Mentre, come si è appena visto, nella rappresentazione floating-point il numero di geni è pari semplicemente al numero N di dimensioni del problema. Sempre Michalewicz ha effettuato estensive sperimentazioni confrontando le prestazioni degli algoritmi genetici basati sui due tipi di rappresentazione fin qui descritti, ed ha mostrato come quelli operanti con la rappresentazione floating-point siano di un ordine di grandezza più efficienti, in termini di tempi macchina, rispetto a quelli operanti con rappresentazione binaria. Ci si sente di aggiungere, anche se di questo se ne parlerà più estensivamente nel capitolo VII, che il problema della velocità e dei tempi di esecuzione è, per gli algoritmi genetici, fortemente condizionante (a differenza di quanto avviene usualmente con altri tipi di algoritmi per i quali la velocità è solo un problema secondario). Alla luce di quanto sperimentato durante questo lavoro, si è riscontrato infatti che, a fronte di una indubbia efficienza di calcolo e versatilità d’impiego, tali algoritmi risultano particolarmente lenti, con tempi di calcolo che, per problemi complessi, facilmente possono diventare giorni, settimane e mesi. Non è pertanto d’importanza secondaria la scelta del tipo di rappresentazione, sebbene sui tempi di elaborazione incidano anche altri fattori non meno rilevanti quali il 68 linguaggio scelto per implementare il codice, il tipo di CPU e così via... 5.6 Funzione di adattività La funzione di adattività (dall’inglese “fitness function”), come già visto nel paragrafo 5.3, è il motore del processo selettivo dell’algoritmo genetico in quanto è in base ad essa che vengono selezionati gli individui, cioè i cromosomi più adatti. Nei problemi di ottimizzazione come il nostro essa coincide con la funzione obiettivo dell’ottimizzazione a meno del segno in quanto l’algoritmo genetico, per sua natura, evolve verso i cromosomi (gli individui) più “adatti”, cioè quelli che massimizzano la funzione di adattività. Pertanto l’algoritmo genetico è in grado di risolvere solo problemi di massimizzazione. Il segno della funzione di adattività è quindi lo stesso della funzione obiettivo per i problemi di massimizzazione; viceversa, per risolvere problemi di minimizzazione, come appunto il caso del problema in studio (4.6) o (4.8), la funzione obiettivo andrà cambiata di segno prima di “passarla” all’algoritmo genetico come funzione di adattività. 5.7 Selezione Come si è accennato nel paragrafo 5.3 non a tutti i cromosmi (individui) di una generazione è concessa la facoltà di riprodursi. Solo un certo numero prestabilito di cromosomi viene selezionato per la 69 riproduzione, mutuando così la teoria darwiniana della selezione naturale, ovvero della sopravvivenza del più adatto. Per ogni generazione, infatti, i cromosomi che si riprodurranno vengono selezionati dall’algoritmo in modo casuale con una probabilità di scelta che è funzione della “adattività del cromosoma” (questa determinabile mediante la funzione di adattività di cui si è detto poc’anzi). In realtà sono stati proposti numerosi metodi per assegnare la probabilità di scelta in funzione della adattività del cromosoma, detti anche “metodi selettivi”, ma due sono i metodi sinora più utilizzati, e quindi più “collaudati” dalla sperimentazione. Si tratta dei metodi denominati rispettivamente: standard roulette e fitness ranking. Il metodo della standard roulette, introdotto ed approfondito da Michalewicz, vuole simulare, come il nome stesso suggerisce, una “roulette virtuale” che abbia un numero di “slot” pari al numero complessivo di cromosomi (ossia quelli su cui si effettua la selezione). L’ampiezza degli slot della “roulette virtuale” non è costante, bensì è legata in modo direttamente proporzionale alla adattività del cromosoma. I cromosomi che si riprodurranno vengono quindi selezionati effettuando N “giri di roulette”, dove N rappresenta il numero prestabilito di “cromosomi genitori” (ovviamente N deve essere un numero pari in quanto, come si vedrà meglio nel seguito del capitolo, la riproduzione è di tipo “sessuata”). Si tratta in definitiva di un metodo che assegna alla probabilità di scelta di ogni 70 cromosoma un valore direttamente proporzionale alla sua adattività, ovvero: pi = F(X i ) (5.8) Npop ∑ F(X ) i =1 i dove: X è il cromosoma F è la funzione di adattività Npop è il numero complessivo di cromomi Questo metodo, sebbene sia il più utilizzato, presenta talvolta l’inconveniente della cosiddetta “convergenza prematura”. Succede infatti che cromosomi “particolarmente adatti” provochino l’esclusione degli altri dominando, in tal modo, il processo di generazione e causando la convergenza dell’algoritmo ad un minimo locale (sebbene si sia sottolineato che gli algoritmi genetici risolvono esclusivamente problemi di massimizzazione, d’ora innanzi, poiché si è cambiato il segno della funzione obiettivo, si considereranno anch’essi solutori del problema di minimizzazione (4.6) o (4.8) ). Per sopperire a questo problema è stato introdotto il metodo del fitness ranking (traducibile approssimativamente in “graduazione in base all’adattività”). Per prima cosa si effettua un riordinamento dei cromosomi della generazione attuale in base alla loro adattività determinando in tal modo un rank (cioè “grado” o “posizione in graduatoria”) per ciascuno di essi. 71 Dopodiché in base al rank assunto dai cromosomi, cioè alla loro “posizione in graduatoria”, si ricalcola per essi un nuovo valore di adattività indipendente dalla funzione obiettivo. In base ai nuovi valori di adattività saranno selezionati quindi i cromosomi più adatti con il metodo, precedentemente illustrato, della standard roulette. Riassegnando l’adattività dei singoli cromosomi solamente in funzione del rank, è possibile sopprimere eventuali “eccessi di adattività” con i conseguenti problemi di “convergenza prematura” succitati. Una formulazione per la determinazione della probabilità Pi di estrarre ciascun individuo dopo aver effettuato la graduatoria (ranking), è quella proposta in [Joines, J.A. et al.], detto anche metodo del “ranking a normalizzazione geometrica” in quanto basato sulla distribuzione geometrica normalizzata, per cui risulta: Pi = q′ (1 − q) r–1 (5.9) dove: r = rank dell’individuo (1 è il migliore) q = probabilità di selezionare l’individuo migliore P = dimensione della popolazione (cioè il numero di individui) q′ = q 1 - (1 - q) P In alternativa alla riassegnazione delle probabilità e successiva selezione con la standard roulette esiste la possibilità di selezionare direttamente i cromosomi “ordinati” mediante le funzioni di selezione che, in sostanza, assolvono entrambi i compiti. 72 Qui di seguito si riporta la funzione di selezione denominata biased ranking, che è parsa la più interessante dal punto di vista teorico e applicativo nonché la più flessibile e versatile: i = b - b 2 − 4 ⋅ (b − 1) ⋅ random Npop ⋅ 2 ⋅ ( b −1) (5.10) dove: i è il rank del cromosoma selezionato (ipotizzando di aver fatto un ranking o graduatoria in cui i primi elementi sono i più adatti e gli ultimi i meno adatti) b è il parametro di bias ( 1< b ≤ 2 ) che rappresenta il grado di “vantaggio” dei cromosomi più adatti rispetto a quelli meno adatti Fig. 5.3 – funzione selezione “biased ranking” 73 random è un numero casuale compreso tra 0 e 1 con probabilità uniformemente distribuita nell’intervallo La funzione di selezione è detta “biased” (traducibile in “non omogenea” ) in quanto la probabilità di selezione diminuisce per i cromosomi meno adatti a vantaggio dei più adatti mediante, appunto, l’introduzione del parametro di “bias” (cioè di “disomogeneità”). Per valori di bias prossimi a 1 la funzione di selezione degenera in una selezione casuale con stessa probabilità di scelta per tutti i cromosomi; mentre per valori di b prossimi a 2 è molto improbabile che i cromosomi meno adatti vengano selezionati. In definitiva la selezione, permettendo di riprodursi solo agli individui più adatti, fa sì che, ad ogni generazione, aumenti il valore medio dell’adattività dei cromosomi e quindi diminuisca il valore della funzione obiettivo del problema (4.6) o (4.8) (essendo uguale in modulo, ma di segno opposto alla funzione di adattività), per cui si può assimilare il processo evolutivo ad una discesa dei cromosomi sulla ipersuperficie di errore analogamente a quanto visto per le procedure derivative. 5.8 Riproduzione Come si è già introdotto nel paragrafo 5.3, la fase della riproduzione è quella in cui l’informazione genetica di una generazione viene trasmessa alla generazione successiva. Si entrerà ora nel merito del funzionamento dei due meccanismi selettivi (anche denominati “operatori genetici”) alla base della riproduzione: il crossover e la 74 mutazione. Poiché i due operatori genetici differiscono molto a seconda che si adotti la rappresentazione binaria o floating point, si è deciso di descriverli separatamente nei due tipi di rappresentazione. 5.8.1 Operatori genetici nella rappresentazione binaria 5.8.1.1 Crossover binario Compito dell’operatore crossover è quello di “simulare” la riproduzione sessuale di due individui nella quale, a partire dai cromosomi dei genitori si ottengono i cromosomi del figli attraverso un particolare “mescolamento” con successiva “ricomposizione” delle coppie di cromosomi originali detta meiosi. In realtà il crossover non è che uno dei vari meccanismi di incrocio cromosomico che avvengono in natura durante il processo meiotico, tuttavia è stato l’unico mutuato dagli algoritmi genetici in quanto, tra i vari meccanismi possibili, è quello più responsabile della ”variabilità” del codice genetico, ossia è quello che causa maggiori alterazioni cromosomiche. Il crossover difatti consiste nella rottura in un punto a caso delle due catene cromosomiche originarie (nella fattispecie della rappresentazione binaria le catene costituenti i cromosomi sono stringhe binarie) che si spezzano così in quattro segmenti. I segmenti iniziali, dei due cromosomi originari spezzati, si ricombinano ciascuno con il segmento finale dell’altro cromosoma dando luce così a due nuovi cromosomi “figli” del tutto distinti da quelli originari “genitori”. 75 cromosoma genitore 1 cromosoma genitore 2 1 0 1 0 0 1 0 1 0 0 1 1 1 0 1 0 1 0 1 1 1 0 1 0 0 0 1 0 0 1 0 1 cromosoma figlio 1 cromosoma figlio2 Fig. 5.4 – Crossover binario (puntuale) La figura 5.4, riferita ai cromosomi intesi come stringhe binarie, può aiutare a chiarire il funzionamento del crossover nella rappresentazione binaria. Come si è appena visto il crossover opera su coppie di cromosomi, pertanto occorrerà aver cura che dal processo di selezione esca sempre un numero pari di individui adatti per la riproduzione, in modo da poter suddividerli in coppie. Quello appena descritto è il crossover binario “classico”, denominato anche crossover puntuale (dall’anglosassone “single point crossover”) per distinguerlo dal crossover uniforme, di più recente ideazione. Il crossover uniforme nasce dall’idea di rendere ininfluente l’ordinamento dei geni all’interno del cromosoma (problema di cui si è accennato parlando della decodifica binaria con ordine inverso), rendendo in questo modo più “robusto” l’intero algoritmo. 76 cromosoma genitore 1 cromosoma figlio 1 1 0 0 1 0 0 1 1 1 0 1 1 0 0 1 0 0 0 1 1 1 1 1 0 0 0 0 1 0 1 1 1 cromosoma genitore 2 cromosoma figlio2 Fig. 5.5 – Crossover binario uniforme Per ogni coppia di cromosomi “genitori” viene scelta una “maschera di geni” in modo aleatorio, ossia vengono scelte casualmente le posizioni dei geni che saranno “scambiati” tra i due cromosomi genitori dando origine ai due nuovi cromosomi figli (si veda in proposito la fig.5.5). Il numero di geni da scambiare può essere anch’esso una variabile aleatoria oppure un parametro predeterminato. 5.8.1.2 Mutazione binaria Compito dell’operatore “mutazione” è invece, come lo stesso termine fa intendere, quello di simulare la mutazione genica di un cromosoma, cioè la mutazione casuale di un gene. Poiché nella rappresentazione binaria i geni dei cromosomi sono costituiti dai bit della stringa binaria, ne consegue che la mutazione binaria consiste nella variazione di un bit a caso della stringa (si veda fig.5.6). 77 cromosoma genitore 1 0 1 0 0 1 1 1 0 1 1 0 1 0 0 1 0 1 0 1 cromosoma figlio Fig. 5.5 – Mutazione binaria 5.8.2 Operatori genetici nella rappresentazione floating-point 5.8.2.1 Crossover floating-point Michalewicz ha proposto, sempre in [Michalewicz, Z.], tre differenti operatori crossover per la rappresentazione floating-point (ideata da lui stesso). Si tratta del crossover semplice, aritmetico ed euristico. Il crossover semplice è analogo al crossover puntuale della rappresentazione binaria con la sola restrizione che il punto in cui si spezzano i cromosomi genitori sia compreso tra i geni vi (che sono stavolta, come si ricorderà, numeri in virgola mobile), cioè che i singoli geni vi vengano ricombinati dal crossover ma non modificati nel loro valore. Il crossover aritmetico combina i due cromosomi genitori mediante una interpolazione dei cromosomi genitori (si ricordi che i cromosomi nella rappresentazione floating-point sono vettori che coincidono con i vettori soluzioni possibili del problema di ottimizzazione X), ossia di una particolare combinazione lineare degli stessi. 78 Detti p1 e p2 i vettori cromosomi “genitori”, i vettori cromosomi “figli” c1 e c2 sono determinati nel modo seguente: c1 = a ⋅ p2 + (1 − a) ⋅ p1 (5.11) c2 = a ⋅ p1 + (1 − a) ⋅ p2 (5.12) dove a è un valore casuale compreso in [0,1]. Trattandosi di una interpolazione si può essere sicuri che se i geni vi dei cromosomi genitori appartengono agli intervalli di variabilità [vi,min , vi,max] apparterranno sicuramente a tali intervalli anche i geni dei cromosomi figli. Il crossover euristico è invece una estrapolazione dei cromosomi genitori nella direzione del genitore più adatto (è difatti l’unico tra i gli operatori genetici a far uso dell’informazione “adattiva”). I cromosomi “figli” c1 e c2 sono determinati come segue: c1 = best + a ⋅ (best − worst) (5.13) c2 = best (5.14) dove : a è un valore casuale compreso in [0,1] best e worst sono rispettivamente il più adatto ed il meno adatto tra i due cromosomi “genitori” L’operatore crossover euristico ha però l’inconveniente di non poter assicurare, a differenza del crossover aritmetico, che i geni vi del cromosoma figlio c1 appartengano agli intervalli di variabilità [vi,min , vi,max]. Pertanto è necessario porre un ciclo di controllo di “validità” del cromosoma figlio 79 in serie all’operatore genetico. 5.8.2.2 Mutazione floating-point In modo analogo alla mutazione binaria l’operatore mutazione floating-point seleziona casualmente un gene e lo altera. Differentemente dalla mutazione binaria però, in cui l’unica alterazione possibile del bit consiste nel modificarlo da 1 a 0 o da 0 a 1, per l’alterazione di un numero in virgola mobile esistono infinite possibilità. Fig. 5.6 – funzione ∆(t, y) per tre diversi valori di t/T con b = 1.5 80 Sono stati introdotti quindi da Michalewicz gli operatori: mutazione uniforme, mutazione non uniforme, mutazione multi-non uniforme e mutazione di confine. La mutazione uniforme sceglie il nuovo valore vi’, del gene selezionato per la mutazione vi, in modo casuale all’interno dell’intervallo di variabilità [vi,min , vi,max] dello stesso gene, con probabilità di scelta uniformemente distribuita all’interno dell’intervallo. Diversamente, la mutazione non uniforme, usa un meccanismo più intelligente per determinare il nuovo valore del gene vi’, ossia: vi’ = vi + ∆(t, vi,max – vi) se r1 < 0,5 (5.15) vi’ = vi + ∆(t, vi – vi,min) se r2 ≥ 0,5 (5.16) con t 1− T 1 r 2 − ∆(t, y) = y ⋅ b (5.17) dove: t è il numero della corrente generazione T è il massimo numero di generazioni previste per l’algoritmo b è un parametro di “bias”, cioè il grado di non uniformità r1 e r2 sono due numeri casuali compresi in [0,1] , con probabilità uniformemente distribuita nell’intervallo In figura 5.6 è mostrata la funzione ∆(t, y) per tre diversi valori di t/T con b = 1.5. Una variante della mutazione non uniforme è l’operatore mutazione multi-non uniforme che applica contemporaneamente la mutazione non uniforme a tutti i geni del 81 cromosoma. La mutazione di confine seleziona invece il gene da mutare vi e ne altera il valore in vi’ nel modo seguente: vi’ = vi,min se r < 0,5 (5.18) vi’ = vi,max se r ≥ 0,5 (5.19) dove r è un numero casuale compreso in [0,1] , con probabilità uniformemente distribuita nell’intervallo 5.9 Parametri degli algoritmi genetici I seguenti parametri caratterizzano la “performance” degli algoritmi genetici: • Dimensione della popolazione: La dimensione della popolazione è il numero di individui che compone la popolazione. Una piccola popolazione di individui può creare problemi di convergenza prematura poiché è probabile che essa converga più velocemente. Al contrario, una grande popolazione richiede maggiore sforzo computazionale in quanto aumentano il numero di operazioni che l’algoritmo deve effettuare ogni generazione su ciascun cromosoma della popolazione. • Lunghezza del cromosoma: La lunghezza del cromosoma rappresenta il numero di geni. Per la rappresentazione floating-point esso è pari semplicemente al numero di componenti del 82 vettore soluzione, ossia al numero totale di incognite scalari del problema di ottimizzazione (4.6) o (4.8). Mentre, utilizzando la rappresentazione binaria, il numero di geni è in funzione della precisione richiesta per la soluzione finale tramite la relazione (5.4). • Gap generazionale: Il gap generazionale rappresenta la percentuale dei cromosomi che sono trasferiti alla generazione successiva senza alcuna modifica. In tal modo, ad uno o a più individui scelti tra i più “adatti” di ogni generazione si da la possibilità non solo di riprodursi, ma anche di continuare a “sopravvivere” nella generazione successiva, in modo da conservare intatte le informazioni genetiche degli cromosomi più adatti. Con un gap generazionale del 100% la riproduzione è sospesa e solo la selezione causa un miglioramento della adattività media della generazione. In tal modo, nessuna nuova informazione viene introdotta e l’algoritmo potrebbe trovare una soluzione solo qualora questa fosse già presente nella popolazione iniziale (il che è altamente improbabile). Per questo motivo si sceglie di solito un piccolo gap generazionale. • Elitismo: L’elitismo (dall’anglosassone “elitism”) è un’opzione dell’algoritmo genetico mediante il quale, nella riproduzione dei cromosomi, soltanto i “figli” che abbiano una “adattività” maggiore dei “genitori” passano alla generazione successiva. Se, per esempio, uno dei due “figli” è meno ”adatto” di entrambi i “genitori”, allora 83 passa alla generazione successiva l’altro “figlio” insieme al più “adatto” dei due “genitori”. L’elitismo assicura inoltre che i membri migliori della generazione corrente sopravvivano nella generazione successiva svolgendo, in questo modo, una funzione analoga al gap generazionale. • Probabilità del crossover: La probabilità del crossover rappresenta la probabilità che a ciascuna coppia di cromosomi selezionati venga applicato l’operatore crossover. Con una probabilità di crossover pari a 0% l’operatore crossover è sospeso e pertanto la riproduzione è affidata al solo operatore mutazione, mentre con una probabilità del 100% il crossover viene applicato a tutte le coppie di cromosomi selezionati. • Probabilità della mutazione: La probabilità della mutazione rappresenta, invece, la probabilità che un singolo cromosoma sia alterato dall’operatore mutazione. Questo parametro, come si è già accennato all’inizio del presente capitolo, è di fondamentale importanza, forse più di tutti gli altri, per il buon esito dell’algoritmo genetico in quanto ne condiziona fortemente la convergenza. In proposito si veda anche la conclusione del presente capitolo. • Condizione terminale: Dopo ogni generazione l’algoritmo verifica se la condizione terminale sia stata raggiunta o meno, ed in caso che la verifica abbia dato esito negativo l’evoluzione 84 genetica procede con la generazione successiva, altrimenti l’algoritmo si interrompe. La condizione terminale consta in effetti di due verifiche distinte. La prima verifica effettua semplicemente un confronto tra l’attuale numero di generazioni ed il massimo numero di generazioni. La seconda, invece, è una verifica di convergenza vera e propria, ossia si valuta la convergenza come somma delle deviazioni tra gli individui della popolazione, in quanto nell’algoritmo genetico la popolazione, mentre evolve verso la soluzione ottimale, tende ad uniformarsi sempre più. Un’altra verifica di convergenza possibile è il mancato miglioramento della soluzione per un certo numero di generazioni. La convergenza può essere infine valutata in modo esplicito qualora sia noto a priori il valore che la funzione obiettivo (cioè la funzione di adattività dell’algoritmo genetico) assume nel punto di massimo. In tal caso si valuta lo scarto tra detto valore massimo ed il valore dell’adattività del cromosoma “più adatto” della popolazione attuale. Il problema di ottimizzazione (4.6) o (4.8) oggetto del presente studio è proprio uno di quei problemi di ottimizzazione per i quali è dato di conoscere a priori il valore del massimo, che è uguale a zero sia per il problema (4.6) sia per il problema (4.8). Pertanto nel caso specifico il controllo sulla convergenza è stato effettuato mediante la valutazione dello scarto, imponendo per questo un determinato valore di soglia, mentre non si è ritenuto opportuno utilizzare la condizione del numero di generazioni perché non garantisce in alcun modo la convergenza. 85 Conclusione Ogni algoritmo di ottimizzazione ingloba in sé due opposte tecniche di ricerca della soluzione, dosate in un certo rapporto, e definibili rispettivamente: esplorazione e approfondimento. L’esplorazione assicura che l’algoritmo investighi nuove aree dell’iperspazio delle soluzioni possibili e non si concentri esclusivamente su una parte di questo. L’approfondimento, invece, mette a frutto la conoscenza già acquisita per progredire nella ricerca della soluzione. I due casi estremi, nei quali viene adoperata solo una delle due tecniche, sono gli algoritmi di ricerca casuale da una parte, che effettuano una ricerca di tipo esclusivamente “esplorativo”, e gli algoritmi derivativi o di “discesa” dall’altra, che viceversa operano solo una ricerca di “approfondimento” (entrambe le tipologie di algoritmo sono state esaminate nel capitolo precedente). Secondo l’opinione del loro ideatore J.H. Holland, gli algoritmi genetici avrebbero proprio la caratteristica di combinare in modo ottimale entrambe le tecniche di ricerca. Sia l’esplorazione sia l’approfondimento, negli algoritmi genetici, procedono “contemporaneamente” e sono svolte rispettivamente dagli operatori mutazione e crossover. E’ per questo motivo che è così importante, ai fini di una convergenza ottimale, il valore che si impone alla probabilità di mutazione. E’ chiaro, infatti, che una probabilità di mutazione troppo bassa priverebbe l’algoritmo della sua componente “esplorativa” forzando la popolazione a convergere 86 verso un minimo locale e non un minimo globale (questo tipo di convergenza è detto appunto “convergenza prematura”). Viceversa risulta altrettanto chiaro come una probabilità di mutazione troppo elevata farebbe degenerare l’algoritmo genetico in una “ricerca casuale”, ovvero di tipo puramente “esplorativo”, privandolo della capacità di “approfondimento”. In tal caso l’algoritmo non sarebbe più in grado di “convergere” verso la soluzione di massimo globale pur essendo in grado di “avvicinarvisi” mediante una estensiva ricerca “esplorativa”. La sperimentazione effettuata finora sugli algoritmi genetici ha portato a definire dei valori ottimali per la probabilità di mutazione a seconda del tipo di problema da risolvere. In generale sono consigliati valori compresi nell’intervallo [0,02;0,10]. 87 CAPITOLO VI Metodi classici di ottimizzazione non vincolata: algoritmi di Newton, quasi-Newton e Gauss-Newton Premessa Nel capitolo V si è riportata l’opinione di Holland circa la capacità degli algoritmi genetici di dosare in maniera ottimale le due tecniche di ricerca esplorativa e di approfondimento. Purtuttavia, alla luce della sperimentazione numerica svolta durante questo lavoro per applicare gli algoritmi genetici alla risoluzione del problema (4.6) o (4.8), ed in base all’opinione riscontrata nelle pubblicazioni [Houck, C.R. et al.] e [Schneider, O. et al.], è emerso un evidente fenomeno di rallentamento progressivo della convergenza, definito problema di “slow finish”. Il rallentamento risulta talmente sensibile da richiedere, per ottenere soluzioni particolarmente accurate, tempi di elaborazione dell’ordine delle settimane e dei mesi. Per risolvere in modo “efficiente” il problema (4.6) o (4.8) si è pertanto pensato di collegare gli algoritmi genetici “in cascata” ad algoritmi di ottimizzazione “tradizionali”, ai quali è stata fatta menzione nel capitolo IV, quali il metodo di Cauchy o metodo steepest descent, il metodo di Newton, i metodi quasi-Newton e infine le metodologie per risolvere i “minimi quadrati non lineari”: il metodo di GaussNewton ed il metodo di Levenberg-Marquardt. 88 Si tratta di algoritmi molto efficienti (ossia molto veloci) che hanno, però, il grosso svantaggio di fornire una soluzione finale dipendente dal punto iniziale della ricerca. Come è stato accennato alla fine del capitolo IV e si approfondirà nel capitolo VII, agli algoritmi genetici si è riservato il compito di fornire un “buon” punto iniziale, cioè un punto dell’ipersuperficie di errore interno alla concavità del minimo globale. Spetta poi all’algoritmo “tradizionale” il compito di convergere “efficientemente” dal punto dato al punto di minimo globale discendendo “rapidamente” il pendio dell’ipersuperficie fino al “fondo”. E’ per questo motivo che questi metodi sono denominati algoritmi di discesa. In questo capitolo si illustrerà il funzionamento teorico di questi metodi cercando di porre in risalto i pregi e i difetti di ciascuno, in relazione al tipo di problema che si desidera risolvere. A fine capitolo si è riportato anche il metodo di Newton-Rapshon, sebbene esso non sia propriamente un metodo di ottimizzazione, per poter confrontarne le caratteristiche con quelle degli altri metodi esposti. Questo metodo è infatti uno dei più utilizzati, a livello internazionale, per risolvere il sistema misto di equazioni (4.1) (si veda in proposito [[Curto, G. et al.]). 6.1 Metodi classici di ottimizzazione Nel capitolo IV si è delineata la netta distinzione esistente tra i metodi di ottimizzazione che utilizzano l’informazione derivativa (attraverso il calcolo delle derivate di vario ordine) ed i metodi che non la utilizzano. 89 Si è detto che quest’ultima classe di metodologie è alquanto più recente della prima per cui vi appartengono ancora un esiguo numero di algoritmi tra i quali gli algoritmi genetici di cui si è ampiamente discusso nel capitolo precedente. In questo capitolo si analizzeranno invece gli algoritmi del primo tipo, ossia quelli che si avvantaggiano dell’informazione derivativa. Tra tutti, si è scelto di focalizzare l’attenzione anzitutto sul metodo di Cauchy e sul metodo di Newton, universalmente noti per la loro “efficienza”, “velocità” e “robustezza”, e quindi, proseguendo, sui cosiddetti metodi quasi-Newton, Gauss- Newton e Levenberg-Marquardt che rappresentano differenti “stadi evolutivi” dell’originario metodo di Newton. Si fa presente che per la trattazione di questi argomenti è stato fatto riferimento alle pubblicazioni [Comincioli] e [Branch et al.]. 6.2 Metodo di Cauchy (o metodo “steepest-descent”) Per prima cosa si ipotizza per semplicità che, d’ora innanzi, i problemi da risolvere siano problemi di minimizzazione multidimensionale (nel caso della massimizzazione basterà cambiare il segno della funzione obiettivo), ossia: min f(X) (6.1) X ∈ ℜN Il metodo della discesa più ripida (“steepest descent”), proposto da Cauchy nel 1845, è un metodo del gradiente, in quanto tiene conto solo delle derivate di prim’ordine. 90 Inoltre, come tutti i metodi che usano l’informazione derivativa, è un metodo iterativo, nel senso che genera, a partire da una stima iniziale x1, una successione di approssimazioni x2, x3,…, ognuna della quali è ottenuta mediante la risoluzione di un problema di minimo unidimensionale. Più precisamente, nel metodo steepest descent la successione { xk} è definita, per k = 1,2,…, nel modo seguente: xk+1 = xk+1 − λk* gk (6.2) dove: gk è il gradiente ∇f (x) calcolato nel punto xk , che rappresenta la direzione della ricerca (in realtà la direzione di ricerca, trattandosi di un problema di minimizzazione, ha verso opposto rispetto al gradiente, per cui la vera direzione di ricerca è −gk) λk* è la variabile reale che rappresenta il passo della ricerca e si determina risolvendo separatamente un problema di minimo unidimensionale detto “ricerca di linea” (come si vedrà in seguito questo aspetto è comune a tutte le metodologie che si affronterà e sarà analizzato nel paragrafo 6.5, mentre, ciò che varia da caso a caso è il modo di determinare la direzione di ricerca) determinando il minimo della funzione: λ → f (xk+1 − λk gk), ossia al minimo della funzione f (x) lungo la direzione −gk a partire da xk. Alternativamente si possono, più semplicemente, assegnare “euristicamente” a λk* una successione di valori avente le seguenti caratteristiche: 91 λk* < 1 λk* < λk-1* Nel metodo steepest descent, quindi, si assume come direzione di ricerca s quella opposta al gradiente, la quale rappresenta “localmente”, cioè in un intorno opportuno del punto xk, la direzione di “massima pendenza” della superficie, ossia la direzione lungo la quale si ha la variazione massima della funzione. Sotto opportune ipotesi sulla funzione f (xk), è possibile dimostrare che la successione { xk} generata mediante la (6.2) converge ad un punto x* in cui si annulla il gradiente, e quindi, ad un punto di minimo locale. Fig. 6.1 – Rappresentazione tridimensionale della funzione di Rosenbrock 92 Tuttavia la convergenza del metodo è di tipo lineare e può risultare, in effetti, estremamente inefficiente, nei casi in cui la funzione da minimizzare presenta degli avvallamenti lunghi e stretti. E’ questo il caso della funzione di Rosenbrock: f (x) = 100 (x1 − x22 ) 2 + (1 − x1)2 comunemente denominata “funzione banana” per le sua forma caratteristica, essa è molto utilizzata come funzione “test” per gli algoritmi di minimizzazione in virtù del pendio particolarmente ripido. Essa rappresenta infatti una valle con pareti molto ripide, il cui fondo, a forma di U, segue approssimativamente la curva parabolica x2 = x12. La funzione presenta un minimo nel punto x = [1,1] mentre il punto standard di inizio della ricerca è x1 = [−1,9;2]. Un disegno tridimensionale della funzione è riportato in fig.6.1 mentre in fig.6.2 si è riportato una “proiezione quotata” della funzione stessa insieme alla successione dei punti di tentativo generati dall’implementazione del metodo steepest descent man mano che esso converge verso il minimo. L’ottimizzazione è stata terminata dopo 1000 iterazioni, ancora ad una distanza considerevole dal minimo. In corrispondenza delle aree più “scure” del percorso l’algoritmo progredisce lentamente a “zig-zag” a causa della direzione di avanzamento che, ad ogni passo successivo, è invariabilmente parallela al gradiente. L’inefficienza è data inoltre dal fatto che il metodo steepest descent non tiene in 93 alcun conto delle derivate seconde della funzione f (x), cioè della curvatura della funzione, che determina il comportamento della funzione vicino al minimo. Questi aspetti negativi vengono superati nel metodo di Newton che sarà esaminato nel paragrafo successivo. Fig. 6.2 – Rappresentazione dei risultati ottenuti mediante il metodo steepest descent applicato alla funzione di Rosenbrock con punto iniziale x1 = [−1,9;2] 6.3 Metodo di Newton L’idea di base del metodo di Newton consiste nell’approssimare, ad ogni passo della iterazione, la funzione f (x) mediante la funzione quadratica che si ottiene dallo sviluppo in serie della funzione arrestato ai termini di secondo grado. Nell’ipotesi che la funzione f (x) abbia derivate prime continue fino al secondo ordine in un intorno opportuno del punto xk (cioè che la funzione sia di classe C(2) ), si 94 considera il minimo della seguente funzione: qk = f (xk) + (x − xk)T gk + 1 (x − xk)T Gk (x − xk) 2 (6.3) dove: ∂2 f con i , j = 1,…,n Gk è la matrice hessiana ∂xi ∂x j gk è il vettore gradiente ∇f (x) calcolato nel punto xk nel caso Supposto che qk(x) abbia un punto di minimo in x*, si ha ∇qk (x*) = 0, cioè: Gk (x* − xk) + gk = 0 ⇒ x* = xk − Gk-1 gk (6.4) Il valore x* è assunto come nuova stima del punto di minimo di f (x), da cui la seguente formula iterativa: xk+1 = xk − Gk-1 gk per k = 1,2,… (6.5) Una variante della formula (6.5) è la seguente: xk+1 = xk − λk*Gk-1 gk per k = 1,2,… (6.6) dove λk* è determinata mediante la “ricerca lineare”, ossia per mezzo di una minimizzazione unidimensionale a partire da xk nella direzione −Gk-1 gk , analogamente a quanto visto per il metodo steepest descent. −Gk-1 gk xk 95 Il calcolo del vettore xk+1 richiede quindi, ad ogni passo, l’inversione della matrice hessiana Gk. Nel caso in cui la matrice Gk risulti “malcondizionata”, il condizionamento può essere migliorato mediante una opportuna operazione di scalatura sulle variabili. Il metodo di Newton coincide con il metodo steepest descent quando Gk = I (dove I è la matrice unitaria cioè la matrice diagonale con elementi pari ad 1), in tal caso, infatti, la direzione di ricerca è parallela ed opposta al gradiente gk. La matrice unitaria è d’altra parte la matrice meglio condizionata per definizione, e ciò spiega, pertanto, l’ottima stabilità del metodo steepest descent (pur con i limiti di efficienza riportati). In generale, invece, la direzione −Gk-1 gk non è parallela al gradiente gk ed è una direzione di discesa solo quando: −Gk-1 gk gkT Gk-1 gk > 0 xk gk ossia quando la matrice Gk è definita positiva. Esistono pertanto casi in cui la matrice hessiana non è definita positiva per cui la direzione può essere ortogonale o addirittura discorde al gradiente (si veda in proposito il caso unidimensionale riportato in fig. 6.3 nel quale la matrice hessiana degenera nella derivata seconda). 96 errore G>0 G<0 DISCESA (l’algoritmo converge) SALITA (l’algoritmo non converge) X O Fig. 6.3 – Esempio unidimensionale di convergenza e non convergenza del metodo di Newton in funzione del segno della derivata seconda G Difatti in talune situazioni il metodo di Newton può anche non convergere per cui si tratta di un metodo “meno robusto” rispetto al metodo steepest descent che garantiva la convergenza in ogni caso (non si dimentichi che si in tratta sempre, per questi metodi derivativi, di convergenza al minimo locale). Tuttavia, la minor robustezza è compensata dal notevole aumento di efficienza dell’algoritmo. In proposito si vedano in fig.6.4 i risultati ottenuti mediante il metodo di Newton applicato alla funzione di Rosenbrock. Si può facilmente constatare come il punto di minimo locale sia stato raggiunto con sole 210 iterazioni mentre per il metodo steepest descent erano necessarie più di un migliaio di iterazioni. 97 3 2.5 2 Start Point 1.5 1 Solution 0.5 0 -0.5 -1 -2 -1.5 -1 -0.5 0 0.5 1 1.5 2 Fig. 6.4 – Rappresentazione dei risultati ottenuti mediante il metodo di Newton applicato alla funzione di Rosenbrock con punto iniziale x1 = [−1,9;2] 6.4 Metodi quasi-Newton I principali aspetti negativi del metodo di Newton derivano da una parte dalla difficoltà di calcolare la matrice hessiana G e, dall’altra, dalla necessità di doverla invertire ad ogni passo. -1 Dover calcolare ad ogni passo la matrice hessiana G e la sua inversa G richiede un notevole sforzo computazionale dal momento che le derivate sono calcolate per differenziazione numerica. Per ovviare a quest’inconveniente sono stati introdotti dei metodi nei quali la 98 -1 matrice hessiana G, o direttamente la sua inversa G , è sostituita da una opportuna matrice definita positiva H, aggiornata ad ogni passo solamente sulla base dei risultati ottenuti nel passo precedente. Si tratta dei metodi quasi-Newton anche detti metodi a metrica variabile ed hanno la seguente forma: -1 xk+1 = xk − λk*Hk gk per k = 1,2,… (6.7) con x1 e H1 assegnati. -1 Il valore λ* corrisponde al minimo della f (x) lungo la direzione −Hk gk a partire dal punto xk ossia tramite la “ricerca di linea”, analogamente ai metodi già visti. Vi sono, naturalmente, diverse possibilità di scelta per la metodologia di aggiornamento delle matrici hessiane, si farà pertanto riferimento ai due metodi comunemente più usati: il metodo di Broyden, Fletcher, Goldfarb e Shanno (BFGS) ed il metodo di Davidon, Fletcher e Powell (DFP). 6.4.1 Metodo di Broyden, Fletcher, Goldfarb e Shanno (BFGS) Il metodo parte, come il metodo di Newton, dall’approssimazione della funzione f(x) con il suo sviluppo in serie arrestato alle derivate di secondo ordine: T qk = f (xk) + (x − xk) gk + T 1 (x − xk) Gk (x − xk) 2 (6.3) In tal modo il problema di minimizzazione incondizionata della funzione originaria diviene il problema di minimizzazione della forma quadratica qk esprimibile nella forma: 99 T 1 T x Hx + b x +c 2 min x (6.8) dove: x rappresenta il vettore x − xk della (6.3) H è la matrice simmetrica definita positiva che approssima la matrice hessiana b è un vettore costante pari a gk c è una costante scalare pari a f (xk) La soluzione si ha nel punto ove si annulla il gradiente della forma quadratica: ∇f (x*) = H x* + b = 0 ⇒ -1 x* = − H b (6.9) La k-esima iterazione del metodo consiste nei seguenti 7 passi: 1) Si pone la direzione di ricerca dk del punto xk+1 a partire dal punto corrente xk pari a: -1 -1 dk = −H b = −H gk (6.10) -1 con H1 = H1 = I (matrice unitaria). Pertanto per k=1 il metodo coincide con il metodo di discesa ripida. 2) Si determina il passo della ricerca λk* minimizzando la funzione ad una variabile: λ → f (xk+1 − λk gk) e sia quindi λk* (>0) il valore corrispondente al punto di minimo. 3) Si pone: xk+1 = xk + λk*dk (6.11) 4) Si calcolano f (xk+1) e gk+1 (gradiente nel punto xk+1 ). Nel punto xk+1 il vettore dk è tangente alla superficie di livello f (x) = f (xk+1), e pertanto è ortogonale a gk+1, ossia: 100 T dk gk+1 = 0 5) Si pongono: sk = xk+1 − xk = λk*dk qk = gk+1 − gk , (6.12) 6) Si definisce: Hk+1 = Hk + Ak + Bk (6.13) dove: T Ak = qk qk T qk sk T , Bk = − T Hk sk sk H k T sk Hk sk (6.14) 7) Si effettua l’inversione della matrice Hk+1 ottenendo H-1k+1 ed infine, tramite la (6.10) e la (6.11), si determina xk+1 a partire da xk. 8) Si reitera il procedimento a partire dal punto 1). Il metodo si arresta quando sono verificati opportuni test sulle variazioni xk+1 − xk, f(xk+1) − f (xk) e sulla lunghezza del vettore gk. E’ inoltre dimostrabile che le matrici Hk sono simmetriche definite positive per ogni k, da cui scaturisce che il metodo è “stabile”, nel senso che il valore di f (x) è ridotto ad ogni iterazione. In fig. 6.5 è mostrato il “percorso di convergenza” del metodo BFGS applicato alla funzione di Rosenbrock. Si nota chiaramente come il metodo sia in grado di seguire l’andamento della valle in modo del tutto simile al metodo di Newton, tuttavia per convergere al minimo è stato 101 3 2.5 2 Start Point 1.5 1 Solution 0.5 0 -0.5 -1 -2 -1.5 -1 -0.5 0 0.5 1 1.5 2 Fig. 6.5 – Rappresentazione dei risultati ottenuti mediante il metodo BFGS applicato alla funzione di Rosenbrock con punto iniziale x1 = [−1,9;2] sufficiente calcolare il valore della funzione in 140 punti, con il conseguente risparmio computazionale. 6.4.2 Metodo di Davidon, Fletcher e Powell (DFP) Il metodo è analogo al precedente con sola differenza che, a venir calcolata iterativamente, non è più la matrice hessiana H bensì la sua inversa H-1. In tal modo si risparmia il tempo computazionale necessario ad effettuare l’inversione di H. I punti dall’1) al 5) sono identici al metodo BFGS, mentre i punti successivi sono: 6) Si definisce: 102 H-1 k+1 = H-1k + Ak + Bk (6.13) dove: Ak = T k s qk (H ) q −1 T T sk sk , Bk = − k T −1 T q Hk k k (6.15) −1 qk H k qk 7) Si determina xk+1 a partire da xk tramite la (6.10) e la (6.11). 8) si ripete il procedimento a partire dal punto 1) In fig. 6.6 è mostrato il “percorso di convergenza” del metodo BFGS applicato alla funzione di Rosenbrock. Minimization of the Banana function 3 2.5 2 Start Point 1.5 2 x 1 Solution 0.5 0 -0.5 -1 -2 -1.5 -1 -0.5 0 x1 0.5 1 1.5 2 Fig. 6.6 – Rappresentazione dei risultati ottenuti mediante il metodo DFP applicato alla funzione di Rosenbrock con punto iniziale x1 = [−1,9;2] 103 6.5 Ricerca di linea Si è visto nei paragrafi precedenti come i metodi di ottimizzazione multidimensionale descritti siano tutti scindibili in due distinti sottoproblemi: 1) la determinazione della direzione di ricerca 2) la determinazione del passo di ricerca mediante risoluzione di un problema di minimo unidimensionale lungo tale direzione Ossia, generalizzando le espressioni (6.2) e (6.5) nella forma seguente: xk+1 = xk + λk*dk (6.11) è immediato notare come i metodi descritti differiscano solo nella determinazione della direzione di ricerca dk che rappresenta il primo sottoproblema, mentre hanno in comune il secondo sottoproblema della ricerca di minimo unidimensionale lungo la direzione scelta, cioè la ricerca del minimo λk* della funzione λ → f (xk+1 − λk dk) con λ ovviamente >0. La risoluzione di questo problema, detto anche “ricerca di linea”, è demandata ad algoritmi di ottimizzazione unidimensionale quali il metodo di Fibonacci, il metodo della sezione aurea e i metodi di interpolazione polinomiale di vario ordine. Oppure, più semplicemente (come si è già detto trattando del metodo steepest descent), si può determinare euristicamente una successione di valori λk* avente caratteristiche: λk* < 1 λk* < λk-1* 104 Tra questi, i metodi maggiormente adottati per la “ricerca di linea” sono quelli di interpolazione polinomiale di secondo e terzo ordine detti rispettivamente: interpolazione quadratica e interpolazione cubica. Questi metodi determinano il polinomio (ad una variabile), quadratico o cubico, “interpolante” un certo numero di punti noti della funzione lungo la direzione di ricerca stabilita (pertanto anche la funzione diviene ad una sola variabile). Nel seguito si esamineranno i metodi di interpolazione quadratica e cubica, che come si è accennato, sono i più frequentemente utilizzati. 6.5.1 Interpolazione quadratica L’interpolazione quadratica consiste nel determinare il polinomio di secondo grado che “approssima” meglio i punti noti della funzione lungo la direzione nota di ricerca. Il polinomio si presenta nella forma: mq(λ) = a λ2 + b λ + c (6.12) pertanto un “punto estremale” per la funzione si trova ad un passo di lunghezza: λ* = − b 2a (6.13) Il punto risulta essere un minimo quando a è positivo. La determinazione dei coefficienti a e b può effettuarsi utilizzando qualsiasi combinazione di tre valori della funzione o del gradiente (quest’ultimo, in realtà, essendo riferito alla direzione di ricerca, è più propriamente una derivata “direzionale”), oppure, alternativamente, mediante due valori del gradiente. 105 Dopodiché i coefficienti sono ricavati tramite la formulazione e risoluzione di un semplice sistema lineare di 3 (o 2) equazioni in 3 (o 2) incognite. Varie semplificazioni del sistema sono possibili qualora vengano utilizzati punti con caratteristiche particolari (ad esempio quando il primo punto abbia ascissa λ = 0 o, ancora, quando i punti siano equidistanti tra loro). In generale, dati 3 punti non necessariamente equidistanziati {x1,x2,x3} ed i rispettivi valori della funzione {f(x1), f(x2), f(x3)}, il minimo risultante dalla interpolazione quadratica è dato da: x k +1 = 1 β 23 f ( x 1 ) + β 31 f (x 2 ) + β 12 f ( x 3 ) 2 γ 23 f ( x 1 ) + γ 31f (x 2 ) + γ 12 f ( x 3 ) (6.14) dove: βi j = xi2 – xj2 γi j = xi – xj (6.15) 6.5.2 Interpolazione cubica Il polinomio di interpolazione cubica ha invece la forma seguente: mq(λ) = a λ3 + b λ2 + c λ + d (6.16) mentre i “punti estremali” rinvengono dalle radici dell’equazione: 3a λ2 + 2b λ + c = 0 ossia: - b ± b 2 - 3ac * λ = 3a (6.17) 106 di cui, la radice corrispondente al minimo è quella per cui risulta: 6a λ + 2b > 0 (6.18) Per determinare i coefficienti a, b e c si richiede la conoscenza di una combinazione di quattro valori della funzione o del gradiente (contro i 3 della interpolazione quadratica) o, alternativamente, di tre valori del gradiente (contro i 2 della interpolazione quadratica). Anche in questo caso i coefficienti sono calcolati mediante la formulazione e soluzione di un sistema lineare di 4 (3) equazioni in 4 (3) incognite. Una formula generale, dati due punti {x1,x2}, ed i rispettivi valori della funzione {f(x1), f(x2)} e del gradiente {∇f(x1), ∇f(x2)}, è data da: x k +1 = x 2 − (x 2 − x1 ) ∇f ( x 2 ) + β 2 − β1 ∇f ( x 2 ) − ∇f (x1 ) + 2β 2 (6.19) dove: β1 = ∇f ( x1 ) + ∇f ( x 2 ) − 3 f (x1 ) − f ( x 2 ) x1 − x 2 β 2 = β12 − ∇f ( x1 )∇f ( x 2 ) (6.20) L’interpolazione cubica da spesso soluzioni più precise della interpolazione quadratica ma, come si è visto, è anche più dispendiosa in termini computazionali. 6.6 Problema di ottimizzazione dei “minimi quadrati” I metodi analizzati finora, nel presente capitolo, sono finalizzati a minimizzare una qualsiasi funzione scalare di variabile vettoriale (purché siano rispettate le ipotesi circa 107 la derivabilità e la continuità della funzione). Sono, infatti, tutte metodologie finalizzate alla risoluzione del generico problema di ottimizzazione non vincolata: min X∈ℜ f(X) (6.1) N D’altra parte, come si ricorderà dal capitolo IV, il problema di ottimizzazione scaturito dalla risoluzione del sistema matriciale di equazioni (4.2) era un problema di “minimi quadrati”, ossia un particolare problema di ottimizzazione non vincolata in cui la funzione obiettivo da minimizzare era la funzione di errore, cioè: min 2 errore(X) = F = N+L ∑F 2 i (4.6) i =1 X ∈ ℜN+L dove si ricorderà che Fi è l’errore relativo a X nella i-esima equazione del sistema (4.2). Questo problema è sicuramente risolvibile con le tecniche finora enunciate in quanto valide per qualsiasi problema di ottimizzazione non vincolata (per altro la funzione soddisfa tutte le condizioni sulla continuità e derivabilità richieste dai vari metodi). Tuttavia, per il problema di ottimizzazione non vincolata dei “minimi quadrati” esistono delle particolari metodologie per rendere ancora più “efficiente” la ricerca del minimo. Sia, infatti, S(x) la funzione “somma dei residui” definita come segue: m S(x) = F(x) = F(x) F(x) = ∑ Fi ( x) 2 T i =1 108 2 (6.21) dove Fi sono funzioni scalari da minimizzare dette “residui”, che nel caso in studio sono le i-esime equazioni del sistema di equazioni (4.2) Il problema dei minimi quadrati può scriversi nella forma: min X∈ℜ T S(X) = min n X∈ℜ F(x) F(x) (6.22) n Qualora il problema dei minimi quadrati scaturisca da un sistema in cui il numero di equazioni è pari al numero di incognite (è proprio il caso in studio), è semplice verificare che per ogni soluzione del sistema, ammesso che ve ne sia più d’una, risulta: S(x) = 0 che rappresenta un’importante informazione circa l’esistenza, il numero ed il valore (che, come si è visto, è pari a zero) dei minimi globali che si ricercano. E’ possibile verificare che per S(x) valgono le seguenti proprietà: T ∇S(x) = 2 J(x) F(x) (6.23) T 2 ∇ S(x) = 2 J(x) J(x) + 2 Q(x) = H(x) (6.24) con: m Q(x) = ∑ F ( x) ⋅ H ( x ) i =1 i (6.25) i dove: J(x) = [ Ji j ] con Ji j = ∂ fi , i =1,2,...,m j =1,2,…n ,è la matrice Jacobiana ∂xj Hi = ∇ Fi(x) , cioè Hi sono le matrici hessiane di ciascuna componente scalare Fi(x) di 2 109 F(x) La condizione necessaria per il punto di minimo della (6.22) è l’annullarsi del gradiente di S(x), ossia: ∇S(x) = 0 ⇒ T J(x) F(x) = 0 (6.26) Se per risolvere (6.26) si utilizza il metodo di Newton, si ottiene: x1 arbitrario xk+1 = xk + λk*dk dove la direzione di ricerca dk si ottiene mediante la (6.4), risolvendo il seguente sistema lineare : 2 2 ∇ S(xk) dk + ∇S(xk) = 0 ⇒ dk = −(∇ S(xk))-1 ∇S(xk) (6.27) Posto in questa forma il metodo risulta però dispendioso in termini computazionali, in quanto richiede il calcolo del termine Q(x). D’altra parte si osserva che il contributo di questo termine è “trascurabile” vicino alla soluzione in due situazioni: quando i “residui” Fi sono trascurabili in corrispondenza della soluzione oppure quando i “residui” Fi sono funzioni “quasi 2 lineari”, ossia sono trascurabili i termini ∇ Fi(x). In tali casi risulta ragionevole la seguente approssimazione della (6.24): 2 T ∇ S(x) ≈ 2 J(x) J(x) (6.28) 110 6.6.1 Metodo di Gauss-Newton Il metodo di Gauss-Newton, assumendo l’approssimazione (6.28), determina la direzione di ricerca dk mediante la risoluzione del sistema lineare (6.27), cioè: T T T T 2 J(x) J(x) dk + 2 J(x) F(x) = 0 ⇒ J(x) J(x) dk = − J(x) F(x) (6.29) Si noti che per il caso in studio, trattandosi di un sistema di n equazioni in n incognite, i residui si annullano in corrispondenza della soluzione ed è pertanto lecita l’approssimazione (6.28). Si può quindi applicare il metodo di Gauss-Newton per risolvere il problema di ottimizzazione (4.6), ovvero il sistema matriciale (4.2) di n equazioni in n incognite oggetto del presente studio. Per la determinazione del passo di ricerca λk* si ricorre, anche in questo metodo, alla “ricerca di linea” in modo da assicurare che ad ogni iterazione la funzione scalare S(x) sia inferiore al valore precedente e conseguentemente il metodo converga. Il metodo di Gauss-Newton è probabilmente il metodo di ottimizzazione più “efficiente” tra quelli descritti. In proposito si può vedere, in fig. 6.7, il “percorso di convergenza” del metodo applicato alla funzione di Rosenbrock posta come un problema di minimi quadrati. Il metodo converge al minimo dopo aver calcolato il valore della funzione solo 48 volte, contro le 140 iterazioni del metodo BFGS. Il metodo di Guass-Newton presenta invece problemi di convergenza quando il 111 Minimization of the Banana function 3 2.5 2 Start Point 1.5 1 2 x Solution 0.5 0 -0.5 -1 -2 -1.5 -1 -0.5 0 x1 0.5 1 1.5 2 Fig. 6.7 – Risultati ottenuti mediante il metodo di Gauss-Newton applicato alla funzione di Rosenbrock con punto iniziale x1 = [−1,9;2] termine Q(x) è significativo. In tal caso è consigliabile utilizzare il metodo di Levenberg-Marquadt che, come si vedrà tra breve, supera questa difficoltà. 6.6.2 Metodo di Levenberg-Marquadt Il metodo di Levenberg-Marquadt determina la direzione di ricerca dk risolvendo il seguente sistema lineare: T T (J(x) J(x) + αkD) dk = − J(x) F(x) dove: D è una matrice definita positiva (spesso si prende D = I) 112 (6.30) αk è uno scalare che controlla sia il modulo sia la direzione di dk, pertanto la ricerca della direzione e del passo di avanzamento non sono più due problemi scindibili come nei metodi visti finora. Quando αk è uguale a zero, dk è identico a quello determinato con il metodo di Gauss-Newton, mentre per αk che tende ad infinito, dk tende ad un vettore di modulo nullo e direzione pari a quella del metodo steepest descent. Il metodo steepest descent è infatti un metodo a “convergenza sicura” (cioè la convergenza del metodo è matematicamente dimostrabile), il che implica l’esistenza di un valore di αk sufficientemente grande da far sì che risulti “vera” la diseguaglianza S (xk + dk) < S (xk), che rappresenta appunto la condizione di convergenza. In tal modo il termine αk può essere controllato per assicurare la “discesa” (ossia la convergenza) del metodo anche qualora l’entità di Q(x) risulti tale da inficiare l’efficienza del metodo di Gauss-Newton. Il metodo di Levenberg-Marquadt rappresenta pertanto un “compromesso” tra il metodo di Gauss-Newton ed il metodo steepest descent. Come si può notare dai risultati ottenuti sulla funzione di Rosenbrock in fig. 6.8, Il metodo “perde” qualcosa in “efficienza”, rispetto al metodo di Gauss-Newton, ma acquista molto in “robustezza” . Difatti il minimo è raggiunto in 90 iterazioni contro le 48 del metodo di GaussNewton. Per poter beneficiare, allora, sia dell’efficienza di un metodo sia della robustezza 113 Minimization of the Banana function 3 2.5 2 Start Point 1.5 2 x 1 Solution 0.5 0 -0.5 -1 -2 -1.5 -1 -0.5 0 x1 0.5 1 1.5 2 Fig. 6.8– Risultati ottenuti mediante il metodo Levenberg-Marquardt applicato alla funzione di Rosenbrock con punto iniziale x1 = [−1,9;2] dell’altro, alcune implementazioni del metodo di Gauss-Newton (è il caso della implementazione effettuata dalla MathWorks per il pacchetto Matlab “Optimization”) prevedono la eventualità di uno “switch” al metodo di Levenberg-Marquadt qualora ricorrano delle particolari condizioni che denotino difficoltà di convergenza. 6.7 Metodo di Newton-Raphson Il metodo di Newton-Raphson, come accennato nell’introduzione, non è propriamente un metodo di ottimizzazione, bensì un metodo per risolvere sistemi di equazioni non lineari, cioè un problema del tipo: 114 F (x) = [f1(x), f2(x), …. , fm(x)] = 0 con x∈ℜ n (6.31) L’idea “geometrica” del metodo è quella di sostituire alla funzione il suo sviluppo in serie arrestato ai termini di primo grado (nell’ipotesi che le funzioni fi siano continue e derivabili), ossia: F (x) = F (xk+ dk) = F (xk) + J(xk) dk (6.32) dove: J(x) = [ Ji j ] con Ji j = ∂ fi , i =1,2,...,m j =1,2,…n ,è la matrice Jacobiana ∂xj La risoluzione del sistema di equazioni (6.31) diventa così un procedimento iterativo in cui ad ogni passo bisogna risolvere il seguente sistema lineare: -1 F (xk) + J(xk) dk = 0 ⇒ dk = − J (xk) F (xk) (6.32) Da cui si ricava il successivo punto di tentativo xk+1 = xk + dk (6.33) Questo metodo è quindi “analogo” al metodo di Cauchy o steepest descent in quanto entrambi i metodi, per determinare il successivo punto di tentativo, si basano sulla sola conoscenza delle derivate di prim’ordine. D’altra parte, come si è sottolineato più volte, basare la ricerca sulle sole derivate prime, da una parte assicura la convergenza del metodo, dall’altra rende il metodo 115 “inefficiente” in quanto a numero di iterazioni e conseguente tempo computazionale. Conclusione Si noti bene, tuttavia, che ogniqualvolta si è parlato in questo capitolo di convergenza sicura, veloce, efficiente ecc., si è sempre sottinteso che si trattasse di convergenza ad un “minimo locale”. Come si è avuto modo di vedere, infatti, tutte le metodologie esaminate seguono dopotutto un “percorso di discesa” e questo percorso, pertanto, non può che terminare nel “minimo locale” più prossimo. Il punto di convergenza dipende quindi dal punto iniziale della ricerca e ciò, a prescindere da ogni altra considerazione sull’efficienza, costituisce la più grave lacuna di tutte le metodologie affrontate in questo capitolo. Con questo lavoro, si è inteso evidenziare particolarmente quest’aspetto degli “algoritmi classici” di ottimizzazione, in quanto si è notato che spesso, nel campo delle costruzioni idrauliche, questi metodi, pur potenti, sono stati usati con “troppa disinvoltura” al punto da trovare espressioni del tipo “preso un punto a caso il metodo converge…” o simili, anche su pubblicazioni di un certo rilievo. Si è ritenuto di dover sottolineare, e nel capitolo successivo lo si mostrerà in merito ad alcuni casi concreti, come tale punto iniziale non vada affatto “preso a caso” bensì scelto con cura al fine di determinare una soluzione “attendibile” del problema. 116 CAPITOLO VII Implementazione di una tecnica mista: algoritmi genetici / metodo di Gauss-Newton Premessa Nel capitolo III è stato impostato, in forma matriciale, il sistema di equazioni (4.2) che governa una rete idraulica in pressione, mentre nel capitolo IV è stato mostrato come la risoluzione del sistema dato sia equivalente alla risoluzione del problema di ottimizzazione non vincolata (4.6) o (4.8), per risolvere il quale, nei capitoli V e VI, sono state illustrate due distinte metodologie: gli algoritmi genetici ed il metodo di Newton (con le annesse varianti). Negli stessi capitoli sono messi in evidenza gli aspetti caratteristici di ciascun metodo con particolare attenzione ai problemi di convergenza e dipendenza dal punto iniziale di ricerca. E’ emerso che i metodi di Newton risultano particolarmente efficienti, soprattutto quelli specificatamente dedicati alla risoluzione dei minimi quadrati non lineari quali il metodo di Gauss-Newton ed il metodo Levenberg-Marquardt. Al tempo stesso, si è constatato che tali metodologie convergono ad un “minimo locale” per cui la soluzione finale dipende dal punto iniziale di ricerca. Si è visto, invece, che gli algoritmi genetici convergono al “minimo globale”. Applicandoli tuttavia al problema di ottimizzazione in studio, si è rilevato che la velocità 117 di convergenza, pur abbastanza elevata inizialmente, decresce poi con le generazioni successive in modo approssimativamente “asintotico” (si veda in proposito il paragrafo 7.7). Questo problema, rilevato anche da altri autori [Poyhonen, H.O. et al.], è denominato “slow finish” e, stando all’opinione degli stessi autori, sarebbe dovuto all’esaurirsi delle informazioni “cromosomiche” della popolazione, per cui l’azione del “crossover” risulterebbe trascurabile e l’evoluzione continuerebbe sotto la “spinta” della sola “mutazione” (per gli algoritmi genetici si veda il capitolo V). L’idea è stata, pertanto, quella di utilizzare entrambe le metodologie descritte: algoritmi genetici e metodi di Newton, cercando di sfruttare le caratteristiche migliori di ciascun metodo per compensare i rispettivi difetti dell’altro. Si è deciso così di connettere i due metodi “in cascata” lasciando agli algoritmi genetici il compito di determinare un “buon” punto iniziale di ricerca per il metodo di Newton. Dove per “buono”, come si è visto nel capitolo VI, si intende un punto iniziale sufficientemente “prossimo” al minimo globale della ipersuperficie di errore (a rigore, più che di prossimità, si tratta di appartenenza alla “concavità” del minimo globale dal momento che i metodi di Newton sono algoritmi di “discesa” della ipersuperficie di errore), da permettere al metodo di Newton di convergere al minimo “giusto” ossia al “minimo globale” Nei successivi paragrafi si entrerà quindi nel merito dell’implementazione degli algoritmi succitati descrivendo il linguaggio scelto per scrivere il programma e 118 confrontando i risultati ottenuti risolvendo alcune reti idrauliche “test” con quelli ottenuti risolvendo le stesse reti con altri metodi. Inoltre, vista l’efficienza del programma nel risolvere anche reti piuttosto complesse, si è introdotta la possibilità di calcolare (in modo iterativo) le perdite di carico con la formula di Colebrook, al posto delle tradizionali formule pratiche di moto assolutamente turbolento usate di solito per risolvere le reti idrauliche in pressione, in modo da non trascurare il campo delle portate appartenenti al “regime di transizione”. 7.1 Scelta del linguaggio di implementazione: Matlab ver. 5.3 Per l’implementazione dell’algoritmo di risoluzione delle reti idrauliche in pressione mediante la tecnica mista algoritmi genetici/ metodo di Newton (si vedrà in seguito quale tra i metodi di Newton sarà implementato e perché) si è preferito utilizzare il Matlab ver. 5.3 (si tratta dell’ultima versione attualmente in commercio) della MathWorks Inc. Si ritiene, infatti, che il Matlab sia un linguaggio particolarmente adatto per le applicazioni matematiche e scientifiche per quattro fondamentali ragioni: 1) è un linguaggio che permette di gestire le matrici come semplici variabili e di eseguire tutte le operazioni tra matrici (incluso il calcolo dei determinanti e delle matrici inverse) come semplici operazioni tra variabili (infatti il nome stesso Matlab è un’abbreviazione di Matrix Laboratory). 2) è un linguaggio che opera indistintamente su numeri reali e su numeri complessi, consentendo di gestire questi ultimi alla stregua di numeri reali (per 119 fare un esempio banale, in Matlab non è un errore fare la radice di –1). 3) è un linguaggio estremamente “versatile” in quanto esistono numerosissimi pacchetti applicativi o toolbox, reperibili sul mercato e su Internet (è questo il caso di uno dei pacchetti che si è utilizzato per il programma), che consistono in gruppi di funzioni, scritte a loro volta in Matlab e quindi facilmente adattabili alle varie esigenze, finalizzati alla risoluzione dei problemi più disparati. 4) è un linguaggio altamente “portabile”. Infatti, Il fatto di essere un interprete, quindi non un compilatore, sebbene penalizzi un po’ la velocità, consente la portabilità del codice da un tipo di macchina all’altra senza alcuna difficoltà e questo rende molto agevole lo scambio di software ad esempio per finalità scientifiche. 7.2 Descrizione del programma In questo paragrafo si descriverà il funzionamento del programma, basato sulla tecnica “mista” algoritmi genetici/metodi di Newton, per la risoluzione delle reti idrauliche in pressione. Per il listato delle principali funzioni del programma si rimanda invece all’appendice A. 7.2.1 Implementazione degli algoritmi genetici: scelta dei parametri Per l’implementazione degli algoritmi genetici si è scelto innanzitutto di utilizzare 120 la rappresentazione floating point in quanto si sapeva dalla teoria (si veda in proposito il capitolo V), e si è riscontrato poi nella pratica, che questa è la rappresentazione più “efficiente” dal punto di vista della convergenza. Come funzione obiettivo si è scelta la funzione errore (4.7) anziché la funzione errore (4.5) in quanto, come si più volte ribadito, quest’ultima forma rende più omogenea la convergenza delle distinte componenti del vettore incognito, senza privilegiare la convergenza delle portate su quella delle altezze piezometriche o viceversa, in virtù del sistema di misura adottato. La dimensione della popolazione è stata stabilita di 20 cromosomi (o individui) che è un numero un po’ basso rispetto alle popolazioni di 100-200 individui generalmente impiegate. D’altra parte, il leggero incremento della velocità di convergenza ottenibile con una popolazione maggiore è insufficiente a compensare l’aumento di sforzo computazionale necessario a gestire popolazioni numerose soprattutto per reti grosse in cui ogni cromosoma (o individuo) risulta composto da centinaia di geni (si ricorda che nella rappresentazione floating-point ogni gene corrisponde ad una componente scalare del vettore incognito) in quanto ogni gene rappresenta una singola portata, o altezza piezometrica, incognita della rete. Per quanto concerne la selezione, per evitare problemi di “convergenza prematura”, si è impiegato il metodo del “ranking a normalizzazione geometrica” ponendo il parametro q, cioè la probabilità di scegliere l’individuo migliore, pari al valore più largamente usato che è 0,08 (si veda in proposito [Houck, C.R. et al.]). 121 E’ stata utilizzato anche il gap generazionale per un solo individuo, ossia si è reinserito nella i−esima generazione l’individuo più “adatto” della generazione precedente sostituendolo all’individuo meno “adatto” della generazione presente. Per gli operatori genetici, avendo scelto la rappresentazione floating-point, sono stati impiegati i diversi operatori disponibili per questo tipo di rappresentazione, introdotti nel capitolo V. In particolare, per l’operatore crossover si è scelto di utilizzare il crossover semplice, il crossover aritmetico ed il crossover euristico, da eseguire 2 volte ciascuno per ogni generazione (si è ricorso anche in questo caso ai valori più “confermati” dalla sperimentazione, si veda sempre [Houck, C.R. et al.]) ed in particolare si è posto un numero massimo di tentativi pari a 3 per il crossover euristico (si ricorderà come il crossover euristico sia l’unico operatore a non garantire che i cromosomi figli appartengano al range di variabilità imposto ai genitori per cui occorre effettuare un controllo in serie all’operatore ed eventualmente ripetere il crossover). Mentre, per l’operatore mutazione, si sono adoperati la mutazione uniforme, la mutazione non uniforme, la mutazione multi-non uniforme e la mutazione di confine, da eseguire rispettivamente 4, 6, 4 ,4 volte per ogni generazione avendo posto inoltre il parametro di “bias” della mutazione non uniforme e multi-non uniforme pari a 3 (anche per questi parametri sono stati adoperati valori “consigliati” da [Houck, C.R. et al.]). Si noti che, invece di stabilire le probabilità con cui gli operatori genetici selezionano ciascun gene per la riproduzione, si è fissato il numero complessivo di 122 “riproduzioni” per ciascun operatore genetico. Tuttavia si può facilmente constatare come le due metodologie siano pressoché equivalenti. Per quanto riguarda la scelta di utilizzare un così consistente numero di operatori riproduttivi, è abbastanza evidente come una tale “ricchezza” di operatori riproduttivi non possa che facilitare la differenziazione della popolazione consentendo all’algoritmo di esplorare più estensivamente l’iperspazio delle soluzioni possibili e rendere quindi più “efficace” la ricerca del “minimo globale”. Un discorso a parte merita, invece, la condizione terminale in quanto, a causa della scelta di connettere una metodologia tradizionale di ottimizzazione in cascata agli algoritmi genetici, non è conveniente impiegare gli stessi criteri di convergenza descritti nel capitolo V. Tali criteri, come si ricorderà, sono essenzialmente basati sul massimo numero di generazioni (è un criterio alquanto empirico) oppure sulla somma delle deviazioni arrestando la ricerca quando questa risulti inferiore ad un valore predeterminato, ossia quando tutti i cromosomi della popolazione abbiano raggiunto un certo grado di “uniformità” (è un criterio più rigoroso in quanto stavolta si ricorre ad una valutazione della convergenza). E’ evidente che il primo dei due criteri non è soddisfacente per l’algoritmo in studio in quanto non effettua nessuna verifica circa la “bontà” della soluzione raggiunta dopo il numero previsto di generazioni. Tuttavia anche il secondo criterio sulla “uniformità” delle soluzioni non è adatto 123 allo scopo. Difatti l’obiettivo dell’algoritmo genetico, nell’ambito della tecnica mista che si sta implementando, è quello di fornire una soluzione che funga da punto iniziale per la ricerca dei metodi di Newton, che, come si è visto nel capitolo precedente, sono dei metodi numerici in grado di “discendere” l’ipersuperficie di errore a partire da un punto assegnato. Pertanto, non è necessario (e neanche sufficiente) che il punto iniziale sia prossimo alla soluzione finale, ossia al minimo globale, bensì è sufficiente che si trovi all’interno della “concavità” (la cui forma e dimensione non sono conosciute a priori) del minimo globale in modo da potervi convergere con i metodi di “discesa”. Si evince, allora, come l’uso di un criterio di convergenza, che in definitiva effettua una valutazione sulla “prossimità” dei punti al minimo globale, non costituisca una condizione terminale accettabile soprattutto alla luce della considerazione seguente. Si è già detto, infatti, che gli algoritmi convergono molto lentamente alla soluzione finale (proprio per questo motivo, d’altra parte, si è adoperata la tecnica “mista”), per cui si sarebbe comunque dovuto accontentarsi di soluzioni neppure “troppo prossime” al minimo globale. Per di più, “spingendo” troppo la convergenza degli algoritmi genetici, non avrebbe più senso applicare la tecnica mista, in quanto si sarebbe già determinata la soluzione. Si è pensato quindi di ovviare alle difficoltà menzionate anticipando ”l’entrata in gioco” del metodo di Newton. 124 Ovvero, dopo aver effettuato un numero prestabilito di generazioni, si “passano” tutti i cromosomi della popolazione al metodo di Newton il quale determina, a partire da ciascuno di essi, una soluzione finale, o meglio, un punto di “minimo locale”. Ne consegue che, a partire da N individui della popolazione, verranno trovati N punti di “minimo locale”. A questo punto si effettua un controllo analogo al criterio di convergenza appena visto per gli algoritmi genetici, ovvero si determina il “grado di uniformità” delle soluzioni raggiunte, ad esempio mediante il calcolo della sommatoria della varianza di ciascuna componente dei vettori soluzione. Un alto grado di uniformità dei punti trovati dal metodo di Newton utilizzando i cromosomi della popolazione come rispettivi punti iniziali di ricerca, comporterebbe, in pratica, la coincidenza dei punti stessi, per cui sarebbe lecito affermare che tutti i punti iniziali (cioè i cromosomi dell’ultima generazione degli algoritmi genetici) si trovano nella “concavità” dello stesso minimo. Questo rappresenta il penultimo stadio di convergenza degli algoritmi genetici, in cui tutti gli elementi della popolazione hanno raggiunto la concavità del minimo globale, e cominciano, da questo punto in poi, sempre più lentamente, a convergervi. Difatti, a questo punto, si può considerare terminata la fase “esplorativa” dell’algoritmo genetico, mentre prosegue la fase “approfonditiva” (per questa distinzione, fatta dal padre stesso degli algoritmi genetici J.H. Holland si veda il capitolo V), che è proprio la fase in cui gli algoritmi risultano meno “efficienti” (cioè più lenti) e che si cerca di by-passare mediante l’uso della tecnica mista. 125 E’ lecito ritenere pertanto, in queste condizioni, che il punto di “minimo locale” coincida proprio con il “minimo globale” ricercato e che i cromosomi della popolazione finale (dell’ultima generazione) rappresentino tutti dei “buoni” punti iniziali per la ricerca con il metodo di Newton. In realtà, giunti a questo stadio, non è più neanche necessario passare un punto iniziale al metodo di Newton, in quanto il metodo ha già effettuato fruttuosamente la sua ricerca e trovato il punto finale (anzi i punti finali coincidenti tra loro) che, come si è appena detto, rappresenta proprio il minimo globale del problema. Viceversa, qualora il grado di uniformità dei punti finali non sia sufficientemente alto da poter considerare i punti di “minimo locale” coincidenti tra loro, vorrà dire che i cromosomi della popolazione non si sono ancora “evoluti” sufficientemente e quindi qualcuno, o parecchi di loro, si trovano ancora lontani dal “minimo globale” o, se non lontani, comunque ancora “intrappolati” nelle concavità di altri “minimi locali”. In questo caso si restituisce la popolazione di cromosomi all’algoritmo genetico affinché questo operi su di essa un altro numero predefinito di generazioni, dopodiché si “passa” nuovamente la popolazione al metodo di Newton per determinare i “minimi locali” nelle cui prossimità si trovano i cromosomi, quindi si effettua il controllo sull’uniformità degli stessi e così via, iterando il procedimento fin quando la verifica non risulti soddisfatta. Un’altra condizione terminale possibile è quella di “passare” solo il cromosoma “migliore” (ossia il più “adatto”) della popolazione al metodo di Newton 126 Difatti il problema di ottimizzazione in questione è un problema di minimi quadrati non lineari, che deriva da un sistema non lineare di N equazioni in N incognite per cui esiste una soluzione esatta. Si ricorderà, dal capitolo IV, che in questo caso si possiede una informazione in più rispetto ai normali problemi di minimizzazione. L’informazione aggiuntiva consiste nella conoscenza del valore scalare della funzione obiettivo in corrispondenza del punto di “minimo globale”. Difatti, sempre nel capitolo IV, si è visto che tale valore è uguale a zero. In questo caso (e in tutti quei casi in cui si conosce il valore scalare corrispondente al punto di minimo globale) è pertanto possibile sapere se la soluzione ottenuta dal metodo di Newton è un “minimo globale” o un “minimo locale” andando a valutare il valore scalare della funzione obiettivo in corrispondenza del punto dato. Se il valore è sufficientemente prossimo allo zero si sarà trovato il “minimo globale” e quindi la soluzione del problema, altrimenti si reitera il procedimento dopo aver effettuato un altro numero prestabilito di generazioni sulla popolazione e così via, fin quando la verifica non risulti positiva. Nel programma si sono implementate entrambe le condizioni terminali descritte, lasciando all’utente la possibilità di scegliere quale delle due utilizzare (per il listato del codice si veda l’appendice A). 7.2.2 Implementazione del metodo di Gauss-Newton Fin qui si è parlato di metodo di Newton in generale, senza entrare nel merito della 127 scelta del particolare metodo di Newton da implementare per il programma. Nel capitolo VI si è infatti avuto modo di vedere come siano state sviluppate molteplici metodologie a partire dal metodo di Newton “originario”, con la finalità di rendere il metodo sempre più “efficiente”, sebbene spesso il guadagno in “efficienza” comporta una perdita in “robustezza” (cioè di garanzia di convergenza). La metodologia implementata nel programma è quella di Gauss-Newton che è probabilmente il metodo più “efficiente” tra i vari metodi di Newton. Questo metodo è particolarmente adatto a risolvere il problema di ottimizzazione in studio poiché, come si ricorderà dal capitolo VI, si tratta di un metodo finalizzato alla risoluzione del problema di minimi quadrati non lineari, che è esattamente il caso del problema (4.6), dove la funzione obiettivo è la funzione scalare errore definita come sommatoria dei quadrati degli errori su ogni equazione del sistema (4.2). Si ricorderà, inoltre, come la convergenza del metodo, ossia la sua “discesa”, sia legata alla condizione che i “residui” della funzione “somma” S(x) risultino trascurabili vicino alla soluzione, in modo da poter trascurare il termine Q(x) nella matrice “hessiana”. E’ evidente come tale condizione sia soddisfatta per il problema (4.6) in quanto, lo si è ripetuto più volte, il “minimo globale” del problema coincide col punto per cui la funzione obiettivo “errore”, somma dei quadrati degli errori su ogni equazione del sistema (4.2), tende a zero. Questo perché la soluzione del sistema non lineare (4.2) di N+L equazioni in N+L incognite, ammette l’esistenza di soluzioni esatte per cui si annullano gli errori sulle 128 singole equazioni del sistema e conseguentemente i residui del problema di minimi quadrati. Come ulteriore accorgimento per aumentare la robustezza dell’algoritmo (e quindi assicurarne la convergenza), l’implementazione prevede lo “switch” dal metodo di Gauss-Newton al metodo di Levenberg-Marquadt qualora lo step di ricerca scenda -15 sotto una valore di soglia stabilito pari a 10 o il numero di condizionamento della 10 matrice Jacobiana superi il valore di soglia 10 . Dove il numero di condizionamento di una matrice è il rapporto tra il massimo e minimo valore singolare della matrice stessa ed indica se la matrice è ben condizionata o mal condizionata, difatti il miglior condizionamento si ha per la matrice unitaria per cui il numero di condizionamento è uguale a uno, che è il valore minimo. Il metodo Levenberg-Marquadt è infatti un po’ meno efficiente, ma al tempo stesso molto più robusto del metodo di Gauss-Newton, in quanto rappresenta un “compromesso” tra il metodo di Gauss-Newton ed il metodo steepest descent che, si ricorderà, è un metodo a convergenza “garantita” (in proposito si veda il capitolo VI). Per quanto concerne invece la ricerca di linea, la metodologia implementata è una interpolazione polinomiale mista quadratica/cubica per la quale si rimanda al capitolo VI, per informazioni sulla interpolazione quadratica e cubica, e a [Branch, M.A.et al.] per i dettagli sull’implementazione della tecnica mista. 7.3 Determinazione delle portate concentrate equivalenti alle portate 129 distribuite mediante iterazione del metodo di Gauss-Newton Il problema di determinare le portate concentrate nei nodi equivalenti alle portate uniformemente distribuite lungo i tronchi si riconduce, come è noto dalla letteratura (si veda ad esempio [Citrini D. et al.]), alla determinazione dei coefficienti di ripartizione α delle portate distribuite. Tali coefficienti consentono di “trasformare” le portate uniformemente distribuite lungo l’i-esimo tronco in portate concentrate “equivalenti” nei nodi di monte e di valle del tronco stesso. Per determinarli si impone l’uguaglianza delle perdite di carico complessive lungo i tronchi nel caso di portata uniformemente distribuita e nel caso di portata costante “fittizia”. Secondo [Citrini D. et al.] il valore dei coefficienti di ripartizione, nel caso generale in cui la portata Q entrante nel tronco sia maggiore della portata complessiva P da distribuire lungo lo stesso tronco, è dato dalla formula seguente: α = δ - δ2 + 1 −δ 3 (7.1) con: δ= Q P (7.2) 130 0.5 0.49 0.48 0.47 α 0.46 0.45 0.44 0.43 0.42 1 2 3 4 5 δ 6 7 8 9 10 Fig. 7.1 − andamento di α in funzione di δ per valori di δ ≥ 1 Questa relazione è rappresentata dal grafico di fig.7.1 dal quale si desume che α è una funzione crescente di δ, e varia tra 0,4342 (per δ = 0) e 0,5 (per δ → ∞). In questo modo la portate concentrate nei nodi di monte e di valle, “equivalenti” alla portata distribuita, valgono rispettivamente: αP e (1−α) P. Esiste inoltre il caso in cui portata Q entrante nel tronco dal nodo di monte sia minore della portata complessiva P da distribuire lungo il tronco (cioè δ < 1), ovvero il caso in cui la portata da distribuire entri nel tronco da entrambi i nodi di monte e di valle (dove i nodi di monte e di valle sono definibili come i nodi di estremità del tronco aventi rispettivamente quota piezometrica maggiore ed inferiore) per cui esiste una particolare 131 sezione del tronco in cui la portata è nulla, detto punto neutro del tronco. Questa eventualità si presenta spesso nei tronchi finali della rete e pertanto non può essere trascurata ai fini di una corretta risoluzione della rete. Tuttavia, poiché [Citrini D. et al.] non tratta specificatamente la determinazione dei coefficienti di ripartizione in questo caso, cioè per δ < 1, si è considerato opportuno farlo in questa sede, per poter implementare correttamente un programma di risoluzione delle reti idrauliche che tenga conto anche delle portate distribuite uniformemente lungo i tronchi. Q-q⋅ x Q P-Q ∆HTOT x H A − ∫ dH ∆H1 ∆H2 0 Q A QA=αP C B P-Q QB=(1- α)P q L1 L2 L Fig. 7.2 − Andamento delle portate e delle perdite di carico nel caso in cui P/2 < Q < P ⇒ 0,5 < δ < 1 Il procedimento seguito per determinare α nel caso in cui δ < 1 è stato lo stesso 132 fatto da [Citrini D. et al.] per il caso δ ≥ 1. Si è imposto che la perdita di carico complessiva attraverso il tronco di condotta, nel caso di portata uniformemente distribuita, sia uguale alla perdita di carico complessiva nel caso “equivalente” in cui la portata distribuita è concentrata nei nodi di monte e di valle e la portata “fittizia” lungo il tronco è costante, cioè: 2 ∆HTOT = K L (Q − αP) (7.3) dove: ∆HTOT = perdita di carico nel caso di portata uniformemente distribuita K = coefficiente che tiene conto della scabrezza e del diametro della tubazione L = lunghezza del tronco Q = portata che entra nel tronco dal nodo di monte nel caso di portata uniformemente distribuita P = portata complessiva da distribuire lungo il tronco αP = portata concentrata nel nodo di monte equivalente alla portata distribuita Q−αP = portata “fittizia” costante che attraversa il tronco A questo punto resta da determinare il valore di ∆HTOT in funzione di Q e P nelle ipotesi appena viste, ossia per Q < P o anche δ < 1. D’altra parte, però, avendo posto che Q sia la portata entrante nel tronco dal nodo di monte, e avendo definito il nodo di monte come il nodo di estremità avente 133 quota piezometrica maggiore, ne consegue che, essendo le portate entranti dai due nodi Q e P−Q, deve risultare che: Q ≥ P −Q ⇒ Q≥ P 2 ⇒ δ ≥ 0,5 Nel caso in cui dovesse invece essere: Q< P 2 ⇒ δ < 0,5 allora evidentemente Q sarebbe la portata entrante dal nodo di valle, per cui si potrà continuare a considerare validi i risultati ottenuti nell’ipotesi che: Q > P 2 ⇒ δ > 0,5 semplicemente assumendo Q pari al valore della portata entrante nel tronco dal nodo opposto, cioè P−Q. In definitiva, quindi, si determinerà il valore di α per δ compreso tra 0,5 e 1. In fig.7.2 si è riportato lo schema di un tronco di condotta con portata uniformemente distribuita lungo il percorso, riferito sempre al caso in cui P/2 < Q < P ⇒ 0,5 < δ < 1. Nello schema si è indicato anche l’andamento qualitativo delle perdite di carico e si può notare come la perdita di carico complessiva ∆HTOT sia uguale alla differenza: ∆HTOT = ∆H1 − ∆H2 (7.4) dove: ∆H1 = perdita di carico tra il nodo di monte A ed il punto “neutro” (a portata nulla) C ∆H2 = perdita di carico tra il nodo di valle B ed il punto “neutro” C 134 Operando in questa maniera si è scisso, in effetti, il tronco AB in due sotto-tronchi AC e CB nei quali non si ha inversione di portata, per cui le rispettive perdite di carico ∆H1 e ∆H2 possono calcolarsi mediante le seguenti formule (tratte da [Citrini D. et al.]): (qx)2 H x = H 0 − ∫ dH = K x Q 2 + − Qqx 3 0 x (7.5) dove: K = un coefficiente che dipende dalla scabrezza e dal diametro della condotta Q = portata d’ingresso nel nodo x = distanza dal nodo d’ingresso del punti in cui si vuole calcolare la perdita di carico q = portata uniformemente distribuita lungo il tronco = P L per cui, applicando la (7.5) ai due sotto-tronchi si ottiene: 2 (qL 1 ) 2 − QqL 1 ∆H1 = K L 1 Q + 3 (7.6) (qL 2 ) 2 2 K L (P Q) + − (P Q)qL ∆H2 = 2 2 3 (7.7) d’altra parte, con semplici ragionamenti di similitudine geometrica, si possono ricavare L1 e L2 in funzione di Q, P ed L: L1 = Q ⋅L P , L2 = P-Q ⋅L P 135 pertanto, ricordando che q = P , la (7.6) e la (7.7) diventano con pochi sviluppi: L ∆H1 = KL ⋅ Q3 3P (7.8) ∆H2 = KL ⋅ (P - Q) 3 3P (7.9) da cui, sostituendo la (7.8) e la (7.9) nella (7.4), si ricava in definitiva: ∆HTOT = ∆H1 − ∆H2 = [ KL ⋅ Q 3 - (P - Q) 3 3P ] (7.10) A questo punto, per determinare α, basta sostituire la (7.10) nella (7.3), ottenendo: 2 K L (Q−αP) = [ KL ⋅ Q 3 - (P - Q) 3 3P ] 0.5 0.48 0.46 0.44 α 0.42 0.4 0.38 0.36 0.5 0.55 0.6 0.65 0.7 δ 0.75 0.8 0.85 0.9 0.95 1 Fig. 7.3 − andamento di α in funzione di δ nell’intervallo 0,5 < δ < 1 136 che rappresenta, dati Q e P, una equazione di II grado in α, risolvendo la quale si ricava (scartando la soluzione per cui risulta α > 1): Q Q 3 − (P − Q) 3 − α= P 3P 3 (7.11) che, scritta in funzione di δ (ricordando che δ = α= δ− 1 3 Q ) , diventa: P δ 3 − (1 − δ ) 3 (7.12) valida, si ricorda, nell’intervallo 0,5 < δ < 1. In fig.7.3 è mostrato l’andamento di α in funzione di δ secondo la funzione (7.12). Una volta risolto il problema della formulazione teorica dei coefficienti α di ripartizione delle portate concentrate, una rete in cui compaiano portate distribuite può essere facilmente risolta in modo iterativo. Infatti non è possibile risolvere tali reti in una volta sola in quanto nelle formule (7.1) e (7.12) per la determinazione di α compaiono le portate Q entranti nei singoli tronchi di condotta della rete. D’altra parte, tali portate Q non sono note a priori in quanto, per poterle determinare, è necessario risolvere la rete, ma quest’ultima, a sua volta, non può essere risolta con precisione senza conoscere i coefficienti α che, come si è visto, ripartiscono le portate distribuite, sotto forma di portate concentrate, nei vari nodi della rete. Per ovviare al problema si è pensato di assegnare ai coefficienti α un valore iniziale 137 di tentativo pari a 0,5, che è comunque un valore abbastanza vicino al valore effettivo soprattutto nei rami iniziali in cui le portate che entrano nei nodi sono molto maggiori delle portate distribuite (si veda in proposito la fig.7.1). In tal modo è possibile attribuire un valore alle portate concentrate nei nodi e risolvere la rete con le metodologie esaminate nei paragrafi precedenti. Le portate Q’ ottenute dalla risoluzione del sistema non rappresentano (ci si riferisce sempre al caso in cui si siano adoperare le portate distribuite e quindi la schematizzazione fin qui vista) le portate Q effettivamente entranti nei tronchi, bensì le portate “fittizie” Q − αP , cioè quelle portate costanti tali da ingenerare nella rete delle perdite di carico uguali a quelle che si sarebbero avute in caso di portate uniformemente distribuite. Per riottenere le portate Q entranti nei singoli tronchi della rete è sufficiente quindi risommare a ciascuna portata “fittizia” Q’ la portata αP che si era ritenuta “fittiziamente” concentrata nel nodo di monte mentre in realtà, all’ingresso del tronco, appartiene ancora tutta a Q in quanto la “distribuzione” deve ancora iniziare. A questo punto è possibile reiterare il procedimento dopo aver calcolato, però, i nuovi valori di α in funzione degli ultimi valori delle portate entranti nei tronchi, utilizzando per ogni tronco la formula (7.1) o (7.12) a seconda del valore di δ = Q . P Si noti che, a partire dalla seconda iterazione, è possibile utilizzare come punto iniziale del metodo di Gauss-Newton la soluzione del sistema della iterazione precedente in quanto le portate concentrate, e conseguentemente il sistema di equazioni, 138 non variano, da una iterazione all’altra, in modo così sensibile da far spostare il “vecchio” punto di “minimo globale” nella concavità di un “minimo locale”. A rigore, comunque, questa affermazione non è dimostrabile; tuttavia le reti, anche complesse, usate come test per il programma hanno mostrato che per ogni singola iterazione successiva alla prima (per la prima iterazione infatti il punto iniziale viene sempre individuato con gli algoritmi genetici) il metodo di Gauss-Newton è sempre riuscito a convergere al “minimo globale”. Ciò non esclude comunque la possibilità, qualora si desideri un’ulteriore garanzia di robustezza del programma, di poter adoperare gli algoritmi genetici per la determinazione del punto iniziale in ciascuna iterazione. In definitiva, ad ogni singola iterazione, si sarà determinato un vettore di coefficienti α di ripartizione (un coefficiente per ogni tronco in cui si è supposto di distribuire la portata in modo uniforme lungo il percorso) distinto dal vettore precedente ma con scarto, di volta in volta, sempre più piccolo. Si è deciso di interrompere l’iterazione quando la varianza del vettore “scarto”, definito come vettore differenza tra l’ultimo vettore dei coefficienti α ed il penultimo, -10 scende sotto un valore di soglia predefinito che si è posto, di default, pari a 10 . In fig.7.4 si è mostrato il diagramma di flusso che schematizza il metodo iterativo sin qui illustrato. 139 START pone i coefficienti di ripartizione α iniziali uguali a 0,5 determina le portate concentrate equivalenti risolve la rete valuta i nuovi coefficienti di ripartizione α in base alle nuovi valori di Q/P calcola il vettore scarto tra i vecchi e i nuovi valori dei coefficienti α calcola la varianza tra gli elementi del vettore scarto no varianza < del valore di soglia ? si END 140 Fig. 7.4 7.4 Calcolo delle perdite di carico con le formule pratiche o con la formula di Colebrook Nel programma si è prevista la duplice possibilità di valutare le perdite di carico tramite le formule pratiche (valide nell’ipotesi di moto assolutamente turbolento) oppure con la formula di Colebrook (valida anche per moto turbolento di transizione). Per quanto riguarda la prima possibilità, ovvero il calcolo delle perdite di carico mediante le formule pratiche, si è utilizzata la formula di Darcy: J = u Q2 β D5 con u = (7.13) Per la determinazione del coefficiente β, funzione della scabrezza e del diametro della tubazione, esistono numerose formule, tra le quali si è scelto di adottare la formula seguente: 2γ β = 0,000857 1 + D 2 (7.14) dove: D = diametro interno della condotta (espresso in metri) γ = indice di scabrezza della condotta (compreso usualmente tra 0,09 e 0,23) Per cui, tra i dati di “INPUT” da fornire al programma, ci saranno anche γ e D di ogni singolo tronco della rete. Dopodiché, una volta noti i valori ui dei tronchi della rete, è possibile costruire la matrice diagonale R del sistema matriciale di equazioni (4.1) che governa la rete, i cui elementi ri sono uguali a ui Li , dove Li sono le lunghezze rispettive dei tronchi. 141 Permane, tuttavia, il problema della validità di questa impostazione. Tali formule sono infatti valide nel campo del moto assolutamente turbolento nel quale le perdite di carico risultano effettivamente proporzionali al quadrato della portata. Non sono invece applicabili, a rigore, al regime di transizione ossia al caso di moto turbolento di transizione. Questo tipo di moto può presentarsi soprattutto nei tronchi terminali della rete dove i numeri di Reynolds sono mediamente più bassi (a parità di velocità del fluido, infatti, il numero di Reynolds risulta direttamente proporzionale al diametro) o nel caso in cui vengano impiegate tubazioni molto “lisce”, ossia con scabrezza molto bassa. Per ottenere risultati validi anche nel campo del moto turbolento di transizione conviene pertanto utilizzare la formula di Colebrook; anche questa, come si vedrà tra breve, presenta maggiori difficoltà di implementazione. Per calcolare le perdite di carico con la formula di Colebrook, si è adoperato un ragionamento analogo a quello visto per la determinazione dei coefficienti α di ripartizione delle portate distribuite. Infatti, nella formula di Darcy-Weisbach: Q2 V2 J=λ = 8λ 2gD gD 5 π 2 (7.15) l’indice di resistenza λ , calcolato con la formula di Colebrook: 2,51 1 ε = −2 log 10 + 3,71 D λ λ Re 1 (7.16) risulta, a sua volta, funzione della portata Q, in quanto dipende dal numero di 142 Reynolds: Re = ρvD 4 Q = µ πν D mentre il termine (7.17) ε è un numero puro che rappresenta la scabrezza relativa, dove ε, D avente la dimensione di una lunghezza, rappresenta la scabrezza (in analogia con la scabrezza d della formula di Nikuradse). Pertanto ci si trova davanti alla difficoltà, analogamente al caso della determinazione dei coefficienti α, di non poter valutare direttamente gli indici di resistenza λ dei singoli tronchi della rete in quanto non sono note a priori le portate che attraversano i tronchi. D’altra parte non è possibile valutare le portate (cioè risolvere la rete) senza prima conoscere gli indici di resistenza λ che legano le perdite di carico alle portate secondo la formula (7.15). Anche in questo caso quindi, per ovviare al problema, si è ricorso ad un metodo iterativo in cui ad ogni passo viene risolta la rete adoperando gli indici di resistenza λ calcolati in base alle portate precedenti, ossia ottenute dalla risoluzione della rete nel passo precedente. Ovviamente, per avviare l’iterazione, occorre assegnare agli indici di resistenza λ un valore iniziale in modo da poter risolvere la rete una prima volta, così da determinare una stima, seppur imprecisa, delle portate che attraversano i tronchi. Si è deciso allora di assegnare ai λ iniziali il valore corrispondente al moto 143 assolutamente turbolento, nel quale le perdite di carico sono direttamente proporzionali al quadrato delle portate e pertanto gli indici di resistenza λ non dipendono dal numero di Reynolds, ossia dalle portate. In definitiva non si fa altro che trascurare, per la prima iterazione, il primo termine della formula di Colebrook (che degenera in tal guisa nella formula di Nikuradse), che diventa: 1 ε = −2 log 10 3,71 D λ 1 (7.19) da cui, conoscendo i diametri e le scabrezze dei singoli tronchi della rete, si determinano agevolmente i valori dei indici di resistenza λ iniziali. Come condizione finale dell’iterazione si è invece posto, similmente al caso della determinazione dei coefficienti α, che la varianza tra gli elementi del “vettore scarto” -10 scenda sotto un valore di soglia prestabilito (pari, di default, a 10 ), dove si è definito “vettore scarto” la differenza tra il vettore contenente gli indici di resistenza λ ottenuti con l’ultima iterazione ed il vettore contenente gli indici di resistenza λ dell’iterazione precedente. Si noti che dopo aver determinato, ad ogni iterazione, i valori di λ, poiché si è impiegato sempre il sistema matriciale (4.1) per risolvere la rete, e in tale sistema la matrice R è definita come la matrice diagonale i cui elementi ri sono uguali a ui Li , occorre “convertire” gli indici di resistenza λ nei coefficienti ui . 144 START Determina il valore iniziale per i coefficienti di resistenza λ risolve la rete valuta i nuovi coefficienti di resistenza λ in base alle nuove portate calcola il vettore scarto tra i vecchi e i nuovi valori dei coefficienti λ calcola la varianza tra gli elementi del vettore scarto no varianza < del valore di soglia ? si END 145 Fig. 7.5 Ciò può farsi semplicemente uguagliando la (7.13) e la (7.15), ottenendo: u= 8 λ gπ 2 D 5 (7.20) In fig.7.5 è mostrato il diagramma di flusso che schematizza il metodo iterativo sin qui illustrato. Un problema a parte è stato, infine, quello della forma implicita della formula di Colebrook, in cui λ non è “esplicitabile” e va pertanto determinato risolvendo per via iterativa l’equazione nell’incognita λ: 2,51 1 ε = 0 + 2 log 10 + 3,71 D λ λ Re 1 (7.21) La ricerca iterativa della soluzione della (7.21) è stata affidata alla stessa implementazione del metodo di Gauss-Newton utilizzata per risolvere il sistema matriciale di equazioni (4.1) (cioè il problema di ottimizzazione (4.8) ), assegnando come funzione (stavolta scalare) da annullare la funzione al primo membro della (7.21) e come punto iniziale di ricerca il valore di λ precedentemente calcolato per lo stesso tronco. 7.5 Ulteriori considerazioni sulla scelta del punto iniziale L’uso degli algoritmi genetici per la determinazione del punto iniziale di ricerca, alla luce delle considerazioni teoriche emerse in questi capitoli e della sperimentazione numerica svolta, di cui si parlerà nel paragrafo successivo, può ritenersi una metodologia 146 che “irrobustisce” i metodi classici di risoluzione delle reti in quanto ne “garantisce” la convergenza. Tuttavia diversi autori, si veda ad esempio [Curto, G. et al.], ritengono di aver risolto il problema del punto iniziale del metodo di Newton (la maggior parte degli autori fa riferimento in particolare al metodo di Newton-Raphson) scegliendo una distribuzione congruente a caso per le portate, e dei valori qualsiasi per le altezze piezometriche. Quest’ipotesi sarebbe suffragata dall’esperienza ovvero dall’aver risolto decine e decine di reti, anche complesse, e aver riscontrato che, con quel punto iniziale, il metodo di Newton converge sempre al “minimo globale”. In effetti, utilizzando un punto di ricerca siffatto per le tre reti su cui si è “testato” il programma, in tutti e tre i casi si è riscontrata la convergenza del metodo al “minimo globale”. Ciononostante, non è possibile dimostrare che il metodo converga “certamente” al “minimo globale” a partire da un punto iniziale scelto nel suddetto modo, trattandosi di una modalità di scelta alquanto “euristica”. Si è comunque ritenuto opportuno di non trascurare questa ulteriore informazione aggiungendo alla popolazione iniziale casuale dell’algoritmo genetico implementato (si veda in proposito il paragrafo 7.2.1), un ventunesimo cromosoma i cui geni relativi alle portate soddisfano la condizione di “congruenza” suddetta. Per ottenere la soluzione di tentativo “congruente”, si è risolta previamente la rete ipotizzando che le perdite di carico nella rete fossero lineari, ossia ponendosi nell’ipotesi 147 di moto laminare. La risoluzione della rete, in questo caso, consiste nel risolvere un semplice sistema lineare di N equazioni in N incognite. La soluzione, ovviamente, non ha alcun “significato fisico” in quanto il moto dell’acqua nelle condotte della rete è lungi dall’essere laminare, tuttavia le portate sono sicuramente “congruenti” in quanto soddisfano le equazioni di continuità del sistema. Aggiungendo in tal modo la soluzione di “moto laminare” alla popolazione iniziale di cromosomi dell’algoritmo genetico, si raggiunge il duplice scopo di non perdere l’eventuale vantaggio di conoscere previamente un “buon” punto iniziale, e, al tempo stesso, di poter validare la “bontà” di tale punto. Difatti è l’algoritmo genetico stesso, in tal modo, a riconoscere l’eventuale “bontà” del punto suggerito e a far sì che il resto della popolazione si adegui velocemente a questo “super” individuo. Viceversa, se il punto non è “buono”, questo viene subito scartato dal processo selettivo in favore di individui più “adatti”. 7.6 Scelta di alcune reti “test” e raffronto dei risultati col metodo delle VPH Per “testare” il programma sono state utilizzate quattro distinte reti idrauliche aventi diversi gradi di complessità (per le caratteristiche geometriche e idrauliche di ciascuna rete si veda l’appendice B). Le reti suddette sono state risolte previamente col metodo delle “Altezze Piezometriche Virtuali” (anche detto metodo delle VPH), in modo da poter raffrontare i 148 risultati di una metodologia “collaudata” con quelli del programma. Tale metodo, elaborato dal Prof. A. Castorani e dal Prof. A.F. Piccinni del Politecnico di Bari, basa la ricerca della soluzione di “moto uniforme” di una rete sullo studio del transitorio del moto vario elastico, considerando il moto uniforme come quello stato di equilibrio finale a cui tende asintoticamente il moto vario elastico ingenerato nella rete, ipotizzata in condizioni iniziali di quiete con erogazioni nulle, da una perturbazione “fittizia”, ottenuta simulando l’apertura brusca e contemporanea di tutte le erogazioni. Dopodiché si sono risolte le stesse reti con il programma implementante la tecnica mista algoritmi genetici / metodo di Gauss-Newton , oggetto del presente studio. Ciascuna rete è stata risolta più volte utilizzando le diverse opzioni descritte nei paragrafi precedenti. La prima volta, ogni rete è stata risolta senza adoperare né la ricerca iterativa dei coefficienti di ripartizione delle portate distribuite α (posti semplicemente uguali a 0,5), né la ricerca iterativa dei coefficienti di resistenza λ calcolati con la formula di Colebrook. La seconda volta è stata omessa nuovamente la ricerca iterativa dei coefficienti di ripartizione α mentre si è effettuata l’iterazione per i coefficienti di resistenza λ. La terza e la quarta volta si sono risolte solamente quelle reti in cui erano presenti portate uniformemente distribuite (due reti su quattro) effettuando in entrambi i casi la ricerca iterativa dei coefficienti di ripartizione α (avente senso solo in presenza di 149 portate distribuite) e, solo nell’ultimo caso, anche l’iterazione per i coefficienti di resistenza λ. I risultati, ottenuti per ciascuna rete con le diverse opzioni, sono stati elaborati per mezzo di foglio elettronico e confrontati con i risultati del metodo delle VPH. In particolare, sono stati valutati gli scarti relativi sulle portate entranti ed uscenti dai tronchi e sulle quote altezze piezometriche (cioè le quote piezometriche riferite alle quote dei nodi) tra i valori ottenuti con il programma, nei diversi casi appena enumerati, ed i valori ottenuti con il metodo delle VPH. Infine, per ciascuna voce (portate entranti, uscenti e altezze piezometriche), è stato calcolato lo scarto relativo medio e la varianza, ossia la radice quadrata dello scarto quadratico medio (tali risultati sono riportati, per ogni rete, in appendice C). Da quest’analisi risulta innanzitutto che il programma funziona correttamente in quanto i risultati ottenuti senza l’iterazione su λ sono pressoché coincidenti con quelli del metodo delle VPH anche per le reti più complesse, come ad esempio quella di TorreMaggiore (FG) avente 165 tronchi e 107 nodi. La coincidenza dei risultati risulta, comunque, più spinta nelle due reti in cui non è prevista l’erogazione di portate distribuite, dove lo scarto relativo medio, per la rete piccola (8 tronchi e 5 nodi) è inferiore al 0,002 % sia sulle portate sia sulle altezze piezometriche, mentre per la rete più grande (86 tronchi e 58 nodi) si aggira intorno al 2% sulle portate e intorno al 0,05% sulle altezze piezometriche. In questo caso gli scarti sono probabilmente da attribuirsi all’impiego, nella risoluzione della rete con i due rispettivi metodi, di approssimazioni numeriche diverse. 150 Viceversa, nelle altre due reti, dove ci sono portate distribuite lungo i tronchi, i valori dello scarto relativo medio sono, senza iterazione sui coefficienti di ripartizione α, all’incirca doppi rispetto ai precedenti, sebbene anche in questo caso si evinca una certa proporzionalità tra lo scarto relativo medio e la complessità della rete. Difatti si passa da valori dello scarto relativo medio del 2,7% sulle portate e del 0,8% sulle altezze piezometriche per la rete piccola (16 tronchi e 12 nodi), a valori del 4,8% sulle portate e del 1,2% sulle altezze piezometriche per la rete grande (165 tronchi e 107 nodi). Adoperando invece la ricerca iterativa sui coefficienti di ripartizione α i valori dello scarto relativo medio sulle portate scendono per la rete piccola al 1% e per la rete grande al 2%, mentre il valore dello scarto medio relativo sulle altezze piezometriche resta quasi invariato. Questo fatto costituisce una sostanziale verifica circa la validità e l’utilità della ricerca iterativa dei coefficienti di ripartizione α. Nel metodo delle VPH, infatti, è già implementata l’erogazione di portate distribuite lungo i tronchi, sebbene in questo metodo la portata sia in effetti distribuita in modo non perfettamente uniforme, ma concentrata in un certo numero i sezioni in cui è discretizzato il singolo tronco. Era pertanto prevedibile un aumento degli scarti dai risultati del metodo delle VPH per le soluzioni ottenute ipotizzando semplicemente α = 0,5 , in quanto questa posizione è valida solo in prima approssimazione e si discosta dai valori effettivi soprattutto, come 151 si è visto nel paragrafo 7.3, nei tronchi finali in cui la portata che attraversa i tronchi risulta essere dello stesso ordine di grandezza della portata da distribuire. Il fatto che gli scarti relativi diminuiscano per i risultati ottenuti adoperando la ricerca iterativa dei coefficienti α, tornando ad assumere all’incirca lo stesso ordine di grandezza riscontrato per le reti senza portate distribuite (in cui questo problema non sussiste), indica chiaramente che con tale metodologia iterativa i risultati sono più precisi e rispondenti alle ipotesi di funzionamento della rete. E’ anzi lecito ipotizzare che gli scarti “residui” siano attribuibili, oltre che ai menzionati problemi di approssimazione numerica, al fatto che il metodo delle VPH non operi con portate distribuite omogeneamente lungo il percorso bensì con portate distribuite discretizzate per cui i risultati potrebbero discostarsi, seppur lievemente, dalla soluzione esatta del problema. Un discorso a parte meritano invece i risultati ottenuti mediante la ricerca iterativa dei coefficienti di resistenza λ. In questo caso è infatti scontato che vi siano degli scostamenti delle soluzioni rispetto ai valori ottenuti in precedenza in quanto, come visto nel paragrafo 7.4, cambiano proprio le equazioni che governano il sistema ed in particolare la determinazione delle perdite di carico. Difatti tale scostamento si evince semplicemente osservando la variazione dello scarto relativo medio (calcolato sempre in riferimento ai risultati del metodo delle VPH) relativo ai risultati ottenuti rispettivamente con e senza iterazione dei coefficienti di resistenza λ. 152 Si tratta comunque di variazioni comprese nell’intervallo 0,1-1% che quindi giustificano, in un certo senso, l’approssimazione che si compie considerando le portate sempre nel regime di moto assolutamente turbolento. Tuttavia questa approssimazione resta lecita solo fintantoché si considerano tubi aventi elevati valori di scabrezza come quelli impiegati per questi test, per i quali si aveva un indice di scabrezza γ pari a 0,23. Adoperando tubi “lisci”, ossia con bassi valori di scabrezza, come si è già accennato nel paragrafo 7.4, l’approssimazione non risulta più lecita in quanto le portate si spostano nel campo di moto del regime turbolento di transizione. -3 10 errore -4 10 -5 10 -2 10 -4 10 -6 -8 10 10 epsilon di Colebrook -10 10 -12 10 Fig. 7.6 − Diagramma in scala logaritmica dell’errore commesso nel valutare le portate in funzione della scabrezza ε 153 errore sulle altezze piezometriche residue 2 10 1 10 0 10 -1 10 -2 10 -4 -6 10 -8 10 10 epsilon di Colebrook -10 10 -12 10 Fig. 7.7 − Diagramma in scala logaritmica dell’errore commesso nel valutare le altezze piezometriche in funzione della scabrezza ε Si vedano in proposito le figure 7.6 e 7.7 in cui sono mostrati rispettivamente gli errori medi relativi tra le soluzioni ricavate con l’approssimazione del moto assolutamente turbolento e quelle “esatte” ottenute in modo iterativo con la formula di Colebrook, relativamente a diversi valori della scabrezza ε per la rete di Cao (è la rete più piccola composta di 8 tronchi e 5 nodi). Dai risultati si evince come l’imprecisione commessa impiegando l’approssimazione suddetta aumenti sempre più, man mano che la scabrezza relativa diminuisce, fino a stabilizzarsi intorno ad un valore di massimo all’incirca costante.. 154 7.7 Convergenza degli algoritmi genetici applicati alle reti “test” e problema dello “slow-finish” Si è accennato più volte nel corso di questo lavoro al problema della velocità di convergenza verso la soluzione degli algoritmi genetici. Si è parlato di un rallentamento progressivo della velocità di convergenza con andamento approssimativamente asintotico, man mano che l’algoritmo si avvicina alla soluzione del problema di ottimizzazione, denominato in letteratura “slow finish”. Si è detto anche che il rallentamento finale risultava tale, per i casi di reti più complesse, da dover optare per una tecnica mista che permettesse di continuare a beneficiare delle capacità “esplorativa” degli algoritmi genetici senza tuttavia dover attendere per tempi eccessivamente lunghi (si è accennato a tempi di giorni e settimane), ovvero delegando la componente “approfonditiva” dell’algoritmo ai metodi classici di ottimizzazione di Newton. Per dare una dimostrazione di quanto detto vengono illustrati, nelle figure seguenti (dalla fig. 7.8 alla fig. 7.15), i risultati di convergenza ottenuti per le quattro reti “test” (per la descrizione di queste reti si veda l’appendice B) facendo compiere all’algoritmo genetico 10000 generazioni per ogni rete. Per ogni rete si sono riportate, sia in scala logaritmica sia in scala semi-logaritmica, in ascissa il numero di generazioni ed in ordinata il valore della funzione obiettivo corrispondente al miglior (ossia al più adatto) individuo della popolazione. Dove la funzione obiettivo del problema di ottimizzazione (4.8), definita in (4.9), è stata ottenuta assegnando un valore unitario ai pesi relativi alle equazioni di continuità 155 -2 ed un valore pari a 10 ai pesi relativi alle equazioni di equilibrio, in modo da “omogeneizzare” la convergenza di portate e altezze piezometriche rispetto al sistema di misura scelto, ossia il S.I. (in proposito si veda il capitolo IV). Dai risultati mostrati nelle figure emerge in maniera evidente il fenomeno dello “slow finish” e si nota come, per le rete più complesse, dopo 10000 generazioni (effettuate in circa 2 ore con un Pentium II 350Mhz), la soluzione sia molto distante -7 dalla precisione richiesta di 10 , ottenibile altrimenti in pochi secondi con la tecnica mista. Nelle figure seguenti si è riportato in ascissa il numero di generazioni e in ordinata l’errore residuo. 156 2 10 0 10 -2 10 -4 10 -6 10 -8 10 0 1000 2000 3000 4000 5000 6000 7000 8000 9000 10000 Fig. 7.8 − algoritmi genetici applicati alla soluzione della rete di Cao Diagramma in scala semi-logaritmica 2 10 0 10 -2 10 -4 10 -6 10 -8 10 0 10 1 10 2 10 3 10 4 10 Fig. 7.9 − algoritmi genetici applicati alla soluzione della rete di Cao Diagramma in scala logaritmica 157 3 10 2 10 1 10 0 10 -1 10 -2 10 -3 10 0 1000 2000 3000 4000 5000 6000 7000 8000 9000 10000 Fig. 7.10 − algoritmi genetici applicati alla soluzione della rete di Enc Diagramma in scala semi-logaritmica 3 10 2 10 1 10 0 10 -1 10 -2 10 -3 10 0 10 1 10 2 10 3 10 4 10 Fig. 7.11 − algoritmi genetici applicati alla soluzione della rete di Enc Diagramma in scala logaritmica 158 5 10 4 10 3 10 2 10 1 10 0 10 -1 10 -2 10 0 1000 2000 3000 4000 5000 6000 7000 8000 9000 10000 Fig. 7.12 − algoritmi genetici applicati alla soluzione della rete di Mignosa Diagramma in scala semi-logaritmica 5 10 4 10 3 10 2 10 1 10 0 10 -1 10 -2 10 0 10 1 10 2 10 3 10 4 10 Fig. 7.13 − algoritmi genetici applicati alla soluzione della rete di Mignosa Diagramma in scala logaritmica 159 5 10 4 10 3 10 2 10 1 10 0 10 -1 10 0 1000 2000 3000 4000 5000 6000 7000 8000 9000 10000 Fig. 7.14 − algoritmi genetici applicati alla soluzione della rete di TorreMaggiore Diagramma in scala semi-logaritmica 5 10 4 10 3 10 2 10 1 10 0 10 -1 10 0 10 1 10 2 10 3 10 4 10 Fig. 7.15 − algoritmi genetici applicati alla soluzione della rete di TorreMaggiore Diagramma in scala logaritmica 160 RIFERIMENTI BIBILIOGRAFICI [1] D.Citrini e G.Noseda “Idraulica” (Casa Editrice Ambrosiana, Milano 1987) [2] G. Curto e A. Tumbiolo Metodi di calcolo delle reti di distribuzione. In “Tecniche per la difesa dall’inquinamento” Atti del 14° Corso di Aggiornamento – Giugno 1993. A cura di G.Frega (Editoriale Bios, 1993) [3] V.Comincioli “Metodi Numerici e Statistici per le Scienze Applicate” (Casa Editrice Ambrosiana, Milano 1992) [4] M.A. Branch e MathWorks, Inc. 1996) A. Grace “Optimization Toolbox User’s Guide” (the [5] J.H. Holland “Adaptation in natural and artificial system” (Univerisity of Michigan Press,1975) [6] D.E. Goldberg “Genetic Algorithms in Search, Optimization and Machine Learning” (Addison-Wesley, Reading, MA, 1989) [7] Z. Michalewicz “Genetic Algorithms + Data Structures = Evolution Programs” (Springer – Verlag, Berlin Heidelberg, 1992) [8] J.A. Joines e C.R. Houck, On the use of non-stationary penalty functions to solve constrained optimization problems with genetic algorithms. In ”1994 IEEE International Symposium Evolutionary Computation, Orlando FL ”, pp 579-584 [9] C.R. Houck, J.A. Joines e M.G. Kay “A Genetic Algorithm for Function Optimization: A Matlab Implementation” (North Carolina State Univeristy NC) [10] O.Schneider, M.Belmont e D.A. Savic “Genetic Algorithms for Non-Linear Generalised Cross Correlation” (University of Exeter, Devon - U.K. 1996) [11] H.O.Poyhonen e D.A. Savic “Symbolic Regression Using Object-Oreiented Genetic Programming” (University of Exeter, Devon - U.K.) 161 Appendice A Listato delle funzioni principali del programma function []=netga(nomefile,alfasino,lambdasino,... predimsino,gastop,Numgen,precalfa,preclambda,weight) %Programma per il calcolo delle reti idrauliche in pressione % %mediante una tecnica mista: algoritmi genetici/metodo Gauss-Newton % %di Enrico Masini - Politecnico di Bari 15 giugno 1999 % % % %function []=retega(nomefile,alfasino,lambdasino... % ,gastop,Numgen,precalfa,preclambda,weight) % %gli argomenti sono: % % nomefile è il nome con cui sono identificati i 3 file di input della rete: % in1"nome file".dat in2"nomefile".dat in3"nomefile".dat ; per la % struttura dei 3 file si veda la rete di esempio cao ed i 3 file % relativi in1cao.dat in2cao.dat in3cao.dat % % alfasino è un flag da porre a 1 oppure a 0 (di default è 0), rispettivamente % se si desidera o meno la determinazione iterativa dei coefficienti % alfa di ripartizione delle portate distribuite tra il nodo di monte % e quello di valle (altrimenti alfa viene posto di default = 0.5) % % lambdasino è un flag da porre a 1 oppure a 0 (di default è 0), rispettivamente % se si desidera o meno l'uso della formula di Colebrook per il calcolo % delle perdite di carico (in questo caso si effettua una iterazione % sui valori di lambda calcolati in funzione delle portate), altrimenti % viene adoperata la formula empirica j= u q^2 % % predimsino è un flag da porre a 1 oppure a 0 (di default è 1), rispettivamente % se si desidera o meno l'aggiunta, alla popolazione iniziale degli % algoritmi genetici, di una soluzione di predimensionamento che sia % "congruente" (ossia che verifichi l'eq.di continuità delle portate) % ottenuta linearizzando il sistema di equazioni, ossia ipotizzando % il moto laminare % % gastop è un flag da porre a 1 oppure a 2 (di default è 1), rispettivamente % se si desidera il primo o il secondo tipo di condizione terminale % per gli algoritmi genetici (i quali servono a determinare un buon % punto inziale,ossia interno alla concavità del minimo globale, per % il metodo di Gauss-Newton) % % Numgen è il numero di generazioni effettuate dagli algoritmi genetici (di % default 500) prima di arrestarsi per verificare se si è giunti o % meno in prossimità del minimo globale del problema in modo da % passare alla più rapida ricerca di Gauss-Newton % % precalfa è la precisione minima richiesta per il coefficiente alfa (di default % è 1e-10) prima di terminare l'iterazione % % preclambda è la precisione minima richiesta per lambda (di default è 1e-10) % prima di terminare l'iterazione % % weight è il peso da assegnare, nella funzione obiettivo degli algoritmi % genetici FUNGA, alle altezze piezometriche per renderle omogenee % numericamente alle portate e bilanciare così la convergenza %definisco le variabili globali da compartire con le funzione obiettivo fun e funga global weight D An As A R Q Qdistr hs a numlati numnodi... numnodint serbatoi nodinterni Reynolds epsilon %immetto i valori di default per i campi vuoti della funzione if nargin < 9, %immette il valore di default per weight weight = 1e-2; end if nargin < 8, %immette il valore di default per preclambda preclambda = 1e-10; end if nargin < 7, %immette il valore di default per precalfa precalfa = 1e-10; end if nargin < 6, Numgen = 500; end %immette il valore di default per numgen if nargin < 5, iniziale gastop = 1; determina end laminare) %di default si disattiva la ricerca del punto %mediante algoritmi genetici (e quindi si %ipotizzando che il regime del flusso sia if nargin < 4, %di default sceglie di aggiungere alla popolazione iniziale predimsino = 1; %degli algorimti genetici la soluzione di moto laminare end if nargin < 3, lambda lambdasino = 0; end %di default disattiva la ricerca iterativa di if nargin < 2, alfa alfasino = 0; end %di default disattiva la ricerca iterativa di %carico i dati della rete dai 3 file %in1"nome file".dat , in2"nomefile".dat in3"nomefile".dat eval (['load in1' nomefile '.dat;']); eval (['load in2' nomefile '.dat;']); eval (['load in3' nomefile '.dat;']); eval (['in1 = in1' nomefile ';']); eval (['in2 = in2' nomefile ';']); eval (['in3 = in3' nomefile ';']); numlati=size(in1,1); numnodi=size(in2,1); %ricavo la matrice di connessione lati-nodi A A=zeros(numlati,numnodi); for i=1:numlati, A(i,in1(i,2))=-1; A(i,in1(i,3))=+1; end %ricavo il vettore delle altezza piezometriche dei nodi esterni (serbatoi) serbatoi = find(in2(:,3)); hs = in2(serbatoi,4)'; %determino in modo automatico il vettore dei nodi interni a partire dal vettore serbatoi nodinterni = find(in2(:,3)==0); %ricavo le due sottomatrici An e As contenenti rispettiv.le colonne dei nodi interni ed esterni An = A(:,nodinterni); As = A(:,serbatoi); %ricavo il vettore delle lunghezze dei tronchi L = in1(:,5)'; %ricavo il vettore delle quote geodetiche dei nodi Hnodi = in2(:,2)'; Hnodint = Hnodi(find(in2(:,3)==0)); %ricavo il vettore dei nodi esterni(serbatoi) serbatoi = [find(in2(:,4))]; numnodint= numnodi - length(serbatoi); %ricavo il vettore delle portate distribuite concentrate nei nodi (interni ovviamente) Qiniz = 1e-3 .* in2(nodinterni,1)'; %inserisco il vettore dei diametri dei singoli tronchi p1 = in3(:,1)'; p2 = in1(:,7)'; D = 1e-3 * p1(p2); %inserisco il coefficiente di scabrezza di Darcy dei singoli tronchi p1 = in3(:,2)'; gamma= p1(p2); %la sezione seguente del codice è relativa alla risoluzione della rete: %ricavo le costanti delle perdite dicarico delle tubazioni H=L*u*Q^a deve u = beta*D^(-n) beta = 0.000857*(1+2.*gamma./(D.^0.5)).^2; %per la formula di Bazin u = beta .* (D.^(-5)); %ricavo la matrice diagonale R contenente i coefficienti b=u*L essendo H=b * Q ^ a R = diag (u .* L); a = 2; %ricavo le portate concentrate equivalenti alle portate distribuite supponendo %che (non conoscendo ancora le portate) alfa=0.5 per il predimensionamento Qdistr = in1(:,4)' .* 1e-3; Qdistr(find(Qdistr==0))=-1; %stratagemma per evitare divisioni per 0 qualora Qdistr=0 alfamonte alfavalle = ones(1,numlati) .* 0.5; = ones(1,numlati) .* 0.5; alfamonte = alfamonte .* (Qdistr ~= -1); %nel caso che ci siano portate distribuite alfavalle = alfavalle .* (Qdistr ~= -1); %nulle azzera alfamonte e alfavalle Qmonte = Qvalle = alfamonte alfavalle .* Qdistr; .* Qdistr; Amonte = (A - abs(A)) ./ (-2); Avalle = (A + abs(A)) ./ (+2); Qconc = Amonte' * Qmonte' + Avalle' * Qvalle'; Q = Qiniz + Qconc(nodinterni)'; %ricerca una soluzione "congruente" linearizzando il sistema ossia ipotizzando la linearità %delle perdite di carico, il che equivale a supporre che il flusso sia laminare if predimsino %ricavo le costanti delle perdite dicarico del moto laminare H=L*u*Q sigma = 4.1554e-6; %ricordando che J=4.1554 e-6 *Q / D^4 = sigma*Q*D^(-m) = u * Q m = 4; u = sigma .* (D.^(-m)); U = diag (u .* L); %determino la matrice dei coefficienti del sistema lineare MATRCOEF = [[An' zeros(numnodint,numnodint)];[U An]]; %quindi determino il vettore dei termini noti VETTNOTI = [Q (-As*hs')']; %infine risolvo il sistema e trovo il punto iniziale X = (MATRCOEF \ VETTNOTI')'; [X,val]=funga(X); %calcola il valore della funzione obiettivo in corrispondenza di X end %ricerca del punto iniziale con gli ALGORITMI GENETICI% %definizione della matrice contentente i campi di esistenza delle soluzioni qmax = abs(sum(Q)); hmax = max(hs); hmin = min(Hnodi); bounds = [ones(numlati,1)*[-qmax +qmax];ones(numnodint,1)*[hmin hmax]]; %lancia la funzione che ritorna il vettore contenente la popolazione iniziale casuale numindividui=20; Pop=initializega(numindividui,bounds,'funga',[],[1e-6 1 1]); if predimsino, alla popolazione Pop=[Pop;X val]; predimensionamento end di moto laminare) %nel caso in cui lo si è richiesto aggiunge %iniziale la soluzione X "congurente" di %ottenuta linearizzando il sistema (ipotesi check = 1; %inizializza la variabile di controllo check Numelem = size(Pop,1); %numero di individui della popolazione eps = 1e-7; %massima deviazione standard consentita tra i "minimi locali" options = foptions; %inizializza il vettore di opzioni standard per la funzione fsolve %inizia il ciclo che lancia gli algoritmi genetici fino a quando il miglior elemento %della popolazione non converga al massimo globale while check, %lancia gli algoritmi genetici ricercando una popolazione finale con errore gaprec [sol,endPop,bPop]=ga(bounds,'funga',[],Pop,[1e-6 1 1]... ,'optmaxgenterm',[Numgen 0 1e20],'normgeomselect',0.08... ,'arithxover heuristicxover simplexover',[2 0;2 3;2 0]... ,'boundarymutation multinonunifmutation nonunifmutation unifmutation'... ,[4 0 0;6 Numgen 3;4 Numgen 3;4 0 0]); %primo tipo di condizione terminale: si interrompe l'algoritmo genetico quando, %dopo aver lanciato al metodo di Gauss-Newton passando l'individuo migliore come %punto inziale di ricerca, si è verificata la convergenza allo zero (minimo globale) if gastop == 1, %lancia la funzione di ottimazione Gauss-Newton [X,outopts] = fsolve ('fun',sol(1:numlati+numnodint),options); EXITFLAG = outopts(8)>10*outopts(3); %EXITFLAG è = 0 se è avvenuta la convergenza if EXITFLAG == 0,%qualora la soluzione degli algoritmi genetici sia prossima check = 0; %ad un punto di "minimo globale" termina il predimensionamento end %con gli algoritmi genetici ritornando il miglior individuo %secondo tipo di condizione terminale: si interrompe l'algoritmo genetico quando, %dopo aver lanciato al metodo di Gauss-Newton un numero di volte pari al numero %degli individui della popolazione passando ogni volta, come punto iniziale della %ricerca, un individuo diverso, si verifica che tutte le volte l'algoritmo converge %allo stesso minimo (a partire dai vari individui) per cui tutti gli individui %sono giunti nella stessa concavità e si può quindi ritenere il minimo locale della %proprio il minimo globale else %lancia la funzione di ottimazione Newton-Gauss for i=1:numindividui, XX(i,:) = fsolve ('fun',endPop (i,1:numlati+numnodint),options); end variance = sum(var(XX)) if variance < 1e-10,%qualora la soluzione degli algoritmi genetici sia prossima check = 0; %ad un punto di "minimo globale" termina il predimensionamento end end Pop=endPop; end %risoluazione del sistema col metodo Gauss-Newton operando (se richieste) %prima una iterazione su alfa e poi una iterazione su lambda di Colebrook GNoptions = foptions; Gauss-Newton %setta la precisione per la ricerca con %parte che calcola iterativamente alfa (se tale ricerca è richiesta) erralfa = 10; di do-while) %permette il primo loop while (in mancanza if alfasino, while (erralfa > precalfa), %qui inizia il ciclo iterativo per trovare alfa X = fsolve ('fun',X,GNoptions); ottimizzazione Gauss-Newton q= X(1,1:numlati); %lancia il metodo di %parte che ricalcola alfa con le nuove portate %calcola la portata entrante dal nodo di monte (con quota piezometrica >) Qentr = (q + Qdistr .* alfamonte).*(q>=0) + (q - Qdistr. *alfavalle).*(q<0); Qusce = (q + Qdistr .* alfamonte).*(q<0) + (q - Qdistr. *alfavalle).*(q>=0); %se la portata entrante dal nodo è inferiore a 1/2 delle portata distribuita %allora considera la portata entrante dal nodo opposto, che è a quota piez. >, %in modo da avere le portate espresse come portate entranti dal nodo di monte Qentr2 = Qentr .* (abs(Qentr)>=(Qdistr./2)) ... - sign(Qentr).* (Qdistr - abs(Qentr)).* (abs(Qentr) <(Qdistr./2)); Qusce2 = sign(Qentr2).*(abs(Qentr2)-Qdistr); delta = abs(Qentr2 ./ Qdistr); oldalfamonte = alfamonte; oldalfavalle = alfavalle; %calcola alfa del nodo di monte con due formule distinte asseconda %che delta sia > o < 1 alfa=(delta - (delta .^2 + 1/3 - delta).^.5).*(delta >= 1)+... (delta - (1/(3^.5))*(delta .^3 - (1-delta).^3).^.5) .*(delta < 1); %mette alfa in alfamonte e 1-alfa in alfavalle se Qentr>0 (viceversa se Qentr<0) alfamonte alfavalle = (Qentr2 < 0) + sign(Qentr2) .* alfa; = 1 - alfamonte; %azzera i coefficienti nel caso di portate distribuite nulle alfamonte = alfamonte .* (Qdistr ~= -1); alfavalle = alfavalle .* (Qdistr ~= -1); %calcola lo scarto di alfa dal valore precedente erralfa = sum((alfamonte - oldalfamonte).^2)^.5 %per facilitare la convergenza da un valore di alfa intermedio tra il medio e il nuovo alfamonte = (oldalfamonte+alfamonte)./2; alfavalle = (oldalfavalle+alfavalle)./2; %calcola le potate concentrate equivalenti alle portate distribuite Qmonte = alfamonte .* Qdistr; Qvalle = alfavalle .* Qdistr; %Qpreced= Q - Qconc(nodinterni)'; %ricalcola le portate concentrate nei nodi Qconc = Amonte' * Qmonte' + Avalle' * Qvalle';%con il nuovo coefficiente alfa Q = Qiniz + Qconc(nodinterni)'; end else %lancia Gauss-Newton nel caso che la ricerca iterativa di alfa non sia richiesta X = fsolve ('fun',X,GNoptions); end %parte che calcola iterativamente lambda (se tale ricerca è richiesta) if lambdasino, lambda = 9.81 * pi^2 / 8 .* beta; per tubi scabri) %il lambda iniziale (quello %calcola la epsilon di colebrook a partire dal coefficiente gamma epsilon = 3.71 * D .* (10.^(-0.5./(lambda.^.5))); lambdaopt =[0 preclambda preclambda]; %setta la precisione desiderata per lambda errlambda = 10; % è un valore "grande" a caso per poter entrare nel loop di lambda while (errlambda > preclambda),%qui inizia il ciclo iterativo per trovare lambda X = fsolve ('fun',X,GNoptions); %lancia il metodo di ottimizzazione Gauss-Newton q= X(1,1:numlati); %parte che ricalcola lambda con con le nuove portate oldlambda = lambda; Reynolds = abs((4 ./(pi*D)) .* (q / 1e-6)); radlambda = fsolve('colebrook',(lambda.^0.5),lambdaopt);% calcola la radice di lambda lambda = radlambda .^ 2;%calcola lambda errlambda = (sum((lambda - oldlambda).^2))^.5%è lo scarto di lambda dal precedente %ricavo in funzione di lambda la nuova matrice diagonale R contenente i coeff. b=u*L u = 8 * lambda ./ (D .^5 * 9.81 * pi^2); R = diag (u .* L); a = 2; end end %output su video del vettore delle portate q = X(1,1:numlati); Qmonte Qvalle = q + Qdistr .* alfamonte; = q - Qdistr .* alfavalle; disp 'portate entranti nel nodo di monte' for i=1:numlati, fprintf(1,'%3.8f\n',Qmonte(1,i)); end disp 'portate uscenti dal nodo di valle' for i=1:numlati, fprintf(1,'%3.8f\n',Qvalle(1,i)); end %output su video del vettore delle altezze piezometriche hint=X(1,(numlati+1):(numlati+numnodint)); h1=zeros(1,numnodi); h1(serbatoi)=hs; h2=zeros(1,numnodi); h2(nodinterni)=hint; Hpiez = h1 + h2; Hres = Hpiez - Hnodi; alla quota del terreno %calcola le altezze piezometriche rispetto disp 'altezze piezometriche residue' for i=1:numnodi, fprintf(1,'%3.6f\n',Hres(1,i)); end function [x,val] = funga(x,options) global weight An As R Q a hs numnodi numnodint numlati serbatoi nodinterni %dal vettore x di input della funzione fun estraggo q ed hn% q=x(:,1:numlati); hn=x(:,(numlati+1):(numlati+numnodint)); %devo trovare il vettore q ed il vettore hn tali da annullare o quantomeno minimizzare F* val= -sum ([(An' * q' - Q');weight *(R * (sign(q) .* q .^ (a))' + An * hn' + As * hs')].^2); __________________________________________________________________ function F=fun(x) global An As A R Q a hs numnodi numnodint numlati serbatoi nodinterni %dal vettore x di input della funzione fun estraggo q ed hn q=x(:,1:numlati); hn=x(:,(numlati+1):(numlati+numnodint)); %a partire dai vettori hn ed hs ricreo il vettore h con tutte le altezze piezometriche h(serbatoi)=hs; h(nodinterni)=hn; %devo trovare il vettore q ed il vettore hn tali da annullare o quantomeno minimizzare F F=[(An' * q' - Q');(R * (sign(q) .* q .^ (a))' + An * hn' + As * hs')]; __________________________________________________________________ function F=colebrook(radlambda) global D Reynolds epsilon F = 1 ./ radlambda + 2 * log10 (2.51 ./ (Reynolds .* radlambda) + epsilon ./(3.71 .* D)); Appendice B Caratteristiche delle reti usate per “testare” programma RETE DI CAO NETWORK DESCRIPTION Num Node Node QQ Br. Ini. Fin. (l/s) 1 1 2 0.00 2 2 3 0.00 3 1 3 0.00 4 3 4 0.00 5 2 4 0.00 6 1 5 0.00 7 5 6 0.00 8 6 4 0.00 Node L (m) 90.7 171.8 201.1 100.9 229.1 112.6 122.9 91.8 Q (l/s) 0.0 30.0 40.0 120.0 40.0 30.0 1 2 3 4 5 6 Num Diam 1 2 3 4 Diameter (mm) 175.0 200.0 250.0 300.0 GH (m) 0.00 0.00 0.00 0.00 0.00 0.00 N. Diam. 3 3 1 2 3 4 4 2 RESE. S Darcy par. (m**.5) 0.23 0.23 0.23 0.23 Hrese 100.00 0.00 0.00 0.00 0.00 0.00 u (s**2/m**6) 23.018021 11.020974 3.235067 1.193810 RETE DI ENC NETWORK DESCRIPTION Num Br. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Node 1 2 3 4 5 6 7 8 9 10 11 12 Node Ini. 1 2 5 6 4 3 3 7 4 2 3 9 8 8 11 10 Node L Fin. (m) 2 3500. 5 638. 6 672. 7 336. 7 615. 4 396. 8 701. 8 519. 5 278. 3 626. 10 556. 10 194. 9 292. 11 724. 12 553. 12 941. Q (l/s) 0.00 0.00 0.00 0.00 0.00 12.00 12.00 0.00 0.00 0.00 12.00 12.00 G.H. (m) 191.00 150.00 152.00 135.40 138.50 139.50 129.80 148.30 151.10 150.40 146.20 144.70 Diam (mm) 500. 350. 225. 150. 150. 125. 225. 100. 225. 350. 225. 125. 100. 175. 100. 175. QQ. (l/s) 0.00 12.50 7.07 3.53 14.19 12.73 17.24 6.51 8.37 12.27 26.70 3.85 5.79 5.62 4.29 7.31 Rese. S - H.Rese. (m) 189.00 182.16 179.98 179.79 180.77 178.23 176.35 176.45 176.78 177.47 172.87 172.73 epsilon di Colebrook = 1mm (per tutti i tubi) RETE DI MIGNOSA NETWORK DESCRIPTION Num Node Node QQ Br. Ini. Fin. (l/s) 1 1 7 0.00 2 7 8 0.00 3 8 9 0.00 4 9 3 0.00 5 3 2 0.00 6 3 4 0.00 7 4 5 0.00 8 5 6 0.00 9 6 2 0.00 10 9 10 0.00 11 10 4 0.00 12 10 11 0.00 13 11 12 0.00 14 12 4 0.00 15 8 13 0.00 16 13 18 0.00 17 18 9 0.00 18 13 14 0.00 19 14 15 0.00 20 15 16 0.00 21 16 17 0.00 22 17 18 0.00 23 17 19 0.00 24 19 10 0.00 25 19 26 0.00 26 26 25 0.00 27 25 11 0.00 28 26 23 0.00 29 23 24 0.00 30 24 25 0.00 31 16 20 0.00 32 20 19 0.00 33 20 21 0.00 34 21 22 0.00 35 22 23 0.00 36 22 28 0.00 37 28 29 0.00 38 29 30 0.00 39 30 23 0.00 40 21 27 0.00 41 27 28 0.00 42 15 31 0.00 43 31 35 0.00 44 35 32 0.00 45 32 33 0.00 46 33 41 0.00 47 31 41 0.00 48 34 41 0.00 49 34 20 0.00 50 34 40 0.00 51 40 39 0.00 52 21 39 0.00 53 32 42 0.00 54 42 45 0.00 55 45 33 0.00 56 45 47 0.00 57 47 36 0.00 58 36 41 0.00 L (m) 220.0 600.0 460.0 435.0 140.0 355.0 350.0 300.0 200.0 260.0 575.0 200.0 600.0 270.0 175.0 400.0 210.0 490.0 320.0 125.0 235.0 340.0 235.0 410.0 140.0 175.0 215.0 240.0 165.0 240.0 240.0 305.0 350.0 195.0 120.0 315.0 340.0 220.0 580.0 300.0 190.0 95.0 555.0 315.0 340.0 305.0 120.0 345.0 140.0 600.0 100.0 400.0 280.0 140.0 160.0 260.0 120.0 130.0 N. Diam. 4 4 3 7 7 4 1 1 3 4 2 4 4 4 4 2 6 3 3 4 6 6 3 2 4 4 4 4 3 4 4 3 4 4 4 2 2 2 1 1 1 3 3 3 3 3 3 5 3 5 4 4 2 2 3 3 3 3 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 36 37 52 52 2 58 42 43 44 44 46 46 43 48 49 50 50 51 38 48 53 54 49 56 56 57 54 55 Node 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 37 52 40 58 1 39 43 44 45 46 47 37 48 49 50 37 51 38 52 53 54 49 56 51 57 38 55 56 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Q (l/s) 0.0 1.5 1.6 2.5 1.3 1.1 1.6 2.8 5.7 7.7 4.1 1.8 4.1 3.2 1.3 2.2 3.4 3.3 8.0 3.8 2.0 1.0 1.9 1.5 3.4 1.5 1.0 1.2 1.0 1.2 2.7 1.5 2.1 270.0 500.0 140.0 255.0 130.0 65.0 310.0 200.0 290.0 235.0 200.0 250.0 205.0 515.0 350.0 240.0 235.0 205.0 325.0 420.0 265.0 250.0 295.0 365.0 220.0 325.0 365.0 315.0 GH (m) 190.70 190.10 190.30 188.70 187.60 189.90 191.60 194.00 191.40 190.50 190.10 187.40 194.40 194.20 193.10 192.40 192.50 191.90 191.30 191.40 189.10 189.60 189.40 189.20 190.10 190.00 188.80 188.30 187.80 187.00 194.20 195.90 194.70 3 7 4 8 7 8 1 2 2 2 2 3 1 3 3 3 1 1 3 3 1 2 3 1 3 3 1 3 RESE. S Hrese 227.50 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 2.6 4.2 4.9 5.5 1.3 1.0 2.9 2.9 1.1 1.2 1.1 1.3 1.5 1.0 2.0 4.5 3.4 1.2 2.2 1.2 3.3 1.2 1.9 1.0 0.0 Num Diam 1 2 3 4 5 6 7 8 191.20 197.00 192.80 189.30 185.20 188.00 187.80 193.30 189.40 189.30 188.40 189.20 187.50 192.20 189.50 187.80 187.50 186.10 185.90 188.60 187.50 185.50 186.30 185.90 188.00 Diameter (mm) 80.0 100.0 125.0 150.0 175.0 200.0 250.0 300.0 S 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 226.50 Darcy par. u (m**.5) (s**2/m**6) 0.23 1803.992310 0.23 516.367859 0.23 148.693802 0.23 54.013947 0.23 23.018021 0.23 11.020974 0.23 3.235067 0.23 1.193810 RETE DI TORREMAGGIORE (FG) NETWORK DESCRIPTION Num Node Node QQ Br. Ini. Fin. (l/s) 1 1 2 0.63 2 2 3 0.37 3 2 4 0.27 4 3 5 0.41 5 4 6 0.16 6 4 7 0.23 7 4 8 0.19 8 5 9 0.61 9 5 10 0.33 10 6 3 0.44 11 6 11 0.17 12 7 12 0.15 13 8 12 0.80 14 9 13 0.42 15 9 14 0.10 16 10 15 0.55 17 10 16 0.21 18 11 16 0.67 19 11 7 0.29 20 12 17 0.48 21 12 18 0.24 22 13 19 0.16 23 14 20 0.06 24 15 21 0.65 25 15 22 0.10 26 16 17 0.10 27 18 23 0.29 28 18 24 0.32 29 19 25 0.05 30 20 26 0.65 31 20 15 0.23 32 21 26 0.21 33 21 27 0.26 34 21 28 0.29 35 17 29 0.45 36 17 30 0.27 37 23 30 0.19 38 23 31 0.39 39 24 31 0.34 40 24 32 0.63 41 25 33 0.33 42 26 19 0.24 43 27 34 0.16 44 27 35 0.47 45 27 36 0.23 46 29 37 0.06 47 30 38 0.24 48 30 39 0.45 49 31 39 0.17 50 32 40 0.27 51 33 41 0.19 52 34 25 0.21 53 34 42 0.68 54 35 43 0.23 55 35 44 0.15 56 37 45 0.11 57 38 46 0.13 58 38 47 0.57 L (m) 405.0 240.0 85.0 128.0 50.0 150.0 60.0 190.0 103.0 135.0 112.0 45.0 248.0 130.0 30.0 170.0 65.0 208.0 90.0 150.0 75.0 105.0 20.0 200.0 30.0 30.0 90.0 100.0 33.0 200.0 70.0 65.0 80.0 90.0 140.0 83.0 60.0 120.0 105.0 405.0 210.0 75.0 50.0 145.0 70.0 20.0 75.0 140.0 52.0 175.0 120.0 65.0 212.0 70.0 45.0 35.0 40.0 175.0 N. Diam. 1 2 4 2 10 4 10 11 2 10 11 4 11 11 11 2 11 11 11 11 4 10 10 4 11 11 4 8 10 10 9 7 4 11 6 6 5 5 11 11 10 11 10 4 7 6 11 11 5 11 9 10 10 4 7 7 8 8 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 39 41 41 43 43 45 46 46 47 48 48 42 49 50 51 51 52 52 53 53 54 22 55 55 55 56 56 58 59 61 61 40 40 62 62 60 63 63 65 65 28 66 66 68 68 68 69 36 36 73 73 67 67 74 74 75 76 76 77 72 72 79 80 81 81 64 47 48 49 42 49 50 29 51 52 53 54 33 54 22 55 56 56 32 57 58 58 59 45 59 60 61 40 57 62 60 63 64 65 28 66 67 68 69 70 71 36 72 73 67 74 75 76 77 72 78 79 59 66 79 80 81 75 64 44 82 78 83 84 84 85 70 0.40 2.56 0.39 0.24 0.39 0.06 0.31 0.05 0.08 0.22 2.09 0.17 1.45 0.08 0.23 0.60 0.08 0.31 2.98 1.74 1.45 0.40 0.27 0.29 0.47 0.26 0.66 0.69 0.31 0.19 0.06 0.21 0.34 0.23 0.15 0.45 0.22 0.17 0.15 0.85 0.24 0.45 0.24 0.59 0.08 0.32 0.27 0.23 0.15 0.45 0.29 0.15 0.38 0.35 1.02 0.19 0.23 0.18 0.23 0.45 0.24 0.44 0.18 0.98 0.20 0.34 125.0 352.0 120.0 75.0 120.0 20.0 95.0 15.0 25.0 30.0 288.0 52.0 200.0 25.0 70.0 185.0 25.0 95.0 410.0 240.0 200.0 125.0 83.0 90.0 145.0 80.0 205.0 95.0 95.0 60.0 20.0 65.0 105.0 70.0 45.0 140.0 67.0 53.0 45.0 550.0 73.0 140.0 75.0 182.0 25.0 98.0 85.0 70.0 45.0 138.0 90.0 47.0 119.0 108.0 317.0 58.0 70.0 55.0 70.0 138.0 73.0 135.0 55.0 305.0 62.0 105.0 5 9 9 11 4 7 8 8 5 9 9 10 3 8 11 11 6 11 9 9 3 8 8 11 8 6 11 3 8 8 7 10 11 8 11 11 7 11 11 9 11 11 11 8 7 9 10 9 10 11 10 8 11 10 8 11 11 10 11 10 10 10 8 11 11 10 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 44 78 78 83 83 84 85 85 70 86 86 89 90 92 93 93 82 94 96 97 91 91 98 98 99 99 95 101 101 102 87 103 103 106 88 88 105 100 107 107 104 Node 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 86 87 83 88 89 90 91 92 92 93 82 80 94 95 49 96 97 91 98 99 100 95 101 102 96 87 103 104 105 106 88 105 71 100 102 107 104 103 106 94 57 0.07 0.44 0.23 0.44 0.09 0.30 1.44 0.12 0.23 0.60 0.07 0.10 0.23 1.47 0.06 0.24 0.09 0.08 0.26 0.08 0.49 0.11 0.58 0.04 0.57 0.07 0.48 2.47 1.74 0.23 0.22 1.02 0.55 0.26 0.55 0.27 1.20 0.13 0.52 0.18 1.56 Q (l/s) 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1.6 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 23.0 137.0 70.0 137.0 27.0 92.0 447.0 38.0 70.0 185.0 23.0 30.0 70.0 455.0 20.0 75.0 27.0 26.0 80.0 25.0 152.0 33.0 80.0 12.0 178.0 23.0 150.0 340.0 240.0 72.0 69.0 140.0 355.0 80.0 170.0 83.0 165.0 40.0 160.0 55.0 215.0 GH (m) 194.32 170.60 163.90 170.30 165.98 169.00 170.80 170.73 166.00 167.80 170.00 170.50 163.70 166.10 165.40 168.40 169.10 170.00 160.90 166.20 10 10 10 11 10 8 11 11 8 9 10 10 8 8 9 9 10 9 9 9 9 9 9 9 11 9 8 9 10 9 9 7 9 9 11 9 7 9 11 9 7 RESE. S Hrese 194.32 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 0.0 0.0 0.0 1.1 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 157.50 165.30 168.80 164.80 159.80 159.80 155.40 157.50 168.90 168.10 162.50 160.00 152.60 156.30 148.50 150.60 168.45 169.30 162.90 154.90 147.30 149.30 146.40 148.00 166.90 169.40 165.90 134.00 142.00 166.10 169.40 165.20 135.00 131.80 167.10 164.80 122.50 126.50 163.10 163.40 161.80 159.60 161.80 156.70 150.90 159.30 162.80 158.10 164.20 152.80 143.00 154.90 157.50 155.80 154.90 158.60 150.60 156.90 155.50 157.10 153.00 147.50 156.20 155.70 160.00 147.70 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 Num Diam 1 2 3 4 5 6 7 8 9 10 11 148.80 151.10 157.50 152.90 150.50 149.90 141.80 150.90 149.20 140.90 148.00 140.27 146.60 142.20 137.56 143.80 144.50 127.89 135.12 141.20 152.50 Diameter (mm) 560.0 300.0 260.0 250.0 200.0 175.0 150.0 125.0 100.0 80.0 60.0 Darcy par. (m**.5) 0.23 0.23 0.23 0.23 0.23 0.23 0.23 0.23 0.23 0.23 0.23 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 u (s**2/m**6) 0.040572 1.193810 2.609735 3.235067 11.020974 23.018021 54.013947 148.693802 516.367859 1803.992310 9128.275390 Appendice C Risultati ottenuti applicando il programma ed il metodo VPH CONFRONTO RISULTATI - RETE di CAO VPH Qmonte 0.1111300 0.0360200 0.0306400 0.0266200 0.0451100 0.1182300 0.0782400 0.0482400 Qvalle 0.1111300 0.0359900 0.0306400 0.0266600 0.0451100 0.1182400 0.0782400 0.0482300 Hres 100.0000000 96.3700000 95.6600000 94.8700000 98.1200000 97.2200000 NETGA senza alfa e lambda Qmonte Qvalle Hres 0.1111220 0.1111220 100.0000000 0.0359991 0.0359991 96.3772130 0.0306338 0.0306338 95.6569510 0.0266329 0.0266329 94.8684980 0.0451229 0.0451229 98.1208720 0.1182442 0.1182442 97.2227800 0.0782442 0.0782442 0.0482442 0.0482442 diff% senza alfa e lambda Qmonte Qvalle 0.0000719 0.0000719 0.0005794 0.0002537 0.0002030 0.0002030 0.0004846 0.0010165 0.0002855 0.0002855 0.0001203 0.0000357 0.0000539 0.0000539 0.0000875 0.0002948 NETGA senza alfa con lambda Qmonte Qvalle Hres 0.1111304 0.1111304 100.0000000 0.0359977 0.0359977 96.3666360 0.0306275 0.0306275 95.6403170 0.0266252 0.0266252 94.8470280 0.0451327 0.0451327 98.1133670 0.1182422 0.1182422 97.2098680 0.0782422 0.0782422 0.0482422 0.0482422 Hres 0.0000000 0.0000748 0.0000319 0.0000158 0.0000089 diff% senza alfa con lambda Qmonte Qvalle Hres 0.0000033 0.0000033 0.0000000 0.0006185 0.0002145 0.0000349 0.0004096 0.0004096 0.0002058 0.0001942 0.0013065 0.0002421 0.0005023 0.0005023 0.0000676 0.0001030 0.0000184 0.0000279 0.0000279 0.0000452 0.0002525 diff media Qmon 0.0002380 diff media Qmon 0.0002380 diff media Qval 0.0003419 diff media Qval 0.0003419 diff media Hres 0.0001101 diff media Hres 0.0001101 CONFRONTO RISULTATI - RETE di ENC VPH Qmonte 0.1759700 0.0783200 0.0331000 0.0140300 0.0187400 0.0071200 0.0425500 0.0030500 -0.0243400 0.0976500 0.0357200 -0.0040800 0.0017100 0.0201300 0.0025100 0.0210900 Qvalle 0.1759700 0.0658200 0.0260300 0.0105000 0.0045500 -0.0056100 0.0253000 -0.0034600 -0.0327100 0.0853800 0.0290200 -0.0079300 -0.0040800 0.0145100 -0.0017800 0.0137800 Hres -2.0000000 32.1600000 27.9800000 44.3900000 42.2700000 38.7300000 46.5500000 28.1500000 25.6800000 27.0700000 26.6700000 28.0300000 NETGA senza alfa e lambda Qmonte Qvalle Hres 0.1759700 0.1759700 -2.0000000 0.0774475 0.0649475 32.4823950 0.0327626 0.0256926 28.3204740 0.0136926 0.0101626 44.8191690 0.0189885 0.0047985 42.6738480 0.0079036 -0.0048264 39.1593360 0.0426077 0.0253677 46.9569370 0.0029611 -0.0035489 28.4734800 -0.0238149 -0.0321849 25.8684450 0.0985225 0.0862525 27.3652580 0.0357412 0.0290412 26.7869650 -0.0042401 -0.0080901 28.2351520 0.0015499 -0.0042401 0.0202689 0.0146489 0.0026489 -0.0016411 0.0209511 0.0136411 Qmonte 0.1759700 0.0776755 0.0328279 0.0137579 0.0191693 0.0079217 0.0423578 0.0032072 -0.0239776 0.0982945 0.0357451 -0.0042635 0.0015265 0.0202884 0.0026684 0.0209316 NETGA senza alfa con lambda Qvalle Hres 0.1759700 -2.0000000 0.0651755 32.1757550 0.0257579 27.9830120 0.0102279 44.4814640 0.0049793 42.3273060 -0.0048083 38.8557630 0.0251178 46.7713900 -0.0033028 28.2721770 -0.0323476 25.6576770 0.0860245 27.0869110 0.0290451 26.7767890 -0.0081135 28.2201220 -0.0042635 0.0146684 -0.0016216 0.0136216 NETGA con alfa senza lambda Qmonte Qvalle Hres 0.1759700 0.1759700 -2.0000000 0.0782303 0.0657303 32.4823950 0.0331442 0.0260742 28.3537790 0.0140742 0.0105442 44.7522110 0.0185877 0.0043977 42.6415540 0.0071017 -0.0056283 39.0486930 0.0427337 0.0254937 46.7087320 0.0029421 -0.0035679 28.4043890 -0.0242161 -0.0325861 25.9532060 0.0977397 0.0854697 27.4063100 NETGA con alfa con lambda Qmonte Qvalle Hres 0.1759700 0.1759700 -2.0000000 0.0783839 0.0658839 32.1757550 0.0331619 0.0260919 28.0131220 0.0140919 0.0105619 44.4194680 0.0187319 0.0045419 42.2972810 0.0071098 -0.0056202 38.7577460 0.0425370 0.0252970 46.5609600 0.0031037 -0.0034063 28.1931460 -0.0243520 -0.0327220 25.7244710 0.0975861 0.0853161 27.1197480 0.0356342 -0.0039646 0.0018256 0.0201005 0.0024805 0.0211195 0.0289342 -0.0078146 -0.0039644 0.0144805 -0.0018095 0.0138095 26.7578710 28.1098160 diff% senza alfa e lambda Qmonte Qvalle Hres 0.0000000 0.0000000 0.0000000 0.0111402 0.0132558 0.0100247 0.0101943 0.0129631 0.0121685 0.0240506 0.0321362 0.0096681 0.0132625 0.0546242 0.0095540 0.1100576 0.1396809 0.0110854 0.0013558 0.0026755 0.0087419 0.0291443 0.0256908 0.0114913 0.0215723 0.0160523 0.0073382 0.0089350 0.0102190 0.0109072 0.0005932 0.0007302 0.0043856 0.0392304 0.0201841 0.0073190 0.0936023 0.0392304 0.0068987 0.0095706 0.0553267 0.0780169 0.0065846 0.0100776 0.0356693 -0.0040116 0.0017784 0.0201123 0.0024923 0.0211077 26.7384300 28.0929860 diff% senza alfa con lambda Qmonte Qvalle Hres 0.0000000 0.0000000 0.0000000 0.0082293 0.0097922 0.0004899 0.0082218 0.0104549 0.0001076 0.0193970 0.0259181 0.0020605 0.0229098 0.0943582 0.0013557 0.1125997 0.1429073 0.0032472 0.0045182 0.0072036 0.0047560 0.0515377 0.0454306 0.0043402 0.0148882 0.0110786 0.0008693 0.0066003 0.0075488 0.0006247 0.0007016 0.0008635 0.0040041 0.0449755 0.0231400 0.0067828 0.1073099 0.0449755 0.0078703 0.0109187 0.0631195 0.0890056 0.0075121 0.0114971 diff media Qmon 0.0269968 diff media Qmon 0.0300244 diff media Qval 0.0290692 diff media Qval 0.0334433 diff media Hres 0.0085570 diff media Hres 0.0023865 diff% con alfa senza lambda Qmonte Qvalle Hres 0.0000000 0.0000000 0.0000000 0.0011450 0.0013625 0.0100247 0.0013344 0.0016969 0.0133588 0.0031483 0.0042067 0.0081597 0.0081275 0.0334747 0.0087900 0.0025646 0.0032549 0.0082286 0.0043168 0.0076553 0.0034099 0.0353639 0.0311734 0.0090369 0.0050892 0.0037869 0.0106389 0.0009181 0.0010500 0.0124237 0.0024029 0.0029576 0.0032948 0.0282770 0.0145485 0.0028475 0.0289693 -0.0078616 -0.0040116 0.0144923 -0.0017977 0.0137977 diff% con alfa con lambda Qmonte Qvalle Hres 0.0000000 0.0000000 0.0000000 0.0008161 0.0009711 0.0004899 0.0018695 0.0023773 0.0011838 0.0044105 0.0058933 0.0006638 0.0004349 0.0017912 0.0006454 0.0014326 0.0018182 0.0007164 0.0003065 0.0001202 0.0002354 0.0176164 0.0155289 0.0015327 0.0004947 0.0003681 0.0017317 0.0006546 0.0007487 0.0018378 0.0014191 0.0017467 0.0025658 0.0167598 0.0086230 0.0022471 0.0675789 0.0014670 0.0117649 0.0013983 0.0283235 0.0020351 0.0165899 0.0021401 0.0399883 0.0008783 0.0070438 0.0008383 diff media Qmon 0.0109311 diff media Qmon 0.0059352 diff media Qval 0.0096410 diff media Qval 0.0043238 diff media Hres 0.0075178 diff media Hres 0.0011542 0.0167598 0.0012185 0.0099326 0.0012830 CONFRONTO RISULTATI - RETE di MIGNOSA VPH Qmonte 0.0106800 0.0090700 -0.0013800 -0.0351900 -0.0472900 0.0104500 -0.0008100 -0.0021000 -0.0032000 0.0107000 -0.0020600 0.0037600 -0.0048600 -0.0066800 0.0076900 -0.0000800 -0.0174200 0.0036600 0.0004800 -0.0046500 -0.0065100 -0.0140200 0.0040700 -0.0013600 0.0005400 -0.0003400 -0.0045100 -0.0005800 0.0008000 -0.0007200 -0.0003200 0.0031900 -0.0032700 0.0071800 0.0041700 0.0020300 0.0013000 0.0002800 -0.0009100 0.0014500 0.0004600 0.0038100 0.0033600 -0.0008700 -0.0022800 -0.0040100 -0.0022300 0.0086100 0.0039800 -0.0151900 Qvalle 0.0106700 0.0091100 -0.0014400 -0.0352300 -0.0472900 0.0104400 -0.0008000 -0.0021000 -0.0031800 0.0107400 -0.0020700 0.0037700 -0.0048800 -0.0066800 0.0076800 -0.0001300 -0.0173500 0.0036800 0.0004600 -0.0046500 -0.0065500 -0.0140000 0.0040300 -0.0013500 0.0005900 -0.0003400 -0.0045300 -0.0005000 0.0007800 -0.0007700 -0.0002700 0.0031500 -0.0032800 0.0072000 0.0041300 0.0020400 0.0012800 0.0002900 -0.0009300 0.0014600 0.0004600 0.0038300 0.0033300 -0.0008200 -0.0023200 -0.0039700 -0.0022600 0.0086100 0.0039900 -0.0152100 Hres 36.8000000 36.2700000 35.0500000 34.6000000 36.0800000 36.1600000 34.5500000 29.4700000 32.2400000 31.5000000 31.7500000 35.2100000 28.5500000 27.7600000 28.8400000 29.6900000 29.7200000 31.0100000 30.3400000 30.7000000 33.1900000 32.1400000 32.2200000 32.4600000 31.5200000 31.6100000 32.3300000 32.7600000 32.9900000 33.7300000 27.5400000 24.9700000 26.4200000 31.2100000 23.8100000 29.0400000 35.0400000 36.6400000 38.4400000 37.7900000 28.5400000 31.4500000 31.1900000 32.7200000 31.9200000 34.9100000 29.5500000 29.4300000 31.3200000 33.3200000 -0.0125800 -0.0139100 -0.0000500 -0.0019600 0.0004100 -0.0039800 -0.0024600 0.0005300 -0.0078800 -0.0305600 0.0055300 -0.0473800 -0.0519700 0.0274800 0.0008100 -0.0024600 -0.0003100 -0.0032500 0.0025000 -0.0072500 0.0020600 -0.0016200 -0.0057600 -0.0099200 0.0007500 -0.0018400 -0.0091000 0.0016900 0.0004600 -0.0019400 -0.0023100 -0.0013800 -0.0049400 -0.0059500 -0.0008800 -0.0021000 -0.0125600 -0.0139200 -0.0000500 -0.0019500 0.0004200 -0.0039700 -0.0024600 0.0005300 -0.0078900 -0.0305700 0.0055400 -0.0473500 -0.0520100 0.0274800 0.0008000 -0.0024600 -0.0003200 -0.0032400 0.0025200 -0.0072500 0.0020700 -0.0016400 -0.0057800 -0.0099200 0.0007500 -0.0018400 -0.0090800 0.0016600 0.0004900 -0.0019400 -0.0023400 -0.0013900 -0.0049500 -0.0059600 -0.0009000 -0.0020900 34.4900000 39.9100000 30.1400000 31.1600000 33.6500000 33.0500000 34.2400000 38.5000000 NETGA senza alfa e lambda Qmonte Qvalle Hres 0.0106797 0.0106797 36.8000000 0.0090797 0.0090797 36.2654020 -0.0014206 -0.0014206 35.0547080 -0.0352012 -0.0352012 34.5654810 -0.0472394 -0.0472394 36.0709190 0.0104382 0.0104382 36.1606240 -0.0008013 -0.0008013 34.5446720 -0.0021013 -0.0021013 29.4729130 -0.0032013 -0.0032013 32.2109490 0.0107191 0.0107191 31.4973640 -0.0020667 -0.0020667 31.7465650 0.0037362 0.0037362 35.2161030 -0.0048729 -0.0048729 28.5124390 -0.0066729 -0.0066729 27.7331390 0.0077003 0.0077003 28.8227980 NETGA senza alfa con lambda Qmonte Qvalle Hres 0.0106706 0.0106706 36.8000000 0.0090706 0.0090706 36.2595750 -0.0014118 -0.0014118 35.0429630 -0.0351941 -0.0351941 34.5389400 -0.0472246 -0.0472246 36.0492710 0.0104305 0.0104305 36.1503200 -0.0007963 -0.0007963 34.5356540 -0.0020963 -0.0020963 29.4430290 -0.0031963 -0.0031963 32.1847780 0.0107245 0.0107245 31.4560910 -0.0020618 -0.0020618 31.7014630 0.0037396 0.0037396 35.1824570 -0.0048650 -0.0048650 28.4786880 -0.0066650 -0.0066650 27.6879930 0.0076824 0.0076824 28.7768280 -0.0000659 -0.0173615 0.0036662 0.0004662 -0.0046329 -0.0065655 -0.0139956 0.0040301 -0.0013495 0.0005534 -0.0003173 -0.0045091 -0.0006292 0.0007083 -0.0007918 -0.0002675 0.0031738 -0.0032586 0.0071822 0.0041466 0.0020356 0.0012909 0.0002909 -0.0009091 0.0014553 0.0004553 0.0037991 0.0033554 -0.0008446 -0.0023049 -0.0039788 -0.0022563 0.0086129 0.0039827 -0.0151955 -0.0125714 -0.0138961 -0.0000398 -0.0019421 0.0004261 -0.0039740 -0.0024642 0.0005222 -0.0078864 -0.0305191 0.0055241 -0.0473121 -0.0519407 0.0274675 0.0008023 -0.0024475 -0.0003059 -0.0032416 0.0025099 -0.0072515 -0.0000659 -0.0173615 0.0036662 0.0004662 -0.0046329 -0.0065655 -0.0139956 0.0040301 -0.0013495 0.0005534 -0.0003173 -0.0045091 -0.0006292 0.0007083 -0.0007918 -0.0002675 0.0031738 -0.0032586 0.0071822 0.0041466 0.0020356 0.0012909 0.0002909 -0.0009091 0.0014553 0.0004553 0.0037991 0.0033554 -0.0008446 -0.0023049 -0.0039788 -0.0022563 0.0086129 0.0039827 -0.0151955 -0.0125714 -0.0138961 -0.0000398 -0.0019421 0.0004261 -0.0039740 -0.0024642 0.0005222 -0.0078864 -0.0305191 0.0055241 -0.0473121 -0.0519407 0.0274675 0.0008023 -0.0024475 -0.0003059 -0.0032416 0.0025099 -0.0072515 29.6677190 29.6793590 31.0133360 30.3118150 30.6686460 33.1693890 32.1260770 32.2146310 32.4023240 31.5104510 31.6094990 32.3231530 32.7520930 32.9595230 33.7499090 27.5189140 24.9232190 26.3917920 31.1988400 23.7898040 29.0150190 35.0119720 36.6440690 38.4414550 37.7878140 28.5097480 31.4234480 31.1634510 32.6820990 31.8961100 34.8572340 29.5066720 29.4095150 31.3117120 33.3275550 34.4958200 39.9185720 30.1343430 31.1265750 33.6441960 33.0481320 34.2437490 38.5000000 -0.0000765 -0.0173577 0.0036589 0.0004589 -0.0046322 -0.0065499 -0.0139812 0.0040313 -0.0013467 0.0005453 -0.0003199 -0.0045046 -0.0006348 0.0007153 -0.0007848 -0.0002822 0.0031673 -0.0032612 0.0071942 0.0041584 0.0020358 0.0012917 0.0002917 -0.0009083 0.0014559 0.0004559 0.0037910 0.0033530 -0.0008470 -0.0022994 -0.0039768 -0.0022620 0.0086089 0.0039884 -0.0151972 -0.0125869 -0.0139113 -0.0000476 -0.0019449 0.0004226 -0.0039699 -0.0024621 0.0005299 -0.0078920 -0.0305291 0.0055104 -0.0473105 -0.0519209 0.0274981 0.0007973 -0.0024479 -0.0003025 -0.0032455 0.0025078 -0.0072533 -0.0000765 -0.0173577 0.0036589 0.0004589 -0.0046322 -0.0065499 -0.0139812 0.0040313 -0.0013467 0.0005453 -0.0003199 -0.0045046 -0.0006348 0.0007153 -0.0007848 -0.0002822 0.0031673 -0.0032612 0.0071942 0.0041584 0.0020358 0.0012917 0.0002917 -0.0009083 0.0014559 0.0004559 0.0037910 0.0033530 -0.0008470 -0.0022994 -0.0039768 -0.0022620 0.0086089 0.0039884 -0.0151972 -0.0125869 -0.0139113 -0.0000476 -0.0019449 0.0004226 -0.0039699 -0.0024621 0.0005299 -0.0078920 -0.0305291 0.0055104 -0.0473105 -0.0519209 0.0274981 0.0007973 -0.0024479 -0.0003025 -0.0032455 0.0025078 -0.0072533 29.6244630 29.6385420 30.9803160 30.2625800 30.6257580 33.1322250 32.0803460 32.1658890 32.3523850 31.4611960 31.5600080 32.2693120 32.6950170 32.8944870 33.6837820 27.4707390 24.8628430 26.3367480 31.1616610 23.7270710 28.9703020 34.9891620 36.6101300 38.4403250 37.7785050 28.4643300 31.3633370 31.0989930 32.6263980 31.8415200 34.8178980 29.4596340 29.3368680 31.2454540 33.2825120 34.4471320 39.9118110 30.0573050 31.0483480 33.5777280 32.9872300 34.1925460 38.5000000 0.0020499 -0.0016249 -0.0057419 -0.0098813 0.0007393 -0.0018372 -0.0090689 0.0016748 0.0004748 -0.0019386 -0.0023216 -0.0013765 -0.0049317 -0.0059317 -0.0008866 -0.0020866 0.0020499 -0.0016249 -0.0057419 -0.0098813 0.0007393 -0.0018372 -0.0090689 0.0016748 0.0004748 -0.0019386 -0.0023216 -0.0013765 -0.0049317 -0.0059317 -0.0008866 -0.0020866 0.0020452 -0.0016225 -0.0057486 -0.0098839 0.0007353 -0.0018380 -0.0090709 0.0016677 0.0004677 -0.0019456 -0.0023195 -0.0013733 -0.0049329 -0.0059329 -0.0008867 -0.0020867 0.0020452 -0.0016225 -0.0057486 -0.0098839 0.0007353 -0.0018380 -0.0090709 0.0016677 0.0004677 -0.0019456 -0.0023195 -0.0013733 -0.0049329 -0.0059329 -0.0008867 -0.0020867 diff% senza alfa e lambda Qmonte 0.0000309 0.0010662 0.0294203 0.0003171 0.0010706 0.0011292 0.0107037 0.0006333 0.0004156 0.0017804 0.0032282 0.0063271 0.0026523 0.0010644 0.0013355 0.1761250 0.0033571 0.0016885 0.0287917 0.0036688 0.0085223 0.0017397 0.0097961 0.0077279 0.0248704 0.0666471 0.0002018 0.0848621 0.1146875 0.0996528 0.1641563 0.0050752 0.0034801 0.0002994 0.0056211 Qvalle 0.0009063 0.0033293 0.0134722 0.0008186 0.0010706 0.0001724 0.0016625 0.0006333 0.0067075 0.0019507 0.0016184 0.0089629 0.0014570 0.0010644 0.0026393 0.4930000 0.0006640 0.0037554 0.0134348 0.0036688 0.0023634 0.0003136 0.0000323 0.0003778 0.0619831 0.0666471 0.0046159 0.2584400 0.0919872 0.0282468 0.0093704 0.0075587 0.0065183 0.0024792 0.0040097 Hres 0.0000000 0.0001268 0.0001343 0.0009977 0.0002517 0.0000173 0.0001542 0.0000988 0.0009011 0.0000837 0.0001082 0.0001733 0.0013156 0.0009676 0.0005965 0.0007505 0.0013675 0.0001076 0.0009290 0.0010213 0.0006210 0.0004332 0.0001666 0.0017768 0.0003030 0.0000158 0.0002118 0.0002414 0.0009238 0.0005902 0.0007656 0.0018735 0.0010677 0.0003576 0.0008482 diff% senza alfa con lambda Qmonte 0.0008839 0.0000617 0.0230652 0.0001151 0.0013834 0.0018632 0.0169383 0.0017714 0.0011625 0.0022907 0.0008786 0.0054202 0.0010288 0.0022455 0.0009896 0.0438750 0.0035763 0.0003060 0.0440000 0.0038366 0.0061306 0.0027668 0.0095086 0.0097794 0.0098148 0.0592059 0.0011929 0.0945172 0.1059375 0.0899306 0.1180000 0.0071129 0.0026911 0.0019777 0.0027938 Qvalle 0.0000525 0.0043293 0.0195625 0.0010204 0.0013834 0.0009071 0.0046500 0.0017714 0.0051195 0.0014423 0.0039565 0.0080584 0.0030738 0.0022455 0.0003112 0.4116154 0.0004438 0.0057391 0.0024348 0.0038366 0.0000137 0.0013421 0.0003226 0.0024444 0.0757627 0.0592059 0.0056026 0.2696400 0.0830128 0.0191558 0.0453333 0.0054952 0.0057317 0.0008056 0.0068644 Hres 0.0000000 0.0002874 0.0002008 0.0017647 0.0008517 0.0002677 0.0004152 0.0009152 0.0017128 0.0013939 0.0015287 0.0007822 0.0024978 0.0025939 0.0021904 0.0022074 0.0027408 0.0009572 0.0025517 0.0024183 0.0017407 0.0018561 0.0016794 0.0033153 0.0018656 0.0015815 0.0018771 0.0019836 0.0028952 0.0013702 0.0025149 0.0042914 0.0031511 0.0015488 0.0034829 0.0027537 0.0069923 0.0389643 0.0010000 0.0036690 0.0101739 0.0028556 0.0013780 0.0291609 0.0109035 0.0077781 0.0117713 0.0003333 0.0006683 0.0003641 0.0006812 0.0010000 0.2048000 0.0091378 0.0391707 0.0014975 0.0016951 0.0147358 0.0008071 0.0013370 0.0010669 0.0014329 0.0005638 0.0004541 0.0094691 0.0050691 0.0132581 0.0025723 0.0039440 0.0002069 0.0049272 0.0030494 0.0031372 0.0039032 0.0142133 0.0015217 0.0034209 0.0090000 0.0321522 0.0007320 0.0050130 0.0025072 0.0016862 0.0030807 0.0075341 0.0063667 diff media Qmon 0.0164658 0.0021618 0.0085234 0.0031379 0.0224839 0.0032055 0.0101739 0.0080627 0.0076186 0.0300366 0.0065259 0.0022191 0.0016593 0.0003333 0.0018396 0.0009513 0.0009100 0.0017177 0.2048000 0.0040564 0.0144286 0.0010176 0.0016951 0.0147358 0.0004613 0.0016637 0.0028700 0.0008002 0.0013324 0.0004541 0.0029125 0.0050691 0.0440938 0.0005062 0.0040238 0.0002069 0.0097343 0.0091829 0.0065865 0.0039032 0.0142133 0.0015217 0.0012258 0.0089096 0.0310408 0.0007320 0.0078718 0.0096835 0.0037030 0.0047534 0.0148556 0.0016124 0.0008602 0.0007999 0.0001111 0.0000379 0.0000578 0.0010600 0.0008443 0.0008512 0.0011583 0.0007484 0.0015115 0.0014663 0.0006961 0.0002646 0.0002267 0.0001687 0.0002148 0.0001877 0.0010727 0.0001725 0.0000565 0.0001095 0.0000000 0.0028768 0.0063692 0.0418571 0.0018901 0.0040552 0.0089565 0.0049764 0.0020714 0.0264828 0.0085000 0.0082843 0.0143498 0.0001301 0.0020980 0.0004760 0.0005453 0.0000920 0.0484000 0.0077245 0.0307073 0.0025302 0.0008618 0.0001698 0.0015266 0.0010098 0.0035497 0.0014679 0.0009457 0.0006601 0.0157037 0.0049065 0.0242581 0.0014000 0.0031240 0.0004497 0.0071796 0.0015370 0.0019844 0.0036442 0.0196267 0.0010870 0.0031934 0.0131893 0.0167609 0.0028608 0.0041039 0.0048696 0.0014291 0.0028672 0.0076591 0.0063143 diff media Qmon 0.0123112 0.0020392 0.0091563 0.0059310 0.0233548 0.0028219 0.0089565 0.0101723 0.0069189 0.0328780 0.0088879 0.0017078 0.0008850 0.0001301 0.0004135 0.0008396 0.0021385 0.0006264 0.0484000 0.0026359 0.0061667 0.0000176 0.0008618 0.0001698 0.0002573 0.0013366 0.0053484 0.0008353 0.0017141 0.0006601 0.0034000 0.0049065 0.0547500 0.0016821 0.0048373 0.0004497 0.0119758 0.0106768 0.0054377 0.0036442 0.0196267 0.0010870 0.0009978 0.0046446 0.0454898 0.0028608 0.0087692 0.0120288 0.0034465 0.0045403 0.0147333 0.0015598 0.0024001 0.0014509 0.0008152 0.0000085 0.0003042 0.0026514 0.0027556 0.0029178 0.0028607 0.0024586 0.0026383 0.0030581 0.0031645 0.0023801 0.0011251 0.0012429 0.0000454 0.0027437 0.0035832 0.0021478 0.0018992 0.0013859 0.0000000 diff media Qval 0.0192110 diff media Qval 0.0170988 diff media Hres 0.0005685 diff media Hres 0.0018529 CONFRONTO RISULTATI - RETE di TorreMaggiore (FG) VPH Qmonte 0.0726400 0.0415000 0.0304000 0.0413600 0.0015200 0.0276600 0.0009500 0.0012800 0.0396600 0.0007000 0.0006600 0.0268600 0.0007600 0.0005600 -0.0015100 0.0386300 0.0007000 0.0007600 -0.0002700 0.0008600 0.0258100 0.0001400 -0.0016100 0.0335700 0.0012600 0.0005800 0.0226300 0.0029300 0.0007700 0.0013300 -0.0030000 0.0005700 0.0318200 0.0005100 0.0089100 -0.0080600 0.0100600 0.0122700 0.0006600 0.0008600 0.0010900 0.0010400 0.0019400 0.0261900 0.0034200 0.0068000 0.0009100 0.0006200 0.0122000 0.0009400 0.0014500 0.0005800 0.0012000 Qvalle 0.0719000 0.0411000 0.0301300 0.0409400 0.0013600 0.0274200 0.0007600 0.0006700 0.0393200 0.0002600 0.0004900 0.0267000 -0.0000400 0.0001400 -0.0016100 0.0380600 0.0004900 0.0000900 -0.0005600 0.0003700 0.0255600 -0.0000200 -0.0016700 0.0329000 0.0011600 0.0004700 0.0223300 0.0026100 0.0007200 0.0006800 -0.0032300 0.0003600 0.0315500 0.0002200 0.0084500 -0.0083300 0.0098600 0.0118800 0.0003200 0.0002300 0.0007600 0.0008000 0.0017800 0.0257000 0.0031900 0.0067400 0.0006700 0.0001700 0.0120200 0.0006600 0.0012600 0.0003700 0.0005100 Hres 0.0000000 23.5600000 29.6800000 23.5700000 27.2900000 24.6700000 22.6500000 23.0500000 25.5500000 25.2300000 23.3000000 22.8300000 27.6400000 26.1200000 27.2900000 24.4300000 23.6500000 23.1400000 30.4200000 26.1200000 34.4100000 26.9900000 24.1700000 28.2100000 31.4900000 32.1100000 36.2200000 34.3000000 23.5800000 24.7900000 30.2600000 31.7400000 38.3200000 35.0100000 42.7700000 40.9700000 24.0000000 23.1400000 29.7600000 35.7600000 43.4800000 41.6800000 44.7300000 43.2500000 25.4600000 23.0400000 26.5400000 56.3500000 48.9100000 26.2400000 23.0400000 27.1900000 55.3500000 0.0233000 0.0024000 0.0067400 -0.0000300 0.0007000 0.0121900 0.0025400 -0.0012800 0.0005900 0.0224700 0.0036900 -0.0013400 0.0011800 0.0119100 0.0003900 -0.0004200 0.0008700 0.0176500 0.0036300 0.0006300 0.0004900 0.0108100 0.0010200 0.0007300 -0.0005600 0.0136500 0.0047100 -0.0026700 0.0008000 0.0022700 0.0093800 0.0012400 0.0098600 0.0021300 -0.0009100 0.0100300 0.0003700 0.0008800 0.0006800 0.0011400 0.0006900 0.0085400 0.0014300 -0.0001300 0.0006600 0.0006600 0.0006600 0.0008000 -0.0013400 0.0069500 0.0027000 0.0012600 0.0009900 0.0026200 0.0006400 -0.0000800 -0.0025300 0.0008500 0.0230600 0.0022500 0.0066300 -0.0001600 0.0001300 0.0117800 -0.0000200 -0.0016700 0.0003500 0.0220600 0.0036300 -0.0016500 0.0011200 0.0118300 0.0001700 -0.0025100 0.0007000 0.0161600 0.0035500 0.0004000 -0.0001100 0.0107300 0.0007100 -0.0022600 -0.0023000 0.0121600 0.0043100 -0.0029400 0.0005100 0.0018000 0.0091200 0.0005800 0.0091600 0.0018200 -0.0011100 0.0099700 0.0001600 0.0005300 0.0004500 0.0009900 0.0002400 0.0083200 0.0012600 -0.0002800 -0.0002000 0.0004200 0.0002100 0.0005600 -0.0019300 0.0068700 0.0023800 0.0009900 0.0007600 0.0024600 0.0001900 -0.0003700 -0.0026800 0.0004700 58.9400000 25.1600000 27.5200000 68.1000000 64.1300000 28.7800000 28.7500000 30.3400000 32.2100000 30.2200000 33.9400000 39.2500000 32.0300000 29.0300000 33.6400000 26.9200000 37.3600000 47.0400000 36.1300000 33.4900000 35.8700000 36.4900000 32.3100000 40.9400000 33.8200000 35.5000000 33.5700000 37.4400000 43.3300000 34.4900000 34.8300000 30.1300000 43.2300000 41.7300000 39.2700000 33.1800000 37.4800000 39.6300000 40.2300000 49.0300000 39.3800000 40.8900000 49.5500000 42.6100000 49.8600000 43.9600000 47.9000000 52.4500000 46.3300000 45.5900000 62.2800000 54.9700000 48.9100000 37.7900000 0.0019800 0.0048900 0.0014200 -0.0007300 0.0017200 0.0007600 0.0010700 0.0016100 0.0012600 0.0040700 0.0004100 0.0008200 0.0017000 0.0027800 0.0010500 0.0005100 0.0006900 0.0004100 0.0033200 0.0007100 -0.0000900 0.0010700 0.0011300 0.0015700 0.0003200 0.0030200 0.0006300 -0.0026700 0.0032000 0.0021200 0.0032000 0.0028300 0.0020300 0.0008700 0.0015200 0.0018700 0.0007000 0.0004500 0.0015000 0.0005600 0.0006100 0.0006800 0.0007300 0.0020400 -0.0001500 0.0007600 0.0005500 0.0006300 0.0014400 -0.0022400 0.0006600 0.0005700 0.0006000 -0.0053200 0.0016300 0.0038600 0.0012300 -0.0009600 0.0015400 0.0005300 0.0006100 0.0013700 0.0008200 0.0038900 -0.0005700 0.0006200 0.0013500 0.0027100 0.0006100 0.0002800 0.0002500 0.0003200 0.0030200 -0.0007300 -0.0002100 0.0008400 0.0005300 0.0015000 0.0002200 0.0027800 -0.0008500 -0.0027300 0.0029600 0.0020300 0.0031200 0.0025700 0.0019500 0.0003800 0.0014100 0.0012900 0.0006600 -0.0001200 0.0014300 0.0000800 -0.0018700 -0.0010600 0.0005000 0.0018200 -0.0011800 0.0002000 0.0002900 0.0000800 0.0011700 -0.0034500 0.0005300 0.0000500 0.0004200 -0.0069000 NETGA senza alfa e lambda Qmonte Qvalle Hres NETGA senza alfa con lambda Qmonte Qvalle Hres 0.0719600 0.0411722 0.0301578 0.0410445 0.0014982 0.0273925 0.0009972 0.0012669 0.0393676 0.0006823 0.0006559 0.0265851 0.0008072 0.0005555 -0.0015185 0.0383490 0.0006886 0.0007733 -0.0002874 0.0008403 0.0256019 0.0001355 -0.0016185 0.0333290 0.0012437 0.0005819 0.0224317 0.0029302 0.0007585 0.0013178 -0.0029963 0.0005653 0.0315990 0.0005147 0.0088512 -0.0080090 0.0099797 0.0121620 0.0006490 0.0008712 0.0010735 0.0010231 0.0019307 0.0260033 0.0034050 0.0067400 0.0008830 0.0006277 0.0120810 0.0009241 0.0014487 0.0005750 0.0011957 0.0231423 0.0023910 0.0066800 -0.0000030 0.0006460 0.0713300 0.0408022 0.0298878 0.0406345 0.0013382 0.0271625 0.0008072 0.0006569 0.0390376 0.0002423 0.0004859 0.0264351 0.0000072 0.0001355 -0.0016185 0.0377990 0.0004786 0.0001033 -0.0005774 0.0003603 0.0253619 -0.0000246 -0.0016785 0.0326790 0.0011437 0.0004819 0.0221417 0.0026102 0.0007085 0.0006678 -0.0032263 0.0003553 0.0313390 0.0002247 0.0084012 -0.0082790 0.0097897 0.0117720 0.0003090 0.0002412 0.0007435 0.0007831 0.0017707 0.0255333 0.0031750 0.0066800 0.0006430 0.0001777 0.0119110 0.0006541 0.0012587 0.0003650 0.0005157 0.0229123 0.0022410 0.0065700 -0.0001330 0.0000760 0.0000000 23.6356560 29.8543270 23.6877970 27.5194640 24.8063760 22.8267350 23.1697040 25.8946170 25.5104910 23.4731460 23.0244250 28.0530080 26.4683450 27.6162920 24.7084120 23.9309410 23.3668790 30.8524250 26.4663950 34.8115260 27.3260810 24.4222630 28.4527700 31.9203930 32.5107820 36.6552310 34.6992600 23.8911500 25.0576530 30.5328670 32.1089910 38.8076910 35.4462950 43.2437570 41.4143050 24.3204220 23.4590750 30.0503980 36.2142600 43.9941370 42.1662650 45.2236780 43.7307190 25.7874490 23.3591020 26.8556840 56.9940700 49.4337680 26.5732090 23.3559260 27.5178080 55.9930900 59.4862140 25.4924550 27.8525170 68.6758590 64.6991270 0.0719600 0.0411824 0.0301477 0.0410524 0.0014950 0.0273886 0.0009941 0.0012663 0.0393762 0.0006801 0.0006550 0.0265825 0.0008041 0.0005550 -0.0015187 0.0383591 0.0006870 0.0007710 -0.0002861 0.0008392 0.0255974 0.0001350 -0.0016187 0.0333419 0.0012447 0.0005780 0.0224303 0.0029271 0.0007574 0.0013138 -0.0029925 0.0005686 0.0316095 0.0005138 0.0088390 -0.0080018 0.0099710 0.0121694 0.0006470 0.0008700 0.0010720 0.0010224 0.0019290 0.0260125 0.0034080 0.0067303 0.0008834 0.0006258 0.0120864 0.0009235 0.0014451 0.0005746 0.0011944 0.0231465 0.0023960 0.0066703 -0.0000057 0.0006491 0.0713300 0.0408124 0.0298777 0.0406424 0.0013350 0.0271586 0.0008041 0.0006563 0.0390462 0.0002401 0.0004850 0.0264325 0.0000041 0.0001350 -0.0016187 0.0378091 0.0004770 0.0001010 -0.0005761 0.0003592 0.0253574 -0.0000250 -0.0016787 0.0326919 0.0011447 0.0004780 0.0221403 0.0026071 0.0007074 0.0006638 -0.0032225 0.0003586 0.0313495 0.0002238 0.0083890 -0.0082718 0.0097810 0.0117794 0.0003070 0.0002400 0.0007420 0.0007824 0.0017690 0.0255425 0.0031780 0.0066703 0.0006434 0.0001758 0.0119164 0.0006535 0.0012551 0.0003646 0.0005144 0.0229165 0.0022460 0.0065603 -0.0001357 0.0000791 0.0000000 23.6332790 29.8461680 23.6830710 27.5082620 24.7999110 22.8180810 23.1636370 25.8684340 25.4969320 23.4618010 23.0146160 28.0230300 26.4468080 27.5989330 24.6923800 23.9145410 23.3552450 30.8222860 26.4460780 34.7870900 27.3046750 24.4086760 28.4390480 31.8894880 32.4862100 36.6281400 34.6722280 23.8718580 25.0430270 30.5162400 32.0790780 38.7710090 35.4164250 43.2127620 41.3860470 24.3007960 23.4386790 30.0324770 36.1729060 43.9552540 42.1307510 45.1910540 43.6991790 25.7669520 23.3387250 26.8347440 56.9479570 49.3984520 26.5524120 23.3354300 27.4962530 55.9468480 59.4480880 25.4702820 27.8300980 68.6348870 64.6588900 0.0120887 0.0025649 -0.0013061 0.0005995 0.0223128 0.0036606 -0.0013512 0.0012183 0.0117647 0.0003615 -0.0003566 0.0008752 0.0175387 0.0036006 0.0006208 0.0005475 0.0106918 0.0009929 0.0005609 -0.0004194 0.0136421 0.0046643 -0.0026394 0.0007853 0.0022449 0.0093226 0.0012367 0.0100327 0.0020990 -0.0008782 0.0099408 0.0003666 0.0008641 0.0006522 0.0011368 0.0007066 0.0084764 0.0014045 -0.0001679 0.0006920 0.0006468 0.0006617 0.0007927 -0.0013297 0.0069396 0.0026464 0.0012345 0.0009787 0.0026031 0.0006479 -0.0000952 -0.0025107 0.0008476 0.0019796 0.0048800 0.0013616 -0.0007348 0.0016993 0.0116887 0.0000049 -0.0016961 0.0003595 0.0219228 0.0036006 -0.0016612 0.0011683 0.0116847 0.0001415 -0.0024466 0.0007052 0.0160887 0.0035206 0.0003908 -0.0000525 0.0106118 0.0006829 -0.0024191 -0.0021594 0.0121921 0.0042643 -0.0029094 0.0004953 0.0017749 0.0090626 0.0005767 0.0093427 0.0017890 -0.0010682 0.0098808 0.0001566 0.0005241 0.0004222 0.0009868 0.0002566 0.0082564 0.0012345 -0.0003179 -0.0001580 0.0004068 0.0002117 0.0005527 -0.0019197 0.0068596 0.0023264 0.0009645 0.0007487 0.0024531 0.0001979 -0.0003852 -0.0026607 0.0004676 0.0016296 0.0038600 0.0011716 -0.0009648 0.0015193 29.1556450 29.1053600 30.6969100 32.6022640 30.5908000 34.4062330 39.7524520 32.4391690 29.4089220 34.0374890 27.3485370 37.8766800 47.6322070 36.5954550 33.9293720 36.2732070 36.9246420 32.7631830 41.3873400 34.3040830 35.9387400 34.0730410 37.9752730 43.8229770 34.9831880 35.3431320 30.6672630 43.7226680 42.2364460 39.8062300 33.6768570 38.0117150 40.2007120 40.7681920 49.5608080 39.9280910 41.4684260 50.1093100 43.1127710 50.4476940 44.4615250 48.4766910 53.0787970 46.9133740 46.1665780 62.8475520 55.5487470 49.4909010 38.3349310 0.0120922 0.0025636 -0.0013085 0.0005988 0.0223177 0.0036550 -0.0013487 0.0012130 0.0117713 0.0003626 -0.0003590 0.0008732 0.0175332 0.0035950 0.0006183 0.0005447 0.0106978 0.0009935 0.0005640 -0.0004214 0.0136342 0.0046597 -0.0026353 0.0007832 0.0022404 0.0093255 0.0012371 0.0100228 0.0020955 -0.0008772 0.0099427 0.0003660 0.0008646 0.0006496 0.0011358 0.0007032 0.0084766 0.0014061 -0.0001675 0.0006921 0.0006435 0.0006590 0.0007922 -0.0013253 0.0069333 0.0026486 0.0012361 0.0009765 0.0026049 0.0006454 -0.0000932 -0.0025075 0.0008454 0.0019768 0.0048765 0.0013643 -0.0007343 0.0017004 0.0116922 0.0000036 -0.0016985 0.0003588 0.0219277 0.0035950 -0.0016587 0.0011630 0.0116913 0.0001426 -0.0024490 0.0007032 0.0160832 0.0035150 0.0003883 -0.0000553 0.0106178 0.0006835 -0.0024160 -0.0021614 0.0121842 0.0042597 -0.0029053 0.0004932 0.0017704 0.0090655 0.0005771 0.0093328 0.0017855 -0.0010672 0.0098827 0.0001560 0.0005246 0.0004196 0.0009858 0.0002532 0.0082566 0.0012361 -0.0003175 -0.0001579 0.0004035 0.0002090 0.0005522 -0.0019153 0.0068533 0.0023286 0.0009661 0.0007465 0.0024549 0.0001954 -0.0003832 -0.0026575 0.0004654 0.0016268 0.0038565 0.0011743 -0.0009643 0.0015204 29.1302400 29.0811250 30.6722140 32.5754980 30.5651090 34.3643350 39.7036220 32.4087110 29.3826040 34.0090860 27.3141360 37.8287910 47.5810050 36.5623180 33.8946090 36.2440940 36.8914210 32.7248610 41.3581880 34.2665040 35.9045600 34.0335550 37.9314770 43.7866410 34.9444570 35.3018700 30.6185950 43.6882220 42.1958850 39.7632410 33.6377090 37.9679800 40.1535890 40.7197700 49.5241140 39.8826380 41.4201640 50.0671960 43.0739060 50.4007330 44.4216660 48.4282950 53.0290930 46.8662630 46.1179070 62.8012090 55.5003970 49.4430350 38.2900050 0.0007487 0.0010574 0.0016075 0.0012444 0.0040756 0.0003339 0.0008377 0.0016759 0.0027598 0.0010436 0.0005218 0.0006906 0.0004055 0.0032495 0.0006295 0.0000083 0.0010180 0.0011047 0.0015851 0.0003155 0.0029495 0.0006763 -0.0026280 0.0031327 0.0021224 0.0031202 0.0027869 0.0020324 0.0007982 0.0014315 0.0016720 0.0008549 0.0004643 0.0014882 0.0005278 0.0004850 0.0006070 0.0008925 0.0020217 -0.0000255 0.0007080 0.0007165 0.0006275 0.0014248 -0.0021785 0.0007647 0.0005740 0.0005808 -0.0053635 0.0005187 0.0006074 0.0013675 0.0008044 0.0038956 -0.0006461 0.0006377 0.0013359 0.0026898 0.0006036 0.0002918 0.0002506 0.0003155 0.0029495 -0.0008105 -0.0001117 0.0007880 0.0005047 0.0015151 0.0002155 0.0027195 -0.0007937 -0.0026880 0.0028927 0.0020324 0.0030402 0.0025269 0.0019524 0.0003082 0.0013215 0.0010920 0.0008149 -0.0001057 0.0014182 0.0000478 -0.0019850 -0.0011330 0.0006625 0.0018017 -0.0010455 0.0001580 0.0004565 0.0000775 0.0011548 -0.0033785 0.0006347 0.0000540 0.0004008 -0.0069235 diff% senza alfa e lambda Qmonte Qvalle Hres 0.0093612 0.0079277 0.0000000 0.0078993 0.0072462 0.0032112 0.0079664 0.0080378 0.0058736 0.0076284 0.0074624 0.0049978 0.0143355 0.0160221 0.0084084 0.0007465 0.0010552 0.0016088 0.0012435 0.0040741 0.0003359 0.0008384 0.0016764 0.0027625 0.0010410 0.0005232 0.0006891 0.0004076 0.0032500 0.0006321 0.0000063 0.0010189 0.0011029 0.0015897 0.0003176 0.0029500 0.0006751 -0.0026361 0.0031389 0.0021248 0.0031234 0.0027921 0.0020348 0.0007967 0.0014389 0.0016792 0.0008529 0.0004632 0.0014917 0.0005340 0.0004886 0.0006105 0.0008891 0.0020227 -0.0000260 0.0007079 0.0007113 0.0006262 0.0014256 -0.0021755 0.0007579 0.0005722 0.0005834 -0.0053568 0.0005165 0.0006052 0.0013688 0.0008035 0.0038941 -0.0006441 0.0006384 0.0013364 0.0026925 0.0006010 0.0002932 0.0002491 0.0003176 0.0029500 -0.0008079 -0.0001137 0.0007889 0.0005029 0.0015197 0.0002176 0.0027200 -0.0007949 -0.0026961 0.0028989 0.0020348 0.0030434 0.0025321 0.0019548 0.0003067 0.0013289 0.0010992 0.0008129 -0.0001069 0.0014217 0.0000540 -0.0019814 -0.0011295 0.0006591 0.0018027 -0.0010460 0.0001579 0.0004513 0.0000762 0.0011556 -0.0033755 0.0006279 0.0000522 0.0004034 -0.0069168 diff% senza alfa con lambda Qmonte Qvalle Hres 0.0093612 0.0079277 0.0000000 0.0076542 0.0069988 0.0031103 0.0083010 0.0083754 0.0055987 0.0074367 0.0072687 0.0047972 0.0164408 0.0183750 0.0079979 0.0096728 0.0496316 0.0102031 0.0073739 0.0252857 0.0061970 0.0102357 0.0620395 0.0081250 0.0056358 0.0072752 0.0163000 0.0174868 0.0643704 0.0228605 0.0080632 0.0325000 0.0052857 0.0071802 0.0129365 0.0032414 0.0087640 0.0000717 0.0148961 0.0091805 0.0012333 0.0082456 0.0069453 0.0091373 0.0066004 0.0063313 0.0079831 0.0088036 0.0166818 0.0130465 0.0151101 0.0162596 0.0048041 0.0071287 0.0043830 0.0088279 0.0296593 0.0124355 0.0097566 0.0169043 0.0008759 0.0086379 0.0035917 0.0067700 0.0037333 0.0089065 0.9010000 0.0771714 0.0083117 0.0097913 0.0204219 0.0161186 0.0069978 0.0093928 0.0620395 0.0194925 0.0071834 0.0680769 0.0083469 0.0099225 1.1787500 0.0325000 0.0052857 0.0068586 0.0232857 0.1476667 0.0310357 0.0261081 0.0077508 0.2275000 0.0050958 0.0067185 0.0140517 0.0252766 0.0084339 0.0000805 0.0159306 0.0179559 0.0011455 0.0130556 0.0066878 0.0211818 0.0057763 0.0061261 0.0071308 0.0090926 0.0344063 0.0487826 0.0216711 0.0211375 0.0052360 0.0064864 0.0046991 0.0089065 0.0402836 0.0453529 0.0090707 0.0089242 0.0010079 0.0135405 0.0111569 0.0064068 0.0039822 0.0090543 0.1689375 0.4155385 0.0077521 1.2435000 0.0156527 0.0271714 0.0062212 0.0055280 0.0078029 0.0051932 0.0134879 0.0111174 0.0074312 0.0085162 0.0149424 0.0133363 0.0119565 0.0113963 0.0118791 0.0098046 0.0142152 0.0132617 0.0116689 0.0124521 0.0104370 0.0086058 0.0136676 0.0124815 0.0120163 0.0116402 0.0131955 0.0107968 0.0090174 0.0116254 0.0127268 0.0124620 0.0110769 0.0108446 0.0133509 0.0137889 0.0097580 0.0127030 0.0118247 0.0116666 0.0110368 0.0111149 0.0128613 0.0138499 0.0118946 0.0114298 0.0107088 0.0126985 0.0137121 0.0120562 0.0116186 0.0092673 0.0132136 0.0120827 0.0084561 0.0088746 0.0130523 0.0123603 0.0117637 0.0121783 0.0122700 0.0098138 0.0464000 0.0107422 0.0071566 0.0284857 0.0076515 0.0103313 0.0580000 0.0089821 0.0057748 0.0070116 0.0185429 0.0144737 0.0594444 0.0241860 0.0082375 0.0359286 0.0054161 0.0067936 0.0121429 0.0034138 0.0088232 0.0010068 0.0163766 0.0121880 0.0024967 0.0024035 0.0066163 0.0075098 0.0079652 0.0072196 0.0088489 0.0082021 0.0196515 0.0116512 0.0165321 0.0169038 0.0056907 0.0067770 0.0035088 0.0102456 0.0292747 0.0093710 0.0093123 0.0175638 0.0033586 0.0093448 0.0046833 0.0065876 0.0016667 0.0103368 0.8100000 0.0727714 0.0080230 0.0093031 0.0222578 0.0148814 0.0067766 0.0095350 0.0580000 0.0205224 0.0069641 0.0766923 0.0103061 0.0100187 1.1020000 0.0359286 0.0054161 0.0065912 0.0264898 0.1222222 0.0286607 0.0291892 0.0079268 0.2515000 0.0052216 0.0063240 0.0131897 0.0170638 0.0084940 0.0011303 0.0175139 0.0238382 0.0023189 0.0038056 0.0063559 0.0174091 0.0072154 0.0069856 0.0080142 0.0084714 0.0405313 0.0435652 0.0237105 0.0219750 0.0062022 0.0061280 0.0037618 0.0103368 0.0397612 0.0341765 0.0086198 0.0098636 0.0038651 0.0146486 0.0085882 0.0062225 0.0017778 0.0105083 0.1518750 0.3918462 0.0074533 1.1815000 0.0170599 0.0250857 0.0059959 0.0052660 0.0074208 0.0049300 0.0124632 0.0105799 0.0069442 0.0080866 0.0138578 0.0125118 0.0113204 0.0107401 0.0111857 0.0093019 0.0132244 0.0124838 0.0109587 0.0116589 0.0098749 0.0081194 0.0126862 0.0117163 0.0112684 0.0108521 0.0123774 0.0102068 0.0084679 0.0106830 0.0117695 0.0116088 0.0103522 0.0101549 0.0125332 0.0129075 0.0091558 0.0115466 0.0109304 0.0108146 0.0103075 0.0103856 0.0120562 0.0129655 0.0111057 0.0106115 0.0099868 0.0119059 0.0128225 0.0112634 0.0107832 0.0086204 0.0123324 0.0112681 0.0078544 0.0082472 0.0121696 0.0115174 0.0109497 0.0113473 0.0114199 0.0079621 0.0083731 0.0324153 0.0122032 0.0731795 0.1509524 0.0059770 0.0063082 0.0080937 0.0146032 0.1172653 0.0109371 0.0265784 0.2316986 0.2510714 0.0005817 0.0096985 0.0114794 0.0183875 0.0110749 0.0061226 0.0026935 0.0175112 0.0145775 0.0349011 0.0088933 0.0090811 0.0180341 0.0409265 0.0028246 0.0240870 0.0074520 0.0178671 0.2912308 0.0484697 0.0199394 0.0025758 0.0091375 0.0077090 0.0014950 0.0198481 0.0202778 0.0113838 0.0064427 0.0123437 0.1901250 0.0076482 0.0028118 0.0002121 0.0020368 0.0411268 0.0065890 0.0120581 0.0148289 0.0118131 0.0015776 0.0124048 0.0013710 0.0080937 0.0068000 0.0430804 0.0122857 0.1678824 0.0252590 0.0074286 0.0044146 0.0082761 0.0230000 0.5223636 0.0110186 0.0381831 0.0704159 0.0611304 0.0026365 0.0105986 0.0104252 0.0288431 0.0139667 0.0062971 0.0057586 0.0199410 0.0170604 0.0376216 0.0089468 0.0210000 0.0110755 0.0618444 0.0032525 0.0692500 0.0076490 0.0202778 0.1352143 0.2099500 0.0313333 0.0080952 0.0130536 0.0053523 0.0015124 0.0225168 0.0258081 0.0148289 0.0027967 0.0415789 0.0411081 0.0072201 0.0050851 0.0002577 0.0000104 0.0474797 0.0050104 0.0134675 0.0212642 0.0043279 0.0018540 0.0190610 0.0014344 0.0137370 0.0128013 0.0127746 0.0130528 0.0118160 0.0159189 0.0138298 0.0125894 0.0128828 0.0131195 0.0112408 0.0119113 0.0140261 0.0109267 0.0143135 0.0123589 0.0149848 0.0142968 0.0113773 0.0142994 0.0147325 0.0178315 0.0113964 0.0121363 0.0136550 0.0149746 0.0141866 0.0144010 0.0133779 0.0108262 0.0139180 0.0141459 0.0112878 0.0117994 0.0117869 0.0114087 0.0120395 0.0119885 0.0125917 0.0126470 0.0091129 0.0105284 0.0118769 0.0144200 0.0094851 0.0064925 0.0279661 0.0116490 0.0703077 0.1453333 0.0036322 0.0066181 0.0096419 0.0186190 0.1116939 0.0103802 0.0260098 0.2273836 0.2474643 0.0011553 0.0106815 0.0129850 0.0209750 0.0130485 0.0058134 0.0023710 0.0165122 0.0162160 0.0360659 0.0087089 0.0109189 0.0175227 0.0446618 0.0036579 0.0191304 0.0074262 0.0167343 0.2886154 0.0486364 0.0250606 0.0015303 0.0097500 0.0109776 0.0024101 0.0190296 0.0189921 0.0136061 0.0057519 0.0085000 0.1653750 0.0089130 0.0054588 0.0016414 0.0027607 0.0392394 0.0059452 0.0113895 0.0177237 0.0138692 0.0007702 0.0130794 0.0010123 0.0096419 0.0052727 0.0383929 0.0117278 0.1612941 0.0243187 0.0045143 0.0047531 0.0098592 0.0293250 0.4975455 0.0104576 0.0373662 0.0690221 0.0602522 0.0019926 0.0116729 0.0117925 0.0329020 0.0164556 0.0059792 0.0050690 0.0188657 0.0189780 0.0385766 0.0087613 0.0252500 0.0102264 0.0674889 0.0042121 0.0550000 0.0076226 0.0189921 0.1340000 0.2105000 0.0393810 0.0048095 0.0139286 0.0076218 0.0024381 0.0215882 0.0241717 0.0177237 0.0020610 0.0286316 0.0357568 0.0084142 0.0098723 0.0019939 0.0009067 0.0453008 0.0045208 0.0127208 0.0254151 0.0079344 0.0009051 0.0200976 0.0010591 0.0125025 0.0115572 0.0118236 0.0121462 0.0109716 0.0146410 0.0125479 0.0115010 0.0119656 0.0120815 0.0104292 0.0110008 0.0128400 0.0102147 0.0132024 0.0113961 0.0138086 0.0131271 0.0105387 0.0131765 0.0135478 0.0162162 0.0105996 0.0111643 0.0125602 0.0137947 0.0130197 0.0132119 0.0121742 0.0100778 0.0127638 0.0129656 0.0104379 0.0108873 0.0108450 0.0105020 0.0110291 0.0110409 0.0115749 0.0115794 0.0083688 0.0096488 0.0108983 0.0132311 0.1856585 0.0216098 0.0141765 0.0072770 0.0061143 0.0230784 0.0008696 0.0108780 0.0212470 0.1134366 1.0917778 0.0485607 0.0223805 0.0095924 0.0139375 0.0233576 0.0734921 0.0157453 0.0210406 0.0011415 0.0249281 0.0152191 0.0011921 0.0825172 0.0582368 0.1058877 0.2213429 0.0316889 0.0079000 0.0575357 0.2049180 0.1073676 0.2225616 0.0089559 0.8299333 0.0684079 0.3027455 0.0039206 0.0105556 0.0274420 0.1586515 0.0070702 0.0320500 0.0081805 0.1335439 0.0285806 0.0104444 0.0074649 0.0105246 0.0420357 0.0024000 0.0139375 0.0233576 0.1103288 0.4679048 0.0618571 0.0477170 0.0100400 0.0202727 0.0217770 0.0662353 0.0153993 0.0227466 0.0011921 0.0255673 0.0167588 0.0012410 0.1889211 0.0627801 0.1534961 0.2347576 0.1188333 0.0082867 0.4027500 0.0614973 0.0688774 0.3249400 0.0100385 0.1139746 0.2099500 0.5741724 0.0308750 0.0129915 0.0207159 0.1975660 0.0806000 0.0457857 0.0034087 0.1807317 0.0224146 0.0139000 0.0062842 0.0085810 0.0258824 0.0013188 0.0058049 0.0210783 0.1097042 1.0697778 0.0478037 0.0240265 0.0125350 0.0074375 0.0231722 0.0716349 0.0127154 0.0190938 0.0022830 0.0239250 0.0134099 0.0023842 0.0843103 0.0533618 0.1020588 0.2184286 0.0292222 0.0055400 0.0463929 0.1989508 0.1022059 0.2179452 0.0084853 0.8269333 0.0685526 0.2932182 0.0060317 0.0100139 0.0288125 0.1483636 0.0037895 0.0276500 0.0069192 diff media Qmon 0.0487785 diff media Qmon 0.0473614 diff media Qval 0.0630228 diff media Qval 0.0605610 diff media Hres 0.0117383 diff media Hres 0.0108972 0.1300000 0.0296452 0.0100963 0.0064465 0.0147705 0.0471429 0.0036400 0.0074375 0.0231722 0.1066986 0.4584762 0.0608929 0.0512264 0.0131200 0.0108182 0.0215755 0.0648588 0.0124359 0.0206419 0.0023842 0.0245385 0.0147665 0.0024821 0.1930263 0.0575248 0.1479457 0.2316667 0.1095833 0.0058112 0.3247500 0.0595508 0.0655660 0.3182000 0.0095110 0.1135932 0.2105000 0.5561034 0.0475000 0.0123248 0.0216058 0.1847547 0.0432000 0.0395000 0.0024362 diff% con alfa senza lambda Qmonte Qvalle Hres 0.0093612 0.0079277 0.0000000 0.0070547 0.0063934 0.0032112 0.0091194 0.0092011 0.0058457 0.0068095 0.0066351 0.0050222 0.0206645 0.0230956 0.0083625 0.0083138 0.0080219 0.0056430 0.0166947 0.0208684 0.0077842 0.0227344 0.0434328 0.0057193 0.0061157 0.0059143 0.0134107 0.0269714 0.0726154 0.0110486 0.0189848 0.0255714 0.0078672 0.0079561 0.0076292 0.0084770 0.0210526 0.4000000 0.0146624 0.0341071 0.1364286 0.0133186 0.0066225 0.0062112 0.0118689 0.0061859 0.0057530 0.0110132 0.0051429 0.0073469 0.0117658 0.0247763 0.2092222 0.0097588 0.0232222 0.0111964 0.0139578 0.0404186 0.0669189 0.0132512 0.0075482 0.0072308 0.0115341 0.1365000 0.9555000 0.0123512 0.0062112 0.0059880 0.0103708 0.0056294 0.0051362 0.0086456 0.0128095 0.0139138 0.0134588 0.0386034 0.0263617 0.0123355 0.0069319 0.0065773 0.0118654 0.0095392 0.0107088 0.0115161 0.0339221 0.0362778 0.0130993 0.0179323 0.0350735 0.0107281 0.0046133 0.0042848 0.0089286 0.0119474 0.0189167 0.0106337 0.0053492 0.0050780 0.0125142 0.0109412 0.0253636 0.0123245 0.0075443 0.0067716 0.0109182 0.0024926 0.0024118 0.0107112 0.0072147 0.0063469 0.0132544 0.0060546 0.0062534 0.0137131 0.0256818 0.0529688 0.0096548 0.0128256 0.0479565 0.0121124 0.0176055 0.0252500 0.0117016 0.0163750 0.0212875 0.0114232 0.0061134 0.0066629 0.0108732 0.0050653 0.0043837 0.0109571 0.0045906 0.0049216 0.0127625 0.0076735 0.0077418 0.0137765 0.0330659 0.0449104 0.0117687 0.0200161 0.0730000 0.0098814 0.0074787 0.0067587 0.0105409 0.0254043 0.0210303 0.0126009 0.0132138 0.0152063 0.0136530 0.0119483 0.0187297 0.0119209 0.0156667 0.0172549 0.0100382 0.0045803 0.0041943 0.0091215 0.0024750 0.0026400 0.0131054 0.0077418 0.0078703 0.0119322 diff% con alfa con lambda Qmonte Qvalle Hres 0.0093612 0.0079277 0.0000000 0.0068130 0.0061494 0.0031103 0.0094493 0.0095340 0.0055707 0.0066235 0.0064472 0.0048217 0.0228355 0.0255221 0.0079519 0.0084425 0.0081517 0.0053824 0.0200316 0.0250395 0.0074015 0.0232813 0.0444776 0.0054610 0.0059039 0.0057007 0.0123870 0.0303000 0.0815769 0.0105111 0.0204545 0.0275510 0.0073844 0.0080383 0.0077120 0.0080465 0.0250395 0.4757500 0.0135765 0.0350000 0.1400000 0.0124946 0.0067550 0.0063354 0.0112326 0.0059278 0.0054911 0.0103548 0.0073714 0.0105306 0.0110712 0.0277895 0.2346667 0.0092550 0.0282222 0.0136071 0.0129654 0.0417442 0.0700000 0.0124739 0.0077117 0.0073959 0.0108238 0.1400000 0.9800000 0.0115575 0.0063354 0.0061078 0.0098073 0.0052487 0.0047477 0.0081589 0.0120079 0.0130431 0.0124763 0.0453103 0.0346383 0.0115699 0.0069801 0.0066261 0.0111172 0.0106075 0.0119080 0.0107268 0.0354286 0.0378889 0.0122810 0.0209474 0.0409706 0.0101370 0.0058867 0.0054675 0.0083772 0.0178596 0.0282778 0.0096793 0.0050292 0.0047553 0.0115562 0.0124510 0.0288636 0.0114714 0.0089473 0.0082509 0.0101934 0.0034181 0.0033073 0.0100213 0.0081133 0.0072637 0.0124364 0.0054067 0.0055842 0.0128325 0.0286212 0.0590313 0.0090503 0.0141860 0.0530435 0.0109417 0.0190459 0.0273158 0.0108073 0.0170000 0.0221000 0.0105699 0.0070052 0.0076348 0.0101437 0.0047251 0.0040370 0.0102277 0.0037076 0.0039749 0.0119569 0.0090500 0.0091306 0.0128935 0.0327253 0.0444478 0.0109763 0.0230484 0.0840588 0.0090439 0.0069861 0.0062587 0.0098186 0.0260000 0.0218788 0.0118077 0.0157034 0.0180714 0.0127650 0.0112414 0.0176216 0.0111247 0.0167583 0.0198235 0.0091829 0.0044077 0.0040199 0.0084746 0.0004375 0.0004667 0.0122230 0.0091306 0.0092821 0.0111141 0.6816667 0.0137857 0.0076809 0.0050630 0.0050156 0.0149322 0.0046965 0.0063577 0.0037687 0.0215847 0.0078338 0.0217436 0.0137143 0.0114598 0.0053660 0.0064628 0.0181905 0.0084898 0.0074403 0.0126275 0.0084110 0.0034821 0.0035868 0.0084098 0.0107528 0.0237500 0.0093260 0.0070320 0.0149032 0.0011045 0.0142347 0.0114615 0.0076171 0.0422703 0.0303636 0.0300441 0.0086842 0.0010870 0.0067857 0.0129021 0.0700769 0.0116667 0.0242576 0.0191364 0.0154875 0.0103806 0.0058288 0.0079074 0.0146429 0.0132626 0.0070878 0.0129375 0.0515000 0.0072292 0.0177882 0.0063384 0.0057198 0.0196056 0.1278125 0.0742308 0.0070993 0.6430000 0.0038443 0.0251714 0.0038772 0.0064628 0.0030606 0.0138125 0.0078867 0.0498824 0.0022948 0.0142429 0.0033855 0.0066085 0.0286500 0.0378182 0.0074958 0.0181408 0.0017080 0.0008478 0.0007368 0.0091903 0.0097653 0.0372549 0.0117611 0.0072325 0.0318621 0.0000972 0.0166593 0.0184054 0.0076630 0.0977500 0.0315472 0.0454000 0.0100000 0.0031250 0.0069651 0.0146429 0.0325357 0.0115000 0.0381190 0.0601429 0.0221250 0.0072073 0.0058967 0.0089706 0.0186364 0.0172763 0.0034837 0.0435789 0.0111351 0.0068246 0.0321702 0.0076994 0.0046554 0.0226341 0.0083493 0.0087477 0.0129141 0.0122399 0.0116363 0.0120501 0.0121331 0.0131237 0.0123931 0.0128028 0.0129140 0.0116822 0.0153840 0.0132771 0.0120403 0.0127464 0.0131875 0.0111309 0.0115524 0.0134772 0.0107921 0.0142521 0.0124313 0.0149662 0.0127965 0.0112342 0.0142752 0.0147560 0.0168527 0.0112322 0.0120607 0.0135443 0.0149532 0.0141077 0.0141315 0.0128515 0.0105967 0.0137768 0.0137960 0.0107565 0.0117206 0.0111037 0.0113488 0.0116710 0.0108928 0.0118867 0.0123260 0.0090063 0.0103015 0.0113743 0.0142884 0.7493333 0.0104429 0.0073429 0.0054567 0.0069609 0.0137458 0.0044864 0.0078618 0.0061119 0.0259831 0.0072897 0.0183333 0.0078333 0.0137931 0.0057246 0.0079917 0.0220635 0.0138163 0.0068992 0.0120000 0.0042192 0.0072679 0.0042308 0.0093694 0.0121835 0.0263375 0.0111674 0.0067537 0.0145081 0.0022130 0.0159390 0.0122747 0.0074297 0.0435676 0.0298977 0.0339559 0.0095351 0.0060580 0.0067728 0.0116643 0.0566923 0.0135455 0.0294545 0.0232879 0.0161125 0.0134701 0.0067971 0.0069111 0.0132381 0.0154949 0.0064046 0.0168125 0.0266250 0.0083992 0.0204588 0.0078232 0.0064928 0.0174507 0.1405000 0.0562308 0.0067496 0.6930000 0.0053353 0.0231714 0.0036632 0.0079917 0.0049636 0.0184464 0.0073390 0.0420588 0.0013108 0.0171429 0.0037772 0.0081718 0.0347500 0.0615455 0.0069506 0.0172394 0.0030619 0.0017696 0.0014597 0.0102390 0.0110646 0.0413137 0.0140833 0.0069463 0.0310172 0.0012904 0.0186538 0.0190721 0.0074744 0.1007500 0.0307736 0.0513111 0.0109798 0.0174167 0.0069519 0.0132381 0.0263214 0.0053000 0.0462857 0.0731905 0.0230179 0.0093523 0.0068763 0.0078403 0.0168485 0.0201842 0.0027561 0.0566316 0.0057568 0.0079291 0.0370000 0.0095031 0.0056347 0.0201463 0.0077482 0.0081206 0.0120299 0.0113946 0.0108196 0.0112180 0.0112801 0.0118741 0.0111385 0.0118520 0.0120057 0.0108356 0.0140940 0.0119747 0.0109366 0.0118294 0.0121503 0.0103174 0.0106346 0.0122784 0.0100799 0.0131416 0.0114694 0.0137915 0.0115985 0.0103961 0.0131536 0.0135734 0.0151969 0.0104355 0.0110903 0.0124511 0.0137748 0.0129424 0.0129439 0.0116275 0.0098469 0.0126237 0.0126167 0.0099008 0.0108100 0.0101538 0.0104439 0.0106589 0.0099302 0.0108618 0.0112576 0.0082646 0.0094239 0.0103909 0.0131013 0.0088904 0.0069535 0.0172763 0.0184486 0.0071118 0.0132381 0.0041744 0.0255854 0.0211220 0.0162294 0.0068597 0.0129524 0.0120000 0.0199710 0.0220244 0.0082831 0.0109718 0.1058889 0.0249626 0.0150177 0.0050255 0.0282188 0.0091060 0.0573651 0.0047753 0.0013156 0.0055896 0.0058125 0.0032085 0.0058374 0.0146782 0.0089605 0.0081444 0.0087857 0.0332222 0.0020133 0.0711786 0.0150164 0.0083529 0.0050548 0.0051863 0.2492000 0.0163158 0.0129273 0.0198095 0.0082569 0.0147723 0.0149394 0.0189825 0.0018333 0.0042387 0.0067604 0.0077662 0.0247736 0.0159672 0.0083577 0.0203415 0.0043676 0.0184035 0.0279355 0.0130296 0.0070369 0.0222951 0.0218571 0.0551200 0.0282188 0.0091060 0.0106712 0.0453810 0.0317976 0.0320189 0.0052600 0.0410455 0.0062950 0.0307529 0.0046703 0.0014223 0.0058374 0.0059615 0.0035331 0.0060769 0.0336053 0.0096596 0.0118062 0.0093182 0.1245833 0.0021119 0.4982500 0.0004492 0.0053585 0.0073800 0.0058132 0.0232034 0.0120000 0.0245172 0.1560000 0.0101624 0.0066928 0.0186038 0.2164000 0.0026190 0.0003696 0.0083836 0.0061395 0.0201842 0.0205701 0.0062981 0.0139762 0.0045749 0.0209512 0.0197439 0.0156941 0.0058921 0.0155429 0.0089804 0.0222029 0.0167561 0.0081958 0.0084366 0.1133333 0.0224766 0.0166814 0.0079363 0.0214688 0.0090099 0.0543651 0.0079850 0.0007719 0.0045047 0.0049625 0.0013286 0.0047044 0.0169540 0.0046842 0.0043262 0.0061857 0.0360667 0.0044533 0.0560000 0.0096393 0.0032500 0.0008630 0.0047255 0.2468000 0.0145526 0.0217455 0.0217460 0.0078194 0.0130491 0.0253333 0.0220877 0.0022167 0.0028402 diff media Qmon 0.0205615 diff media Qmon 0.0212638 diff media diff media 0.0063750 0.0068571 0.0289434 0.0196885 0.0074015 0.0214756 0.0047866 0.0150702 0.0261129 0.0123556 0.0060443 0.0267541 0.0163571 0.0612800 0.0214688 0.0090099 0.0082055 0.0485714 0.0286310 0.0355660 0.0083067 0.0312273 0.0061906 0.0285294 0.0078095 0.0008345 0.0047044 0.0050897 0.0014630 0.0048974 0.0388158 0.0050496 0.0062713 0.0065606 0.1352500 0.0046713 0.3920000 0.0022032 0.0020849 0.0012600 0.0052967 0.0228983 0.0053000 0.0412414 0.1712500 0.0096239 0.0055739 0.0315472 0.2518000 0.0031667 0.0007087 Qval 0.0372381 Qval 0.0391020 diff media Hres 0.0115195 diff media Hres 0.0106755