\anonsection{Введение} \label{sec:0_vvedenie} \index{0_vvedenie} \hspace{0.47cm} В вычислительных системах с ограниченным количеством некоторого ресурса (например, оперативной памяти) при построении расписания вычислений важным критерием является пиковое (максимальное по всему расписанию) использование ресурса. В данной работе рассматривается задача построения однопроцессорного расписания с минимизацией этого критерия. Результат решения задачи может использоваться для оценки объема оперативной памяти, необходимого в проектируемой системе для выполнения заданного набора работ. Входными данными задачи является ориентированный ациклический граф без петель и кратных ребер, в котором вершины задают работы, а ребра – зависимости между ними. Таким образом, входной граф задает условия частичного порядка на множестве работ. Каждой вершине в графе сопоставлено неотрицательное число – количество занимаемого соответствующей работой ресурса. При этом каждая работа занимает ресурс в момент начала своего выполнения и освобождает его в момент, когда последний из ее непосредственных потомков завершит выполнение. Для входного графа необходимо построить расписание, минимизирующее пиковое использование ресурса в системе. Поскольку директивные сроки выполнения работ не заданы, и оптимизируемым критерием является пиковое использование ресурса, время выполнения работ не учитывается. В связи с этим расписание можно рассматривать как набор шагов, на каждом из которых выполняется одна работа. На рис. \ref{fig:example} приведен граф и два возможных расписания для него. На вершинах графа указаны номера работ и количество занимаемого ресурса. В расписании под горизонтальной осью подписаны работы, которые выполняются на соответствующих шагах расписания, а вертикальной оси соответствует количество занимаемого ресурса в системе. Красные стрелки вверх в расписании обозначают занятие ресурса, а зеленые стрелки вниз -- освобождение. Для нахождения значения целевой функции на каждом шаге вычисляется общее использование ресурса в системе, затем выбирается максимальное по всему расписанию -- пиковое значение. В расписании фигурными скобками обозначены и пронумерованы в порядке следования моменты подсчета используемого ресурса. Видно, что пиковое значение достигается после занятия ресурса работой, но до освобождения ей ресурса из-под работ предков. На примере (рис. \ref{fig:example}), видно, что для одного и того же графа работ могут быть построены разные расписания. Так, в расписании 1 целевая функция равна 9 и достигается в момент выполнения работы $V_2$. В расписании 2 пиковое использование ресурса достигает 11 во время выполнения работ $V_3$ и $V_4$. Таким образом, в расписании 1 целевая функция меньше, чем в расписании 2. \begin{figure}[h] \centering \includegraphics[width=\textwidth]{pictures/example.png} \caption{Граф работ и возможные расписания для него} \label{fig:example} \end{figure} В работе \cite{SHUTKOV} для данной задачи предложен детерминированный алгоритм, строящий близкие к оптимальным расписания в случае, если входной граф является последовательно-параллельным. По мере добавления в граф ребер, нарушающих его последовательно-параллельную структуру, получаемые алгоритмом расписания по качеству (т.е. значению целевой функции) приближаются к результатам жадного алгоритма, что указывает на рост отклонения от оптимума. В работе \cite{BALASHOV} для данной задачи предложен муравьиный алгоритм, превосходящий по качеству решения жадный алгоритм, однако в силу рандомизированности не гарантирующий качество решения даже на уровне верхней оценки отклонения от оптимума. Актуальна разработка метода построения оптимального расписания, который не был бы ограничен конкретным классом структуры входного графа. В данной работе предложена схема сведения рассматриваемой задачи к задаче целочисленного линейного программирования (ЦЛП) \cite{SHEV}, реализована с использованием свободно доступного решателя ЦЛП и исследована по критерию масштабируемости.