Laureando Gianluca Tamasia

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Laureando Gianluca Tamasia"

Transcript

1 Facoltà di Scienze Matematiche Fisiche e Naturali Tesi di Laurea in Informatica Un tool per la didattica della programmazione lineare intera Laureando Gianluca Tamasia Relatore Prof. Luciano Gualà Correlatore Prof. Fabrizio Rossi Anno Accademico

2 2

3 Sommario SOMMARIO... 3 INDICE DELLE ILLUSTRAZIONI... 7 RINGRAZIAMENTI INTRODUZIONE I CONTENUTI CENNI DI TEORIA DI RICERCA OPERATIVA PROGRAMMAZIONE LINEARE E GEOMETRIA IL METODO DEL SIMPLESSO Il test di ottimalità Il tableau del simplesso L algoritmo La scelta di una base Le prestazioni LA TEORIA DELLA DUALITÀ Il passaggio al problema duale LA PROGRAMMAZIONE LINEARE INTERA Proprietà di integralità Rilassamenti ed euristiche L algoritmo branch & bound LA PROGETTAZIONE E L ARCHITETTURA DEL SOFTWARE I REQUISITI Rootn: il nome Un cambio dei requisiti in corso d opera

4 3.2 LO SVILUPPO Alcuni casi d uso L analisi Alcune criticità Dai casi d uso agli oggetti L AMBIENTE DI SVILUPPO Il tipo di applicazione L INTERFACCIA IL PARSER E L ANALIZZATORE LESSICALE Il file di definizione del linguaggio LE CLASSI PRINCIPALI Peso Fattori Vincolo Vincoli Problema ProblemaROOTN rootnui MatriceDiPesi Simplesso e BeB IL MANUALE DI ROOTN INSTALLAZIONE COMPATIBILITÀ UNO SGUARDO D INSIEME EDITOR DI PROBLEMI ROOTN Crea un nuovo file di problema Rootn Apre un file rtf precedentemente salvato

5 4.4.3 Salva il problema corrente Copia il testo selezionato Taglia il testo selezionato Incolla il testo selezionato Cerca testo Sostituisci testo Testo in grassetto Testo in corsivo Testo sottolineato Colore del testo Scelta della dimensione del Font Scelta del tipo del Font Il pulsante di Avvio del Problema LA GRAMMATICA DI ROOTN L inserimento del tipo del problema L inserimento della funzione obiettivo L inserimento dei vincoli L inserimento di Bound Il problema è terminato IL PANNELLO BRANCH & BOUND L algoritmo Branch & Bound implementato da Rootn Le informazioni di esecuzione del Branch & Bound I pulsanti di interazione Il grafico dell albero IL PANNELLO RISOLUZIONE GRAFICA Un esempio bidimensionale

6 4.7.2 Un esempio tridimensionale IL PANNELLO RISOLUZIONE ISTANTANEA Le preferenze generali di Glpk Le opzioni proprie dei problemi a variabili continue Le opzioni proprie dei problemi a variabili discrete Esportare il problema Le informazioni della lavagna IL PANNELLO RISOLUZIONE PASSO PASSO Fase I del simplesso Fase II del simplesso Le informazioni di esecuzione del simplesso CONCLUSIONI BIBLIOGRAFIA

7 Indice delle illustrazioni IL TABLEAU DEL SIMPLESSO IL TABLEAU DEL SIMPLESSI IN FORMA CANONICA RISPETTO ALLA BASE B UN ESEMPIO DI BRANCHING UN ESEMPIO DI ALBERO DECISIONALE UN ESEMPIO DI CASO D'USO CON UML UN ALTRO ESEMPIO DI CASO D'USO L'INTERFACCIA UTENTE IN FASE DI SVILUPPO IL FILE DI DEFINIZIONE DEL LINGUAGGIO "SCANNER.JFLEX" PARTE DEL FILE "PARSER.CUP" LA GERARCHIA DI ALCUNE CLASSI ROOTN IN FUNZIONAMENTO SU MICROSOFT WINDOWS VISTA ROOTN IN FUNZIONAMENTO SU MAC OSX LEOPARD PANNELLO "EDITOR DI PROBLEMI ROOTN" ESEMPIO AVVISO ALL'UTENTE PER PROBLEMA INAMMISSIBILE ESEMPIO DISEGNO 3D UN PASSAGGIO DELLA TRASFORMAZIONE AL PROBLEMA DUALE PROPOSTA DI SALVATAGGIO PER UN DOCUMENTO MODIFICATO IL MENÙ FILE FINESTRA PER L'APERTURA DI UN FILE DI PROBLEMA MENU EDITOR PROBLEMI FINESTRA CERCA TESTO FINESTRA PER LA SCELTA DEL COLORE SCELTA DELLA DIMENSIONE DEL FONT SCELTA DEL FONT FASE DI INSERIMENTO DEL PROBLEMA

8 DENOMINAZIONE AUTOMATICA DI VINCOLI E BOUND DEL PROBLEMA PRECEDENTE UN ESEMPIO DI PROBLEMA DI TIPO "PL01" ROOTN AVVISA L'UTENTE CHE IL PROBLEMA DI TIPO PL01 È IN FORMA DI MINIMO E VERRÀ TRASFORMATO NELLA FORMULAZIONE EQUIVALENTE IN FORMA DI MASSIMO IN QUESTO ESEMPIO È POSSIBILE VISIONARE IL PROBLEMA ORIGINALE IN FORMA DI MINIMO (EDITOR DI PROBLEMI) E LA SUA TRASFORMAZIONE AL MASSIMO (FRAME PROBLEMA) IN VERDE SONO RIPORTATE LE INFORMAZIONI RELATIVE AL SOTTOPROBLEMA APPENA RISOLTO OPZIONI DI INTERAZIONE UTENTE CON IL BRANCH & BOUND LA FINESTRA CHE MOSTRA IL PROBLEMA. NOTARE COME VENGANO RIPORTATE ANCHE LE VARIABILI CON PESO ZERO INFORMAZIONI SULLA SOLUZIONE DEL PROBLEMA DI BRANCH & BOUND ESEMPIO DI ALBERO DI BRANCH & BOUND ESEMPIO DEL TOOLTIPTEXT DEL NODO VISTA RAVVICINATA DELL'ALBERO DEL BRANCH & BOUND VISIONE D'INSIEME DI UN ALBERO DI BRANCH & BOUND UNO SGUARDO D'INSIEME DEL PANNELLO RISOLUZIONE GRAFICA SELEZIONE DEI VINCOLI DA DISEGNARE MODIFICA DEI CONFINI DEL PIANO CARTESIANO DISEGNATO ICONE 2D E 3D UN ESEMPIO DI DISEGNO 2D UN ESEMPIO DI DISEGNO TRIDIMENSIONALE UN ESEMPIO DI DISEGNO TRIDIMENSIONALE CON LA TRASPARENZA ATTIVATA VISIONE D'INSIEME DEL PANNELLO RISOLUZIONE ISTANATANEA IMPOSTARE LE PREFERENZE GENERALI DI RISOLUZIONE ISTANTANEA IMPOSTARE LE PREFERENZE DI RISOLUZIONE ISTANTANEA PER I PROBLEMI A VARIABILI CONTINUE IMPOSTARE LE PREFERENZE DI RISOLUZIONE ISTANTANEA PER I PROBLEMI A VARIABILI BOLEANE UTILITY PER L'ESPORTAZIONE DEL PROBLEMA IN ALTRI FORMATI

9 PANNELLO RISOLUZIONE ISTANTANEA - VARIABILI DI ENVIRONMENT PANNELLO RISOLUZIONE ISTANTANEA - TRADUZIONE DEL PROBLEMA IL PANNELLO DI RISOLUZIONE ISTANTANEA INTERCETTA L'OUTPUT DI GLPK UN ESEMPIO DI PROBLEMA ESPORTATO NEL FORMATO GNU LP ALGORITMO DEL SIMPLESSO - IL PASSAGGIO ALLA FORMA STANDARD FUNZIONE OBIETTIVO SIMPLESSO - PASSAGGIO ALLA FORMA STANDARD - VARIABILI SIMPLESSO - PASSAGGIO ALLA FORMA STANDARD - VINCOLI SIMPLESSO FASE I - CREAZIONE DEL PROBLEMA ARTIFICIALE SIMPLESSO FASE I - PORTARE IL TABLEAU IN FORMA STANDARD RISPETTO ALLA SBA SIMPLESSO FASE I - OPERAZIONE DI CARDINE SU DI UN PIVOT SIMPLESSO - FASE I - RIMUOVERE LA VARIBILE ARTIFICIALE DALLA BASE SIMPLESSO - FASE II - IL PROBLEMA VISUALIZZATO SIMPLESSO - FASE II - PORTARE IL TABLEAU IN FORMA STANDARD SIMPLESSO - FASE II - ELEMENTO PIVOT SIMPLESSO - FASE II - LA SOLUZIONE SIMPLESSO - LE INFORMAZIONI DI ESECUZIONE

10 Ringraziamenti Sono molti anni che penso a come scrivere questa pagina. Anni in cui il continuo ed incondizionato appoggio delle persone che mi vogliono bene mi ha stupito ripetutamente. Come potermi sdebitare in poche righe della silenziosa fiducia, che perfino io, in più di una occasione, ritenni malriposta? La mia gratitudine va, in primo luogo, a mio figlio Lorenzo, al quale ho indebitamente sottratto alcuni momenti della compagnia del padre, ma che, a modo suo, mi ha comunque spronato al raggiungimento di questo traguardo. A mia moglie Monica, che, negli anni, mi ha fattivamente insegnato quanto sia vera la massima di Seneca riportata in calce. A lei devo il costante supporto che mi ha permesso di superare i momenti di sconforto. Vorrei poi ringraziare i miei genitori, il cui incondizionato appoggio, di cui ho indebitamente goduto durante questo mio interminabile corso di studi, vorrei riuscire ad emulare, un giorno, nei confronti di mio figlio. Il mio pensiero va poi a Francesco, canuto compagno di studi e delle sventure universitarie. Se è vero che tutta la fatica fatta insieme e le innumerevoli notti insonni 10

11 che ci hanno portato qui oggi non ci serviranno a molto nella vita, è d altronde verissimo, amico mio, che ne è valsa la pena se tutto ciò è servito a farci conoscere. Un ultimo ringraziamento a chi ci ha seguito nella stesura di questa tesi permettendoci di concludere questo corso di studi. Grazie di cuore a tutti Gianluca Non fert ullum ictum inlaesa felicitas; at cui adsidua fuit cum incommodis suis rixa, callum per iniurias duxit nec ulli malo cedit, sed etiam si cecidit de genu pugnat. Seneca, de providentia. 11

12 1 Introduzione L idea di questa tesi è scaturita seguendo il corso di Ricerca Operativa del Professor Fabrizio Rossi, correlatore di questo lavoro. La materia mi è subito piaciuta per la sua applicabilità ai problemi decisionali concreti: finalmente una metodologia che insegna ad applicare la matematica, studiata per tanti anni, a situazioni reali. Senza dilungarsi in inutili lodi devo riconoscere, inoltre, che la passione con cui il professore ha tenuto il suo corso mi ha contagiato. Le sue lezioni sono sempre state volte a coinvolgere gli studenti, piene di esempi pratici ed esercizi svolti. D altra parte noi studenti di informatica non siamo capaci di stare lontani per troppo tempo da un personal computer e quindi il professore ha ritenuto opportuno segnalarci alcuni tool utili a verificare in proprio le esercitazioni. Ad una analisi dei suddetti tool, tuttavia, è emerso come detti strumenti fossero volti più che alla didattica, al settore applicativo. Ho riscontrato come i medesimi fossero orientati alla soluzione efficiente di problemi di programmazione lineare con centinaia tra variabili e vincoli, ma che producevano i risultati di tali elaborazioni senza fornire ne passaggi ne delucidazioni in merito. In effetti ricordo di averli accantonati, durante il corso, ritenendo che non potessero essermi utili a capire meglio gli algoritmi da utilizzare durante la soluzione manuale dei problemi di ricerca operativa affrontati. 12

13 Sarebbe stato comodo avere a disposizione uno strumento più didattico, capace di riprodurre, un passo per volta, le operazioni da intraprendere nello svolgimento degli esercizi. Devo dire che tra tutte le attività esercitate durante gli anni del mio Corso di Laurea in Informatica ritengo che quella che mi si addice maggiormente, sia il programmare. Non a caso anche nel mio ambito lavorativo, la Polizia delle Comunicazioni, dopo alcuni anni in cui sono stato impegnato in attività operativa, sono finalmente giunto ad occuparmi dello sviluppo di applicazioni utili a tutti i miei colleghi sparsi sul territorio nazionale. Così, all approssimarsi della scelta della tesi, ho proposto al Prof. Gualà la mia idea: sviluppare un software didattico per la ricerca operativa; uno strumento che potesse aiutare gli studenti universitari a comprendere i meccanismi di risoluzione dei problemi di programmazione lineare. Stante la mole del progetto il lavoro è stato suddiviso in due parti: la programmazione lineare intera, gestita interamente da me, ed oggetto di questa tesi, e la programmazione lineare (continua) oggetto della tesi di Francesco Cennamo. Numerose parti comuni sono state progettate di concerto, mentre la realizzazione pratica è stata ripartita uniformemente tra i due laureandi. 13

14 1.1 I contenuti Nel capitolo secondo viene inquadrata la ricerca operativa e vengono ripresi i concetti base di teoria necessari alla comprensione di questo lavoro. Vengono anche descritti gli algoritmi che sono alla base del funzionamento del software. Nel terzo capitolo viene descritto, a grandi linee, lo sviluppo del software e la sua architettura, anche in relazione alle componenti esterne integrate. Il quarto capitolo si può ritenere il manuale utente del software: all interno di esso vengono descritte con cura tutte le funzionalità presenti, nonché la procedura di installazione. 14

15 2 Cenni di teoria di Ricerca Operativa La Ricerca Operativa è la disciplina che concerne l utilizzo del metodo scientifico nei processi decisionali 1. È nota anche come teoria delle decisioni, scienza della gestione o, in inglese, operational research e indicata con le sigle RO o OR. 2 Caratteristiche del suo approccio sono l analisi e la modellizzazione dei sistemi, allo scopo di prevederne l evoluzione e/o di individuare le scelte che li facciano evolvere verso gli obiettivi desiderati. 3 In pratica fornisce strumenti matematici di supporto alle attività decisionali in cui occorre gestire e coordinare attività e risorse limitate al fine di massimizzare o minimizzare una funzione obiettivo. In prima istanza essa si occupa di formalizzare un problema in un modello matematico e successivamente, se possibile, calcolare la soluzione ottima. Essa costituisce un approccio scientifico alla risoluzione di problemi complessi, si può ricondurre all'ambito della matematica applicata ma presenta forti caratteristiche interdisciplinari relative in prevalenza a matematica, informatica, economia e finanza, ingegneria ed altre. Inoltre la ricerca operativa ha molte applicazioni commerciali soprattutto negli ambiti economico, infrastrutturale, logistico, militare, nella progettazione di servizi e di sistemi di trasporto e nelle tecnologie. Nel 1 Fabrizio Rossi, Dispense delle lezioni di Ricerca Operativa, lezioni 1-4, pag Fabrizio Rossi, Dispense delle lezioni di Ricerca Operativa, lezioni 1-4, pag

16 caso particolare di problemi di carattere economico, la funzione da massimizzare può coincidere con il massimo profitto ottenibile o con il minor costo da sostenere. La ricerca operativa riveste un ruolo importante nelle attività decisionali perché permette di operare le scelte migliori per raggiungere un determinato obiettivo rispettando vincoli che sono imposti dall'esterno e non sono sotto il controllo di chi deve compiere le decisioni 4. La branca che ci interessa della Ricerca Operativa tratta dell ottimizzazione. L'ottimizzazione si occupa di problemi formalizzabili come minimizzazione o massimizzazione di una funzione (detta funzione obiettivo) sottoposta a dei vincoli. Un problema di minimizzazione è sempre riconducibile ad un problema di massimizzazione, e viceversa. Tipicamente i problemi di ottimizzazione sono riconducibili ad un modello di programmazione matematica, la cui forma generica è: che rappresenta un problema con n variabili ed m vincoli. I vincoli e l'obiettivo sono funzioni reali a variabili vettoriali e possono anche rappresentare dei vincoli sul valore delle variabili (ad esempio di non negatività o di integralità)

17 I vincoli e l'obiettivo possono essere lineari, nel qual caso si parla di programmazione lineare o PL e il modello generico diventa: Questo tipo di problemi è di facile soluzione per mezzo di algoritmi generici come quello del simplesso. Tuttavia spesso nelle applicazioni le variabili sono vincolate ad assumere valori binari (nel qual caso si parla di programmazione0-1) o interi (programmazione lineare intera o PLI). In questi casi il problema può complicarsi e la soluzione non può essere generica ma si rende necessario lo studio del problema specifico e l'utilizzo di particolari tecniche risolutive come gli algoritmi Branch and Bound. 17

