La soluci´on ´optima al problema del equilibrado de carga es aquella que distribuye las clases de conflicto entre las replicas de tal forma que la carga ponderada de todas las r´eplicas es la misma, es decir, la desviaci´on est´andar de la carga de las r´eplicas es cero. Obtener tal distribuci´on es pr´acticamente imposible ya que no es posible dividir las clases de conflicto para repartir su carga entre diferentes r´eplicas. Por tanto se considera como soluci´on ´optima aquella que minimice la dispersi´on de la carga entre todas las replicas, o dicho de otra forma, la distribuci´on que haga que la desviaci´on est´andar de la carga sea m´ınima.
Para obtener la soluci´on ´optima al problema es necesario comprobar todas las asig- naciones posibles de clases de conflicto a r´eplicas y seleccionar aquella con la menor
Algoritmo 5 Esquema general del algoritmo de ramificaci´on y poda Queue of node Q Node u, v Initialize Q v ← root of T best ← Value of v Insert v into Q
while Q is not empty do
Remove v from Q
if bound of v is better than best then for each child u of v do
if value of u is better than best then
best ← Value of u
end if
if bound of u is better than best then
Insert u into Q
end if end for end if end while
desviaci´on est´andar. Este tipo de soluci´on, que implica buscar la soluci´on a trav´es de todo el espacio de soluciones posibles utilizando una b´usqueda exhaustiva, es imposible. As´ı que con el fin de ser lo m´as preciso posibles se ha implementado un algoritmo de ramificaci´on y poda (Branch and Bound ) [NN98, BB97, MOOMVL04]. El algoritmo de ramificaci´on y poda (algoritmo 5) calcula una soluci´on ´optima buscando a trav´es del espacio de soluciones bas´andose en la generaci´on de un ´arbol de expansi´on.
Para poder utilizar el algoritmo de ramificaci´on y poda es necesario que las soluciones est´en expresadas en forma de tuplas (x1, x2, ..., xn). Una soluci´on parcial es una tupla
(x1, x2, ..., xk) con k < n. Como es imposible revisar todo el espacio de soluciones, cada
vez que se obtiene una soluci´on parcial es necesario verificar la viabilidad de ´esta antes de seguir trabajando con ella. En cada expansi´on del ´arbol de b´usqueda, el algoritmo calcula para cada nuevo nodo una cota inferior para la soluci´on parcial obtenida utilizando una funci´on de estimaci´on para comprobar si dicha soluci´on parcial es prometedora o no. Si el valor de la cota inferior no es mejor que la soluci´on actual, se puede deducir que la rama no conducir´a a una soluci´on que mejore la soluci´on actual y, por tanto, no merece la pena seguir explorando esa rama y se poda. La funci´on de estimaci´on que se utilice ha de ser creciente respecto a la profundidad del ´arbol, es decir, si h es la funci´on de estimaci´on, entonces h(n1)≤ h(n2) para todo n2 nodo descendiente de n1.
El algoritmo de ramificaci´on y poda desarrollado (algoritmo 6) recorre el espacio de soluciones construyendo un ´arbol de expansi´on donde cada nodo intermedio es una asignaci´on parcial de clases de conflicto a las r´eplicas y los nodos hoja son las asignaciones
Algoritmo 6 El algoritmo de ramificaci´on y poda para la asignaci´on Get current standard deviation (σc)
while there is unexplored branches do
Get the branch with the best lower bound Build the next level of the sub-tree
if there is no unassigned conflict classes left for the branch then for every leaf node of the tree do
Apply the decision function
end for else
for every leaf node of the sub-tree do
Apply the bound function
end for end if end while
Install current best solution as new assignment
completas. Cada nivel del ´arbol se construye asignando una de las clase de conflicto que no est´a asignada a cada una de las r´eplicas, de esta forma se van construyendo las soluciones parciales.
Algoritmo 7 La funci´on de cota
Get the lower bound applying the estimation function
if the lower bound is not better than the current standard deviation then
Prune the current branch
else
Save the branch
end if
A cada soluci´on parcial obtenida se le aplica la funci´on de cota definida (algoritmo 7) que utiliza una funci´on de estimaci´on (algoritmo 8) de la desviaci´on est´andar sobre la soluci´on parcial, si la cota inferior obtenida no es mejor que el valor actual de la desviaci´on est´andar, la rama se poda ya que esa soluci´on parcial no conducir´a a una mejor soluci´on.
Cuando se obtiene una soluci´on completa, es decir, se alcanza un nodo hoja de una rama, se aplica una funci´on de decisi´on (algoritmo 9). La funci´on de decisi´on calcula la desviaci´on est´andar de la soluci´on encontrada y la compara con la desviaci´on est´andar de la mejor soluci´on obtenida hasta el momento (inicialmente se considera que la asignaci´on actual como la mejor soluci´on obtenida hasta el momento). Si el valor obtenido es mejor que el actual, la nueva asignaci´on se guarda como la mejor soluci´on obtenida hasta ese momento.
Algoritmo 8 La funci´on de estimaci´on
if for every node load (wi) is lower than the average load (µ) then
Return 0.0 as estimation
else
Distribute the unassigned load among the nodes with load lower than the average (µ) Compute the standard deviation of the assignment obtained c(σ)
Return c(σ) as estimation
end if
Algoritmo 9 La funci´on de decisi´on
Compute the standard deviation of the new assignment (σn)
if (σn< σc) then
Set solution standard deviation as new standard deviation (σc)
Save solution as current best solution
end if
momento la asignaci´on que est´a guardada como la mejor soluci´on obtenida hasta el momento se convierte en la nueva asignaci´on que se instalar´a en el sistema.
5 10 20 30 10 100 1000 0,00E+00 1,00E+10 2,00E+10 3,00E+10 4,00E+10 5,00E+10 6,00E+10 7,00E+10 8,00E+10 9,00E+10 t i m e ( u s e c ) #replicas # object sets
Branch & bound - Normal distribution (desv. 100)
Figura 5.1: Tiempo de c´alculo del algoritmo de ramificaci´on y poda (Distribuci´on nor- mal)
Para comprobar la eficiencia del algoritmo de ramificaci´on y poda se han hecho pruebas utilizando diferentes escenarios en los que el n´umero de r´eplicas var´ıa de 5 a 30 r´eplicas y el n´umero de clases de conflicto var´ıa de 10 clases de conflicto a 1000. Las figuras 5.1 y 5.2 muestran los tiempos de c´alculo (en microsegundos) utilizados por el algoritmo para obtener la nueva distribuci´on. La figura 5.1 muestra los resultados del primer escenario utilizado, donde la carga se ha generado utilizando una distribuci´on
5 10 20 30 10 100 1000 0,00E+00 1,00E+10 2,00E+10 3,00E+10 4,00E+10 5,00E+10 6,00E+10 7,00E+10 8,00E+10 9,00E+10 t i m e ( u s e c ) #replicas # object sets
Branch & bound - Zipf distribution (skew 0.5)
Figura 5.2: Tiempo de c´alculo del algoritmo de ramificaci´on y poda (Distribuci´on zipf)
normal con desviaci´on t´ıpica 100 y la figura 5.2 muestra el segundo escenario, donde la carga se ha generado utilizando una distribuci´on Zipf1 (con α = 0,5).