Участник:Dominica — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
м (Источники информации)
м
Строка 1: Строка 1:
 
<tex dpi = "200" >1 \mid r_i, p_i = 1 \mid \sum f_i</tex>
 
<tex dpi = "200" >1 \mid r_i, p_i = 1 \mid \sum f_i</tex>
  
{{Задача
+
 
|definition= <ol>
+
Для каждой работы задана монотонно неубывающая функция <tex>f_i</tex>. Необходимо минимизировать <tex> \sum f_i, </tex> где каждая <tex>f_i</tex> считается на значении времени завершения выполнения задания с номером <tex>i</tex>.
<li>Имеется один станок.</li>
 
<li>Есть <tex>n</tex> работ, каждая из которых выполняется за единицу времени.</li>
 
<li> Каждая работа имеет своё время появления <tex>r_i</tex>. </li>
 
<li>Для каждой работы задана монотонно неубывающая функция <tex>f_i</tex>. </li>
 
</ol>
 
Необходимо минимизировать <tex> \sum f_i, </tex> где <tex>f_i</tex> {{---}} значение функции <tex>f_i</tex> в момент завершения выполнения задания с номером <tex>i</tex>.
 
}}
 
  
 
==Решение==
 
==Решение==
Строка 18: Строка 11:
 
Далее будет показано, что при построении оптимального расписания нам нужно будет рассмотреть всего <tex>n</tex> различных времен начала работ. Следовательно, подобная задача может быть решена за <tex>O(n^3)</tex>.
 
Далее будет показано, что при построении оптимального расписания нам нужно будет рассмотреть всего <tex>n</tex> различных времен начала работ. Следовательно, подобная задача может быть решена за <tex>O(n^3)</tex>.
  
Поскольку <tex>f_i</tex> {{---}} монотонно неубывающие функции, то это значит, что в оптимальном расписании работы должны начинать исполняться как можно раньше. Первые <tex>n</tex> самых ранних для начала исполнения времен <tex>t_i</tex> могут быть вычислены следующим алгоритмом, в котором мы предполагаем, что все работы отсортированы по неубыванию времени появления <tex>r_i</tex>:
+
Поскольку <tex>f_i</tex> {{---}} монотонно неубывающие функции, то это значит, что в оптимальном расписании работы должны начинать исполняться как можно раньше. Первые <tex>n</tex> самых ранних для начала исполнения времен <tex>t_i</tex> могут быть вычислены следующим алгоритмом :  
  
 +
  отсортиртировать по неубыванию времена появления <tex>r_i</tex>
 
   <tex>t_1</tex> = <tex>r_1</tex>
 
   <tex>t_1</tex> = <tex>r_1</tex>
 
   '''for''' <tex> i \in \{ 2 \ldots n \} </tex>
 
   '''for''' <tex> i \in \{ 2 \ldots n \} </tex>
Строка 25: Строка 19:
  
  
Для того, чтобы найти оптимальное расписание, построим полный двудольный граф, в котором будут доли <tex>V_1 = \left \{ 1,\ldots,n \right\} и  V_2 = \left \{ t_1,\ldots,t_n \right\}</tex> и ребра <tex>c_{ij}</tex> между ними:
+
Для того, чтобы найти оптимальное расписание, построим полный [[Основные_определения_теории_графов#Двудольный_граф |двудольный граф]], в котором будут доли <tex>V_1 = \left \{ 1,\ldots,n \right\} и  V_2 = \left \{ t_1,\ldots,t_n \right\}</tex> и ребра <tex>c_{ij}</tex> между ними:
 
<p>
 
<p>
 
<tex>
 
<tex>
 
c_{ij} =
 
c_{ij} =
 
\left \{\begin{array}{ll} f_i(t_j + 1), &  r_i \leqslant  t_i \\
 
\left \{\begin{array}{ll} f_i(t_j + 1), &  r_i \leqslant  t_i \\
\infty, & otherwise
+
\infty, & \mathrm{otherwise}
 
\end{array} \right.
 
\end{array} \right.
 
</tex>
 
</tex>
Строка 46: Строка 40:
 
}}
 
}}
  
 +