18 2.1 Programmazione Lineare e Geometria L insieme delle soluzioni ammissibili di un problema di Programmazione Lineare è individuato da disuguaglianze lineari, ognuna delle quali individua una regione dello spazio R N, che, a seconda si tratti di disuguaglianze o uguaglianze, prende il nome rispettivamente di semispazio affine e iperpiano affine. Si dice poliedro convesso l intersezione di un numero finito di semispazi affini e di iperpiani. Gli insiemi delle soluzioni ammissibili di un problema di PL sono quindi poliedri. ogni x P). Si dice politopo un poliedro P limitato (esiste cioè M > 0 tale che x M per Ogni poliedro ha un numero finito di vertici, e se si tratta di un politopo, ogni suo punto si può ottenere come combinazione convessa dei suoi vertici. Se l insieme P delle soluzioni ammissibili del problema di programmazione lineare min {c T x x P} è limitato, allora esiste almeno un vertice di P ottimo. Il fatto che la soluzione ottima di un problema di PL limitato corrisponda ad un vertice suggerisce il seguente procedimento di risoluzione: si parte con un vertice qualunque, quindi ci si sposta iterativamente su vertici vicini migliori fino ad arrivare ad un vertice (localmente e quindi globalmente) ottimo 5. Si noti che nel caso peggiore i vertici del poliedro sono n m = n! m! n m! e bisogna enumerarli tutti, a meno che non ci sia un modo efficiente per verificare 5 M. Fischetti, Lezioni di Ricerca Operativa, Edizioni Libreria Progetto, Padova, Cap. 3 18

19 l ottimalità di un vertice e passare da un vertice ad un altro solo se migliora il valore della funzione obiettivo. 19

20 2.2 Il metodo del simplesso 6 L'algoritmo del simplesso, ideato dall'americano George Dantzig nel 1947, è un metodo numerico per risolvere problemi di programmazione lineare. È citato dalla rivista americana Computing in Science and Engineering come uno dei dieci migliori algoritmi del secolo 7. L'algoritmo del simplesso è in grado di determinare di che tipo di poliedro si tratta e di trovare la soluzione ottima, visitando in maniera efficiente i vertici del politopo. L'algoritmo viene solitamente formulato su problemi posti nella così detta forma standard dove si deve cioè minimizzare una funzione lineare sottoposta a vincoli di uguaglianza, e in cui le variabili siano positive o nulle: MIN s.t. e. A tale formulazione si perviene facilmente aggiungendo variabili di eccesso (slack o surplus) ad un problema formulato in forma canonica: s.t. e Il test di ottimalità Dato il problema di programmazione lineare Roma, Francesco Cennamo, Un tool per la programmazione lineare, Tesi di laurea in informatica,

21 si consideri la base ammissibile B contenente colonne linearmente indipendenti di A. Si può riscrivere la relazione come: con F matrice contenente le colonne di A escluse dalla base ammissibile B. Ancora si può riscrivere la relazione precedente come: ed andando a sostituire la relazione nella funzione obiettivo relativa al problema iniziale si ha: con k valore costante e vettore dei costi ridotti. Sotto tali condizioni se il vettore dei costi ridotti risulta non negativo, la soluzione base ammissibile associata ad A risulta essere ottima. Ciò significa che il valore assunto dalla funzione obiettivo è il minimo globale per la funzione nel dominio considerato. 21

22 2.2.2 Il tableau del simplesso Il tableau del simplesso non è altro che una notazione compatta e potente per gestire tutti i dati utili alla soluzione del problema. Con la notazione vista in precedenza ha la seguente forma 8 : che premoltiplicando per B -1 diventa Il tableau del simplesso E sottraendo alla riga zero la matrice premoltiplicata per c T B 10 8 Fabrizio Rossi, Dispense delle lezioni di Ricerca Operativa, lezioni 5-7, pag Fabrizio Rossi, Dispense delle lezioni di Ricerca Operativa, lezioni 5-7, pag Fabrizio Rossi, Dispense delle lezioni di Ricerca Operativa, lezioni 5-7, pag

23 2.2 - Il tableau del simplessi in forma canonica rispetto alla base B Che è la rappresentazione canonica rispetto alla base B L algoritmo L'algoritmo si articola nei seguenti passi applicati al tableau: 1. Verifica di ottimalità. Condizione sufficiente perché la tabella sia ottima è che il vettore dei costi ridotti sia non negativo. 2. Se non si ha ancora una tabella ottima si sceglie una colonna h corrispondente al minimo fra i costi ridotti. Scegliendo la colonna, fissiamo la direzione verso cui ci sposteremo per andare a visitare un nuovo vertice del politopo candidato a diventare la soluzione ottima. 3. Verifica di illimitatezza. Condizione sufficiente perché il problema sia illimitato è che nella colonna h individuata si abbiano tutti valori negativi nella matrice, cioè. Dunque il problema è illimitato lungo questa direzione. 11 Fabrizio Rossi, Dispense delle lezioni di Ricerca Operativa, lezioni 5-7, pag

24 4. Se non siamo in presenza di un problema illimitato, si sceglie il pivot che genera il minimo rapporto tra il termine noto e il coefficiente della relativa variabile nella colonna h della matrice, cioè che chiameremo elemento di pivot. Questo rapporto indica la distanza del prossimo vertice del politopo nella direzione precedentemente individuata. 5. Applico l operazione di cardine sul pivot che prevede i seguenti sottopassi: La riga del pivot viene divisa per il peso del pivot. I valori nella colonna del pivot vengono azzerati per mezzo di una combinazione lineare con la riga del pivot. 6. Si torna al test La scelta di una base Finora abbiamo considerato un problema di programmazione lineare min {c T x Ax b, con x 0} in cui b 0 ed A contiene una matrice identità di ordine m. Quando questo non accade è necessario individuare una base ammissibile iniziale (se esiste, cioè se il problema non è impossibile). 24

25 Un metodo elegante, detto metodo delle due fasi, prevede di applicare due volte l algoritmo del simplesso: nella fase I si individua una base iniziale (se esiste), mentre nella fase II si risolve effettivamente il problema 12. Partendo dal problema in forma standard min {c T x Ax = b, con x 0} con b 0 si definisce il problema artificiale Il problema artificiale ha la stessa matrice dei vincoli del problema di partenza, alla quale è stata affiancata la matrice identità. Alle variabili originali del problema si sono aggiunte le variabili artificiali y 1,..., y m. La funzione obiettivo artificiale, w, è la somma di tutte le variabili artificiali. Si noti che il problema artificiale è già in forma canonica rispetto alla base ammissibile associata alle variabili artificiali. La funzione obiettivo può invece essere facilmente convertita in forma canonica, ricavando dal sistema le variabili y in funzione delle variabili fuori base x. È quindi possibile applicare direttamente l algoritmo del simplesso. Sia allora w * il valore ottimo della funzione obiettivo artificiale, ed indichiamo con (x*, y*) la soluzione ottima corrispondente. Si possono verificare due casi: 1. w* > 0. In questo caso non esiste alcuna soluzione del problema artificiale: il problema originale è dunque impossibile. 12 M. Fischetti, Lezioni di Ricerca Operativa, Edizioni Libreria Progetto, Padova, Cap. 3 25

26 2. w* = 0. In questo caso y* = 0, e quindi x* è una soluzione ammissibile del problema originale. In riferimento al tableau ottimo per il problema artificiale, si possono verificare due sottocasi: a. Tutte le variabili artificiali sono fuori base: eliminando le colonne del tableau che corrispondono alle variabili artificiali si ha allora un tableau (equivalente a quello iniziale) per il problema originale, già in forma canonica rispetto ad una base. A questo punto si sostituisce la funzione obiettivo artificiale con quella originale, si porta la funzione obiettivo in forma canonica (mediante semplici sostituzioni di variabili), e si risolve il problema originale con l algoritmo del simplesso. b. Esiste una variabile y h in base su di una qualche riga i: in questo caso si ha y h = 0 (dato che w* = 0), e quindi siamo in presenza di degenerazione. La situazione è la seguente: Se esiste un valore a ij 0 in corrispondenza di una variabile x j (j n), allora è sufficiente effettuare una operazione pivot in corrispondenza dell elemento (i,j). Dato che b j = 0, questa operazione è lecita anche se a ij < 0 e non comporta variazioni della 26

27 funzione obiettivo w. In questo modo si fa uscire dalla base y h. Ripetendo per tutte le y h in base ci si riconduce così al caso non degenere (a). Rimane un ultima possibilità: tutti i valori a i1,, a in sono nulli. In questo caso eliminando le colonne artificiali (operazione sempre lecita) si ottiene un tableau equivalente a quello originale, ma con una riga nulla. Questo implica che la matrice A non è di rango m, e quindi la riga i-esima del tableau corrente può essere eliminata senza problemi (la corrispondente equazione del sistema Ax = b era linearmente dipendente dalle altre) Le prestazioni In pratica l'algoritmo funziona molto bene, ma in teoria non è polinomiale e si possono costruire speciali istanze in cui l'algoritmo richiede di visitare un numero di vertici esponenziale nelle dimensioni del problema

28 2.3 La teoria della dualità dualità. Nella teoria dell'ottimizzazione è di fondamentale importanza il concetto di La dualità in ricerca operativa può essere interpretata come una corrispondenza tra due problemi formalizzati in un modello di programmazione lineare. Tipicamente una coppia di problemi duali ha lo stesso valore ottimo di funzione obiettivo (dualità forte) oppure il valore ottimo di un problema rappresenta una limitazione dell'altro. La forma di dualità più importante e più conosciuta è quella che associa due problemi di programmazione lineare (dualità lineare). Ad ogni problema di programmazione lineare primale in forma di minimo è associato un secondo problema di programmazione lineare duale in forma di massimo. I due problemi sono definiti su spazi diversi,ma hanno lo stesso valore ottimo della funzione obiettivo 14. È quindi, a volte, molto utile calcolare il problema duale a quello dato, perché la sua soluzione potrebbe essere più agevole dell originale

29 I problemi duali lineari hanno importanti proprietà: il duale del duale è il primale, cioè riconducendo il problema duale alla forma primale e applicando la corrispondenza di cui sopra si otterrà una formulazione equivalente del problema primale. valori obiettivo, i valori ottimi delle funzioni obiettivo dei due problemi coincidono ottimalità, in programmazione lineare esiste un modo per calcolare, data una soluzione (anche non ottima) del problema primale, la corrispondente soluzione duale. Questa proprietà viene utilizzata come procedura di decisione per l'ottimalità delle due soluzioni: se i corrispondenti valori della funzione obiettivo coincidono, la soluzione è ottima. L'algoritmo del simplesso sfrutta a pieno queste proprietà e lo stesso algoritmo, applicato implicitamente al problema duale, prende il nome di algoritmo del simplesso duale Il passaggio al problema duale I due problemi: min c T x Ax = b x 0 e max u T b c T u T sono detti problema primale e duale rispettivamente. A 29

30 Essi sono caratterizzati dagli stessi dati (la matrice A ed i vettori c e b), che però giocano ruoli diversi nei due problemi 15. Il problema duale ha un vincolo c j u T A j per ogni variabile x j del problema primale, ed una variabile u i per ogni vincolo a T i x = b i del problema primale. Il vettore b dei termini noti nel primale diventa il vettore dei costi per il duale, e viceversa il vettore c dei costi primali diventa il vettore dei termini noti nel duale. La matrice A si traspone passando al duale (scrivendo c T u T A come A T u c). Si noti che le variabili duali u i non sono vincolate in segno (sono moltiplicatori per le equazioni a T i x = b i ). Inoltre i vincoli del duale sono disuguaglianze. Più in generale, sia hanno le seguenti regole di trasformazione: 15 M. Fischetti, Lezioni di Ricerca Operativa, Edizioni Libreria Progetto, Padova, Cap. 4 30

31 2.4 La programmazione lineare intera Un problema di programmazione lineare intera (indicata con la sigla PLI) è un problema di programmazione lineare nel quale le variabili sono vincolate ad assumere valori interi. Un caso particolare, molto frequente, è la cosiddetta programmazione0-1 o programmazione binaria, nella quale le variabili sono vincolate ad assumere valori binari 16. Generalmente i problemi di programmazione lineare intera sono NP-Ardui, a meno che non godano della proprietà di integralità. Questo significa che molti problemi di PLI richiedono, al caso pessimo, un tempo di computazione della soluzione esponenziale rispetto alla dimensione dei dati in ingresso. In pratica si tratta di problemi "difficili" da risolvere. Tuttavia alcuni di questi problemi, di uso comune nelle applicazioni, sono stati studiati a fondo e oggi esistono delle tecniche che permettono di risolverli in tempo ragionevole nelle applicazioni più comuni. Tipicamente, poi, si cerca di ricondurre la soluzione di un problema di PLI "difficile" a quella di uno facile o già studiato; in questo modo è possibile affrontare una grande varietà di problemi. La forma generica di un problema di Programmazione Lineare Intera è:

32 2.4.1 Proprietà di integralità Quando in un problema di PLI si eliminano i vincoli si ottiene un problema di programmazione lineare detto rilassamento continuo. Se, inoltre, accade che le soluzioni ottime del problema originario siano anche soluzioni ottime del suo rilassamento continuo si dice che il problema gode della proprietà di integralità. In effetti la proprietà di integralità riguarda l'insieme ammissibile del problema più che il problema in sé. Infatti la funzione obiettivo del rilassamento continuo ha lo stesso valore di quella del problema originario sul suo insieme ammissibile e, inoltre, poiché è un problema di programmazione lineare ha sempre una soluzione ottima di vertice. Segue, quindi, che un problema ha la proprietà di integralità se la regione ammissibile del suo rilassamento continuo è stretta sull'insieme ammissibile originario; cioè, in termini geometrici, se coincide con il suo inviluppo convesso 17. come: Formalmente, quindi, definiamo l'insieme ammissibile del problema originario ; e il suo inviluppo convesso come:. Il problema, quindi, ha la proprietà di integralità se vale:

33 La proprietà di integralità è estremamente importante perché ci permette di applicare i metodi semplici e relativamente veloci per la risoluzione di un problema di programmazione lineare ad un problema di programmazione lineare intera. In altre parole di fronte ad un problema di PLI che gode della proprietà di integralità è possibile risolvere il suo rilassamento continuo ed ottenere una soluzione ottima per esso. Molti problemi di PLI che godono della proprietà di integralità sono ben conosciuti e molto utilizzati Rilassamenti ed euristiche Come già ribadito, spesso risolvere problemi di programmazione lineare intera può essere "difficile"; in questi casi si possono ottenere delle limitazioni superiori ed inferiori del valore ottimo della funzione obiettivo. Questo è molto importante sia perché a volte nelle applicazioni interessa il valore ottimo della funzione obiettivo, piuttosto che la soluzione ottima del problema, sia perché conoscere tale valore è fondamentale per utilizzare algoritmi di enumerazione implicita come gli algoritmi branch and bound. Prendiamo, quindi, in considerazione un problema di massimizzazione in programmazione lineare intera, facendo notare che il caso di minimizzazione è assolutamente equivalente. A partire da questo problema generico è possibile costruire uno o più problemi detti rilassamenti che forniscono una limitazione superiore del valore ottimo della funzione obiettivo. In altre parole il valore ottimo di un rilassamento è maggiore o 33

34 uguale al valore ottimo del problema originario; ovviamente questo è di una qualche utilità se il rilassamento è più facile da risolvere del problema originario 18. In generale un problema di programmazione matematica (P ' ) è un rilassamento di (P) se, e solo se, la sua regione ammissibile contiene quella di (P) e sulla loro intersezione i valori delle funzioni obiettivo coincidono L algoritmo branch & bound Un algoritmo per la risoluzione di un problema di PLI è noto con il nome di enumerazione implicita o branch & bound 19. Si tratta di un procedimento di tipo divide et impera che riconduce la risoluzione di un problema difficile di PLI alla risoluzione di due sottoproblemi, ancora di PLI ma più semplici. In generale sia min {c T x Ax = b, con x 0 e x Z } il problema di PLI originale (problema PLI 1 ). Si risolve il rilassamento continuo min {c T x Ax = b, con x 0}, individuando una soluzione base ottima x*. Se x* è intera non è necessario procedere ulteriormente. Altrimenti, si sceglie una variabile x* h frazionaria e si costruiscono i due sottoproblemi: PLI 2 : min {c T x Ax = b, x h x h, x 0 e x Z } PLI 3 : min {c T x Ax = b, x h x h, x 0 e x Z }

35 Ove x rappresenta l arrotondamento per difetto e x l arrotondamento per eccesso. Questa operazione viene detta di branching (ramificazione), e può essere rappresentata in modo grafico Un esempio di branching La variabile x h viene detta variabile di branching. Il problemi PLI 2 e PLI 3 si dicono figli di PLI 1 aggiungendo un vincolo di branching. 20 A questo punto si risolvono PLI 2 e PLI 3, in sequenza, riapplicando ricorsivamente il procedimento: per ciascuno dei due sottoproblemi, si risolve il rilassamento continuo e se necessario si effettua ancora l operazione di branching. Si ottiene così una successione gerarchica di sottoproblemi, via via più vincolati, e quindi più facili da risolvere. In figura 2.4 viene riportato l albero decisionale (branching tree) tipicamente utilizzato per descrivere il procedimento. 20 M. Fischetti, Lezioni di Ricerca Operativa, Edizioni Libreria Progetto, Padova, Cap. 5 35

36 2.4 - Un esempio di albero decisionale Il nodo 1 corrisponde al problema di PLI originale (nodo radice o root). Ciascun nodo figlio è ottenuto dal nodo padre aggiungendo il vincolo riportato sul ramo che li collega. In generale, i vincoli che caratterizzano il problema associato ad un dato nodo t sono: 1. I vincolo originali Ax = b, con x 0 x Z, ed inoltre 2. Tutti i vincoli di branching che si incontrano lungo l albero decisionale nel percorso che dal nodo radice conduce al nodo t. Consideriamo ora il problema della convergenza del metodo. Poiché, per ipotesi, x 0 : Ax = b } è limitato, il numero totale dei nodi dell albero decisionale è finito. Nel caso peggiore, tuttavia, questo numero può essere elevatissimo. Per esempio, si consideri il caso più semplice in cui 0 x j 1, x j Z, j 1,, n. Ad ogni operazione di branching si avrà dunque x h x h = 0 o x h x h = 1, e quindi in ogni caso la variabile x h risulterà fissata al valore 0 oppure 1. Man mano che si scende 36

37 lungo l albero decisionale il numero di variabili fissate aumenta e quindi, nel caso peggiore, l albero avrà profondità n e conterrà 2 n nodi foglia (più 2 n 1 nodi intermedi) Criteri di fathoming In pratica non è necessario considerare esplicitamente tutti i nodi potenzialmente presenti nell albero decisionale. Infatti, alcuni dei nodi foglia dell albero decisionale corrente possono corrispondere a problemi il cui rilassamento continuo è impossibile. Questo accade quando i vincoli iniziali x 0 : Ax = b }, risultano incompatibili con i vincoli di branching relativi al percorso che dal nodo radice conduce al nodo foglia in questione. Questi problemi non generano ovviamente figli. Lo stesso accade quando il rilassamento continuo PL t del nodo t corrente ha la soluzione ottima x* t intera. Siano infatti x OPT = soluzione ottima corrente (la migliore soluzione intera fin qui trovata) z OPT = c T x OPT = costo della soluzione ottima corrente. Se c T x PL t < z OPT allora si aggiorna z OPT = c T x PL t e x OPT = x PL ; in ogni t caso non è necessario analizzare ulteriormente il noto t corrente, e si considerano altri nodi dell albero decisionale 21. Esiste un terzo criterio, detto di bounding, che permette spesso di eliminare un gran numero di nodi dell albero decisionale. Supponiamo di aver risolto il rilassamento 21 M. Fischetti, Lezioni di Ricerca Operativa, Edizioni Libreria Progetto, Padova, Cap. 5 37

