UniTO/anno2/YearI/FirstSem/CR/lesson19-04122017.md
Francesco Mecca 5e286062f8 MCAD 2019
2018-11-22 13:09:11 +01:00

100 lines
5.3 KiB
Markdown

# Congestione come problema di allocazione
Lo studio del congestion avoidance come problema di ottimizzazione di allocazione di risorse. **E' un problema definito in programmazione non lineare**.
Studio di:
* Come allocare risorse (divisione di banda) di modo da ottimizzare una certa funzione / obbiettivo
La soluzione potrebbe essere non ottimale, ma la formulazione in termini di ottimizzazione puo' guidare la rete e gli utenti verso un punto di funzionamento **desiderabile**.
Le soluzioni si presentano come **algoritmi distribuiti, decentralizzati, asincroni.**
## Il modello
La rete e' vista come un insieme di link {l}, di capacita' {c[l]}.
Supponiamo che le sorgenti abbiano un routing statico (che quindi e' noto come insieme di link utilizzati). Chiamiamo `xs` il **rate** associato con la sorgente `S`.
*(slides per esempio semplice e definizioni)*
Con queste ipotesi, il problema dell'**assegnare la banda ai flussi noti**, che presenta infinite soluzioni.
### Funzioni di utilita'
Utilizziamo delle **funzioni di utilita'**: `U[s](xs)` che rappresentano il *gradimento* della sorgente al rate `xs`. Le funzioni di utilita' sono supposte **concave del tasso di sorgente** `xs`.
*Nota: concava = prendendo due punti sulla funzione, la funzione e' sempre maggiore del segmento che unisce quei due punti*.
La concavita' rappresenta il fenomeno dei **diminishing returns**. Vuol dire che in corrispondenza di un certo aumento (di banda in questo caso) i corrispondenti elementi di gradimento diventano sempre minori, quindi hanno meno impatto sul gradimento (U(x)). Questo vuol anche dire che per avere lo stesso effetto di gradimento, a rate maggiore bisogna associare incrementi maggiori.
### Massimizzare l'utilita'
Il problema si presenta quindi come **la ricerca dell'allocazione di banda che massimizza l'utilita' tra tutti i flussi dati**.
## Formulazione come problema classico (Kelly, anni '90)
```
il max su (x0,x1,x2) della sommatoria per i da (1,3) di U[i](xi)
Con vincoli:
x0 + x1 <= cA
x0 + x2 <= cB
xi >= 0
```
Si nota come i vincoli abbiano forma lineare, ma il problema e' la sommatoria di funzioni non lineari => **non lineare**.
### Programmazione non lineare
Si presentano i principi della programmazione non lineare.
#### Ottimizzazione Convessa
Esiste una classe di problemi di programmazione non lineare che possono essere risolti con relativamente poca fatica. Sono i problemi che riguardano l'ottimizzazione convessa. Nel nostro caso, la somma di funzioni concave e' una concava, e i vincoli definiscono un insieme convesso.
* All'interno di questo insieme, risulta facile trovare il punto di **massimo** di una funzione **strettamente concava**. Se la funzione e' **strettamente convessa**, risulta invece facile trovare il **minimo**.
##### Trovare il massimo di una funzione concava
Trovare il massimo di una funzione in piu' variabili e' semplice in quanto si definisce come il **gradiente = 0**. Questo pero' non considera il caso in cui il massimo si trovi sul **limite dell'insieme**, ossia quello in cui la derivata non e' definita / non e' 0 (se si considera una porzione minore della curva).
Per ovviare a questo problema, si puo' utilizzare una **funzione lagrangiana**.
##### Funzioni lagrangiane
Supponiamo di dover calcolare il massimo di una `f(x)` appartenente a un insieme convesso `C`, dovendo rispettare dei **vincoli**, che possono essere:
* Vincoli con uguaglianza `g[j](x) = 0`
* Vincoli con disuguaglianza `h[j](x) <= 0`
I vincoli sono generalmente funzioni non lineari.
Senza i vincoli, sarebbe sufficiente porre il gradiente = 0, ma con i vincoli il massimo e' spesso sul bordo dell'insieme.
Per questo, si studia una funzione in cui:
* i vincoli sono stati sostituiti all'interno della funzione obbiettivo, moltiplicati per i **moltiplicatori di Lagrange**, nella forma:
```
L (x, lambda, u) = f(x) - sommatoria per i di (lambda[i]*h[i]) // nota: porre lambda >= 0 implica il segno -
L (x, lambda, u) = f(x) + sommatoria per j di (u[j]*g[j])
```
Questo riconduce la funzione obbiettivo a una funzione senza vincoli, detta **funzione lagrangiana**, in cui la soluzione per **gradiente = 0** e' valida.
La soluzione sara' quindi:
```
per ogni valore di i, la derivata dL/dxi = 0
per ogni valore di i, lambda*hi(x) = 0 // qui lambda e' != 0 solo se il vincolo non e' saturo, ossia se il vincolo non rappresenta un punto sul bordo del problema. Si noti come queste siano condizioni di complementary slackness, dove si analizzano le variabili duali del problema.
```
### Problema di ottimizzazione (di Kelly)
E' un problema a livello di sistema: massimizzare l'utilita' totale del sistema, trattando le sorgenti in modo equo, non e' praticamente risolvibile **in maniera centralizzata**. Il problema viene pero' risolto in maniera distribuito, in cui ogni sorgente risolve un **sottoproblema** fa convergere la rete alla soluzione ottima del problema centralizzato.
*(vedi slides)*
### Problema secondario: fairness
Come assegnare la banda di modo da:
* rispettare **equita'** rispetto ai link
* non eccedere la capacita' dei link
Per ovviare al problema, si utilizza **l'allocazione di risorse alpha-fair**. *(vedi slides)*
Si definisce inoltre la **proportional fairness** *(vedi slides)* e la **max-min fairness** *(vedi slides)*
*(vedi slides su come separare un problema di ottimizzazione in algoritmi distribuiti)*