==См. также ==
 +
* [[Классификация задач]]
 +
* [[1precpmtnrifmax|<tex>1 \mid prec, pmtn, r_i \mid f_{\max}</tex>]]
 
== Источники информации ==
 
== Источники информации ==
 
* P. Brucker. Scheduling Algorithms (2006), 5th edition, стр. 19 - 20
 
* P. Brucker. Scheduling Algorithms (2006), 5th edition, стр. 19 - 20

Версия 02:50, 16 мая 2016

[math]1 \mid r_i, p_i = 1 \mid \sum f_i[/math]


Для каждой работы задана монотонно неубывающая функция [math]f_i[/math]. Необходимо минимизировать [math] \sum f_i, [/math] где каждая [math]f_i[/math] считается на значении времени завершения выполнения задания с номером [math]i[/math].

Решение

Эта задача может быть решена сведением к решению задачи о назначениях. А именно, покажем, что решение задачи состоит в сопоставлении [math]n[/math] различным заданиям различных времен начала выполнения работы. Если сопоставляем работе [math]i[/math] время [math]t[/math], то вклад в целевую функцию будет [math] f_i(t + 1) [/math].

Далее будет показано, что при построении оптимального расписания нам нужно будет рассмотреть всего [math]n[/math] различных времен начала работ. Следовательно, подобная задача может быть решена за [math]O(n^3)[/math].

Поскольку [math]f_i[/math] — монотонно неубывающие функции, то это значит, что в оптимальном расписании работы должны начинать исполняться как можно раньше. Первые [math]n[/math] самых ранних для начала исполнения времен [math]t_i[/math] могут быть вычислены следующим алгоритмом :

 отсортиртировать по неубыванию времена появления [math]r_i[/math]
 [math]t_1[/math] = [math]r_1[/math]
 for [math] i \in \{ 2 \ldots n \} [/math]
   [math]t_i[/math] = [math]\max(r_i, t_{i-1} + 1)[/math]


Для того, чтобы найти оптимальное расписание, построим полный двудольный граф, в котором будут доли [math]V_1 = \left \{ 1,\ldots,n \right\} и V_2 = \left \{ t_1,\ldots,t_n \right\}[/math] и ребра [math]c_{ij}[/math] между ними:

[math] c_{ij} = \left \{\begin{array}{ll} f_i(t_j + 1), & r_i \leqslant t_i \\ \infty, & \mathrm{otherwise} \end{array} \right. [/math]

Решив задачу о назначениях для данного графа, получим оптимальное расписание.

Доказательство корректности и оптимальности

Лемма:
Существует оптимальное расписание [math]S[/math] в котором все [math]n[/math] задач распределены по всем временам [math]t_i (i = 1\ldots n)[/math], которые выбирает приведенный выше алгоритм.
Доказательство:
[math]\triangleright[/math]

Предположим, что в некоторое оптимальное расписание [math]S[/math] входят времена [math] t_1 \ldots t_j, [/math] где [math] j \lt n[/math] и из всех возможных оптимальных расписаний мы возьмем то, у которого [math]j[/math] будет максимально.

Из того, как в алгоритме выбирались значения для [math]t_i[/math] следует, что [math]t_{j + 1}[/math] — минимальное возможное время, большее [math]t_j,[/math] в которое можно начать выполнять какое-нибудь из оставшихся заданий. Если во время [math]t_{j+1}[/math] в расписании [math]S[/math] не выполняется никакого задания, то какое-то задание, которое могло бы выполнится в момент времени [math]t_{j+1}[/math] выполняется в [math]S[/math] позднее. Значит оно может быть перемещено в нашем расписании [math]S[/math] на время [math]t_{j+1}[/math] без увеличения целевой функции. Таким образом, наше новое расписание тоже будет оптимальным. Получили противоречие с максимальностью [math]j[/math]. Значит из всех оптимальных расписаний нам подходят только те, в которых [math]j = n[/math].
[math]\triangleleft[/math]

См. также

Источники информации

  • P. Brucker. Scheduling Algorithms (2006), 5th edition, стр. 19 - 20