38 lineare continuo PL t del problema associato al nodo corrente t, e sia x PLt la soluzione ottima individuata. Se x PLt è frazionaria dovremmo procedere alla generazione dei figli del nodo t, nella speranza che essi permettano di individuare una soluzione intera migliore della soluzione ottima corrente x OPT. Prima di procedere, però, possiamo osservare che il valore LB t = c T x PLt costituisce una stima ottimistica (lower bound) del valore della migliore soluzione intera ottenibile a partire dal nodo t. Se LB t z OPT questa soluzione non potrà però essere migliore di quella corrente, e quindi non è necessario elaborare ulteriormente il nodo t. Riassumendo vi sono tre criteri di fathoming per dichiarare sondato il nodo t corrente, e quindi per evitare di considerarne in figli: 1. La soluzione x PLt del rilassamento è intera; 2. Il rilassamento continuo PL t è impossibile 3. LB t z OPT, ove LB t = c T x PLt e Z OPT è il costo della soluzione ottima intera corrente (criterio di bounding) Si noti che se c è intero, allora lo sarà anche z OPT. In questo caso è dunque lecito definire LB t = c T x PLt, il che può rendere più efficace il criterio di bounding. L uso del criterio di bounding non può garantire un miglioramento della complessità nel caso peggiore del procedimento. In pratica, tuttavia, esso permette spesso di eliminare gran parte dei nodi dell albero decisionale. Chiaramente questo è tanto più vero quanto più è stretta la formulazione iniziale del problema: i lower bound risultano più accurati e i criteri di fathoming più efficaci. 38

39 La scelta del nodo Una realizzazione dell algoritmo branch & bound deve stabilire la regola con cui selezionare il nodo da elaborare nell iterazione corrente. Vi sono due tecniche principali per la visita dell albero decisionale: Tecnica depth first (prima i nodi più profondi). Si sceglie sistematicamente il nodo non ancora elaborato più profondo, simulando un procedimento di tipo ricorsivo: dato un nodo padre si considera immediatamente il secondo dei due figli, finché una condizione di fathoming non costringe l algoritmo a risalire di livello: Vantaggi: l implementazione è tipicamente più semplice, in quanto può sfruttare la ricorsività del linguaggio di programmazione. Svantaggi: in caso di scelta errata si ritorna indietro solo dopo aver attraversato tutto il sottoalbero sbagliato. Tecnica best-bound first. La scelta del nodo da elaborare viene fatta scegliendo il nodo t non ancora elaborato con LB t minimo e quindi verosimilmente più vicino alla soluzione ottima. Vantaggi: tipicamente vengono generati meno nodi. 39

40 Svantaggi: l elaborazione tende a rimanere a livelli poco profondi dell albero decisionale, e quindi i problemi sono poco vincolati e difficilmente portano ad una aggiornamento della soluzione ottima corrente M. Fischetti, Lezioni di Ricerca Operativa, Edizioni Libreria Progetto, Padova, Cap. 5 40

41 3 La progettazione e l architettura del software 3.1 I Requisiti L idea alla base dei requisiti è semplice: un software di impostazione didattica, fortemente interattivo, che aiuti gli utenti a comprendere i meccanismi di risoluzione degli esercizi tipici del Corso di Ricerca Operativa. In primo luogo, il software deve poter essere utilizzato sui principali sistemi operativi disponibili. Il software deve dare la possibilità all utente di immettere un problema di programmazione lineare o di programmazione lineare binaria. Detta immissione deve esulare dall apprendimento da parte dell utente di una grammatica proprietaria. Il linguaggio dei problemi deve, anzi, essere il più vicino possibile a quello utilizzato nei testi di ricerca operativa. È importante che il software accetti l immissione di termini interi, di numeri frazionari e di numeri con la virgola. In particolare per quanto riguarda l immissione di numeri frazionari è doveroso che le frazioni rimangano tali durante i vari passaggi della soluzione del problema. Il software deve avere caratteristiche tali da poter essere utilizzato dal docente durante le esercitazioni compiute in classe, in modo da poterlo coadiuvare nella spiegazione degli esercizi proposti. A tal proposito, l interfaccia grafica riveste un ruolo fondamentale: deve potersi adattare in modo da rendersi leggibile anche in contesti difficili come la proiezione su grandi schermi a distanza notevole. 41

42 I problemi immessi devono poter essere facilmente salvati e recuperati in modo da dare la possibilità sia agli studenti che al professore di crearsi una libreria di problemi. Il professore potrà, in questo modo, distribuire agli studenti una serie di esercizi significativa dal punto di vista della comprensione dei meccanismi di risoluzione. Gli studenti, dal loro canto, potranno facilmente richiedere informazioni al professore circa i passaggi che rimangono loro oscuri, inviando al medesimo direttamente il file del problema. Al software si richiede, inoltre, che agevoli l importazione e l esportazione dei problemi in altri formati. In particolare, per quanto riguarda l importazione, si richiede l interoperabilità con altri sistemi di immissione di testi. Si pensi a voler immettere, senza riscriverlo pedissequamente, il testo di un problema preso da un browser web, o da un file pdf, o dalle slide distribuite dal professore. Per quanto riguarda l esportazione si pensi al caso in cui il problema inserito risulti di dimensioni tali da sconsigliarne la risoluzione mediante strumenti orientati alla didattica. Si dovrà quindi dotare il software delle funzionalità apposite per l esportazione del problema nei formati più conosciuti. Il software, ove possibile, dovrà permettere all utente di sbagliare, pur suggerendo la scelta corretta. In questo modo lo studente potrà vedere a quali conseguenze si giunge facendo una scelta piuttosto che un altra. Il software, dovrà subito indicare all utente se il problema immesso e sul quale intende esercitarsi è impossibile o illimitato, in modo che questo sia ben presente durante il tentativo di risoluzione. 42

43 Per quanto riguarda i problemi a 2 o 3 variabili il software dovrà essere in grado di visualizzare in forma grafica gli iperpiani affini al problema da risolvere. Si richiede altresì che il software permetta di decidere quali vincoli (e, quindi, quali iperpiani affini) disegnare. Dovrà essere possibile all utente fornire i limiti del piano o dell area da visualizzare in modo da poter evidenziare la parte di disegno più significativa. Il software deve poter gestire le tre classi di problemi principali visti durante il corso di ricerca operativa: Il metodo del simplesso Il passaggio al problema duale Il branch & bound Per quanto riguarda il branch & bound il software deve essere strutturato in modo che sia possibile compiere un passo per volta. Ogni passo deve essere commentato in modo tale che l utente sia sempre consapevole di cosa sta succedendo. In particolare l utente deve avere a disposizione l elenco dei problemi non ancora affrontati, la variabile su cui si effettua l eventuale branching, la soluzione e il valore della funzione obiettivo del rilassamento del sottoproblema analizzato. Deve essere visualizzato, inoltre, l albero decisionale con l indicazione di quali variabili sono state fissate, della soluzione di tutti i sottoproblemi già affrontati e del relativo valore della funzione obiettivo. La visualizzazione dell albero deve essere intuitiva: i sottoproblemi inammissibili, quelli ottimi e quelli potati per bound devono riconoscersi a prima vista. 43

44 Deve essere possibile anche visualizzare in dettaglio singole parti dell albero o avere una visione d insieme di tutto l albero. Il software deve poter permettere all utente di impostare la modalità con cui scegliere il successivo sottoproblema da risolvere: deep first o best bound first. Il software deve poter permettere di ripetere l esercizio dall inizio. Per quanto riguarda il passaggio al problema duale, il software deve guidare l utente nella trasformazione passo passo del problema inserito nel problema duale associato. Devono essere visualizzati contemporaneamente il problema originale e il duale, evidenziando, in qualche modo, quali elementi del problema originale concorrono alla definizione del problema duale. Deve essere anche possibile, alla fine di questo procedimento, utilizzare il problema duale come problema principale. Per quanto riguarda il simplesso il software deve dare l opportunità all utente di portare il problema in forma standard e poi presentare le due fasi del metodo del simplesso. L utente deve poter scegliere un pivot qualsiasi, ma il software dovrà suggerirgli quello corretto. Come già accennato è importante che i numeri immessi in forma di frazioni rimangano tali, se possibile, durante lo svolgimento del simplesso, in modo che lo studente non rimanga spiazzato da continue sostituzioni. 44

45 3.1.1 Rootn: il nome Al software, inizialmente nato con l idea di essere distribuito sotto forma di Java Web Application, è stato attribuito l acronimo R.O.O.T.N. che sta per Ricerca Operativa On The Net Un cambio dei requisiti in corso d opera. Durante una delle revisioni del progetto avvenuta con il correlatore Prof. Rossi è emerso come fosse necessario dotare il software di un risolutore professionale per i problemi di ricerca operativa. L esigenza nasce dal fatto che le versioni studiate a lezione del metodo del simplesso, implementate da Rootn, essendo di tipo didattico, non contemplano tutti i casi speciali che si possono presentare durante l algoritmo, ma solo i più significativi. Inoltre tale interfaccia poteva essere utile per utilizzare Rootn anche al fine di gestire problemi troppo complessi per una risoluzione didattica. Il professor Rossi ha così formulato il nuovo requisito dell integrazione in Rootn del progetto Glpk. Essendo il progetto Glpk scritto in C, e quindi da compilare separatamente a seconda del sistema operativo, il requisito di portabilità di Rootn ha vacillato. Rootn è quindi passato in corso d opera dall essere una Java Web Application ad una applicazione Java di tipo tradizionale, cosa che ci ha permesso di creare 45

46 pacchetti di installazione proprietari per le varie piattaforme software nelle quali includere le corrette versioni di Glpk. Il nome del software, tuttavia, ormai codificato sia nell interfaccia che nelle classi già scritte, è rimasto tale: R.O.O.T.N. 3.2 Lo sviluppo Alcuni casi d uso Sono stati definiti in prima istanza i casi d uso principali del sistema. Sono molti e tutti molto simili. Ne voglio riportare solo un paio a titolo di esempio Un esempio di caso d'uso con UML In questo caso d uso l attore studente vuole risolvere un problema di PL con un metodo didattico. Questo caso d uso include, logicamente, quello di immettere un problema corretto, e questo si può fare scrivendo un nuovo problema o caricandone uno dal disco. 46

47 3.2 - Un altro esempio di caso d'uso Qui vediamo l attore studente che scrive un nuovo problema, che può essere di programmazione lineare binaria o continua, eventualmente può decidere di salvarlo per un riutilizzo futuro L analisi Alcune criticità Dall analisi dei casi d uso è sono emerse le seguenti criticità: Interfaccia utente molto articolata Complessità del modello matematico Robustezza delle implementazioni degli algoritmi di risoluzione, con enfasi alla gestione dei casi particolari Tempistica 47

48 3.2.3 Dai casi d uso agli oggetti Si è poi proceduto all analisi dei casi d uso per estrapolare gli oggetti coinvolti nel sistema. Una prima definizione ha portato ad una situazione in cui gli oggetti individuati erano una moltissimi. Successivamente, sono stati eliminati oggetti duplicati e non rilevanti, mentre alcuni sono stati aggregati come attributi di altri. l ereditarietà. Sono state poi individuate le relazioni tra gli oggetti e si è organizzata 48

49 3.3 L ambiente di sviluppo Per lo sviluppo di Rootn si è deciso di utilizzare il linguaggio di programmazione Java, giunto alla sua versione 1.6. La scelta è ricaduta su questo linguaggio per merito della sua portabilità sulle varie piattaforme software disponibili sul mercato, requisito fondamentale di Rootn. Il Java, inoltre, essendo un linguaggio di programmazione ad oggetti, si presta molto bene alla codifica di software che integrino una forte componente di modellazione, in questo caso di strutture matematiche. Per quanto riguarda l IDE la scelta è ricaduta sul celebre NetBeans (versione 6.0), dotato di moltissime funzionalità, ma non invasivo nella scrittura del codice. 49

50 3.3.1 Il tipo di applicazione La prima ipotesi circa il tipo di applicazione da sviluppare è stata quella di creare una Web Application. Vantaggi: Massima portabilità, semplice manutenibilità del codice, installazione non necessaria. Svantaggi: Interfaccia utente elementare, elaborazione server-side, limitato accesso alle risorse locali, problemi con l utilizzo di librerie proprietarie, il client necessita di connessione ad internet. Non è stato possibile decidere per una Web Application soprattutto a causa delle limitazioni imposte dall interfaccia web: una delle criticità di Rootn è stata individuata, infatti, dalla complessità dell interfaccia grafica. Anche la computazione sever-side poteva costituire un problema, in quanto il carico di elaborazione è piuttosto pesante (il simplesso e il branch & bound sono problemi NP-Ardui) e, durante le esercitazioni in classe era previsto l accesso simultaneo di numerosi utenti. tipo Applet. Queste limitazioni mi hanno fatto pensare di sviluppare per una applicazione di Vantaggi: Massima portabilità, semplice manutenibilità del codice, installazione non necessaria, interfaccia utente buona, elaborazione client-side Svantaggi: limitato accesso alle risorse locali, impossibilità di utilizzare librerie proprietarie, il client necessita di connessione ad internet. 50

51 Le differenti versioni di Java supportate dai vari browser tradiscono il paradigma WORE (Write Once Run Everywhere) costringendo di fatto a scrivere versioni differenti dell applicazione a seconda dei contesti in cui si opera. Successivamente il tipo di applicazione Applet è stato definitivamente accantonato quando si è compreso che Rootn avrebbe dovuto utilizzare le librerie C di Glpk e lanciare processi locali; queste due operazioni sono infatti escluse alle applet per ragioni di sicurezza. Infine non era garantito che gli utenti avessero sempre a disposizione una connessione ad internet per lanciare l applet. Rootn è quindi stato scritto come una Java Web Start Application, in modo da riuscire a coniugare i benefici di avere una applicazione con tutti i diritti sul computer sul quale gira, ma anche essere facilmente manutenibile. 3.4 L interfaccia Una delle parti più complesse di Rootn è l interfaccia utente. In primo luogo essa subisce pesanti modifiche durante l esecuzione del programma, si pensi alla costruzione dell albero del branch & bound, o alla parte estremamente interattiva della risoluzione passo passo con il metodo del simplesso. Secondariamente l interfaccia deve poter essere correttamente visualizzata sui vari sistemi operativi, cosa che, pur essendo in teoria garantita dalla portabilità del linguaggio java, di fatto non è stata riscontrata. In particolare le specifiche di Rootn 51

52 riguardo l alta leggibilità ci hanno costretto a testare il comportamento dell interfaccia su vari sistemi, effettuando modifiche ove necessario. L interfaccia principale di Rootn è disegnata nella classe RootnUI, che estende la classe JFrame ed è articolata in cinque pannelli secondari, ognuno dei quali gestisce una classe di funzionalità del programma. La pressione un pulsante, la scelta della corrispondente funzionalità dal menù o la pressione dell opportuna combinazione di tasti chiamano le stesse funzioni L'interfaccia utente in fase di sviluppo 52

53 3.5 Il parser e l analizzatore lessicale 23 Per l inserimento dei problemi da parte dell utente si rendeva necessario definire un linguaggio proprietario. Si voleva comunque evitare che lo studente fosse costretto ad impararne i costrutti prima di poterlo utilizzare, a scapito dell usabilità di Rootn. Si è così deciso di definire il linguaggio dei problemi accettato da Rootn quanto più vicino possibile a quello usuale della ricerca operativa. Ho quindi deciso di affidarmi ad un generatore di automatico analizzatori lessicali JFlex, progetto open source disponibile all indirizzo internet Le principali motivazioni sono state l efficienza, la robustezza, ed il fatto che chiunque, senza troppi sacrifici, avrebbe potuto, in un secondo tempo, modificare il linguaggio accettato da Rootn. Lo stesso dicasi per quanto riguarda la sintassi: la scelta è ricaduta sul generatore automatico di parser Cup, anch esso open source e disponibile all indirizzo internet Il file di definizione del linguaggio. Questo file ha la funzione di definire quali siano le parole accettate dal linguaggio dell analizzatore lessicale. JFlex lo utilizza per produrre lo specifico analizzatore lessicale che ho poi integrato in Rootn. 23 Francesco Cennamo, Un tool per la programmazione lineare, Tesi di laurea in informatica, Roma,

54 Se ne riporta uno stralcio commentato: Il file di definizione del linguaggio "Scanner.jflex" Nella prima parte (linee 1-10) vengono definite le macro del linguaggio. Per esempio il significato della riga 3 è: l oggetto chiamato {intero} è costituito o dal carattere 0 oppure da una sequenza di numeri che però non può cominciare con zero. Nella seconda parte viene definito cosa viene passato all analizzatore della sintassi dopo che l analizzatore lessicale ha riconosciuto una determinata sequenza di caratteri. Ad esempio nella riga 27 si dice che se si riconosce un numero con la virgola, si comunica che il tipo rinvenuto è sym.real ed il suo valore è un nuovo Float inizializzato con il valore della stringa rinvenuta (YYTEXT). 54

55 Una volta riconosciute le singole parole, spetta all analizzatore sintattico JCup, in base al file, cui uno stralcio si riporta nella figura 3.5, verificare la correttezza dell espressione immessa dal punto della grammatica Parte del file "Parser.cup" In questo file è definita la grammatica: ad esempio alla riga 33 e 34 si indica che un problema comincia con un tipo (PL o PL01), prosegue con i due punti, poi con la funzione obiettivo, i vincoli e il carattere di terminazione del problema. Per modificare la grammatica è quindi è sufficiente operare su questi due file che ricompilati provvedono a generare i nuovi file Parser.java, Sym.java e ScannerInput.java che vanno inseriti nella directory dei source di Rootn. 55

56 3.6 Le classi principali La struttura delle classi, che annovera più di trenta classi, è piuttosto complicata, ma rispecchia la struttura naturale dei problemi di ricerca operativa. L elemento di base è la classe Peso, che gestisce tutti i numeri inseriti nel problema: interi, frazionari e reali. La classe Variabile gestisce i nomi delle variabili, mentre Fattore è costituita dalla coppia Peso, Variabile. Risalendo nella gerarchia troviamo poi la classe Fattori, e così via Vincolo, Vincoli, FunzioneObiettivo e Problema. Vediamo alcune delle principali funzioni delle classi. 56

57 3.6 - La gerarchia di alcune classi

58 3.6.1 Peso Come accennato la classe Peso è stata pensata e scritta per rispondere al requisito di avere il controllo totale sulla propagazione dei numeri frazionali nel tableau del metodo del simplesso. In particolare un Peso può essere di tipo intero, frazionario o reale. In quest ultimo caso la variabile privata isfloat è impostata sul valore vero. Come si può vedere dalla figura 3.6 tutte le operazioni di base sono state riscritte. Si noti l esplicita presenza della funzione semplifica che viene chiamata, solo quando necessario, in modo da cercare di utilizzare, quando possibile, le frazioni non semplificate. Logicamente tutto ciò avviene a discapito delle prestazioni, che comunque, nei casi concreti, rimangono buone. Le specifiche del software, comunque, rivolte soprattutto alla questione didattica, non consideravano minimamente l argomento prestazionale Fattori Questa classe gestisce il corretto inserimento delle variabili in tutte le strutture atte a contenerle, come i vincoli o la funzione obiettivo. Attraverso un paio di metodi specifici di inserimento le variabili vengono inserite in queste strutture in modo coerente: se l utente inserisce all interno di un vincolo, ad esempio, l espressione 2x1 + x2 3x1 sono i metodi di inserimento di

59 questa classe che provvederanno ad effettuare la somma dei fattori con la stessa variabile Vincolo tipo Peso. Un Vincolo è una serie di fattori, seguita da un segno e da un termine noto di La classe Vincolo gestisce, fra le altre cose, la differenza tra i Vincoli e Bound. Se un vincolo rappresenta un Bound la variabile booleana issemplice è settata a vero. Questa classe si occupa poi della nomenclatura dei vincoli, gestendo l eventuale assegnazione di un nome automatico Vincoli Vincoli è una struttura dati atta a contenere tutti i vincoli del problema. Si noti, in particolare, la presenza di due funzioni per l inserimento dei nuovi vincoli; il primo denominato addvincolo() aggiunge i vincoli nella struttura in coda ed è utilizzato in tutte le parti di Rootn tranne che nella fase di parsing iniziale. Il parser, infatti, per sua natura, riconosce le strutture solo dopo averle lette completamente e quindi comincia ad aggiungere i vincoli in ordine inverso rispetto al quale sono stati inseriti dall utente. La funzione addvincoloparser() inverte l ordine di inserimento ripristinando la situazione naturale. 59

60 3.6.5 Problema È la classe che individua tutte le informazioni di un problema. Contiene una funzione Obiettivo, dei vincoli e una variabile di tipo per indicare se si tratta di un problema a variabili continue o a variabili booleane ProblemaROOTN Estende la classe problema con una serie di informazioni aggiuntive, come il vettore soluzione, il valore all ottimo della funzione obiettivo. Contiene tutte le funzioni di traduzione del problema negli altri formati rootnui È la classe che definisce l interfaccia grafica. Estende i JFrame e gestisce l interazione dell utente MatriceDiPesi È una classe di utilità che contiene un algebra matriciale per la classe Peso Simplesso 24 e BeB Branch & Bound. Sono le classi che gestiscono rispettivamente la logica del Simplesso e del 24 Francesco Cennamo, Un tool per la programmazione lineare, Tesi di laurea in informatica, Roma,

61 4 Il manuale di ROOTN ROOTN è un software didattico e quindi il lavoro compiuto per renderlo più usabile e comprensibile comprende la stesura di questo manuale utente. Anche a questo artefatto si è cercato di dare una impronta didattica in modo da risultare più leggibile da parte degli studenti che intendessero utilizzare il software per le loro esercitazioni di ricerca operativa. 61

62 4.1 Installazione 25 ROOTN è scritto in java, affinché abbia la massima portabilità, e quindi, di per sé, non richiede particolare attenzione nella fase di installazione. Il file ROOTN.JAR che viene distribuito contiene al suo interno tutti i componenti necessari al suo funzionamento. È comunque logicamente necessario disporre di un personal computer dotato di una Java Virtual Machine. ROOTN è stato sviluppato con la Java Standard Edition versione 1.6 ed è stato altresì testato con successo su sistemi dotati della più obsoleta versione 1.5. Per chi non dovesse avere la Java Virtual Machine è possibile scaricarla da internet seguendo il link Versioni precedenti alla JRE 1.5 non sono supportate in quanto ROOTN si avvale di alcune funzionalità del linguaggio introdotte in tale versione. In particolare sono stati utilizzate con successo le funzioni di autoboxing, il nuovo costrutto for applicato alle Collection e i tipi parametrizzati (Generics). Al fine di rendere possibile il disegno 3D ROONT si avvale dell API Java 3D disponibile all indirizzo internet ROOTN si avvale per il suo corretto funzionamento anche delle librerie Glpk, progetto open source disponibile all indirizzo internet 25 Francesco Cennamo, Un tool per la programmazione lineare, Tesi di laurea in informatica, Roma,

63 In effetti ROOTN dispone di algoritmi propri per la soluzione dei problemi, tuttavia, il correlatore Prof. Rossi ci ha suggerito di utilizzare anche Glpk, in quanto più robusto nella gestione dei casi particolari che possono presentarsi. Glpk è scritto in C e quindi necessita di essere compilato ed installato separatamente sui vari sistemi operativi su cui gira ROOTN. passi: Ricapitolando, per l installazione di ROOTN è necessario svolgere i seguenti 1. Installazione JVM 1.5 o successiva 2. Installazione API Java 3D 3. Installazione Glpk 4. Installazione Rootn 63

64 4.2 Compatibilità Una delle specifiche iniziali del progetto è stata quella della portabilità del software oggetto di questa tesi sui vari sistemi operativi, in modo da garantire agli studenti la possibilità di esercitarsi sui propri personal computer. ROOTN è stato testato con successo sui seguenti sistemi operativi: Microsoft Windows XP Microsoft Windows Vista & Vista64 Max OSX Leopard 26 Linux Ubuntu Rootn in funzionamento su Microsoft Windows Vista 26 Francesco Cennamo, Un tool per la programmazione lineare, Tesi di laurea in informatica, Roma,

65 Eventuali problemi di compatibilità di ROOTN sono da eventualmente da ricercarsi nelle librerie Glpk. In caso di malfunzionamenti si rimanda al sito internet del progetto Glpk e si raccomanda di scaricare i sorgenti C e compilarli appositamente per il proprio sistema operativo Rootn in funzionamento su MAC OSX Leopard Francesco Cennamo, Un tool per la programmazione lineare, Tesi di laurea in informatica, Roma,

66 4.3 Uno sguardo d insieme Rootn si presenta con una interfaccia principale dotata di un menù e di vari pannelli che ospitano la principali funzioni del programma Pannello "Editor di Problemi Rootn" All apertura viene visualizzato il pannello denominato Editor dei problemi Rootn dove è possibile scrivere il problema da sottoporre al risolutore. In effetti si tratta di un vero e proprio editor rtf 28 dotato di varie funzionalità. 28 Rich Text Format (spesso abbreviato RTF) è un formato per documenti multipiattaforma, sviluppato da Microsoft nel lontano La maggior parte degli editor di testo e dei word processor disponibili per Microsoft Windows, Mac OS e Linux sono in grado di leggere e scrivere documenti RTF. 66

67 Una volta inserito un problema sintatticamente corretto all interno dell editor è possibile accedere agli altri pannelli. In primo luogo Rootn verifica se il problema inserito è ammissibile o illimitato e lo segnala all utente Esempio avviso all'utente per problema inammissibile A secondo del tipo di problema inserito si rendono accessibili o meno le varie funzionalità del programma. In particolare se si tratta di un problema di programmazione lineare a variabili boleane viene selezionato il pannello denominato Branch & Bound dove l utente viene guidato passo passo nella risoluzione del problema inserito mediante questa tecnica. Se il problema è a variabili continue viene selezionato il pannello Risoluzione Passo Passo dove l utente si può cimentare, invece, nell algoritmo del simplesso. Il pannello denominato Risoluzione Grafica si rende disponibile solo se il problema inserito ha un numero di variabili pari a due o tre e permette di visualizzare, 67

68 rispettivamente in due o tre dimensioni, i vincoli del problema inserito e la funzione obiettivo. visualizzazione Esempio disegno 3D In questo pannello è possibile decidere quali vincoli stampare e settare l area di Il pannello denominato Passaggio al Duale viene mostrato per qualsiasi problema immesso e guida interattivamente l utente alla trasformazione del problema originale nel suo duale. Una volta compiuti tutti i passi per giungere al calcolo del problema duale è possibile settare quest ultimo come problema principale. 68

69 4.6 - Un passaggio della trasformazione al problema duale Il pannello denominato Risoluzione Istantanea fornisce una interfaccia grafica per le librerie Glpk. Da questo pannello è possibile settare tutti i parametri di Glpk e poi premere il pulsante Risolvi. Viene così mostrato nel pannello scorrevole l output di Glpk. È inoltre possibile esportare il problema in vari formati. 69

70 4.4 Editor di problemi ROOTN Questo è l unico pannello visibile all avvio del programma oltre al pannello Aiuto & Informazioni. È possibile utilizzare l editor per inserire il proprio problema. Il problema deve essere conforme alle regole grammaticali del linguaggio Rootn, descritte in dettaglio nel prossimo paragrafo. L editor di problemi è conforme allo standard rtf 29. Ecco una descrizione delle funzioni disponibili Crea un nuovo file di problema Rootn. Se è già presente un problema nella lavagna ne propone l eventuale salvataggio e solo in seguito pulisce la lavagna in attesa dell input dell utente. 29 Rich Text Format (spesso abbreviato RTF) è un formato per documenti multipiattaforma, sviluppato da Microsoft nel lontano La maggior parte degli editor di testo e dei word processor disponibili per Microsoft Windows, Mac OS e Linux sono in grado di leggere e scrivere documenti RTF. 70

71 tasti Ctrl + N Proposta di salvataggio per un documento modificato Questa funzione è accessibile anche dal menù File o con la combinazione di Il menù File Apre un file rtf precedentemente salvato Se è già presente un problema nella lavagna ne propone l eventuale salvataggio e solo in seguito mostra all utente una finestra in cui è possibile selezionare il file all interno del File System del computer. 71

72 4.9 - Finestra per l'apertura di un file di problema È possibile scegliere i tipi di file da visualizzare all interno della finestra di scelta: solo file rtf o tutti i file. Nel secondo caso bisogna porre attenzione al fatto che l editor gestisce correttamente solo i file conformi alle specifiche rtf. Per importare un file di natura diversa, aprirlo con un editor in grado di visualizzarlo correttamente, selezionare il testo che interessa, copiarlo nella clipboard (in genere CTRL + C o Copia dal menù Modifica) e, passati nell editor di Rootn, creare un nuovo problema e incollare il testo. Infine, per rendere il file disponibile successivamente, salvarlo nel formato rtf. tasti Ctrl+A. Questa funzione è accessibile anche dal menù File o con la combinazione di 72

73 4.4.3 Salva il problema corrente. Per mezzo di questa funzione è possibile salvare il problema corrente nel formato rtf. Se il problema non è mai stato salvato in precedenza (problema nuovo) viene aperta la finestra che permette di scegliere il nome del file e la posizione del medesimo all interno del File System. Attenzione! Se il problema ha già associato un file (ad esempio è stato modificato un problema dopo averlo caricato da un file) il salvataggio sostituisce il file esistente! È possibile, anche in questo caso, salvare il problema senza utilizzare l estensione rtf, tuttavia il salvataggio sarà comunque conforme a queste specifiche. Per esportare il problema in un altro formato vedere il paragrafo di tasti Ctrl + S. Questa funzione è accessibile anche dal menù File o mediante la combinazione Copia il testo selezionato. Questo pulsante permette di memorizzare nella clipboard il testo correntemente selezionato. La funzione è disponibile anche dal menù Editor Problemi o con la combinazione di tasti Ctrl+C 73

74 Menu Editor Problemi Taglia il testo selezionato Questo pulsante copia il testo memorizzato nella clipboard, analogamente alla funzione Copia, ma dopo averlo copiato lo elimina dalla lavagna. È utilizzabile anche dal menu Editor Problemi o con la combinazione di tasti Ctrl + X Incolla il testo selezionato Questa funzione permette di incollare il contenuto degli appunti nella posizione corrente della lavagna. Se del testo è selezionato quando si preme questo 74

75 pulsante il testo viene sostituito con quello presente nella clipboard. Si può utilizzare anche selezionandolo dal menù Editor Problemi o con la combinazione di tasti Ctrl+V Cerca testo Per mezzo di questa utile funzione è possibile ricercare del testo all interno del problema. Quando viene selezionata si apre una finestra che chiede all utente di inserire la stringa da cercare Finestra cerca testo Quando una occorrenza della stringa da cercare viene trovata é selezionata automaticamente per renderla più riconoscibile da parte dell utente e il software chiede se proseguire o meno nella ricerca di una nuova occorrenza della stringa. Questa funzione è disponibile anche dal menù Editor Problemi o con la combinazione di tasti Ctrl + S Sostituisci testo. Questa funzione permette di sostituire rapidamente tutte o una parte delle occorrenze di una stringa con un altra. Alla pressione del pulsante viene richiesto 75

76 all utente di immettere la stringa da sostituire e, successivamente, la stringa che ne prenderà il posto. Quando il software incontra all interno del problema la stringa da sostituire la seleziona e propone all utente se sostituirla o meno. Questa funzione è disponibile anche dal menù Editor Problemi o con la combinazione di tasti Ctrl + Q Testo in grassetto. Il testo selezionato viene evidenziato in grassetto. Questa funzione è anche disponibile dal menù Editor Problemi e con la combinazione di stati Ctrl+G Testo in corsivo. Il testo selezionato viene evidenziato in corsivo. Questa funzione è anche disponibile dal menù Editor Problemi e con la combinazione di stati Ctrl + I. 76

77 Testo sottolineato. Il testo selezionato viene evidenziato con una sottolineatura. Questa funzione è anche disponibile dal menù Editor Problemi e con la combinazione di stati Ctrl + U Colore del testo. proposto all utente la scelta del colore. Questa funzione permette di colorare il testo selezionato. Viene Finestra per la scelta del colore Questa funzione è disponibile anche dal menù Editor Problemi o con la combinazione di tasti Ctrl+O. 77

78 Scelta della dimensione del Font. Per rendere più visibile il testo nell editor è possibile modificare la dimensione del font. Scegliendo una dimensione dal menù a tendina è possibile modificare la dimensione del testo selezionato. Questa funzione è particolarmente utile in caso di proiezioni alla lavagna in aula, in modo da rendere leggibile il testo anche dalle file più lontane Scelta del tipo del Font Scelta della dimensione del Font Con questo pulsante è possibile cambiare il tipo di font al testo selezionato. Utile per fornire maggiore leggibilità al testo. Nel menù a tendina in fase di avvio di Rootn vengono caricati tutti i font disponibili nel sistema Scelta del Font 78

79 Il pulsante di Avvio del Problema Ad ogni modifica apportata al testo del problema Rootn fa partire l analizzatore della sintassi del problema e verifica se si tratta di un problema scritto secondo le regole della grammatica. Nel caso il problema non sia corretto, il pulsante di Avvio riproduce una X rossa e non è abilitato, in caso contrario si presenta Verde ed è selezionabile. Premendo il pulsante si passa alle fasi successive: Viene subito analizzato il problema inserito e viene fornito un eventuale avviso nel caso esso fosse inammissibile o illimitato. Successivamente vengono debitamente abilitate le varie opzioni dell interfaccia a seconda della natura del problema. 79

80 4.5 La Grammatica di Rootn 30 Rootn utilizza una grammatica realizzata mediante la combinazione dell analizzatore lessicale JLex con il generatore di parser CUP. Per ulteriori informazioni circa l adozione di questa combinazione si rimanda al paragrafo 3.5 Il parser e l analizzatore lessicale. In questo contesto si vuole descrivere quali sono le regole che l utente deve seguire per scrivere un problema sintatticamente corretto. In primo luogo specifichiamo che il parser ignora gli spazi bianchi, le tabulazioni e gli a-capo, in modo che l utente possa, mediante l inserimento di quest ultimi rendere il problema più leggibile. Inoltre il parser è stato impostato per essere case insensitive, cioè per non fare distinzioni tra combinazioni di lettere maiuscole e miniscole L inserimento del tipo del problema. Come primo termine il parser accetta una parola chiave che indica di che tipo di problema si tratta: 30 Francesco Cennamo, Un tool per la programmazione lineare, Tesi di laurea in informatica, Roma, Ad esempio i due nomi di variabili FariNA e farina corrispondono alla stessa variabile. 80

81 PL01 indica che vogliamo trattare un problema con variabili booleane che accettano come valore solo zero o uno. Per questo tipo di problemi viene utilizzato l algoritmo di Branch & Bound. PL indica che vogliamo trattare un problema a variabili continue. Per questo tipo di problemi viene utilizzato l algoritmo del Simplesso. Scelto uno dei due tipi di problema, con l inserimento nell editor della corrispondente parola, è il momento di inserire il carattere : (due punti) e poi dare il via all inserimento della funzione obbiettivo L inserimento della funzione obiettivo. La funzione obiettivo comincia con una delle due parole chiave: MIN Nel caso si tratti di un problema di minimizzazione; MAX Nel caso di un problema di massimizzazione L inserimento dei fattori. A questo punto il sistema accetta una serie virtualmente illimitata, diversa da zero, di fattori aventi la seguente sintassi: Un segno + (più) o - (meno). Il segno positivo è opzionale se si tratta del primo fattore, ma obbligatorio per i successivi fattori. Un numero. La grammatica di Rootn accetta numeri interi, reali, o frazioni. I numeri reali sono identificati dal fatto di contenere al loro 81

82 interno come separatore tra la parte intera e la parte frazionaria il carattere. (punto). Le frazioni devono essere inserite come due numeri interi separati dal carattere / (slash). Logicamente per il denominatore non può essere inserito un segno. Se non viene inserito alcun numero esso è impostato automaticamente ad uno (1), in modo da rispettare il naturale linguaggio delle espressioni. Ad esempio 2 X1 + X2 viene interpretato dal sistema come 2 X1 + 1 X2. L utilizzo del numero zero (0) non è invece necessario: è sufficiente non inserire proprio il fattore. Una variabile. Rootn accetta come nome di variabile qualsiasi combinazione di caratteri lunga a piacere. Per non creare confusione alcune combinazioni sono state deliberatamente eliminate. In particolare sono riservati i sottostanti nomi delle variabili: o Quelle che cominciano con la lettera V. Esse sono riservate ai nomi dei vincoli nell eventualità che non sia specificato un nome diverso. o Quelle che cominciano con la lettere Y. Esse sono riservate alle variabili aggiuntive inserite per il calcolo del problema artificiale durante la fase del simplesso. o Quelle che cominciano con la lettera B. Esse sono riservate ai nomi dei bound nell eventualità che non sia specificato un nome differente. 82

83 Dopo un arbitrario numero di fattori il sistema aspetta il carattere ; (punto e virgola) quale indicatore della terminazione della funzione obbiettivo. Ricapitolando la funzione obiettivo ha la seguente sintassi (semplificata): (Min 32 Max) (Fattore)+ 33 ; dove Fattore ha una delle seguenti sintassi: (+ -) intero? NomeVariabile (+ -) intero+.0* 34 intero NomeVariabile (+ -) intero+/intero+ NomeVariabile L inserimento dei vincoli Da questo punto in poi è possibile inserire un numero arbitrario di vincoli per il problema. Due vincoli sono separati tra loro dal carattere ; (punto e virgola). Per maggiore leggibilità è comunque auspicabile inserirli su righe differenti. Ogni vincolo può cominciare opzionalmente con un nome. Rootn accetta come nome di vincolo qualsiasi combinazione di caratteri lunga a piacere. Se non viene specificato alcun nome Rootn provvede ad assegnarne uno utilizzando un nome riservato del tipo Vn dove n rappresenta la posizione del vincolo inserito. 32 Il simbolo significa che è possibile scegliere o l espressione a sinistra del simbolo o l espressione a destra. 33 Il simbolo + indica che l espressione precedente può essere ripetuta un numero di volte pari o superiore ad uno. 34 Il simbolo * indica che l espressione precedente può essere ripetuta un numero di volte arbitrario 83

84 Per non creare confusione alcune combinazioni sono state deliberatamente eliminate. In particolare sono riservati i sottostanti nomi: Quelli che cominciano con la lettera V. Essi sono riservate ai nomi dei vincoli nell eventualità che non sia specificato un nome diverso. Quelli che cominciano con la lettere Y. Essi sono riservati alle variabili aggiuntive inserite per il calcolo del problema artificiale durante la fase del simplesso. Quelli che cominciano con la lettera B. Essi sono riservati ai nomi dei bound nell eventualità che non sia specificato un nome differente. Per separare il nome dal resto del vincolo è necessario utilizzare il carattere identificativo : (due punti). Ora si può procedere all inserimento di un numero arbitrario, diverso da zero, di Fattori. Per l inserimento di un fattore riferirsi al paragrafo possono essere: Dopo aver inserito i fattori il sistema attende l inserimento di un segno. I segni >= Maggiore o uguale > Maggiore = Uguale < Minore <= Minore o uguale A questo punto per concludere l inserimento di un vincolo non serve che specificare un termine noto. Un termine noto è formato da un segno, opzionale se si 84

85 tratta del segno positivo, e da un numero. Per le regole di inserimento di un numero riferirsi nuovamente al paragrafo considerando che, in questo caso, è necessario specificare anche l unità. (punto e virgola). Come già anticipato il vincolo termina con l inserimento del carattere ; Ricapitolando l inserimento di un vincolo si può riassumere (semplificando): NomeVincolo? : Fattore+ Segno TermineNoto; L inserimento di Bound Alcuni software che trattano problemi di ricerca operativa gestiscono diversamente l inserimento di vincoli speciali denominati bound la cui caratteristica è quella di presentare un solo fattore di peso unitario. Rootn riconosce automaticamente questo tipo di vincoli e li tratta con i dovuti accorgimenti. Ai vincoli riconosciuti come Bound, nel caso non venga specificato alcun nome, viene assegnato lo speciale nome Bn dove n rappresenta il numero del bound inserito. Nelle due immagini seguenti, rappresentati un esempio di problema inserito, si nota come Rootn esegua la denominazione automatica dei vincoli e dei bound qualora ad essi non sia stato esplicitamente assegnato un nome. 85

86 Fase di inserimento del problema Il problema è terminato Denominazione automatica di vincoli e bound del problema precedente Il carattere di terminazione del problema è! (punto esclamativo). Ricapitolando l inserimento di un problema si può così riassumere: 86

87 ( PL PL01 )+ : FunzioneObiettivo; (Vincolo;)+! Se il problema è sintatticamente corretto il pulsante del pannello Editor di Problemi che viene utilizzato per passare alle fasi successive dell elaborazione viene abilitato. Per ulteriori informazioni sul funzionamento del parser dei problemi riferirsi al paragrafo 3.5 Il parser e l analizzatore lessicale. 87

88 4.6 Il Pannello Branch & Bound Se il problema inserito nell Editor è di tipo binario ( PL01 ) viene abilitato questo pannello che guida l utente per passi successivi fino alla risoluzione del problema per mezzo della tecnica denominata Branch & Bound Un esempio di problema di tipo "PL01" In primo luogo alla pressione del tasto Avvio Rootn controlla se il problema di programmazione lineare 0-1 è stato formulato in forma di massimo o di minimo. Per ragioni di comodità, infatti, essendo le due formulazioni equivalenti si è deciso di implementare solo quella che risolve i problemi di massimizzazione. Nel caso il problema fosse un minimo, Rootn avvisa l utente che il problema, per essere gestito nel Branch & Bound verrà trasformato nel suo equivalente in forma di massimo. 88

89 Rootn avvisa l'utente che il problema di tipo pl01 è in forma di minimo e verrà trasformato nella formulazione equivalente in forma di massimo Anche durante i vari passaggi dell algoritmo Branch & Bound all utente sarà sempre chiaro di stare lavorando sulla formulazione equivalente in forma di massimo grazie ad una apposita etichetta opportunamente settata. Per leggere il problema originale è sufficiente spostarsi in qualsiasi momento sul pannello Editor di Problemi, mentre per visionare il problema riformulato in forma di massimo si può utilizzare il pulsante avente etichetta Vedi Problema. 89

90 In questo esempio è possibile visionare il problema originale in forma di minimo (Editor di Problemi) e la sua trasformazione al massimo (Frame PROBLEMA) Si rimanda al paragrafo 2.4 La programmazione lineare intera per una semplice trattazione teorica della programmazione lineare intera, mentre qui ora, prima di vederlo all opera, vogliamo riassumere brevemente l algoritmo che viene utilizzato L algoritmo Branch & Bound implementato da Rootn Inizializzazione. Visto che vogliamo trovare il valore massimo che la funzione può raggiungere inizializziamo la variabile Incumbing a meno infinito. Nell elenco dei sottoproblemi da affrontare è inserito il problema originale, etichettato come problema (0). Ogni nuovo problema aggiunto avrà una etichetta progressiva Test. Verifichiamo che la lista dei problemi non sia vuota. In tal caso abbiamo enumerato tutti i sottoproblemi e l algoritmo termina. Se abbiamo trovato almeno una 90

91 soluzione ammissibile, la migliore di queste rappresenta la soluzione ottima del problema originale, in caso contrario ci siamo cimentati in un problema inammissibile. Se la lista dei sottoproblemi da affrontare non è vuota scegliamo un problema utilizzando una delle due strategie disponibili in Rootn: Strategia Profondità. Affronta il sottoproblema disponibile nella lista che ha la maggiore profondità nell albero del Branch & Bound. A parità di livello sceglie il problema derivato dal ramo destro dell albero. Sostanzialmente con una strategia LIFO. Strategia Best Bound. Affronta il sottoproblema disponibile nella lista che ha il rilassamento lineare con soluzione ottima migliore. In genere è più efficiente perché sceglie il sottoproblema più promettente Risoluzione sottoproblema corrente. Risolve il rilassamento lineare del sottoproblema corrente. In pratica svincola le variabili non fissate dall essere binarie e risolve il problema di programmazione lineare continua così ottenuto. quattro fasi: La fase di analisi della soluzione del problema rilassato così ottenuto prevede Inammissibilità: il problema rilassato non è ammissibile, quindi viene eliminato dalla lista e si torna a Test per sceglierne un altro. Bound: il problema rilassato ha un valore massimo della funzione obiettivo minore dell incumbing attuale. Il problema viene potato per Bound. Se la funzione ha tutti i coefficienti a variabili intere la condizione di Bound considera 91

92 solamente la parte intera del valore della funzione obiettivo del rilassamento lineare 35. Si torna a test per selezionare un nuovo problema. Ottimalità: il problema rilassato ha la soluzione composta da sole variabili booleane. È quindi un candidato alla soluzione ottima del problema principale. Se il valore della funzione obiettivo è migliore dell incumbing corrente questo sottoproblema è segnato come il migliore visitato fino a questo momento. L incumbing assume il valore della funzione obiettivo del sottoproblema analizzato. Si torna a test per selezionare un nuovo problema. Branching: il sottoproblema risolto non ricade in nessuna delle tre altre situazioni viste e quindi si sceglie una variabile su cui effettuare il branching. Il sottoproblema viene quindi diviso in due sottoproblemi uno avente la variabile scelta per il branching settata a zero e l altro ad uno. I due sottoproblemi così ottenuti vengono inseriti nella lista dei sottoproblemi da affrontare. La scelta della variabile di branching avviene secondo la tecnica del most fractional variable. Cioè tra tutte le variabili che non risultano intere si sceglie quella il cui valore assoluto si avvicina di più a 0,5. Si torna a test e si prosegue con la scelta del prossimo sottoproblema. 35 Questa condizione, che potrebbe generare confusione nell utente, è riportata ben visibile all interno del pannello. Per una descrizione dettagliata delle informazioni si veda il sottoparagrafo Le informazioni di esecuzione del Branch & Bound 92

93 4.6.2 Le informazioni di esecuzione del Branch & Bound Nella parte alta del Branch & Bound vi è un pannello che riporta all utente una serie di informazioni circa lo stato attuale dell algoritmo. In particolare vi sono alcune informazioni relative alla soluzione del rilassamento lineare del sottoproblema appena analizzato. Per distinguerle dal resto sono riportate in colore verde In verde sono riportate le informazioni relative al sottoproblema appena risolto Queste comprendono: Il Problema Esplorato : riporta l etichetta del sottoproblema appena analizzato. Nel caso d esempio della figura In verde sono riportate le informazioni relative al sottoproblema appena risoltorootn ha appena trattato il problema etichettato con il numero 2. Lo Stato : indica quale delle quattro fasi dell analisi della soluzione del problema rilassato è stata intrapresa. In particolare questa etichetta assume i valori: o Branching su (nome Variabile) o Potato per inammissibilità o Ottima o Potato per Bound 93

94 Nel caso d esempio è impostato al valore Branching su X09. X Upper Bound indica il valore della funzione obiettivo del rilassamento lineare del sottoproblema analizzato. Nel caso d esempio è impostato al valore 41.5 X riporta il vettore soluzione del rilassamento lineare del sottoproblema analizzato. Le variabili frazionarie sono evidenziate con il colore blu. Nel caso d esempio è impostato al valore {1,1,0,0,0,0,0,1,0.5,0,0,0,1,0,0,0} Le due informazioni riportate in rosso, invece, indicano le condizioni generali del problema iniziale. In particolare la prima ci ricorda la condizione di Bound che stiamo adottando, che, come detto, può essere di due tipi: Problema a coefficienti interi. Condizione di Bound Z LB >Round(X UB ). Se il problema è tutto a coefficienti interi. Problema con coefficienti reali: condizione di Bound Z LB >X UB. Se il problema inserito ha almeno un coefficiente non intero. La seconda informazione relativa al problema originale è quella che ricorda all utente se si tratta di un problema di massimo o di minimo. In questo secondo caso, come visto, il problema viene trasformato nel problema di massimizzazione equivalente. Questa etichetta prende così uno dei due possibili valori: Problema originale in forma di Massimo 94

95 Problema originale in forma di Minimo. Effettuata trasformazione al Massimo L ultimo gruppo di informazioni, riportate in blu nel pannello, è relativo all evolversi della procedura di Branch & Bound. Vediamole in dettaglio: Incumbing è il valore massimo ottimo rinvenuto fino a quel punto durante l evoluzione del Branch & Bound. È inizializzato a meno infinito. Problema Ottimo riporta la dicitura nessuno se ancora non è stato trovato un sottoproblema con soluzione intera (booleana) candidato a diventare la soluzione ottima. In caso contrario viene visualizzato l etichetta numerica del sottoproblema ottimo rinvenuto. Elenco dei Problemi riporta le etichette dei sottoproblemi generati ma non ancora affrontati dalla procedura di Branch & Bound I pulsanti di interazione. Nella parte superiore destra del pannello troviamo quattro pulsanti e una coppia di radio button. Andiamo ad analizzarne il funzionamento nel dettaglio: 95

96 Opzioni di interazione utente con il Branch & Bound Il radio button Strategia contempla le due opzioni: Strategia Profondità. Affronta il sottoproblema disponibile nella lista che ha la maggiore profondità nell albero del Branch & Bound. A parità di livello sceglie il problema derivato dal ramo destro dell albero. Sostanzialmente con una strategia LIFO. Strategia Best Bound. Affronta il sottoproblema disponibile nella lista che ha il rilassamento lineare con soluzione ottima migliore. In genere è più efficiente perché sceglie il sottoproblema più promettente. È utile notare che, utilizzando la tecnica passo passo, è possibile una strategia mista. Il radio button, infatti, determina la strategia di scelta del passo successivo. Il pulsante Vedi Problema apre una nuova finestra dove è possibile vedere il problema che su cui si sta operando. Risulta particolarmente utile quando il problema originale è in forma di minimo, infatti, in questo modo è possibile vedere il problema originale trasformato al massimo da Rootn. 96

97 La finestra che mostra il problema. Notare come vengano riportate anche le variabili con peso zero. Il pulsante Torna all inizio si riporta al primo passo dell algoritmo del Branch & Bound, dando la possibilità all utente di effettuare la procedura da capo. Il pulsante Fai un passo seleziona il prossimo sottoproblema, lo risolve, e aggiorna la finestra con le nuove informazioni. Se non ci sono più sottoproblemi da analizzare mostra una finestra di dialogo con le informazioni circa la soluzione del problema originale Informazioni sulla soluzione del problema di Branch & Bound Il pulsante Fai tutti i passi elabora l intero algoritmo del Branch & Bound fino a quando non esaurisce tutti i sottoproblemi e quindi mostra la finestra di dialogo riportante le informazioni circa la soluzione del problema. 97

98 4.6.4 Il grafico dell albero. Nella parte inferiore del pannello trova spazio il grafico dell albero rappresentante l algoritmo del Branch & Bound applicato al problema corrente Esempio di albero di Branch & Bound Il grafico si aggiorna ad ogni passo con l inserimento dei nodi dei sottoproblemi da risolvere (Branching) e la colorazione dei nodi che escono dalla lista dei sottoproblemi (Bounding). colore giallo. Ogni sottoproblema è così rappresentato da un nodo che, inizialmente, è di Posizionando il mouse sopra un nodo vengono fornite all utente alcune ulteriori informazioni circa il problema puntato. 98

99 Esempio del tooltiptext del nodo 21 In particolare viene indicato all utente il valore del rilassamento lineare del sottoproblema (Z UB ). Nell esempio il sottoproblema nr. 21 ha un valore della funzione obiettivo pari, all ottimo, a La seconda informazione che viene mostrata all utente in questo modo riguarda il valore della soluzione del rilassamento lineare del sottoproblema puntato. La colorazione dei valori è significativa: quelle blu sono le variabili con valori non booleani, quelle rosse sono state già fissate dall algoritmo, mentre quelle nere sono libere. Nell esempio della figura 4.25 il nodo nr. 21 ha fissate le variabili X01=0 e X02, X03, X08 e X09=1. Inoltre la variabile X13= è l unica frazionaria e quindi al passaggio successivo l algoritmo effettuerà il banching su di essa Mano a mano che i sottoproblemi vengono analizzati e risolti le colorazioni dei nodi che li rappresentano possono cambiare dall iniziale colore giallo. 99

100 Con un nodo verde Rootn indica che siamo in presenza di un sottoproblema avente il vettore soluzione tutto composto da variabili binarie. Tra tutti i sottoproblemi di questo tipo quello con valore Z UB migliore sarà il sottoproblema ottimo. Con un nodo rosso Rootn indica che il sottoproblema corrispondente è stato potato per Bound. inammissibile. Con un nodo grigio Rootn indica che il sottoproblema corrente era All interno del grafico dell albero sono presenti gli archi che uniscono i sottoproblemi. Detti archi sono etichettati con la dicitura Variabile=0 oppure Varibile=1. Questa dicitura indica che da quel punto in poi dell albero i sottoproblemi avranno quella variabile fissata al relativo valore. Per una maggiore funzionalità il grafico dell albero, che può ospitare un numero di nodi pari a 2^(NumeroVaribili -1), è stato inserito all interno di un pannello scorrevole che si adatta di volta in volta alla dimensione e forma dell albero. È comunque possibile selezionare uno o più nodi, con le modalità proprie del sistema operativo, e spostarli manualmente all interno del grafico. Gli archi li seguiranno di conseguenza mantenendo la struttura coerente. È altresì possibile, utilizzando la rotellina del mouse, zummare la vista sia avvicinando il punto di vista per favorire la visione di qualche dettaglio o parte dell albero, sia allontanandolo per avere una visione d insieme del grafico dell albero. 100

101 Vista ravvicinata dell'albero del Branch & Bound Visione d'insieme di un albero di Branch & Bound 101

