Skip to Content

Planificar trabajos en una máquina

Esta tarea trata de hallar un plan óptimo para nn trabajos en una sola máquina, si el trabajo ii se puede procesar en tiempo tit_i, pero por los tt segundos de espera antes de procesar el trabajo hay que pagar una penalización de fi(t)f_i(t).

Así, la tarea pide hallar una permutación de los trabajos tal que la penalización total sea mínima. Si denotamos por π\pi la permutación de los trabajos (π1\pi_1 es el primer ítem procesado, π2\pi_2 el segundo, etc.), entonces la penalización total es igual a:

F(π)=fπ1(0)+fπ2(tπ1)+fπ3(tπ1+tπ2)++fπn(i=1n1tπi)F(\pi) = f_{\pi_1}(0) + f_{\pi_2}(t_{\pi_1}) + f_{\pi_3}(t_{\pi_1} + t_{\pi_2}) + \dots + f_{\pi_n}\left(\sum_{i=1}^{n-1} t_{\pi_i}\right)

Soluciones para casos especiales

Funciones de penalización lineales

Primero resolveremos el problema en el caso de que todas las funciones de penalización fi(t)f_i(t) son lineales, es decir, tienen la forma fi(t)=citf_i(t) = c_i \cdot t, donde cic_i es un número no negativo. Nótese que estas funciones no tienen un término constante. En caso contrario podemos sumar todos los términos constantes, y resolver el problema sin ellos.

Fijemos alguna permutación π\pi, y tomemos un índice i=1n1i = 1 \dots n-1. Sea la permutación π\pi’ igual a la permutación π\pi con los elementos ii e i+1i+1 intercambiados. Veamos cuánto cambió la penalización.

F(π)F(π)=F(\pi’) - F(\pi) =

Es fácil ver que los cambios solo ocurren en los sumandos ii-ésimo e (i+1)(i+1)-ésimo:

=cπik=1i1tπk+cπi+1k=1itπkcπik=1i1tπkcπi+1k=1itπk=cπi+1k=1i1tπk+cπik=1itπkcπik=1i1tπkcπi+1k=1itπk=cπitπi+1cπi+1tπi\begin{align} &= c_{\pi_i'} \cdot \sum_{k = 1}^{i-1} t_{\pi_k'} + c_{\pi_{i+1}'} \cdot \sum_{k = 1}^i t_{\pi_k'} - c_{\pi_i} \cdot \sum_{k = 1}^{i-1} t_{\pi_k} - c_{\pi_{i+1}} \cdot \sum_{k = 1}^i t_{\pi_k} \ &= c_{\pi_{i+1}} \cdot \sum_{k = 1}^{i-1} t_{\pi_k'} + c_{\pi_i} \cdot \sum_{k = 1}^i t_{\pi_k'} - c_{\pi_i} \cdot \sum_{k = 1}^{i-1} t_{\pi_k} - c_{\pi_{i+1}} \cdot \sum_{k = 1}^i t_{\pi_k} \ &= c_{\pi_i} \cdot t_{\pi_{i+1}} - c_{\pi_{i+1}} \cdot t_{\pi_i} \end{align}

Es fácil ver que si el plan π\pi es óptimo, entonces cualquier cambio en él lleva a una penalización aumentada (o a la penalización idéntica); por lo tanto para el plan óptimo podemos escribir la siguiente condición:

cπitπi+1cπi+1tπi0i=1n1c_{\pi_{i}} \cdot t_{\pi_{i+1}} - c_{\pi_{i+1}} \cdot t_{\pi_i} \ge 0 \quad \forall i = 1 \dots n-1

Y tras reordenar obtenemos:

cπitπicπi+1tπi+1i=1n1\frac{c_{\pi_i}}{t_{\pi_i}} \ge \frac{c_{\pi_{i+1}}}{t_{\pi_{i+1}}} \quad \forall i = 1 \dots n-1

Así obtenemos el plan óptimo simplemente ordenando los trabajos por la fracción citi\frac{c_i}{t_i} en orden no creciente.

Cabe señalar que construimos este algoritmo por el llamado método de permutaciones: intentamos intercambiar dos elementos adyacentes, calculamos cuánto cambió la penalización, y luego derivamos el algoritmo para hallar el método óptimo.

Función de penalización exponencial

Sea que la función de penalización se ve así:

fi(t)=cieαt,f_i(t) = c_i \cdot e^{\alpha \cdot t},

donde todos los números cic_i son no negativos y la constante α\alpha es positiva.

Aplicando el método de permutaciones, es fácil determinar que los trabajos deben ordenarse en orden no creciente del valor:

vi=1eαticiv_i = \frac{1 - e^{\alpha \cdot t_i}}{c_i}

Función de penalización monótona idéntica

En este caso consideramos el caso de que todas las fi(t)f_i(t) son iguales, y esta función es monótona creciente.

Es obvio que en este caso la permutación óptima es disponer los trabajos por tiempo de procesamiento tit_i no decreciente.

El teorema de Livshits-Kladov

El teorema de Livshits-Kladov establece que el método de permutaciones solo es aplicable para los tres casos mencionados arriba, es decir:

  • Caso lineal: fi(t)=ci(t)+dif_i(t) = c_i(t) + d_i, donde cic_i son constantes no negativas,
  • Caso exponencial: fi(t)=cieαt+dif_i(t) = c_i \cdot e_{\alpha \cdot t} + d_i, donde cic_i y α\alpha son constantes positivas,
  • Caso idéntico: fi(t)=ϕ(t)f_i(t) = \phi(t), donde ϕ\phi es una función monótona creciente.

En todos los demás casos el método no se puede aplicar.

El teorema se demuestra bajo el supuesto de que las funciones de penalización son suficientemente suaves (existen las terceras derivadas).

En los tres casos aplicamos el método de permutaciones, mediante el cual el plan óptimo deseado se puede hallar por ordenamiento, de ahí en tiempo O(nlogn)O(n \log n).