<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=188.19.42.255&amp;*</id>
		<title>Викиконспекты - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=188.19.42.255&amp;*"/>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/188.19.42.255"/>
		<updated>2026-05-07T21:18:15Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D0%BE%D0%B4%D1%8B_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B7%D0%B0%D0%B4%D0%B0%D1%87_%D1%82%D0%B5%D0%BE%D1%80%D0%B8%D0%B8_%D1%80%D0%B0%D1%81%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B9&amp;diff=73351</id>
		<title>Методы решения задач теории расписаний</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D0%BE%D0%B4%D1%8B_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B7%D0%B0%D0%B4%D0%B0%D1%87_%D1%82%D0%B5%D0%BE%D1%80%D0%B8%D0%B8_%D1%80%D0%B0%D1%81%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B9&amp;diff=73351"/>
				<updated>2020-03-31T00:34:58Z</updated>
		
		<summary type="html">&lt;p&gt;188.19.42.255: /* P | pmtn | C_max */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Сведение к другой задаче ==&lt;br /&gt;
При сведении текущей задачи теории расписаний &amp;lt;tex&amp;gt; S &amp;lt;/tex&amp;gt; к какой-то другой &amp;lt;tex&amp;gt; S' &amp;lt;/tex&amp;gt; (не обязательно задаче теории расписаний) необходимо доказать два пункта:&lt;br /&gt;
# Допустимость расписания, построенного с помощью задачи &amp;lt;tex&amp;gt; S' &amp;lt;/tex&amp;gt;, или существование способа его трансформации в допустимое без нарушения оптимальности.&lt;br /&gt;
# Следствие того, что если мы оптимизируем &amp;lt;tex&amp;gt; S' &amp;lt;/tex&amp;gt;, мы также оптимизируем ответ для &amp;lt;tex&amp;gt; S &amp;lt;/tex&amp;gt;.&lt;br /&gt;
'''Примечание''': если требуется полиномиальное время для решения задачи, сведение к другой задаче и трансформация расписания в допустимое также должны происходить за полиномиальное время.&lt;br /&gt;
&lt;br /&gt;
С помощью этого метода решаются:&lt;br /&gt;
* Задачи класса [[Классификация задач|Open Shop]] при условии &amp;lt;tex&amp;gt;p_{ij}=1&amp;lt;/tex&amp;gt; можно свести к задачам равной длительности на параллельных станках:&lt;br /&gt;
*:[[Opij1Sumwc|&amp;lt;tex&amp;gt; O \mid p_{ij} = 1 \mid \sum w_i C_i &amp;lt;/tex&amp;gt;]]&lt;br /&gt;
*:&amp;lt;tex&amp;gt; O \mid p_{ij} = 1, r_i \mid C_{max} &amp;lt;/tex&amp;gt; &amp;lt;ref&amp;gt;Peter Brucker «Scheduling Algorithms», fifth edition, Springer — с. 161&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Задачи класса [[Классификация задач|Flow Shop]] при условии &amp;lt;tex&amp;gt;p_{ij}=1&amp;lt;/tex&amp;gt; можно свести к задаче на одном станке:&lt;br /&gt;
*:[[Fpij1sumwu|&amp;lt;tex&amp;gt; F \mid p_{ij} = 1 \mid \sum w_i U_i &amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* Часто в задачах, в которых допускаются прерывания, оптимальный ответ совпадает с соответствующими задачами без прерываний:&lt;br /&gt;
*:&amp;lt;tex&amp;gt; P \mid pmtn \mid \sum w_i C_i &amp;lt;/tex&amp;gt; &amp;lt;ref&amp;gt;Peter Brucker «Scheduling Algorithms», fifth edition, Springer — с. 121&amp;lt;/ref&amp;gt;&lt;br /&gt;
*:[[Flow shop|&amp;lt;tex&amp;gt; F2 \mid pmtn \mid C_{max} &amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* Ряд задач можно свести к задаче поиска максимального потока:&lt;br /&gt;
*:&amp;lt;tex&amp;gt; Q \mid pmtn, r_i\mid L_{max} &amp;lt;/tex&amp;gt; &amp;lt;ref&amp;gt;Peter Brucker «Scheduling Algorithms», fifth edition, Springer — с. 129-133&amp;lt;/ref&amp;gt;&lt;br /&gt;
*:[[RSumCi|&amp;lt;tex&amp;gt; R \mid \mid \sum C_i &amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* Некоторые задачи сводятся к другим похожим задачам теории расписаний путем преобразования их расписаний:&lt;br /&gt;
*:[[1outtreesumwc|&amp;lt;tex&amp;gt; 1 \mid intree \mid \sum w_i C_i &amp;lt;/tex&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
== Построение расписания по нижней оценке ==&lt;br /&gt;
Этот метод обычно применим к задачам, в которых целевая функция — &amp;lt;tex&amp;gt; C_{max}&amp;lt;/tex&amp;gt;. &lt;br /&gt;
Обычно построение расписания по нижней оценке происходит в два этапа:&lt;br /&gt;
# Построение некоторого набора нижних ограничений на произвольное расписание для задачи &amp;lt;tex&amp;gt; S &amp;lt;/tex&amp;gt;. &lt;br /&gt;
# Построение произвольного допустимого расписания, достигающего максимального ограничения из построенного набора.&lt;br /&gt;
&lt;br /&gt;
С помощью этого метода решаются следующие задачи:&lt;br /&gt;
* &amp;lt;tex&amp;gt; P \mid pmtn \mid C_{max}&amp;lt;/tex&amp;gt; &amp;lt;ref&amp;gt;Peter Brucker «Scheduling Algorithms», fifth edition, Springer — с. 108&amp;lt;/ref&amp;gt;&lt;br /&gt;
* [[RpmtnCmax|&amp;lt;tex&amp;gt; R \mid pmtn \mid C_{max}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[Opij1Cmax|&amp;lt;tex&amp;gt; O \mid p_{ij}=1 \mid C_{max}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[QpmtnCmax|&amp;lt;tex&amp;gt; Q \mid pmtn \mid C_{max}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Ниже будет рассмотрен частный пример решения задачи подобным образом:&lt;br /&gt;
=== P | pmtn | C_max ===&lt;br /&gt;
{{Задача&lt;br /&gt;
|definition = Имеется &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; однородных машин, работающих параллельно, и &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; работ, которые могут быть прерваны и продолжены позже. Необходимо минимизировать время выполнения всех работ&lt;br /&gt;
}} &lt;br /&gt;
Найдем набор ограничений на значение &amp;lt;tex&amp;gt; C_{max} &amp;lt;/tex&amp;gt; для произвольного допустимого расписания &amp;lt;tex&amp;gt; S &amp;lt;/tex&amp;gt; : &lt;br /&gt;
# В допустимом расписании выполнение всех работ не может завершиться раньше одной из них, поэтому &amp;lt;tex&amp;gt; C_{max} \geqslant p_i &amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Если все станки работали время &amp;lt;tex&amp;gt; C_{max} &amp;lt;/tex&amp;gt;, на них могло выполниться не больше &amp;lt;tex&amp;gt; C_{max} \cdot m &amp;lt;/tex&amp;gt; работы, то есть &amp;lt;tex&amp;gt; \sum\limits_{i=1}^n p_i \leqslant C_{max} \cdot m &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; C_{max} \geqslant \dfrac1m \sum\limits_{i=1}^n p_i &amp;lt;/tex&amp;gt;.&lt;br /&gt;
Из этих ограничений следует, что &amp;lt;tex&amp;gt; C_{max} = \max {\left( \max\limits_{i=1 \cdots  n} p_i,~ \dfrac1m \sum\limits_{i=1}^n p_i \right)} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Построим расписание, подходящее под эту границу: будем по очереди заполнять машины работами в произвольном порядке, и если очередная работа не помещается на текущей машине полностью, перенесем ее выходящую за &amp;lt;tex&amp;gt; C_{max} &amp;lt;/tex&amp;gt; часть на следующую машину. Благодаря первому ограничению никакая работа не будет выполняться одновременно на двух станках, а благодаря второму — не останется работы, которую мы не сможем выполнить.&lt;br /&gt;
&lt;br /&gt;
== Бинарный поиск по ответу ==&lt;br /&gt;
Этот способ часто подходит для задач, в которых надо минимизировать &amp;lt;tex&amp;gt;C_{max} &amp;lt;/tex&amp;gt; (если мы умеем решать соответствующую задачу существования расписания), реже для &amp;lt;tex&amp;gt; \sum w_i U_i &amp;lt;/tex&amp;gt;. Важно помнить, что если требуется полиномиальное по &amp;lt;tex&amp;gt; n &amp;lt;/tex&amp;gt; решение, оно не должно зависеть от логарифма ответа, но иногда ответ ограничен полиномом от &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;, и мы можем применить этот метод.&lt;br /&gt;
&lt;br /&gt;
Примером решения задач подобным методом служит следующая задача:&lt;br /&gt;
[[QpmtnriLmax|&amp;lt;tex&amp;gt; Q \mid pmtn, r_i \mid L_{max} &amp;lt;/tex&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
== Жадное построение расписания ==&lt;br /&gt;
Для решения задач теории расписаний часто применяется [[Определение матроида|теория матроидо]]в, а в частности — [[Теорема Радо-Эдмондса (жадный алгоритм)|жадный алгоритм]]: алгоритм решения задач путем выбора локально оптимальных решений на каждом этапе алгоритма.&lt;br /&gt;
Естественно, далеко не все оптимизационные задачи можно решать жадно — для этого сначала необходимо доказать оптимальность жадного выбора. &lt;br /&gt;
&lt;br /&gt;
С помощью этого метода решаются:&lt;br /&gt;
* [[Правило Лаулера|&amp;lt;tex&amp;gt; 1 \mid prec \mid f_{max} &amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[1outtreesumwc|&amp;lt;tex&amp;gt; 1 \mid outtree \mid \sum w_i C_i &amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[1pi1sumwu|&amp;lt;tex&amp;gt; 1 \mid p_i = 1 \mid \sum w_i U_i &amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[1sumu|&amp;lt;tex&amp;gt; 1 \mid \mid \sum U_i &amp;lt;/tex&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Обычно оптимальность жадного выбора доказывают двумя способами: &lt;br /&gt;
&lt;br /&gt;
=== Неправильно ===&lt;br /&gt;
Приведем пример часто распространенных '''неправильных''' действий при доказательстве оптимальности жадного алгоритма:&lt;br /&gt;
&lt;br /&gt;
Пусть предложенным нами алгоритмом мы получили какое-то решение &amp;lt;tex&amp;gt; S &amp;lt;/tex&amp;gt;. Атомарными изменениями в этом решении &amp;lt;tex&amp;gt; S &amp;lt;/tex&amp;gt; будем получать другие допустимые решения &amp;lt;tex&amp;gt; S' &amp;lt;/tex&amp;gt; и докажем, что &amp;lt;tex&amp;gt; f(S) \leqslant f(S') &amp;lt;/tex&amp;gt;. Тогда решение &amp;lt;tex&amp;gt; S &amp;lt;/tex&amp;gt; — оптимально.&lt;br /&gt;
&lt;br /&gt;
Проблема в этих рассуждениях в том, что ими мы доказываем локальную оптимальность алгоритма в решении &amp;lt;tex&amp;gt; S &amp;lt;/tex&amp;gt;. Получение же глобального минимума может потребовать нескольких атомарных изменений в расписании, поэтому доказать оптимальность таким образом в общем случае невозможно. Как ближайшую аналогию, можно привести '''неправильное''' утверждение для произвольной функции &amp;lt;tex&amp;gt; f(\bar x) &amp;lt;/tex&amp;gt; — «если все частные производные &amp;lt;tex&amp;gt; \dfrac{\partial f}{\partial x_1} \dots \dfrac{\partial f}{\partial x_n} &amp;lt;/tex&amp;gt; неотрицательны, то в точке &amp;lt;tex&amp;gt; \bar x &amp;lt;/tex&amp;gt; наблюдается глобальный минимум».&lt;br /&gt;
&lt;br /&gt;
=== Правильно ===&lt;br /&gt;
При доказательстве оптимательности применима стратегия '''аргумент замены''' (англ. ''exchange argument''). Стратегия заключается в рассмотрении текущего решения &amp;lt;tex&amp;gt; S &amp;lt;/tex&amp;gt; и оптимального решения &amp;lt;tex&amp;gt; O &amp;lt;/tex&amp;gt;. Далее предлагается способ модификации &amp;lt;tex&amp;gt; O &amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt; O'&amp;lt;/tex&amp;gt; так, что:&lt;br /&gt;
# &amp;lt;tex&amp;gt; f(O') \leqslant f(O) &amp;lt;/tex&amp;gt;, то есть &amp;lt;tex&amp;gt; O' &amp;lt;/tex&amp;gt; также оптимально.&lt;br /&gt;
# &amp;lt;tex&amp;gt; O' &amp;lt;/tex&amp;gt; «более похоже» на &amp;lt;tex&amp;gt; S &amp;lt;/tex&amp;gt;, чем на &amp;lt;tex&amp;gt; O &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если такой способ найден, получаем, что какой-то последовательностью модификаций &amp;lt;tex&amp;gt; O \to O_t' \to \dots \to O_1' \to S &amp;lt;/tex&amp;gt; получим &amp;lt;tex&amp;gt; f(S) \leqslant f(O_1') \leqslant \dots \leqslant f(O_t') \leqslant f(O) &amp;lt;/tex&amp;gt;, из чего следует оптимальность &amp;lt;tex&amp;gt; S &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Отношение «более похоже» должно быть [[Отношение порядка | отношением частичного строгого порядка]]. Часто в качестве него можно выбрать отношение «длина наибольшего общего префикса решения &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; S &amp;lt;/tex&amp;gt; меньше наибольшего общего префикса решения &amp;lt;tex&amp;gt; B &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; S &amp;lt;/tex&amp;gt;». Тогда если мы сможем увеличить длину наибольшего общего префикса для оптимального решения, не нарушив оптимальности, мы приблизимся к &amp;lt;tex&amp;gt; S &amp;lt;/tex&amp;gt;. Можно выбирать и более сложные отношения, например, в доказательстве оптимальности алгоритма &amp;lt;tex&amp;gt; P \mid \mid \sum w_i C_i &amp;lt;/tex&amp;gt; для решения задачи &amp;lt;tex&amp;gt; P \mid pmtn \mid \sum w_i C_i &amp;lt;/tex&amp;gt; используется отношение «время последнего прерывания больше или количество прерываний меньше».&lt;br /&gt;
&lt;br /&gt;
== См. также. ==&lt;br /&gt;
* [[Правило Лаулера]]&lt;br /&gt;
* [[Flow shop]]&lt;br /&gt;
* [[Opi1sumu|&amp;lt;tex&amp;gt; O \mid p_{ij} = 1 \mid \sum U_i&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==  Источники информации ==&lt;br /&gt;
* Peter Brucker «Scheduling Algorithms», fifth edition, Springer ISBN 978-3-540-69515-8&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Теория расписаний]]&lt;/div&gt;</summary>
		<author><name>188.19.42.255</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D0%BE%D0%B4%D1%8B_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B7%D0%B0%D0%B4%D0%B0%D1%87_%D1%82%D0%B5%D0%BE%D1%80%D0%B8%D0%B8_%D1%80%D0%B0%D1%81%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B9&amp;diff=73350</id>
		<title>Методы решения задач теории расписаний</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D0%BE%D0%B4%D1%8B_%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B7%D0%B0%D0%B4%D0%B0%D1%87_%D1%82%D0%B5%D0%BE%D1%80%D0%B8%D0%B8_%D1%80%D0%B0%D1%81%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B9&amp;diff=73350"/>
				<updated>2020-03-31T00:34:38Z</updated>
		
		<summary type="html">&lt;p&gt;188.19.42.255: /* P | pmtn | C_max */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Сведение к другой задаче ==&lt;br /&gt;
При сведении текущей задачи теории расписаний &amp;lt;tex&amp;gt; S &amp;lt;/tex&amp;gt; к какой-то другой &amp;lt;tex&amp;gt; S' &amp;lt;/tex&amp;gt; (не обязательно задаче теории расписаний) необходимо доказать два пункта:&lt;br /&gt;
# Допустимость расписания, построенного с помощью задачи &amp;lt;tex&amp;gt; S' &amp;lt;/tex&amp;gt;, или существование способа его трансформации в допустимое без нарушения оптимальности.&lt;br /&gt;
# Следствие того, что если мы оптимизируем &amp;lt;tex&amp;gt; S' &amp;lt;/tex&amp;gt;, мы также оптимизируем ответ для &amp;lt;tex&amp;gt; S &amp;lt;/tex&amp;gt;.&lt;br /&gt;
'''Примечание''': если требуется полиномиальное время для решения задачи, сведение к другой задаче и трансформация расписания в допустимое также должны происходить за полиномиальное время.&lt;br /&gt;
&lt;br /&gt;
С помощью этого метода решаются:&lt;br /&gt;
* Задачи класса [[Классификация задач|Open Shop]] при условии &amp;lt;tex&amp;gt;p_{ij}=1&amp;lt;/tex&amp;gt; можно свести к задачам равной длительности на параллельных станках:&lt;br /&gt;
*:[[Opij1Sumwc|&amp;lt;tex&amp;gt; O \mid p_{ij} = 1 \mid \sum w_i C_i &amp;lt;/tex&amp;gt;]]&lt;br /&gt;
*:&amp;lt;tex&amp;gt; O \mid p_{ij} = 1, r_i \mid C_{max} &amp;lt;/tex&amp;gt; &amp;lt;ref&amp;gt;Peter Brucker «Scheduling Algorithms», fifth edition, Springer — с. 161&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Задачи класса [[Классификация задач|Flow Shop]] при условии &amp;lt;tex&amp;gt;p_{ij}=1&amp;lt;/tex&amp;gt; можно свести к задаче на одном станке:&lt;br /&gt;
*:[[Fpij1sumwu|&amp;lt;tex&amp;gt; F \mid p_{ij} = 1 \mid \sum w_i U_i &amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* Часто в задачах, в которых допускаются прерывания, оптимальный ответ совпадает с соответствующими задачами без прерываний:&lt;br /&gt;
*:&amp;lt;tex&amp;gt; P \mid pmtn \mid \sum w_i C_i &amp;lt;/tex&amp;gt; &amp;lt;ref&amp;gt;Peter Brucker «Scheduling Algorithms», fifth edition, Springer — с. 121&amp;lt;/ref&amp;gt;&lt;br /&gt;
*:[[Flow shop|&amp;lt;tex&amp;gt; F2 \mid pmtn \mid C_{max} &amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* Ряд задач можно свести к задаче поиска максимального потока:&lt;br /&gt;
*:&amp;lt;tex&amp;gt; Q \mid pmtn, r_i\mid L_{max} &amp;lt;/tex&amp;gt; &amp;lt;ref&amp;gt;Peter Brucker «Scheduling Algorithms», fifth edition, Springer — с. 129-133&amp;lt;/ref&amp;gt;&lt;br /&gt;
*:[[RSumCi|&amp;lt;tex&amp;gt; R \mid \mid \sum C_i &amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* Некоторые задачи сводятся к другим похожим задачам теории расписаний путем преобразования их расписаний:&lt;br /&gt;
*:[[1outtreesumwc|&amp;lt;tex&amp;gt; 1 \mid intree \mid \sum w_i C_i &amp;lt;/tex&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
== Построение расписания по нижней оценке ==&lt;br /&gt;
Этот метод обычно применим к задачам, в которых целевая функция — &amp;lt;tex&amp;gt; C_{max}&amp;lt;/tex&amp;gt;. &lt;br /&gt;
Обычно построение расписания по нижней оценке происходит в два этапа:&lt;br /&gt;
# Построение некоторого набора нижних ограничений на произвольное расписание для задачи &amp;lt;tex&amp;gt; S &amp;lt;/tex&amp;gt;. &lt;br /&gt;
# Построение произвольного допустимого расписания, достигающего максимального ограничения из построенного набора.&lt;br /&gt;
&lt;br /&gt;
С помощью этого метода решаются следующие задачи:&lt;br /&gt;
* &amp;lt;tex&amp;gt; P \mid pmtn \mid C_{max}&amp;lt;/tex&amp;gt; &amp;lt;ref&amp;gt;Peter Brucker «Scheduling Algorithms», fifth edition, Springer — с. 108&amp;lt;/ref&amp;gt;&lt;br /&gt;
* [[RpmtnCmax|&amp;lt;tex&amp;gt; R \mid pmtn \mid C_{max}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[Opij1Cmax|&amp;lt;tex&amp;gt; O \mid p_{ij}=1 \mid C_{max}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[QpmtnCmax|&amp;lt;tex&amp;gt; Q \mid pmtn \mid C_{max}&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Ниже будет рассмотрен частный пример решения задачи подобным образом:&lt;br /&gt;
=== P | pmtn | C_max ===&lt;br /&gt;
{{Задача&lt;br /&gt;
|definition = Имеется &amp;lt;tex&amp;gt;m&amp;lt;/tex&amp;gt; однородных машин, работающих параллельно, и &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; работ, которые могут быть прерваны и продолжены позже. Необходимо минимизировать время выполнения всех работ&lt;br /&gt;
}} &lt;br /&gt;
Найдем набор ограничений на значение &amp;lt;tex&amp;gt; C_{max} &amp;lt;/tex&amp;gt; для произвольного допустимого расписания &amp;lt;tex&amp;gt; S &amp;lt;/tex&amp;gt; : &lt;br /&gt;
# В допустимом расписании выполнение всех работ не может завершиться раньше одной из них, поэтому &amp;lt;tex&amp;gt; C_{max} \geqslant p_i &amp;lt;/tex&amp;gt;.&lt;br /&gt;
# Если все станки работали время &amp;lt;tex&amp;gt; C_{max} &amp;lt;/tex&amp;gt;, на них могло выполниться не больше &amp;lt;tex&amp;gt; C_{max} \cdot m &amp;lt;/tex&amp;gt; работы, то есть &amp;lt;tex&amp;gt; \sum\limits_{i=1}^n p_i \leqslant C_{max} \cdot m &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; C_{max} \geqslant \dfrac1m \sum\limits_{i=1}^n p_i &amp;lt;/tex&amp;gt;.&lt;br /&gt;
Из этих ограничений следует, что &amp;lt;tex&amp;gt; C_{max} = \max {\left( \max\limits_{i=1 \hdots  n} p_i,~ \dfrac1m \sum\limits_{i=1}^n p_i \right)} &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Построим расписание, подходящее под эту границу: будем по очереди заполнять машины работами в произвольном порядке, и если очередная работа не помещается на текущей машине полностью, перенесем ее выходящую за &amp;lt;tex&amp;gt; C_{max} &amp;lt;/tex&amp;gt; часть на следующую машину. Благодаря первому ограничению никакая работа не будет выполняться одновременно на двух станках, а благодаря второму — не останется работы, которую мы не сможем выполнить.&lt;br /&gt;
&lt;br /&gt;
== Бинарный поиск по ответу ==&lt;br /&gt;
Этот способ часто подходит для задач, в которых надо минимизировать &amp;lt;tex&amp;gt;C_{max} &amp;lt;/tex&amp;gt; (если мы умеем решать соответствующую задачу существования расписания), реже для &amp;lt;tex&amp;gt; \sum w_i U_i &amp;lt;/tex&amp;gt;. Важно помнить, что если требуется полиномиальное по &amp;lt;tex&amp;gt; n &amp;lt;/tex&amp;gt; решение, оно не должно зависеть от логарифма ответа, но иногда ответ ограничен полиномом от &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt;, и мы можем применить этот метод.&lt;br /&gt;
&lt;br /&gt;
Примером решения задач подобным методом служит следующая задача:&lt;br /&gt;
[[QpmtnriLmax|&amp;lt;tex&amp;gt; Q \mid pmtn, r_i \mid L_{max} &amp;lt;/tex&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
== Жадное построение расписания ==&lt;br /&gt;
Для решения задач теории расписаний часто применяется [[Определение матроида|теория матроидо]]в, а в частности — [[Теорема Радо-Эдмондса (жадный алгоритм)|жадный алгоритм]]: алгоритм решения задач путем выбора локально оптимальных решений на каждом этапе алгоритма.&lt;br /&gt;
Естественно, далеко не все оптимизационные задачи можно решать жадно — для этого сначала необходимо доказать оптимальность жадного выбора. &lt;br /&gt;
&lt;br /&gt;
С помощью этого метода решаются:&lt;br /&gt;
* [[Правило Лаулера|&amp;lt;tex&amp;gt; 1 \mid prec \mid f_{max} &amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[1outtreesumwc|&amp;lt;tex&amp;gt; 1 \mid outtree \mid \sum w_i C_i &amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[1pi1sumwu|&amp;lt;tex&amp;gt; 1 \mid p_i = 1 \mid \sum w_i U_i &amp;lt;/tex&amp;gt;]]&lt;br /&gt;
* [[1sumu|&amp;lt;tex&amp;gt; 1 \mid \mid \sum U_i &amp;lt;/tex&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Обычно оптимальность жадного выбора доказывают двумя способами: &lt;br /&gt;
&lt;br /&gt;
=== Неправильно ===&lt;br /&gt;
Приведем пример часто распространенных '''неправильных''' действий при доказательстве оптимальности жадного алгоритма:&lt;br /&gt;
&lt;br /&gt;
Пусть предложенным нами алгоритмом мы получили какое-то решение &amp;lt;tex&amp;gt; S &amp;lt;/tex&amp;gt;. Атомарными изменениями в этом решении &amp;lt;tex&amp;gt; S &amp;lt;/tex&amp;gt; будем получать другие допустимые решения &amp;lt;tex&amp;gt; S' &amp;lt;/tex&amp;gt; и докажем, что &amp;lt;tex&amp;gt; f(S) \leqslant f(S') &amp;lt;/tex&amp;gt;. Тогда решение &amp;lt;tex&amp;gt; S &amp;lt;/tex&amp;gt; — оптимально.&lt;br /&gt;
&lt;br /&gt;
Проблема в этих рассуждениях в том, что ими мы доказываем локальную оптимальность алгоритма в решении &amp;lt;tex&amp;gt; S &amp;lt;/tex&amp;gt;. Получение же глобального минимума может потребовать нескольких атомарных изменений в расписании, поэтому доказать оптимальность таким образом в общем случае невозможно. Как ближайшую аналогию, можно привести '''неправильное''' утверждение для произвольной функции &amp;lt;tex&amp;gt; f(\bar x) &amp;lt;/tex&amp;gt; — «если все частные производные &amp;lt;tex&amp;gt; \dfrac{\partial f}{\partial x_1} \dots \dfrac{\partial f}{\partial x_n} &amp;lt;/tex&amp;gt; неотрицательны, то в точке &amp;lt;tex&amp;gt; \bar x &amp;lt;/tex&amp;gt; наблюдается глобальный минимум».&lt;br /&gt;
&lt;br /&gt;
=== Правильно ===&lt;br /&gt;
При доказательстве оптимательности применима стратегия '''аргумент замены''' (англ. ''exchange argument''). Стратегия заключается в рассмотрении текущего решения &amp;lt;tex&amp;gt; S &amp;lt;/tex&amp;gt; и оптимального решения &amp;lt;tex&amp;gt; O &amp;lt;/tex&amp;gt;. Далее предлагается способ модификации &amp;lt;tex&amp;gt; O &amp;lt;/tex&amp;gt; в &amp;lt;tex&amp;gt; O'&amp;lt;/tex&amp;gt; так, что:&lt;br /&gt;
# &amp;lt;tex&amp;gt; f(O') \leqslant f(O) &amp;lt;/tex&amp;gt;, то есть &amp;lt;tex&amp;gt; O' &amp;lt;/tex&amp;gt; также оптимально.&lt;br /&gt;
# &amp;lt;tex&amp;gt; O' &amp;lt;/tex&amp;gt; «более похоже» на &amp;lt;tex&amp;gt; S &amp;lt;/tex&amp;gt;, чем на &amp;lt;tex&amp;gt; O &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Если такой способ найден, получаем, что какой-то последовательностью модификаций &amp;lt;tex&amp;gt; O \to O_t' \to \dots \to O_1' \to S &amp;lt;/tex&amp;gt; получим &amp;lt;tex&amp;gt; f(S) \leqslant f(O_1') \leqslant \dots \leqslant f(O_t') \leqslant f(O) &amp;lt;/tex&amp;gt;, из чего следует оптимальность &amp;lt;tex&amp;gt; S &amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Отношение «более похоже» должно быть [[Отношение порядка | отношением частичного строгого порядка]]. Часто в качестве него можно выбрать отношение «длина наибольшего общего префикса решения &amp;lt;tex&amp;gt; A &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; S &amp;lt;/tex&amp;gt; меньше наибольшего общего префикса решения &amp;lt;tex&amp;gt; B &amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt; S &amp;lt;/tex&amp;gt;». Тогда если мы сможем увеличить длину наибольшего общего префикса для оптимального решения, не нарушив оптимальности, мы приблизимся к &amp;lt;tex&amp;gt; S &amp;lt;/tex&amp;gt;. Можно выбирать и более сложные отношения, например, в доказательстве оптимальности алгоритма &amp;lt;tex&amp;gt; P \mid \mid \sum w_i C_i &amp;lt;/tex&amp;gt; для решения задачи &amp;lt;tex&amp;gt; P \mid pmtn \mid \sum w_i C_i &amp;lt;/tex&amp;gt; используется отношение «время последнего прерывания больше или количество прерываний меньше».&lt;br /&gt;
&lt;br /&gt;
== См. также. ==&lt;br /&gt;
* [[Правило Лаулера]]&lt;br /&gt;
* [[Flow shop]]&lt;br /&gt;
* [[Opi1sumu|&amp;lt;tex&amp;gt; O \mid p_{ij} = 1 \mid \sum U_i&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==  Источники информации ==&lt;br /&gt;
* Peter Brucker «Scheduling Algorithms», fifth edition, Springer ISBN 978-3-540-69515-8&lt;br /&gt;
&lt;br /&gt;
[[Категория: Алгоритмы и структуры данных]]&lt;br /&gt;
[[Категория: Теория расписаний]]&lt;/div&gt;</summary>
		<author><name>188.19.42.255</name></author>	</entry>

	</feed>