102 4.7 Il pannello Risoluzione Grafica Se il problema inserito ha due o tre variabili si attiva il pannello denominato Risoluzione Grafica Uno sguardo d'insieme del pannello Risoluzione Grafica L idea è quella di riuscire a visualizzare graficamente il problema di programmazione lineare in due e tre dimensioni. Ogni vincolo è descritto da una disequazione od equazione lineare di primo grado. L equazione associata ad ogni vincolo rappresenta il confine della regione di piano che delimita la regione ammissibile per il problema. Attraverso Rootn è possibile 102

103 visualizzare, all interno di un sistema di piani cartesiani, le equazioni associate ai vincoli e alla funzione obiettivo del problema. All interno del pannello è presente, nel lato destro, una parte in cui sono riportati i vincoli e la funzione obiettivo del problema. Accanto ad ogni vincolo è presente un checkbox per mezzo del quale l utente può decidere se disegnare o meno il vincolo corrispondente Selezione dei Vincoli da disegnare Nella parte centrale del pannello Risoluzione Grafica è altresì presente un gruppo di controlli a slider che permettono di settare i confini della regione del piano cartesiano che Rootn deve disegnare. Operando con questi controlli è possibile, sia spostare il centro del disegno, sia zummare avvicinando o allontanando il punto di vista dell utente. I controlli a slider permettono di settare, con una precisione al centesimo di unità, valori di confine che vanno da a Nel caso fosse necessario 103

104 impostare valori fuori da questo range è possibile inserire direttamente il valore nel campo relativo. Se siamo nel caso a due variabili, logicamente, il controllo relativo alla terza variabile risulta disabilitato Modifica dei confini del piano cartesiano disegnato Nella parte sinistra del pannello di disegno è possibile notare una icona ed una etichetta che indica all utente se siamo nel caso 2D o 3D. Al di sotto di questa icona troviamo ancora uno slider per mezzo del quale è possibile impostare la risoluzione del disegno. 104

105 superfici Icone 2D e 3D Nel caso tridimensionale è possibile impostare anche la trasparenza delle Dopo aver settato tutte le impostazioni desiderate l utente può premere il tasto per il disegno che mostra una nuova finestra. 105

106 4.7.1 Un esempio bidimensionale Un esempio di disegno 2D Nella parte bassa della finestra di disegno è possibile variare i confini del piano cartesiano da disegnare, mentre in una finestra a parte è disponibile una leggenda dove si associano i vari vincoli ai rispettivi colori. All interno della finestra leggenda è poi possibile nuovamente decidere quali vincoli rappresentare. La funzione obbiettivo, se selezionata, è sempre disegnata con il colore blu. 106

107 4.7.2 Un esempio tridimensionale Un esempio di disegno tridimensionale Anche nella parte bassa della finestra tridimensionale è possibile impostare i margini di disegno e nella finestra leggenda è possibile selezionare o meno i piano da disegnare. Per agevolare la comprensione della posizione dei piani all interno dello spazio Rootn permette di ruotare in tempo reale l intero disegno. Per fare ciò è sufficiente posizionarsi con il puntatore del mouse all interno della finestra da far ruotare, e tenendo premuto il tasto sinistro del mouse, spostare quest ultimo fino ad ottenere la posizione desiderata. Ad ulteriore beneficio della comprensione del disegno 107

108 tridimensionale è possibile selezionare la casella di controllo denominata Attiva trasparenza. Il disegno ottenuto sarà costituito da piani semitrasparenti Un esempio di disegno tridimensionale con la trasparenza attivata 108

109 4.8 Il pannello Risoluzione Istantanea 36 Rootn si basa sugli algoritmi semplificati visti a lezione per la risoluzione dei problemi di programmazione lineare. Algoritmi che funzionano a dovere nella stragrande maggioranza dei problemi che vengono in genere affrontati dagli studenti. Alcuni casi particolari, tuttavia, non sono correttamente gestiti. Si è pensato, quindi, di integrare all interno del programma un pannello che funzionasse da interfaccia per il risolutore Glpk. Per il funzionamento di Glpk si rimanda al sito internet del progetto. Vediamo qui, invece, le opzioni disponibili nell interfaccia di Rootn Visione d'insieme del pannello Risoluzione Istanatanea 36 Francesco Cennamo, Un tool per la programmazione lineare, Tesi di laurea in informatica, Roma,

110 Nella parte alta del pannello vi è una grande lavagna dove viene riportato l output del programma Glpk. Premendo il pulsante Cancella la lavagna viene azzerata, mentre il tasto Risolvi avvia l elaborazione di Glpk settando le opzioni impostate. In basso a sinistra troviamo un pannello suddiviso in quattro parti per mezzo del quale è possibile impostare le varie opzioni e preferenze per l esecuzione di Glpk. Per la descrizione del significato delle opzioni si rimanda alla documentazione di Glpk, qui ci limitiamo ad enumerarle. (quelle sottolineate sono le scelte di default) Le preferenze generali di Glpk Impostare le preferenze generali di risoluzione istantanea Scaling: o Scale problem o Do not scale problem Method: o Use simplex method 110

111 o Use interior point method (for pure LP only) Time Limit: o 10 (sec.) Le opzioni proprie dei problemi a variabili continue Impostare le preferenze di risoluzione istantanea per i problemi a variabili continue Initial basis: o use avdanced initial basis o use standard initial basis of all slacks Pricing: o use steepest edge technique o use standard "textbook" pricing Relax: o use Harris' two-pass ratio test o use standard "textbook" ratio test Presolver: o use presolver 111

112 o do not use presolver use interior point method (for pure LP only) Le opzioni proprie dei problemi a variabili discrete Impostare le preferenze di risoluzione istantanea per i problemi a variabili boleane Consider all integer variables as continuous o No (unchecked) o Yes (checked) Branch o using heuristic by Driebeck and Tomlin o on first integer variable o on last integer variable o on most fractional variable Backtrack o using the best projection heuristic o using depth first search o using breadth first search 112

113 o using node with best local bound Use advanced MIP solver o No (unchecked) o Yes (checked) Esportare il problema Per mezzo di Glpk è possibile esportare il problema in altri formati Utility per l'esportazione del problema in altri formati In particolare i formati disponibili, per le cui specifiche si rimanda ancora alla documentazione di Glpk, sono i seguenti: GNU LP fixed MPS free MPS plain text CPLEX LP 113

114 Dopo aver scelto il formato e premendo il pulsante etichettato Esporta si apre una finestra di dialogo che permette all utente di spostarsi nel File System e di specificare un nome per il problema da esportare Le informazioni della lavagna Dopo aver eventualmente impostato tutte le varie opzioni descritte, l utente può premere il pulsante etichettato esegui e leggere sulla lavagna le operazioni di risoluzione di Glpk. Per prima cosa Rootn rileva il sistema operativo corrente, al fine di impostare le variabili di environment Pannello Risoluzione istantanea - variabili di environment È possibile leggere il comando che Rootn ha lanciato a riga di comando. In particolare è utile notare che Rootn utilizza, per questa operazione alcuni file temporanei memorizzati nella sua cartella di installazione. Tali file, vengono cancellati a mano a mano che non servono più, e benché essi occupino pochissimo spazio disco, è opportuno segnalare che Rootn li utilizza, in quanto, se lo stesso fosse installato su periferiche sulle quali non fosse abilitata la scrittura il suo funzionamento sarebbe compromesso. 114

115 Successivamente Rootn provvede a tradurre il problema inserito dall utente per mezzo del panello Editor di problemi in un formato compatibile con Glpk. Si è scelto di utilizzare il linguaggio CPLEX LP. Il problema così tradotto viene mostrato nella lavagna Pannello Risoluzione istantanea - Traduzione del Problema Viene poi avviato Glpk, la messaggistica verso lo standard output viene intercettata da Rootn e mostrata in finestra. 115

116 Il Pannello di risoluzione istantanea intercetta l'output di Glpk Nel caso l utente voglia esportare il problema l output mostrato nella lavagna è simile a quello visto per la risoluzione. La differenza è che, invece di mostrare la soluzione del problema, viene mostrato il problema tradotto nel formato specificato Un esempio di problema esportato nel formato GNU LP 116

117 4.9 Il Pannello Risoluzione Passo Passo 37 Se il problema inserito nell Editor è di tipo continuo ( PL ) viene abilitato questo pannello che guida l utente per passi successivi fino alla risoluzione del problema per mezzo della tecnica del simplesso. Per una trattazione teorica dell algoritmo del simplesso si rimanda al capitolo 2, qui vediamo come Rootn lo applica e ne mostra l evoluzione. 37 Francesco Cennamo, Un tool per la programmazione lineare, Tesi di laurea in informatica, Roma,

118 Viene mostrato il problema nella parte centrale, mentre a sinistra sono presenti una serie di pulsanti che servono a controllare ogni passo dell esecuzione dell algoritmo Algoritmo del simplesso - Il passaggio alla forma standard Funzione obiettivo Per prima cosa viene controllato se il problema si trova in forma standard. Se ciò si verifica tutti i pulsanti del pannello denominato Porta in forma standard sono disabilitati. Nel caso contrario Rootn permette all utente di portare il problema in tale forma, mediante la pressione in sequenza dei pulsanti denominati Funzione Obiettivo, Variabili e Vincoli. 118

119 Simplesso - Passaggio alla forma standard - Variabili Ogni pulsante verifica se il corrispettivo oggetto debba essere modificato o meno, compie eventualmente le operazioni di trasformazione, mostra nel pannello centrale il risultato della computazione debitamente evidenziato con vari colori e attiva il successivo pulsante. In dettaglio per quanto riguarda la funzione obiettivo, se essa si trova in forma di massimo viene trasformata all equivalente forma di minimo. Il secondo pulsante controlla le variabili che non sono vincolate in segno che, se presenti, vengono sostituite da una coppia di variabili vincolate. Sia x j la variabile non vincolata, essa viene sostituita da due variabili vincolate x j+ che ha lo stesso peso della variabile originale ed x j- che ha il peso opposto. 119

120 4.46 Simplesso - Passaggio alla forma standard - Vincoli L ultimo pulsante del passaggio in forma standard si occupa di verificare i vincoli di disuguaglianza. Se ne rileva la presenza aggiunge al vincolo una variabile di slack o di surplus, vincolate ad essere maggiori di zero, e trasforma il vincolo in una uguaglianza. A questo punto il problema è in forma standard e l algoritmo verifica se è presente una soluzione di base ammissibile immediatamente individuabile. In caso affermativo passa alla Fase II del simplesso, descritta in seguito. Altrimenti attiva i controlli relativi alla Fase I del simplesso. 120

121 4.9.1 Fase I del simplesso Alla pressione del tasto etichettato Problema Artificiale vengono aggiunte delle variabili artificiali, y 1,,y n fino a che non sia possibile individuare facilmente una soluzione di base ammissibile del nuovo problema. Si noti come Rootn non aggiunga pedissequamente una matrice identità ad ogni problema analizzato. Vengono aggiunte solo le colonne mancanti, in modo da non far esplodere la complessità del problema artificiale Simplesso Fase I - Creazione del Problema Artificiale Mediante la pressione del tasto Crea Tableau viene finalmente visualizzato a video il tableau del problema. Esso è costituito da una serie di pulsanti alla pressione dei quali vengono azionate specifiche azioni. 121

122 Simplesso Fase I - Portare il tableau in forma standard rispetto alla SBA Rootn evidenzia, con un colore diverso a seconda del tipo di situazione, i pulsanti che l utente dovrebbe attivare per proseguire nella soluzione del problema. In particolare i pesi aventi segno negativo non possono essere cliccati, se non in casi speciali. Se ciò avviene vengono evidenziati in rosso e nessuna azione viene compiuta. È comunque data la possibilità all utente di scegliere altri pulsanti, il che, tuttavia, porta, per quanto riguarda la soluzione del problema, a situazioni che possono risultare incorrette. In questi casi è comunque possibile per l utente spostarsi nuovamente sul pannello Editor di Problemi e, mediante la pressione del tasto di Avvio, ripartire da capo. 122

123 Simplesso Fase I - Operazione di cardine su di un pivot Per primo vengono evidenziati in colore violetto i pesi delle variabili aggiunte durante la creazione del problema artificiale. È infatti necessario riportare il tableau in forma canonica rispetto a questa nuova base. Con la pressione dei tasti evidenziati nella funzione obiettivo vengono annullati i valori relativi alle nuove variabili. A questo punto Rootn evidenzia con il colore verde il primo pivot sul quale effettuare l operazione di cardine del tableau. La cosa si ripete fino a quando il vettore dei costi ridotti del tableau non è tutto maggiore di zero. 123

124 A questo punto Rootn verifica il valore della funzione obiettivo di questo problema artificiale. Se è diverso da zero il problema originale era inammissibile, altrimenti si passa alla Fase II del simplesso. questa fase. Rootn gestisce anche tutta una serie di casi speciali che possono verificarsi in Simplesso - Fase I - Rimuovere la varibile artificiale dalla base In particolare se al momento di passare alla fase II del simplesso vi sono variabili artificiali in base, Rootn lo segnala ed evidenzia in colore ciano il pivot su cui è necessario far giare il tableau per far uscire la variabile artificiale dalla base facendone entrare una non artificiale. Può accadere che il pivot sia negativo, ma Rootn gestisce 124

125 questa eventualità e permette, in via eccezionale, di effettuare l operazione di cardine anche su di esso. Prima di passare alla seconda fase del metodo del simplesso Rootn provvede ad eliminare le colonne delle variabili artificiali e a ripristinare l originale funzione obiettivo Fase II del simplesso 4.51 Simplesso - Fase II - Il problema visualizzato Mediante la pressione del tasto Crea Tableau esso viene mostrato nel pannello centrale. 125

126 Per prima cosa vengono evidenziati in colore violetto i pesi delle variabili facenti parte della soluzione di base ammissibile individuata. È infatti necessario riportare il tableau in forma canonica rispetto a questa base per proseguire Simplesso - Fase II - Portare il tableau in forma standard Con la pressione dei tasti evidenziati nella funzione obiettivo vengono annullati i valori relativi alle variabili in base. A questo punto Rootn evidenzia con il colore verde il primo pivot sul quale effettuare l operazione di cardine del tableau. La cosa si ripete fino a quando il vettore dei costi ridotti del tableau non è tutto maggiore di zero. 126

127 4.53 Simplesso - Fase II - Elemento Pivot A questo punto Rootn evidenzia il pulsante Soluzione, alla pressione del quale la medesima viene mostrata a video. obiettivo. Essa riporta sia il valore delle variabili, sia il valore all ottimo della funzione 127

128 4.54 Simplesso - Fase II - La soluzione Le informazioni di esecuzione del simplesso Nella parte inferiore del pannello della Risoluzione Passo Passo è presente un area di testo scrollabile che informa l utente delle varie operazioni che vengono compiute durante l algoritmo del simplesso Simplesso - Le informazioni di esecuzione 128

Ricerca Operativa Esercizi sul metodo del simplesso. Luigi De Giovanni, Laura Brentegani

Ricerca Operativa Esercizi sul metodo del simplesso. Luigi De Giovanni, Laura Brentegani Ricerca Operativa Esercizi sul metodo del simplesso Luigi De Giovanni, Laura Brentegani 1 1) Risolvere il seguente problema di programmazione lineare. ma + + 3 s.t. 2 + + 2 + 2 + 3 5 2 + 2 + 6,, 0 Soluzione.

Dettagli

Ottimizzazione Multi Obiettivo

Ottimizzazione Multi Obiettivo Ottimizzazione Multi Obiettivo 1 Ottimizzazione Multi Obiettivo I problemi affrontati fino ad ora erano caratterizzati da una unica (e ben definita) funzione obiettivo. I problemi di ottimizzazione reali

Dettagli

Dimensione di uno Spazio vettoriale

Dimensione di uno Spazio vettoriale Capitolo 4 Dimensione di uno Spazio vettoriale 4.1 Introduzione Dedichiamo questo capitolo ad un concetto fondamentale in algebra lineare: la dimensione di uno spazio vettoriale. Daremo una definizione

Dettagli

LE FUNZIONI A DUE VARIABILI

LE FUNZIONI A DUE VARIABILI Capitolo I LE FUNZIONI A DUE VARIABILI In questo primo capitolo introduciamo alcune definizioni di base delle funzioni reali a due variabili reali. Nel seguito R denoterà l insieme dei numeri reali mentre

Dettagli

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

Sommario. Definizione di informatica. Definizione di un calcolatore come esecutore. Gli algoritmi. Algoritmi 1 Sommario Definizione di informatica. Definizione di un calcolatore come esecutore. Gli algoritmi. 2 Informatica Nome Informatica=informazione+automatica. Definizione Scienza che si occupa dell

Dettagli

Il database management system Access

Il database management system Access Il database management system Access Corso di autoistruzione http://www.manualipc.it/manuali/ corso/manuali.php? idcap=00&idman=17&size=12&sid= INTRODUZIONE Il concetto di base di dati, database o archivio

Dettagli

METODI per effettuare previsioni con analisi di tipo WHAT-IF

METODI per effettuare previsioni con analisi di tipo WHAT-IF METODI per effettuare previsioni con analisi di tipo WHAT-IF 1. TABELLA DATI Una tabella di dati è un intervallo che mostra come la modifica di alcuni valori nelle formule ne influenza i risultati. Le

Dettagli

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

Siamo così arrivati all aritmetica modulare, ma anche a individuare alcuni aspetti di come funziona l aritmetica del calcolatore come vedremo. DALLE PESATE ALL ARITMETICA FINITA IN BASE 2 Si è trovato, partendo da un problema concreto, che con la base 2, utilizzando alcune potenze della base, operando con solo addizioni, posso ottenere tutti

Dettagli

Capitolo 3. L applicazione Java Diagrammi ER. 3.1 La finestra iniziale, il menu e la barra pulsanti

Capitolo 3. L applicazione Java Diagrammi ER. 3.1 La finestra iniziale, il menu e la barra pulsanti Capitolo 3 L applicazione Java Diagrammi ER Dopo le fasi di analisi, progettazione ed implementazione il software è stato compilato ed ora è pronto all uso; in questo capitolo mostreremo passo passo tutta

Dettagli

Excel. A cura di Luigi Labonia. e-mail: luigi.lab@libero.it

Excel. A cura di Luigi Labonia. e-mail: luigi.lab@libero.it Excel A cura di Luigi Labonia e-mail: luigi.lab@libero.it Introduzione Un foglio elettronico è un applicazione comunemente usata per bilanci, previsioni ed altri compiti tipici del campo amministrativo

Dettagli

ControlloCosti. Cubi OLAP. Controllo Costi Manuale Cubi

ControlloCosti. Cubi OLAP. Controllo Costi Manuale Cubi ControlloCosti Cubi OLAP I cubi OLAP Un Cubo (OLAP, acronimo di On-Line Analytical Processing) è una struttura per la memorizzazione e la gestione dei dati che permette di eseguire analisi in tempi rapidi,

Dettagli

Il Metodo Branch and Bound

Il Metodo Branch and Bound Il Laura Galli Dipartimento di Informatica Largo B. Pontecorvo 3, 56127 Pisa laura.galli@unipi.it http://www.di.unipi.it/~galli 4 Novembre 2014 Ricerca Operativa 2 Laurea Magistrale in Ingegneria Gestionale

Dettagli

lo 2 2-1 - PERSONALIZZARE LA FINESTRA DI WORD 2000

lo 2 2-1 - PERSONALIZZARE LA FINESTRA DI WORD 2000 Capittol lo 2 Visualizzazione 2-1 - PERSONALIZZARE LA FINESTRA DI WORD 2000 Nel primo capitolo sono state analizzate le diverse componenti della finestra di Word 2000: barra del titolo, barra dei menu,

Dettagli

f(x) = 1 x. Il dominio di questa funzione è il sottoinsieme proprio di R dato da

f(x) = 1 x. Il dominio di questa funzione è il sottoinsieme proprio di R dato da Data una funzione reale f di variabile reale x, definita su un sottoinsieme proprio D f di R (con questo voglio dire che il dominio di f è un sottoinsieme di R che non coincide con tutto R), ci si chiede

Dettagli

4 3 4 = 4 x 10 2 + 3 x 10 1 + 4 x 10 0 aaa 10 2 10 1 10 0

4 3 4 = 4 x 10 2 + 3 x 10 1 + 4 x 10 0 aaa 10 2 10 1 10 0 Rappresentazione dei numeri I numeri che siamo abituati ad utilizzare sono espressi utilizzando il sistema di numerazione decimale, che si chiama così perché utilizza 0 cifre (0,,2,3,4,5,6,7,8,9). Si dice

Dettagli

Soluzione di equazioni quadratiche

Soluzione di equazioni quadratiche Soluzione di equazioni quadratiche Soluzione sulla Retta Algebrica Inseriamo sulla Retta Algebrica le seguenti espressioni polinomiali x e x 3 e cerchiamo di individuare i valori di x per i quali i punti

Dettagli

GUIDA RAPIDA PER LA COMPILAZIONE DELLA SCHEDA CCNL GUIDA RAPIDA PER LA COMPILAZIONE DELLA SCHEDA CCNL

GUIDA RAPIDA PER LA COMPILAZIONE DELLA SCHEDA CCNL GUIDA RAPIDA PER LA COMPILAZIONE DELLA SCHEDA CCNL GUIDA RAPIDA BOZZA 23/07/2008 INDICE 1. PERCHÉ UNA NUOVA VERSIONE DEI MODULI DI RACCOLTA DATI... 3 2. INDICAZIONI GENERALI... 4 2.1. Non modificare la struttura dei fogli di lavoro... 4 2.2. Cosa significano

Dettagli

Capitolo 2. Operazione di limite

Capitolo 2. Operazione di limite Capitolo 2 Operazione di ite In questo capitolo vogliamo occuparci dell operazione di ite, strumento indispensabile per scoprire molte proprietà delle funzioni. D ora in avanti riguarderemo i domini A

Dettagli

Analisi sensitività. Strumenti per il supporto alle decisioni nel processo di Valutazione d azienda

Analisi sensitività. Strumenti per il supporto alle decisioni nel processo di Valutazione d azienda Analisi sensitività. Strumenti per il supporto alle decisioni nel processo di Valutazione d azienda Premessa Con l analisi di sensitività il perito valutatore elabora un range di valori invece di un dato

Dettagli

APPUNTI DI MATEMATICA LE FRAZIONI ALGEBRICHE ALESSANDRO BOCCONI

APPUNTI DI MATEMATICA LE FRAZIONI ALGEBRICHE ALESSANDRO BOCCONI APPUNTI DI MATEMATICA LE FRAZIONI ALGEBRICHE ALESSANDRO BOCCONI Indice 1 Le frazioni algebriche 1.1 Il minimo comune multiplo e il Massimo Comun Divisore fra polinomi........ 1. Le frazioni algebriche....................................

Dettagli

LABORATORIO DI ANALISI DEI SISTEMI

LABORATORIO DI ANALISI DEI SISTEMI LABORATORIO DI ANALISI DEI SISTEMI Si utilizzerà, come strumento di lavoro, un foglio elettronico, il più diffuso Excel o anche quello gratuito di OpenOffice (www.openoffice.org). Tale scelta, pur non

Dettagli

EXCEL PER WINDOWS95. sfruttare le potenzialità di calcolo dei personal computer. Essi si basano su un area di lavoro, detta foglio di lavoro,

EXCEL PER WINDOWS95. sfruttare le potenzialità di calcolo dei personal computer. Essi si basano su un area di lavoro, detta foglio di lavoro, EXCEL PER WINDOWS95 1.Introduzione ai fogli elettronici I fogli elettronici sono delle applicazioni che permettono di sfruttare le potenzialità di calcolo dei personal computer. Essi si basano su un area

Dettagli

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

Capitolo 13: L offerta dell impresa e il surplus del produttore Capitolo 13: L offerta dell impresa e il surplus del produttore 13.1: Introduzione L analisi dei due capitoli precedenti ha fornito tutti i concetti necessari per affrontare l argomento di questo capitolo:

Dettagli

Guida all uso di Java Diagrammi ER

Guida all uso di Java Diagrammi ER Guida all uso di Java Diagrammi ER Ver. 1.1 Alessandro Ballini 16/5/2004 Questa guida ha lo scopo di mostrare gli aspetti fondamentali dell utilizzo dell applicazione Java Diagrammi ER. Inizieremo con

Dettagli

PROTOTIPAZIONE DI UN TRADUTTORE DA SORGENTE PLC AD ASSEMBLY DI UNA MACCHINA VIRTUALE

PROTOTIPAZIONE DI UN TRADUTTORE DA SORGENTE PLC AD ASSEMBLY DI UNA MACCHINA VIRTUALE PROTOTIPAZIONE DI UN TRADUTTORE DA SORGENTE PLC AD ASSEMBLY DI UNA MACCHINA VIRTUALE Relatore: prof. Michele Moro Laureando: Marco Beggio Corso di laurea in Ingegneria Informatica Anno Accademico 2006-2007

Dettagli

La Programmazione Lineare

La Programmazione Lineare 4 La Programmazione Lineare 4.1 INTERPRETAZIONE GEOMETRICA DI UN PROBLEMA DI PROGRAMMAZIONE LINEARE Esercizio 4.1.1 Fornire una rappresentazione geometrica e risolvere graficamente i seguenti problemi

Dettagli

Protocollo di tracciamento e valutazione degli studenti dei corsi di italiano ICoNLingua A.A. 2013-2014

Protocollo di tracciamento e valutazione degli studenti dei corsi di italiano ICoNLingua A.A. 2013-2014 Progetto ICoNLingua Scienza senza Frontiere CsF- Italia Protocollo di tracciamento e valutazione degli studenti dei corsi di italiano ICoNLingua A.A. 2013-2014 1. Introduzione La valutazione sia in itinere

Dettagli

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

. A primi passi con microsoft a.ccepss SommarIo: i S 1. aprire e chiudere microsoft access Start (o avvio) l i b tutti i pro- grammi Capitolo Terzo Primi passi con Microsoft Access Sommario: 1. Aprire e chiudere Microsoft Access. - 2. Aprire un database esistente. - 3. La barra multifunzione di Microsoft Access 2007. - 4. Creare e salvare

Dettagli

GHPPEditor è un software realizzato per produrre in modo rapido e guidato un part program per controlli numerici Heidenhain.

GHPPEditor è un software realizzato per produrre in modo rapido e guidato un part program per controlli numerici Heidenhain. *+33(GLWRU GHPPEditor è un software realizzato per produrre in modo rapido e guidato un part program per controlli numerici Heidenhain. Il programma si basa su un architettura di tasti funzionali presenti

Dettagli

Esercizi su. Funzioni

Esercizi su. Funzioni Esercizi su Funzioni ๒ Varie Tracce extra Sul sito del corso ๓ Esercizi funz_max.cc funz_fattoriale.cc ๔ Documentazione Il codice va documentato (commentato) Leggibilità Riduzione degli errori Manutenibilità

Dettagli

MANUALE ESSE3 Gestione Registro delle lezioni

MANUALE ESSE3 Gestione Registro delle lezioni MANUALE ESSE3 Gestione Registro delle lezioni DOCENTI 1 INDICE 1. INTRODUZIONE E ACCESSO... 3 2. GESTIONE DEL REGISTRO... 4 2.1. Informazioni generali... 6 2.2. Stato del Registro... 7 2.2.1. Transizioni

Dettagli

Lezione 8. La macchina universale

Lezione 8. La macchina universale Lezione 8 Algoritmi La macchina universale Un elaboratore o computer è una macchina digitale, elettronica, automatica capace di effettuare trasformazioni o elaborazioni su i dati digitale= l informazione

Dettagli

Regione Toscana. ARPA Fonte Dati. Manuale Amministratore. L. Folchi (TAI) Redatto da

Regione Toscana. ARPA Fonte Dati. Manuale Amministratore. L. Folchi (TAI) Redatto da ARPA Fonte Dati Regione Toscana Redatto da L. Folchi (TAI) Rivisto da Approvato da Versione 1.0 Data emissione 06/08/13 Stato DRAFT 1 Versione Data Descrizione 1,0 06/08/13 Versione Iniziale 2 Sommario

Dettagli

ALGORITMO DEL SIMPLESSO

ALGORITMO DEL SIMPLESSO ALGORITMO DEL SIMPLESSO ESERCITAZIONI DI RICERCA OPERATIVA 1 ESERCIZIO 1. Risolvere il seguente programma lineare (a) con il metodo del simplesso e (b) con il metodo grafico. (1) min x 1 x () (3) (4) (5)

Dettagli

Lande Immortali: Riepilogo dello Stato di Avanzamento del Progetto

Lande Immortali: Riepilogo dello Stato di Avanzamento del Progetto Lande Immortali: Riepilogo dello Stato di Avanzamento del Progetto Progetto a cura di Martino Michele Matricola: 0124000461 Miglio Stefano Matricola: 0124000462 Obiettivi Iniziali Si intende realizzare

Dettagli

Matematica generale CTF

Matematica generale CTF Successioni numeriche 19 agosto 2015 Definizione di successione Monotonìa e limitatezza Forme indeterminate Successioni infinitesime Comportamento asintotico Criterio del rapporto per le successioni Definizione

Dettagli

Appunti sulla Macchina di Turing. Macchina di Turing

Appunti sulla Macchina di Turing. Macchina di Turing Macchina di Turing Una macchina di Turing è costituita dai seguenti elementi (vedi fig. 1): a) una unità di memoria, detta memoria esterna, consistente in un nastro illimitato in entrambi i sensi e suddiviso

Dettagli

MANUALE MOODLE STUDENTI. Accesso al Materiale Didattico

MANUALE MOODLE STUDENTI. Accesso al Materiale Didattico MANUALE MOODLE STUDENTI Accesso al Materiale Didattico 1 INDICE 1. INTRODUZIONE ALLA PIATTAFORMA MOODLE... 3 1.1. Corso Moodle... 4 2. ACCESSO ALLA PIATTAFORMA... 7 2.1. Accesso diretto alla piattaforma...

Dettagli

Le funzioni continue. A. Pisani Liceo Classico Dante Alighieri A.S. 2002-03. A. Pisani, appunti di Matematica 1

Le funzioni continue. A. Pisani Liceo Classico Dante Alighieri A.S. 2002-03. A. Pisani, appunti di Matematica 1 Le funzioni continue A. Pisani Liceo Classico Dante Alighieri A.S. -3 A. Pisani, appunti di Matematica 1 Nota bene Questi appunti sono da intendere come guida allo studio e come riassunto di quanto illustrato

Dettagli

Concetti di base di ingegneria del software

Concetti di base di ingegneria del software Concetti di base di ingegneria del software [Dalle dispense del corso «Ingegneria del software» del prof. A. Furfaro (UNICAL)] Principali qualità del software Correttezza Affidabilità Robustezza Efficienza

Dettagli

PROCEDURA INVENTARIO DI MAGAZZINO di FINE ESERCIZIO (dalla versione 3.2.0)

PROCEDURA INVENTARIO DI MAGAZZINO di FINE ESERCIZIO (dalla versione 3.2.0) PROCEDURA INVENTARIO DI MAGAZZINO di FINE ESERCIZIO (dalla versione 3.2.0) (Da effettuare non prima del 01/01/2011) Le istruzioni si basano su un azienda che ha circa 1000 articoli, che utilizza l ultimo

Dettagli

LE SUCCESSIONI 1. COS E UNA SUCCESSIONE

LE SUCCESSIONI 1. COS E UNA SUCCESSIONE LE SUCCESSIONI 1. COS E UNA SUCCESSIONE La sequenza costituisce un esempio di SUCCESSIONE. Ecco un altro esempio di successione: Una successione è dunque una sequenza infinita di numeri reali (ma potrebbe

Dettagli

SISTEMI MULTIAGENTE. Esercizio

SISTEMI MULTIAGENTE. Esercizio Esercizio SISTEMI MULTIAGENTE Nello studio dei sistemi dinamici complessi la simulazione al computer ha un ruolo importante dal momento che presenta molti vantaggi rispetto ai metodi sperimentali più tradizionali;

Dettagli

RICERCA OPERATIVA GRUPPO B prova scritta del 22 marzo 2007

RICERCA OPERATIVA GRUPPO B prova scritta del 22 marzo 2007 RICERCA OPERATIVA GRUPPO B prova scritta del 22 marzo 2007 Rispondere alle seguenti domande marcando a penna la lettera corrispondente alla risposta ritenuta corretta (una sola tra quelle riportate). Se

Dettagli

Dispensa di Informatica I.1

Dispensa di Informatica I.1 IL COMPUTER: CONCETTI GENERALI Il Computer (o elaboratore) è un insieme di dispositivi di diversa natura in grado di acquisire dall'esterno dati e algoritmi e produrre in uscita i risultati dell'elaborazione.

Dettagli

Uso di base delle funzioni in Microsoft Excel

Uso di base delle funzioni in Microsoft Excel Uso di base delle funzioni in Microsoft Excel Le funzioni Una funzione è un operatore che applicato a uno o più argomenti (valori, siano essi numeri con virgola, numeri interi, stringhe di caratteri) restituisce

Dettagli

1. PRIME PROPRIETÀ 2

1. PRIME PROPRIETÀ 2 RELAZIONI 1. Prime proprietà Il significato comune del concetto di relazione è facilmente intuibile: due elementi sono in relazione se c è un legame tra loro descritto da una certa proprietà; ad esempio,

Dettagli

Gestione Rapporti (Calcolo Aree)

Gestione Rapporti (Calcolo Aree) Gestione Rapporti (Calcolo Aree) L interfaccia dello strumento generale «Gestione Rapporti»...3 Accedere all interfaccia (toolbar)...3 Comandi associati alle icone della toolbar...4 La finestra di dialogo

Dettagli

Corso di Matematica per la Chimica

Corso di Matematica per la Chimica Dott.ssa Maria Carmela De Bonis a.a. 203-4 I sistemi lineari Generalità sui sistemi lineari Molti problemi dell ingegneria, della fisica, della chimica, dell informatica e dell economia, si modellizzano

Dettagli

Politecnico di Milano. Facoltà di Ingegneria Industriale. Corso di Analisi e Geometria 2. Sezione D-G. (Docente: Federico Lastaria).

Politecnico di Milano. Facoltà di Ingegneria Industriale. Corso di Analisi e Geometria 2. Sezione D-G. (Docente: Federico Lastaria). Politecnico di Milano. Facoltà di Ingegneria Industriale. Corso di Analisi e Geometria 2. Sezione D-G. (Docente: Federico Lastaria). Aprile 20 Indice Serie numeriche. Serie convergenti, divergenti, indeterminate.....................

Dettagli

LA RICLASSIFICAZIONE DEI SALDI CONTABILI CON MICROSOFT ACCESS 2007

LA RICLASSIFICAZIONE DEI SALDI CONTABILI CON MICROSOFT ACCESS 2007 LA RICLASSIFICAZIONE DEI SALDI CONTABILI CON MICROSOFT ACCESS 2007 La fase di riclassificazione del bilancio riveste un ruolo molto importante al fine di comprendere l andamento aziendale; essa consiste,

Dettagli

Lezione 9: Cambio di base

Lezione 9: Cambio di base Lezione 9: Cambio di base In questa lezione vogliamo affrontare uno degli argomenti piu ostici per lo studente e cioè il cambio di base all interno di uno spazio vettoriale, inoltre cercheremo di capire

Dettagli

Probabilità discreta

Probabilità discreta Probabilità discreta Daniele A. Gewurz 1 Che probabilità c è che succeda...? Una delle applicazioni della combinatoria è nel calcolo di probabilità discrete. Quando abbiamo a che fare con un fenomeno che

Dettagli

MS Word per la TESI. Barra degli strumenti. Rientri. Formattare un paragrafo. Cos è? Barra degli strumenti

MS Word per la TESI. Barra degli strumenti. Rientri. Formattare un paragrafo. Cos è? Barra degli strumenti MS Word per la TESI Barra degli strumenti Cos è? Barra degli strumenti Formattazione di un paragrafo Formattazione dei caratteri Gli stili Tabelle, figure, formule Intestazione e piè di pagina Indice e

Dettagli

Mon Ami 3000 Varianti articolo Gestione di varianti articoli

Mon Ami 3000 Varianti articolo Gestione di varianti articoli Prerequisiti Mon Ami 3000 Varianti articolo Gestione di varianti articoli L opzione Varianti articolo è disponibile per le versioni Azienda Light e Azienda Pro e include tre funzionalità distinte: 1. Gestione

Dettagli

( x) ( x) 0. Equazioni irrazionali

( x) ( x) 0. Equazioni irrazionali Equazioni irrazionali Definizione: si definisce equazione irrazionale un equazione in cui compaiono uno o più radicali contenenti l incognita. Esempio 7 Ricordiamo quanto visto sulle condizioni di esistenza

Dettagli

Come modificare la propria Home Page e gli elementi correlati

Come modificare la propria Home Page e gli elementi correlati Come modificare la propria Home Page e gli elementi correlati Versione del documento: 3.0 Ultimo aggiornamento: 2006-09-15 Riferimento: webmaster (webmaster.economia@unimi.it) La modifica delle informazioni

Dettagli

4. Operazioni elementari per righe e colonne

4. Operazioni elementari per righe e colonne 4. Operazioni elementari per righe e colonne Sia K un campo, e sia A una matrice m n a elementi in K. Una operazione elementare per righe sulla matrice A è una operazione di uno dei seguenti tre tipi:

Dettagli

Università degli Studi di Messina

Università degli Studi di Messina Università degli Studi di Messina Guida alla Rendicontazione on-line delle Attività del Docente Versione della revisione: 2.02/2013-07 A cura di: Fabio Adelardi Università degli studi di Messina Centro

Dettagli

MOCA. Modulo Candidatura. http://www.federscacchi.it/moca. moca@federscacchi.it. [Manuale versione 1.0 marzo 2013]

MOCA. Modulo Candidatura. http://www.federscacchi.it/moca. moca@federscacchi.it. [Manuale versione 1.0 marzo 2013] MOCA Modulo Candidatura http://www.federscacchi.it/moca moca@federscacchi.it [Manuale versione 1.0 marzo 2013] 1/12 MOCA in breve MOCA è una funzionalità del sito web della FSI che permette di inserire

Dettagli

ARCHIVI E DATABASE (prof. Ivaldi Giuliano)

ARCHIVI E DATABASE (prof. Ivaldi Giuliano) ARCHIVI E DATABASE (prof. Ivaldi Giuliano) Archivio: è un insieme di registrazioni (o records) ciascuna delle quali è costituita da un insieme prefissato di informazioni elementari dette attributi (o campi).

Dettagli

risulta (x) = 1 se x < 0.

risulta (x) = 1 se x < 0. Questo file si pone come obiettivo quello di mostrarvi come lo studio di una funzione reale di una variabile reale, nella cui espressione compare un qualche valore assoluto, possa essere svolto senza necessariamente

Dettagli

Automazione Industriale (scheduling+mms) scheduling+mms. adacher@dia.uniroma3.it

Automazione Industriale (scheduling+mms) scheduling+mms. adacher@dia.uniroma3.it Automazione Industriale (scheduling+mms) scheduling+mms adacher@dia.uniroma3.it Introduzione Sistemi e Modelli Lo studio e l analisi di sistemi tramite una rappresentazione astratta o una sua formalizzazione

Dettagli

1 Applicazioni Lineari tra Spazi Vettoriali

1 Applicazioni Lineari tra Spazi Vettoriali 1 Applicazioni Lineari tra Spazi Vettoriali Definizione 1 (Applicazioni lineari) Si chiama applicazione lineare una applicazione tra uno spazio vettoriale ed uno spazio vettoriale sul campo tale che "!$%!

Dettagli

Guida alla registrazione on-line di un DataLogger

Guida alla registrazione on-line di un DataLogger NovaProject s.r.l. Guida alla registrazione on-line di un DataLogger Revisione 3.0 3/08/2010 Partita IVA / Codice Fiscale: 03034090542 pag. 1 di 17 Contenuti Il presente documento è una guida all accesso

Dettagli

Database. Si ringrazia Marco Bertini per le slides

Database. Si ringrazia Marco Bertini per le slides Database Si ringrazia Marco Bertini per le slides Obiettivo Concetti base dati e informazioni cos è un database terminologia Modelli organizzativi flat file database relazionali Principi e linee guida

Dettagli

Scopo della lezione. Informatica. Informatica - def. 1. Informatica

Scopo della lezione. Informatica. Informatica - def. 1. Informatica Scopo della lezione Informatica per le lauree triennali LEZIONE 1 - Che cos è l informatica Introdurre i concetti base della materia Definire le differenze tra hardware e software Individuare le applicazioni

Dettagli

1) GESTIONE DELLE POSTAZIONI REMOTE

