Ottimizzazione lineare su OpenOffice.org


Update: vedere anche l’analogo articolo su Gnumeric.

Non sono solito usare OpenOffice, visto che uso il computer prevalentemente per programmare, navigare e guardare film (nonché giocare). Ma nel corso di Introduzione all’ottimizzazione a un certo punto veniva usato Microsoft® Excel® per lavori di ottimizzazione lineare (problemi di massimo a di minimo condizionati), ho pensato: “vediamo se anche OpenOffice ce la fa!”. Ed ecco qui il risultato.


Poniamo che il problema che vogliamo risovere sia il seguente:

massimizzare:        2*x - y + 3z
condizionatamente a: x + 2z <= 10
                     x + y >= 2
                     y + z <= 5
                     x, y, z >= 0

Un classico problema a tre variabili con tre condizioni più la condizione di non-negatività. Bene: scriviamo il tutto in Calc:

I dati scritti in OpenOffice. Notare che la colonna D contiene formule.

I dati scritti in OpenOffice. Notare che la colonna D contiene formule.

Scriviamo il problema come ci pare, purché sia comprensibile per noi esseri umani. Io ho usato questo sistema: la colonna A presenta soltanto quelle due scritte in umanese che servono per descrivere il problema; la colonna B contiene le formule in matematichese, mentre la D contiene la stessa cosa in calchese: la colonna B serve a noi che leggiamo il problema, mentre nella colonna D sarà OpenOffice ad aggiornare i calcoli. Come si vede, per esempio, nella cella D1 compare il risultato della funzione obiettivo. OpenOffice si limiterà a modificare i valori delle variabili (ossia le celle D6-D8) e leggere i risultati della funzione obiettivo (D1) e delle condizioni (D3-D5). Gli uguali della colonna C servono a noi per capire che le due colonne si equivalgono. Infine, la colonna F contiene i valori delle condizioni.

Fatto questo, possiamo far partire il motore risolutore. Sotto il menu Strumenti troviamo la voce Risolutore. Si aprirà una finestra dove possiamo impostare il problema:

Finestra del risolutore. Sono presenti solo riferimenti a celle.

Finestra del risolutore. Sono presenti solo riferimenti a celle.

Questa finestra condensa quanto detto nel paragrafo soprastante: la cella di destinazione rappresenta il valore della funziona obiettivo; tramite modifica celle indica le celle che il motore andrà a modificare (cioè le variabili indipendenti x, y e z); quanto alle condizioni, sulla sinistra si indica la cella che contiene il valore della funzione da limitare, mentre sulla destra si inserisce il valore massimo o minimo; in questo caso ho indicato le celle, ma avrei potuto scrivere direttamente i valori. Sotto Opzioni troviamo altre possibili configurazioni, come ad esempio la condizione di non-negatività (che di default è disabilitata).

Impostato il problema anche qui, lasciamo che il risolutore lavori. Il risultato è che il valore massimo della funzione obiettivo è 20.

Il risultato dopo l'esecuzione del risolutore.

Il risultato dopo l'esecuzione del risolutore.

Come si vede, il massimo è appunto 20; la prima è l’unica condizione che limita effettivamente la soluzione, mentre la seconda e la terza non hanno alcun potere restrittivo nel nostro caso.

Certo, OpenOffice in questo tipo di problema non può andare più in là nel dare informazioni riguardo la sensitività del problema o altri particolari di ricerca operativa, come per esempio può fare CPLEX, ma per rapidi calcoli è rapido ed efficace. Inoltre può risolvere molto rapidamente altri tipi di problemi, come problemi in cui il valore della funzione obiettivo non dev’essere massimizzato o minimizzato, ma deve avvicinarsi ad un valore dato.

Dal mio punto di vista è uno strumento efficace e semplice, che andrebbe però esteso un po’ nelle sue qualità e di cui andrebbe messa a disposizione più documentazione. Mi pare che l’unica guida che ho trovato su Calc (che inoltre è per Calc 2, mentre io ho la versione 3) non ne parli affatto; la guida in linea invece si limita a citare l’utilizzo di base, ma è molto poco esplicativo. Peccato.

Advertisements

5 Responses to Ottimizzazione lineare su OpenOffice.org

  1. lorenzo says:

    Compliementi e grazie per la guida.
    L’unica che mi ha fatto davvero capire come usare il risolutore

  2. Raffaele says:

    Innanzitutto complimenti per la guida che trovo veramente ben fatta.
    Tuttavia, come dici, il risolutore in questione non tratta l’analisi di sensibilità ed inoltre non sono riuscito a trovare la possibilità di salvare il modello.
    Siccome personalmente ritengo che queste funzioni siano importantissime (la seconda addirittura indispensabile), mi sembra strano che il risolutore di OpenOffice non possa farle e che invece MS Excel fa.
    Perciò gentilmente ti chiedo se sei a conoscenza di un add-in che renda il risolutore in Calc più efficiente.
    Grazie

  3. Paolo says:

    ciao Andyspiros, ti ringrazio per la guida…
    non riesco però ad utilizzare il risolutore, ho impostato un problema identico al tuo, stessi dati nelle medesime celle, tutto pari pari,ma il risolutore mi dice che il modello è irrealizzabile.
    So di chiederti un gran favore, ma mi serve con una certe urgenza per la mia tesi, non potresti mandarmi il foglio di calcolo realizzato da te?
    La mia è thequarter84@gmail.com.
    Grazie ancora, Paolo

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: