Financial Polis

  Expand All  |  Contact All

 




Vediamo ora come sia possibile, usando un metodo simile a quello precedente, risolvere un problema parametrico di programmazione quadratica tale da consentire di risolvere il problema della selezione dell'insieme dei portafogli efficienti.

Nel modello generato dal problema in questione il parametro appare come moltiplicatore scalare della parte lineare della funzione obiettivo da minimizzare. Indichiamo d'ora in poi questo parametro col simbolo §. Senza limitazione della generalità sottraiamo la parte lineare invece di aggiungerla. Ciò è conforme a quanto richiesto dalla applicazione al problema del portafoglio. Infatti il termine quadratico, che rappresenta il rischio, è un elemento "sgradito" e dunque da minimizzare. Il termine lineare, invece, esprime il rendimento del portafoglio. Esso è evidentemente un fattore "gradito" dell'obiettivo e andrebbe perciò massimizzato. Il cambiamento di segno trasforma il rendimento in un obiettivo da minimizzare come la varianza.

Il parametro §, nel variare tra un valore infinitamente grande e lo zero, esprime un rapporto di trade off fra il termine lineare e quello quadratico. Esso potrebbe venire determinato a priori in base ad una scelta "politica", o meglio dall'analisi della funzione di utilità del decisore, giacché‚ esso indica il tasso marginale di sostituzione fra gli attributi dell'investimento. Il metodo che ci accingiamo a mostrare individua tutte le combinazioni K-efficienti e lascia ad una valutazione successiva la scelta di quella preferita.

Nell'algoritmo di Markowitz-Sharpe, che deriva direttamente dal modello della linea critica, i "valori critici" assunti dal parametro § servono come criterio per determinare la configurazione di base che deve succedere a quella corrente, determinando un nuovo punto angoloso. La formulazione del problema parametrico ricalca quella finora utilizzata ed è la seguente:

 

minimizzare:

 

z = x' C x - § c' x

 

con C simmetrica e almeno semidefinita positiva, il tutto sotto i vincoli:

 

A x + y = b

x ≥ 0 e y ≥ 0

 

con:

 

§ î [0, ì).

Le condizioni di KKT per questo problema sono le seguenti:

 

│ u = 2 C x - § c - A' v

│ A x + y = b

│ u' x = 0

│ v' y = 0

<

│ x ≥ 0

│ y ≥ 0

│ u ≥ 0

│ v ≥ 0

 

Solo la prima equazione è stata modificata rispetto alla solita formulazione. In questo caso, però, i valori delle u non dipendono solo dalla configurazione di base corrente, ma anche dai valori assunti dal parametro §. In generale, le variabili comprese in una delle varie configurazioni di base generate dal metodo, visto che il loro valore verrà determinato tramite l'aggiunta di equazioni contenenti §, non assumono un valore costante e dato per quella configurazione, ma dipendente dal parametro. Se il parametro decresce o aumenta, varia linearmente con esso il valore assunto dalle variabili di base.

Facciamo alcuni esempi. Il valore di u nel tableau di set-up, secondo lo schema generale del metodo del simplesso per la programmazione quadratica, non è c, bensì - § c. In senso lato, possiamo considerare anche le y della configurazione iniziale come variabili dipendenti dal parametro, solo che nella soluzione di set-up appare il termine costante, mentre il coefficiente del parametro è nullo. y assume dunque il valore b come di consueto. Ogni variabile di base può essere genericamente definita come funzione lineare di §. Chiameremo genericamente il termine costante di tale relazione col simbolo K e il coefficiente relativo a § con la lettera k. In base a questa simbologia, il valore di una variabile zi, che è in base in una determinata configurazione, è pari a:

 

zi = Ki + ki §.

 

I valori assunti da Ki e ki vengono ricalcolati ad ogni iterazione della procedura.

Per un certo intervallo di variabilità di §, cambiano dunque secondo una relazione lineare, i valori assegnati alle variabili di base. Se il parametro continua a diminuire, però, prima o poi una delle variabili di base assume, in corrispondenza del valore corrente di esso, il valore zero. Se il parametro scendesse ancora, il valore della variabile diventerebbe negativo e la soluzione corrente non potrebbe essere di ottimo, poiché‚ sono violate le condizioni di KKT. Giacché‚ il problema consiste nel determinare le varie configurazioni del tableau ottimali per tutti i valori di §, ne consegue che, quando il valore del parametro è tale che le condizioni di KKT vengono violate, la configurazione di base deve essere cambiata: la variabile che ha raggiunto, a causa della diminuzione di § il "valore critico" per il rispetto delle condizioni di KKT, cioè lo zero, deve essere rimpiazzata.

Per il rispetto della condizioni di KKT, la variabile che esce deve essere sostituita dalla complementare. La nuova soluzione di base rappresentata in tabella è ottimale (s'intende, per il problema determinato dal valore corrente di § e da quelli compresi in un suo intorno sinistro).

La nuova configurazione di base rappresenta le variabili che sono non nulle nel successivo segmento della curva dei portafogli efficienti. In pratica, ad ogni configurazione di base determinata dalla procedura corrisponde una linea critica di efficienza. In ciascun punto angoloso si incrociano due linee critiche. Infatti, come si può vedere dall'esempio di calcolo del capitolo successivo, non solo il cambiamento di configurazione di base avviene quando una variabile di base si annulla, ma anche la complementare entra col valore zero, per cui avviene, come osserva argutamente il Markowitz, un cambiamento "liscio".

Il fatto che i valori delle variabili di base dipendano dal parametro deve trovare adeguata rappresentazione nella tavola del simplesso utilizzata dal metodo. Ciò non comporta una grande complicazione della struttura del tableau. Seguendo il consiglio di Sharpe, che poi usa il metodo classico della programmazione parametrica lineare, per indicare i valori correnti assunti dalle variabili di base, invece di una colonna, se ne usano due: una per i termini costanti, che poniamo nella consueta colonna zero, ed una, nuova, per k, cioè per i coefficienti di §. Non è necessario che il valore del parametro sia rappresentato esplicitamente nella tabella. Esso può essere benissimo scritto a parte.

E'il caso a questo punto di mostrare come si presenta una simile tavola del simplesso. Si consideri ora una tabella per la programmazione quadratica analoga a quella finora utilizzata, ma con una riga ed una colonna in più, nelle quali collochiamo, rispettivamente, il vettore - c' e - c. Nella colonna zero, nelle prime n righe, invece di scrivere gli elementi di c scriveremo degli zeri:

 

 

significato delle colonne

n. K x y u v k

Riga ┌────────────────┬───────────────────┬───┐

0 │ s' │ 0 0 │ 0 │

├───┬────────────┼───────────────────┼───┤

1 u │ 0 │-2 C 0 │ I A' │-c │

│ │ │ │ │

n+1 y │ b │ A I │ 0 0 │ 0 │

├───┼────────────┼───────────────────┼───┤

n+2 │ 0 │ - c' 0 │ 0 0 │ 0 │

└───┴────────────┴───────────────────┴───┘

Colonna n. 0 1 n+1 n+m+1 2*m+n+1 2*

(n+m)+1

 

Lo scopo della riga in più, che non è stato finora menzionato, diverrà chiaro in seguito.

La prima colonna contiene, come detto, i valori delle parti costanti dei valori assunti dalle variabili di base; l'ultima rappresenta invece i coefficienti del parametro. Le chiameremo, rispettivamente, colonna K e colonna k. Insieme concorrono a formare il valore di ciascuna delle variabili di base, una volta precisato il livello del parametro. Tali colonne assolvono inoltre un altro ruolo: servono come criterio per la determinazione della nuova configurazione di base.

Vediamo ora lo svolgimento di tutta la procedura fin dall'inizio

La prima fase dell'intero algoritmo, come di consueto, serve a trovare una soluzione di base che sia standard e ammissibile per i vincoli. Questo problema è del tutto simile a quello affrontato a proposito del metodo precedente, e può essere risolto col solito accorgimento, cioè trattando come artificiali le y relative alle relazioni originariamente in forma di uguaglianza, preparando una funzione obiettivo che ne minimizzi la somma e procedendo con le regole della programmazione lineare alternando iterazioni

primali e duali simmetriche. Si rimanda ai paragrafi precedenti per maggiori dettagli.

Per applicare l'algoritmo Markowitz-Sharpe vero e proprio però, occorre partire dalla soluzione ottimale per un valore infinito del parametro, e non abbiamo alcuna garanzia che sia proprio quella generata dalla prima fase. Occorre perciò ancora una fase intermedia che assolva a tale compito. Vediamo come si può fare a trovare tale tipo di soluzione.

Se si osserva un momento la funzione obiettivo del problema parametrico in questione, cioè:

 

Min z = x' C x - § c' x

 

si nota che per un valore molto grande del parametro, la funzione obiettivo viene del tutto "dominata" dalla sua parte lineare. Infatti, la minimizzazione dell'obiettivo per § sufficientemente grande sarebbe esattamente equivalente, nei limiti della precisione con cui si effettua il calcolo, a:

 

Min z = - c' x.

 

La seconda fase non consiste perciò in altro che in un banale problema di ottimizzazione lineare. Ecco spiegato lo scopo della riga in più aggiunta al tableau: essa serve a "portarsi dietro", fin dall'inizio, il criterio - c. Ad ogni passo della prima fase il vettore viene automaticamente aggiornato coma tutti gli altri. Nella seconda, esso viene usato come criterio ed a tal fine deve essere dunque trasferito in riga zero.

Tuttavia questa fase della procedura ha in comune con la prima il fatto che ad ogni iterazione primale deve seguire la corrispondente duale simmetrica. La differenza, invece, è che trattandosi di un normale programma lineare,

- non c'è limitazione nell'insieme delle variabili primali che possono uscire dalla base, mentre nella prima fase escono solo le artificiali.

- nessuna variabile viene "bloccata" in base o fuori di essa. Tutte le variabili coinvolte saranno in seguito libere di entrare ed uscire.

Ovviamente si deve tener conto del "bloccaggio" della fase precedente. Come nella prima fase, non può succedere che l'iterazione duale non sia praticabile a causa della nullità del pivot; inoltre si comprende che i "bloccaggi" della prima fase non sono di ostacolo. Se una x ed una y possono scambiarsi lo status, ciò è possibile anche per le rispettive complementari.

Poniamo dunque che l'ottimo della parte lineare della funzione obiettivo sia stato trovato e che la seconda fase sia terminata felicemente. Se tale punto ottimale è unico, è logicamente anche di minima varianza tra tutti quelli di pari valore atteso. Per un problema cosiddetto standard, dove l'unico vincolo proprio è

Σ xi = 1,

l'ottimo lineare è unico, a meno che non ci sia più di un titolo che abbia identico valore atteso. E nel caso, comunque, che l'ottimo lineare non sia unico, che si fa? Pur trattandosi di una caso scolastico, almeno per quanto riguarda la nostra applicazione, bisogna tener presente che bisogna assolutamente trovare la configurazione di minima varianza, altrimenti il metodo dà in seguito risultati sballati. Senza approfondire particolarmente questo problema, bisognerebbe in tal caso introdurre in base una ad una le variabili x per le quali il criterio del simplesso indica il valore zero, fino a trovare una configurazione che abbia tutte le duali in base non negative.

Trovata la configurazione di massimo rendimento assoluto, che poi, in un problema standard, prevede la quota del titolo di massimo rendimento al valore 1 e gli altri al valore 0, arriviamo alla terza e ultima fase. Come abbiamo già accennato, una determinata configurazione di base rimane invariata all'interno di un certo intervallo di variazione del parametro. Per trovare la configurazione di base relativa all'intervallo dei valori del parametro immediatamente inferiore a quello corrente, bisogna individuare la variabile di base che si annulla "per prima", cioè per valori superiori del parametro. Essa deve lasciare la base a "beneficio" della complementare. Va da s‚ che il valore del parametro per il quale la configurazione cambia, determinato nel corso della ricerca, va "scritto da qualche parte", poiché‚ serve a calcolare i valori effettivamente assunti dalle variabili nel punto angoloso. Ma come si determina il valore critico relativo a ciascuna delle variabili?

Abbiamo visto che il valore assunto da ogni variabile di base zi è funzione del parametro § secondo l'espressione:

 

zi = Ki + ki §

 

Ki e ki sono i valori che si trovano nelle colonne K e k in corrispondenza della i-esima variabile di base. Essi vengono ricalcolati ad ogni cambiamento di configurazione. Da ciascuna equazione si può agevolmente calcolare il valore del parametro per il quale zi si annulla. Tale valore, che abbiamo già

più volte nominato col termine valore critico e che indichiamo con §i, è facilmente ottenibile algebricamente:

 

0 = Ki + ki §i ;

§i = - Ki / ki

 

Ad ogni variabile correntemente in base è associato un valore critico.

La variabile che cambia stato "per prima" al decrescere del parametro è quella per cui il relativo §i risulta maggiore.

Il rapporto dei termini Ki e ki nel tableau, cambiato di segno, viene assunto come criterio di cambiamento di configurazione. Bisogna fare attenzione però: vanno escluse a priori dall'uscita quelle variabili, il cui ki (ultima colonna) è negativo. Per tali variabili l'uscita avverrebbe per valori del parametro superiori a quello corrente, per cui dimenticando questo controllo, si entra inevitabilmente in un ciclo chiuso, come è successo allo scrivente per non aver osservato attentamente il diagramma di flusso di Sharpe; ed è proprio questo controllo che consente all'algoritmo di convergere, eliminando successivamente dalla base solo le variabili che in ogni intervallo "diminuiscono al diminuire del parametro".

La regola di trasformazione della tavola relativa a questa terza fase dell'algoritmo è, riassumendo, la seguente:

Esce dalla base, rimpiazzata dalla complementare, la variabile per cui è massimo il rapporto: - Ki / ki con ki maggiore di zero.

Selezionata la variabile in uscita e quella in entrata, non resta che procedere alle solite operazioni di cardine e di aggiornamento dei significati delle righe del tableau. Dopo di che, se si lavora in elaborazione automatica, il codice deve tabulare i valori correnti delle variabili, nonché‚ il valore critico.

Per calcolare i valori effettivamente assunti dalle variabili di base dopo ogni iterazione, è sufficiente considerare il §i in corrispondenza del quale è avvenuto il cambio di configurazione e moltiplicarlo, riga per riga, per k e sommarlo a K. Ciascuno dei valori ottenuti è il valore effettivamente assunto dalla variabile di base nella configurazione corrente.

La procedura termina quando il valore critico massimo per il quale la configurazione corrente deve essere modificata è uguale od inferiore allo zero. Ciò indica infatti che quella attuale è la configurazione finale. Per una valore del parametro pari a zero, si ha la scomparsa della parte lineare e

ci si troverà di fronte al portafoglio di minima varianza assoluta, che, come sappiamo, è il limite inferiore dell'insieme dei portafogli efficienti.

La regola di calcolo di tale metodo è molto più semplice di quella usata nel metodo DWvdP. D'altra parte quest'ultimo è notevolmente più veloce, poiché‚ non deve per forza attraversare punti che siano ottimali in base a due criteri concorrenti. Tuttavia, visto che il metodo di Markowitz-Sharpe si ferma nel punto di minimo assoluto della forma quadratica, i due algoritmi possono essere usati indifferentemente per trovare un ottimo assoluto, purché‚ privo di parte lineare.