1) GESTIONE DELLE POSTAZIONI REMOTE IMPORTAZIONE ESPORTAZIONE DATI VIA FTP Per FTP ( FILE TRANSFER PROTOCOL) si intende il protocollo di internet che permette di trasferire documenti di qualsiasi tipo tra siti differenti. Per l utilizzo

Dettagli

Corso di Informatica

Corso di Informatica Corso di Informatica Modulo T3 1-Sottoprogrammi 1 Prerequisiti Tecnica top-down Programmazione elementare 2 1 Introduzione Lo scopo di questa Unità è utilizzare la metodologia di progettazione top-down

Dettagli

Cosa è un foglio elettronico

Cosa è un foglio elettronico Cosa è un foglio elettronico Versione informatica del foglio contabile Strumento per l elaborazione di numeri (ma non solo...) I valori inseriti possono essere modificati, analizzati, elaborati, ripetuti

Dettagli

CERTIFICATI DIGITALI. Manuale Utente

CERTIFICATI DIGITALI. Manuale Utente CERTIFICATI DIGITALI Procedure di installazione, rimozione, archiviazione Manuale Utente versione 1.0 pag. 1 pag. 2 di30 Sommario CERTIFICATI DIGITALI...1 Manuale Utente...1 Sommario...2 Introduzione...3

Dettagli

4 Dispense di Matematica per il biennio dell Istituto I.S.I.S. Gaetano Filangieri di Frattamaggiore EQUAZIONI FRATTE E SISTEMI DI EQUAZIONI

4 Dispense di Matematica per il biennio dell Istituto I.S.I.S. Gaetano Filangieri di Frattamaggiore EQUAZIONI FRATTE E SISTEMI DI EQUAZIONI 119 4 Dispense di Matematica per il biennio dell Istituto I.S.I.S. Gaetano Filangieri di Frattamaggiore EQUAZIONI FRATTE E SISTEMI DI EQUAZIONI Indice degli Argomenti: TEMA N. 1 : INSIEMI NUMERICI E CALCOLO

Dettagli

ALLEGATO 14 PROBLEMATICHE APPLICATIVE PASSERELLA ESPORTAZIONE DATI E CAPRES

ALLEGATO 14 PROBLEMATICHE APPLICATIVE PASSERELLA ESPORTAZIONE DATI E CAPRES ALLEGATO 14 PROBLEMATICHE APPLICATIVE PASSERELLA ESPORTAZIONE DATI E CAPRES 1 INTRODUZIONE Il presente documento illustra le problematiche tecniche emerse nell utilizzo degli applicativi Viriato e Capres

Dettagli

ESSE3 ESSE3 GUIDA ALLA COMPILAZIONE DEL PIANO DI STUDI ON-LINE. Autori: Distribuito a: Modifiche rispetto alle revisioni precedenti:

ESSE3 ESSE3 GUIDA ALLA COMPILAZIONE DEL PIANO DI STUDI ON-LINE. Autori: Distribuito a: Modifiche rispetto alle revisioni precedenti: ESSE3 Autori: Distribuito a: Modifiche rispetto alle revisioni precedenti: Gruppo di progetto Esse3 Studenti Ateneo Rev. 1.0 del 17 nov 2014 Codice Documento: S3_PdSOnLine Pagina 1 di 20 Sommario ESSE3...

Dettagli

NUOVA PROCEDURA COPIA ED INCOLLA PER L INSERIMENTO DELLE CLASSIFICHE NEL SISTEMA INFORMATICO KSPORT.

NUOVA PROCEDURA COPIA ED INCOLLA PER L INSERIMENTO DELLE CLASSIFICHE NEL SISTEMA INFORMATICO KSPORT. NUOVA PROCEDURA COPIA ED INCOLLA PER L INSERIMENTO DELLE CLASSIFICHE NEL SISTEMA INFORMATICO KSPORT. Con l utilizzo delle procedure di iscrizione on line la società organizzatrice ha a disposizione tutti

Dettagli

B+Trees. Introduzione

B+Trees. Introduzione B+Trees Introduzione B+Trees Il B+Trees e la variante maggiormente utilizzata dei BTrees BTrees e B+trees fanno parte della famiglia degli alberi di ricerca. Nel B+Trees i dati sono memorizzati solo nelle

Dettagli

InitZero s.r.l. Via P. Calamandrei, 24-52100 Arezzo email: info@initzero.it

InitZero s.r.l. Via P. Calamandrei, 24-52100 Arezzo email: info@initzero.it izticket Il programma izticket permette la gestione delle chiamate di intervento tecnico. E un applicazione web, basata su un potente application server java, testata con i più diffusi browser (quali Firefox,

Dettagli

PULSANTI E PAGINE Sommario PULSANTI E PAGINE...1

PULSANTI E PAGINE Sommario PULSANTI E PAGINE...1 Pagina 1 Sommario...1 Apertura...2 Visualizzazioni...2 Elenco...2 Testo sul pulsante e altre informazioni...3 Comandi...3 Informazioni...4 Flow chart...5 Comandi...6 Pulsanti Principali e Pulsanti Dipendenti...6

Dettagli

Esercizi Capitolo 6 - Alberi binari di ricerca

Esercizi Capitolo 6 - Alberi binari di ricerca Esercizi Capitolo 6 - Alberi binari di ricerca Alberto Montresor 23 settembre 200 Alcuni degli esercizi che seguono sono associati alle rispettive soluzioni. Se il vostro lettore PDF lo consente, è possibile

Dettagli

CORSO ACCESS PARTE II. Esistono diversi tipi di aiuto forniti con Access, generalmente accessibili tramite la barra dei menu (?)

CORSO ACCESS PARTE II. Esistono diversi tipi di aiuto forniti con Access, generalmente accessibili tramite la barra dei menu (?) Ambiente Access La Guida di Access Esistono diversi tipi di aiuto forniti con Access, generalmente accessibili tramite la barra dei menu (?) Guida in linea Guida rapida Assistente di Office indicazioni

Dettagli

per immagini guida avanzata Uso delle tabelle e dei grafici Pivot Geometra Luigi Amato Guida Avanzata per immagini excel 2000 1

per immagini guida avanzata Uso delle tabelle e dei grafici Pivot Geometra Luigi Amato Guida Avanzata per immagini excel 2000 1 Uso delle tabelle e dei grafici Pivot Geometra Luigi Amato Guida Avanzata per immagini excel 2000 1 Una tabella Pivot usa dati a due dimensioni per creare una tabella a tre dimensioni, cioè una tabella

Dettagli

ESEMPIO 1: eseguire il complemento a 10 di 765

ESEMPIO 1: eseguire il complemento a 10 di 765 COMPLEMENTO A 10 DI UN NUMERO DECIMALE Sia dato un numero N 10 in base 10 di n cifre. Il complemento a 10 di tale numero (N ) si ottiene sottraendo il numero stesso a 10 n. ESEMPIO 1: eseguire il complemento

Dettagli

Alla ricerca dell algoritmo. Scoprire e formalizzare algoritmi.

Alla ricerca dell algoritmo. Scoprire e formalizzare algoritmi. PROGETTO SeT Il ciclo dell informazione Alla ricerca dell algoritmo. Scoprire e formalizzare algoritmi. Scuola media Istituto comprensivo di Fagagna (Udine) Insegnanti referenti: Guerra Annalja, Gianquinto

Dettagli

DOCUMENTO ESERCITAZIONE ONENOTE. Utilizzare Microsoft Offi ce OneNote 2003: esercitazione rapida

DOCUMENTO ESERCITAZIONE ONENOTE. Utilizzare Microsoft Offi ce OneNote 2003: esercitazione rapida Utilizzare Microsoft Offi ce OneNote 2003: esercitazione rapida MICROSOFT OFFICE ONENOTE 2003 AUMENTA LA PRODUTTIVITÀ CONSENTENDO AGLI UTENTI L ACQUISIZIONE COMPLETA, L ORGANIZZAZIONE EFFICIENTE E IL RIUTILIZZO

Dettagli

CONTROLLO ORTOGRAFICO E GRAMMATICALE

CONTROLLO ORTOGRAFICO E GRAMMATICALE CONTROLLO ORTOGRAFICO E GRAMMATICALE Quando una parola non è presente nel dizionario di Word, oppure nello scrivere una frase si commettono errori grammaticali, allora si può eseguire una delle seguenti

Dettagli

Volume GESTFLORA. Gestione aziende agricole e floricole. Guidaall uso del software

Volume GESTFLORA. Gestione aziende agricole e floricole. Guidaall uso del software Volume GESTFLORA Gestione aziende agricole e floricole Guidaall uso del software GESTIONE AZIENDE AGRICOLE E FLORICOLE Guida all uso del software GestFlora Ver. 2.00 Inter-Ware Srl Viadegli Innocenti,

Dettagli

Le equazioni. Diapositive riassemblate e rielaborate da prof. Antonio Manca da materiali offerti dalla rete.

Le equazioni. Diapositive riassemblate e rielaborate da prof. Antonio Manca da materiali offerti dalla rete. Le equazioni Diapositive riassemblate e rielaborate da prof. Antonio Manca da materiali offerti dalla rete. Definizione e caratteristiche Chiamiamo equazione l uguaglianza tra due espressioni algebriche,

Dettagli

Progetto: ARPA Fonte Dati. ARPA Fonte Dati. Regione Toscana. Manuale Amministratore

Progetto: ARPA Fonte Dati. ARPA Fonte Dati. Regione Toscana. Manuale Amministratore ARPA Fonte Dati Regione Toscana 1 Redatto da L. Folchi (TAI) Rivisto da Approvato da Versione 1.1 Data emissione 09/10/13 Stato FINAL 2 Versione Data Descrizione 1,0 06/08/13 Versione Iniziale 1.1 09/10/2013

Dettagli

Sistema operativo. Sommario. Sistema operativo...1 Browser...1. Convenzioni adottate

Sistema operativo. Sommario. Sistema operativo...1 Browser...1. Convenzioni adottate MODULO BASE Quanto segue deve essere rispettato se si vuole che le immagini presentate nei vari moduli corrispondano, con buona probabilità, a quanto apparirà nello schermo del proprio computer nel momento

Dettagli

FPf per Windows 3.1. Guida all uso

FPf per Windows 3.1. Guida all uso FPf per Windows 3.1 Guida all uso 3 Configurazione di una rete locale Versione 1.0 del 18/05/2004 Guida 03 ver 02.doc Pagina 1 Scenario di riferimento In figura è mostrata una possibile soluzione di rete

Dettagli

Introduzione al MATLAB c Parte 2

Introduzione al MATLAB c Parte 2 Introduzione al MATLAB c Parte 2 Lucia Gastaldi Dipartimento di Matematica, http://dm.ing.unibs.it/gastaldi/ 18 gennaio 2008 Outline 1 M-file di tipo Script e Function Script Function 2 Costrutti di programmazione

Dettagli

Matematica in laboratorio

Matematica in laboratorio Unità 1 Attività guidate Attività 1 Foglio elettronico Divisibilità tra numeri naturali Costruisci un foglio di lavoro per determinare se a è divisibile per b, essendo a e b due numeri naturali, con a

Dettagli

Lezioni di Ricerca Operativa. Corso di Laurea in Informatica Università di Salerno. Lezione n 4

Lezioni di Ricerca Operativa. Corso di Laurea in Informatica Università di Salerno. Lezione n 4 Lezioni di Ricerca Operativa Lezione n 4 - Problemi di Programmazione Matematica - Problemi Lineari e Problemi Lineari Interi - Forma Canonica. Forma Standard Corso di Laurea in Informatica Università

Dettagli

Gestione delle formazione

Gestione delle formazione IL SOFTWARE PER LA SICUREZZA E L AMBIENTE STRUMENTO Individuazione delle esigenze e programmazione della formazione Gestione delle formazione Il metodo di Risolvo per gestire un piano formativo dinamico

Dettagli

Alla scoperta della nuova interfaccia di Office 2010

Alla scoperta della nuova interfaccia di Office 2010 Alla scoperta della nuova interfaccia di Office 2010 Una delle novità più eclatanti della versione 2007 era la nuova interfaccia con la barra multifunzione. Office 2010 mantiene questa filosofia di interfaccia

Dettagli

Ricerca Operativa e Logistica Dott. F.Carrabs e Dott.ssa M.Gentili. Introduzione

Ricerca Operativa e Logistica Dott. F.Carrabs e Dott.ssa M.Gentili. Introduzione Ricerca Operativa e Logistica Dott. F.Carrabs e Dott.ssa M.Gentili Introduzione La Ricerca Operativa La Ricerca Operativa è una disciplina relativamente recente. Il termine Ricerca Operativa è stato coniato

Dettagli

Correttezza. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 10. A. Miola Novembre 2007

Correttezza. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 10. A. Miola Novembre 2007 Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1 Dispensa 10 Correttezza A. Miola Novembre 2007 http://www.dia.uniroma3.it/~java/fondinf1/ Correttezza 1 Contenuti Introduzione alla correttezza

Dettagli

Database 1 biblioteca universitaria. Testo del quesito

Database 1 biblioteca universitaria. Testo del quesito Database 1 biblioteca universitaria Testo del quesito Una biblioteca universitaria acquista testi didattici su indicazione dei professori e cura il prestito dei testi agli studenti. La biblioteca vuole

Dettagli

Corso di Informatica

Corso di Informatica Corso di Informatica Modulo T2 3-Compilatori e interpreti 1 Prerequisiti Principi di programmazione Utilizzo di un compilatore 2 1 Introduzione Una volta progettato un algoritmo codificato in un linguaggio

Dettagli

Il controllo della visualizzazione

Il controllo della visualizzazione Capitolo 3 Il controllo della visualizzazione Per disegnare in modo preciso è necessario regolare continuamente l inquadratura in modo da vedere la parte di disegno che interessa. Saper utilizzare gli

Dettagli