2. Si ricorda che:
l'uso degli appunti qui presenti è consentito per solo uso personale e di studio;
la consultazione è gratuita ed ogni forma atta a ricavarne lucro è vietata!
gli appunti sono fatti da studenti che non possono assumersi nessuna responsabilità in merito;
il materiale qui presente non è sostitutivo ma complementare ai libri di testo:
- devi (e ti consiglio) di consultare e comprare i libri di testo;
il materiale qui presente è distribuito con licenza Creative Commons
Ti ricordo che se vuoi contribuire mandando degli appunti o quant'altro possa essere utile ad altri
puoi farlo inviando il materiale tramite: http://profland.altervista.org/mail.htm
Profman
Il file è stato scaricato/visualizzato in forma gratuita da Profland: http://profland.altervista.org
sezione Profstudio http://profland.altervista.org/profstudio/profstudio.htm
oppure da qualche mirror, come: www.profland.cjb.net www.profland.135.it
o dalla pagina dedicata su slideshare.net: www.slideshare.net/profman
www.profland.135.it 2
3. Problemi di ottimizzazione
Nel campo economico e finanziario molti problemi
possono essere descritti mediante modelli matematici di
ricerca di un minimo o di un massimo di una funzione di
una o più variabili, soggetta o meno a restrizioni.
Questi problemi, definiti di ottimizzazione, nella loro
formulazione matematica, richiedono l’individuazione di:
variabili decisionali: descrivono quantitativamente le
decisioni da prendere, quantizzando il problema;
funzione obiettivo lineare: rappresenta
l’oggetto da massimizzare o minimizzare ed è
funzione delle variabili, graficamente (in un sistema
a 2 dimensioni) è raffigurata da una retta
vincoli lineari: descrivono le limitazioni da imporre alle
variabili; possono essere disequazioni o equazioni di tipo
lineare. 3
4. Tutto ciò rappresenta un modello di programmazione lineare,
nell’ambito del quale:
si può ricondurre un problema di minimo ad uno di massimo e
viceversa considerando la funzione opposta: min f(x) = - max f(x);
possono ricondursi i vincoli di uguaglianza a vincoli di
disuguaglianza, i vincoli di minore a vincoli di maggiore e, viceversa,
moltiplicando entrambi i membri della disequazione per la quantità
(-1).
Si avranno sempre vincoli di non-negatività sulle grandezze input per
impedire che l’output assuma valori negativi e quindi inaccettabili per
il significato economico.
I vincoli di disequazioni rappresentano graficamente una parte di
piano. L’insieme di vincoli, quindi, costituisce la regione delle soluzioni
ammissibili. L’insieme di queste ultime costituisce un poliedro
complesso e la soluzione di massimo (o minimo) che si ricerca è in un
vertice di questa stessa figura bidimensionale.
www.profland.135.it 4
5. Se i vincoli, per quanto numerosi, sono limitati a 2 o 3 variabili, il problema
può essere generalmente risolto con il metodo grafico
Tecnica geometrica
1. si rappresentano graficamente i vincoli di disuguaglianza dopo aver
risolto ciascuna equazione, rispetto alla prima variabile in termini
della seconda variabile;
2.si traccia su un altro grafico il campo delle soluzioni ammissibili;
3. si calcola l’inclinazione della funzione obiettivo, facendo assumere ad
una riga questa stessa inclinazione e spostandola poi fino al punto di
contatto con la funzione obiettivo;
4 dal punto di contatto appena trovato si traccia una linea, ad esempio,
tratteggiata;
5. si leggono poi i valori critici delle variabili in corrispondenza del
punto di contatto, e si stima la funzione obiettivo in corrispondenza
di questi valori.
www.profland.135.it 5
6. Tecniche algebriche (simplesso)
Nel trasformare i vincoli di “minore o uguale” si aggiunge una quantità positiva (S 1) al
primo membro della disequazione e si ottiene un’equazione equivalente
x1 + x2 ≤ 10
aggiungendo una variabile positiva diventa
x1 + x2 + S1 = 10 (con S1 ≥ 0)
La variabile S1 è detta variabile slack (ovvero fittizie, inattive) ed è già implicitamente
definita nel vincolo espresso con la disequazione.
Nel trasformare i vincoli di “maggiore o uguale” in equazioni, si sottrae una quantità S 2 al
primo membro della disequazione, ottenendo
x1 + x2 ≥ 10
sottraendo la variabile S2 diventa
x1 + x2 - S2 = 10
anche la variabile S2 è detta variabile slack ed è già implicitamente definita nel vincolo
espresso con la disequazione.
Si rileva che con l’introduzione delle variabili slack aumenta la dimensione dello spazio
delle soluzioni ammissibili: in altre parole aumenta il numero delle incognite, rimane
invariato il numero delle equazioni, e quindi si può ipotizzare un numero di equazioni (m)
inferiore al numero di incognite (n). Ne consegue che se il rango della matrice è inferiore al
numero delle incognite il sistema ammetterà infinite soluzioni.
www.profland.135.it 6
7. Prima di illustrare l’idea alla base del metodo del simplesso bisogna illustrare le seguenti
proprietà:
L’idea del simplesso è la seguente:
si parte da un vertice (per costruzione l’origine) a cui corrisponde un valore della
funzione obiettivo, si cerca poi di passare ad un’altra soluzione ammissibile di base,
relativa ad un vertice adiacente, tale che il valore corrispondente della funzione
obiettivo sia maggiore del precedente; quando non si passa più da un vertice ad un
altro, vuol dire che si è trovato il massimo valore a cui corrisponde la funzione
obiettivo.
www.profland.135.it 7
8. A priori il problema deve avere soluzioni immettendo il vincolo di
positività di termini noti.
La procedura è la seguente:
1. determinare una soluzione iniziale ammissibile di base;
2. se la soluzione è ottima, stop; altrimenti proseguire in sequenza;
3. determinare, tra le variabili non basiche, la variabile xr che deve
entrare a far parte delle variabili basiche;
4. determinare tra le variabili basiche la variabile x k che si deve
scambiare con xr e che quindi deve diventare non basica;
5. calcolare le coordinate del vertice adiacente – individuato
precedentemente – che rappresenta la nuova soluzione corrente
ammissibile di base e proseguire dal passo 2.
www.profland.135.it 8
9. Algoritmo del simplesso
Metodo del simplesso standard:
[illim,fo,x]=simplesso(A,b,c,maxit)
risolve il problema di programmazione lineare
max cx
con i vincoli:
• Ax<=b
• x(i)>=0 per ogni i
• b(i)>=0 per ogni i
www.profland.135.it 9
10. [illim,fo,x]=simplesso(A,b,c,maxit)
INPUT:
A = matrice dei coefficienti dei vincoli
b = vettore colonna dei termini noti
delle (dis)equazioni di vincolo
c = vettore riga dei coefficienti
della funzione obiettivo
maxit = numero di passi prima di individuare
una possibile iterazione
www.profland.135.it 10
11. [illim,fo,x]=simplesso(A,b,c,maxit)
OUTPUT:
La funzione restituisce in x il valore della
soluzione ottima e in fo il valore della
funzione obiettivo se il problema ammette
ottimo finito (illim=0).
illim
1 SE il problema non ammette ottimo
2 SE i dati forniti non sono corretti
(in tal caso x e fo sono vuoti)
illim =
3 SE è probabile una ciclicità
www.profland.135.it 11
12. INIZIO
Controllo della correttezza dei dati
Isempty SI
ON
(find(b<0))
NOma == mb SI
NOna == nc SI
Costruzione della prima tavola
Inizializzazione
Errore Individuazione dell'indice della variabile entrante
Errore Iterazioni
Errore
www.profland.135.it 12
FINE
13. Controllo della correttezza dei dati
ma = numero di righe della matrice A
>> [ma,na]=size(A); na = numero di colonne della matrice A
mb = numero di righe del vettore b
>> [mb,nb]=size(b);
nb = numero di colonne del vettore b
mc= numero di righe del vettore c
>> [mc,nc]=size(c);
nc= numero di colonne del vettore c
Data una matrice X di m righe ed n colonne,
[m,n]=size(X) restituisce:
m = numero di righe di X
13
n = numero di colonne di X
14. Controllo della correttezza dei dati
>> if nb~=1 Un vettore colonna è tale se possiede solo
>> b=b'; una colonna. Se nb (che esprime il numero di
colonne di b) non è pari ad uno, è chiaro che
>> mb=nb; b non è un vettore colonna.
>> nb=1; Probabilmente, l'utente lo ha passato come
vettore riga; si opera quindi la trasposizione e
>> end si ridefinisce mb e nb.
Un vettore riga è tale se possiede solo una
>> if mc~=1 riga. Se mc (che esprime il numero di righe di
>> c=c'; c) non è pari ad uno, è chiaro che c non è un
vettore riga.
>> nc=mc;
Probabilmente, l'utente lo ha passato come
>> mc=1; vettore colonna; si opera quindi la
>> end trasposizione e si ridefinisce mc e nc. 14
15. if isempty(find(b<0))
L'applicazione del metodo del simplesso per la risoluzione di
problemi economici di ottimizzazione implica che i termini noti
delle (dis)equazioni di vincolo non siano negativi (altrimenti
verrebbe meno il significato economico di tali vincoli)
Pertanto:
viene attivata la ricerca (mediante FIND) degli elementi di b
eventualemente negativi e, se questi sono presenti:
è visualizzato un messaggio di errore, nel quale si
dichiara che i termini noti ("componenti di b") non
possono assumere valori negativi
www.profland.135.it 15
16. Occorre verificare la compatibilità tra A e b,
if ma==mb ovvero se il numero di righe delle due strutture
(matriciale l'una, vettoriale l'altra) sia identico
Analogamente, si rende necessaria la verifica
della compatibilità tra A e c, ovvero se il
if na==nc numero di colonne delle due strutture
(matriciale l'una, vettoriale l'altra) sia identico
Qualora tale compatibilità manchi,
• è predisposta la segnalazione di uno specifico
MESSAGGIO DI ERRORE,
• si pone illim=2,
• si pongono gli output fo e x vettori vuoti
www.profland.135.it 16
17. Costruzione della prima tavola
A=[A, eye(ma)];
c=[-c,zeros(1,ma)];
Ab=[b,A];
T=[fo,c;Ab];
[mt,nt]=size(T);
fo=0;
Inizializzazione
iB=na+1:na+ma;
it=0;
illim=0;
Individuazione dell'indice della variabile entrante
[cmin,r]=min(T(1,2:nt)); cmin= valore più piccolo tra quelli
rt=r+1; selezionati;
www.profland.135.it r = suo indice all'interno del vettore esaminato
17
da min
18. Iterazioni
while cmin<0
& ~illim & it<maxit
lim=find(T(2:mt,rt)>0)
0 1
isempty(lim)
Individuazione dell'indice Errore
della variabile uscente
Sostituzione della illim=1
variabile nella base
Definizione delle
variabili di output
Individuazione dell'indice della variabile entrante
Incremento di rt e it, da utilizzare come parametri per il passo successivo
18
19. in matlab…
% Individuazione dell'indice della variabile uscente
[rmin,k]=min(T(lim+1,1)./T(lim+1,rt));
k=lim(k);
kt=k+1;
T=gj1(T,rt,kt);
% Sostituzione della variabile nella base
iB(k)=r;
% Definizione delle variabili di output
fo=T(1,1);
x=zeros(1,na+ma);
x(iB)=T(2:mt,1);
% Individuazione dell'indice della variabile entrante
[cmin,r]=min(T(1,2:nt));
% Incremento di rt e it, da utilizzare come parametri per il passo successivo
rt=r+1; it=it+1;
19
20. Il file è stato scaricato/visualizzato in forma gratuita da Profland:
http://profland.altervista.org
sezione Profstudio
http://profland.altervista.org/profstudio/profstudio.htm
oppure da qualche mirror, come:
www.profland.cjb.net www.profland.135.it
o dalla pagina dedicata su slideshare.net:
www.slideshare.net/profman
www.profland.135.it 20