Перейти до основного вмісту

Планування робіт на одній машині

Це завдання полягає в пошуку оптимального розкладу для nn робіт на одній машині, якщо роботу ii можна виконати за час tit_i, але за tt секунд очікування перед початком виконання роботи доводиться сплатити штраф fi(t)f_i(t).

Отже, завдання полягає в тому, щоб знайти таку перестановку робіт, за якої сумарний штраф буде мінімальним. Якщо ми позначимо через π\pi перестановку робіт (π1\pi_1 — перший оброблений елемент, π2\pi_2 — другий тощо), то сумарний штраф дорівнює:

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)
Коли підходить цей алгоритм?
  • Чи всі роботи виконуються на одній машині, а оптимізуємо порядок задля мінімального сумарного штрафу за очікування? (якщо машин дві → Планування задач на двох машинах)
  • Чи функція штрафу належить до випадків, де працює метод перестановок — лінійна, експоненційна або однакова монотонна (теорема Лівшиця–Кладова)?
  • Чи можна знайти оптимум простим сортуванням за компаратором сусідніх робіт?

Розв'язки для окремих випадків

Лінійні функції штрафу

Спершу розв'яжемо задачу для випадку, коли всі функції штрафу fi(t)f_i(t) є лінійними, тобто мають вигляд fi(t)=citf_i(t) = c_i \cdot t, де cic_i — невід'ємне число. Зауважимо, що ці функції не мають сталого члена. Інакше ми могли б додати всі сталі члени і розв'язати задачу без них.

Зафіксуймо деяку перестановку π\pi і візьмімо індекс i=1n1i = 1 \dots n-1. Нехай перестановка π\pi' дорівнює перестановці π\pi із переставленими елементами ii та i+1i+1. Подивімося, наскільки змінився штраф.

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

Легко бачити, що зміни відбуваються лише в ii-му та (i+1)(i+1)-му доданках:

=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}

Легко бачити, що якщо розклад π\pi є оптимальним, то будь-яка зміна в ньому призводить до збільшення штрафу (або до того самого штрафу), тому для оптимального розкладу можемо записати таку умову:

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

А після перегрупування отримуємо:

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

Таким чином, ми отримуємо оптимальний розклад, просто відсортувавши роботи за дробом citi\frac{c_i}{t_i} у незростаючому порядку.

Слід зауважити, що ми побудували цей алгоритм за допомогою так званого методу перестановок: ми спробували поміняти місцями два сусідні елементи, обчислили, наскільки змінився штраф, а потім вивели алгоритм для пошуку оптимального методу.

Експоненційна функція штрафу

Нехай функція штрафу має такий вигляд:

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

де всі числа cic_i невід'ємні, а стала α\alpha додатна.

Застосувавши метод перестановок, легко визначити, що роботи потрібно відсортувати в незростаючому порядку за значенням:

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

Однакова монотонна функція штрафу

У цьому випадку ми розглядаємо ситуацію, коли всі fi(t)f_i(t) рівні, і ця функція монотонно зростає.

Очевидно, що в цьому випадку оптимальною перестановкою є впорядкування робіт за неспадним часом виконання tit_i.

Теорема Лівшиця-Кладова

Теорема Лівшиця-Кладова стверджує, що метод перестановок застосовний лише для трьох згаданих вище випадків, а саме:

  • Лінійний випадок: fi(t)=ci(t)+dif_i(t) = c_i(t) + d_i, де cic_i — невід'ємні сталі,
  • Експоненційний випадок: fi(t)=cieαt+dif_i(t) = c_i \cdot e_{\alpha \cdot t} + d_i, де cic_i та α\alpha — додатні сталі,
  • Однаковий випадок: fi(t)=ϕ(t)f_i(t) = \phi(t), де ϕ\phi — монотонно зростаюча функція.

У всіх інших випадках метод застосувати неможливо.

Теорема доводиться за припущення, що функції штрафу є достатньо гладкими (існує третя похідна).

У всіх трьох випадках ми застосовуємо метод перестановок, за допомогою якого шуканий оптимальний розклад можна знайти сортуванням, отже, за час O(nlogn)O(n \log n).