Телефон: 8-800-350-22-65
Напишите нам:
WhatsApp:
Telegram:
MAX:
Прием заявок круглосуточно
График работы офиса: с 9:00 до 21:00 Нск (с 5:00 до 19:00 Мск)

Статья опубликована в рамках: Научного журнала «Студенческий» № 18(356)

Рубрика журнала: Математика

Скачать книгу(-и): скачать журнал

Библиографическое описание:
Жданова У.М. ДИНАМИЧЕСКОЕ ПРОГРАММИРОВАНИЕ // Студенческий: электрон. научн. журн. 2026. № 18(356). URL: https://sibac.info/journal/student/356/415246 (дата обращения: 14.06.2026).

ДИНАМИЧЕСКОЕ ПРОГРАММИРОВАНИЕ

Жданова Ульяна Михайловна

студент, инженерно-экономический факультет, Ульяновский государственный технический университет,

РФ, г. Ульяновск

Киреев Сергей Владимирович

научный руководитель,

канд. физ. - мат. наук, доц. кафедры «Высшая математика», Ульяновский государственный технический университет,

РФ, г. Ульяновск

DYNAMIC PROGRAMMING

 

Zhdanova Ulyana Mikhailovna

Student, Department of Higher Mathematics, Ulyanovsk State Technical University,

Russia, Ulyanovsk

Kireev Sergey Vladimirovich

Scientific supervisor, Candidate of Physical Sciences. - Mat. Sciences, Associate Professor of the Department of Higher Mathematics, Ulyanovsk State Technical University,

Russia, Ulyanovsk

 

АННОТАЦИЯ

В данной работе рассматриваются теоретические основы и практическое применение динамического программирования - метода оптимизации, предназначенного для решения многошаговых задач с перекрывающимися подзадачами и оптимальной подструктурой. В первой части подробно вводятся ключевые понятия: состояние (набор параметров, описывающий ситуацию на каждом шаге), функция перехода (правило перехода из одного состояния в другое), а также рекуррентное соотношение Беллмана, лежащее в основе метода. Обосновывается важность принципа оптимальности для гарантии нахождения глобального минимума, а также анализируются два основных подхода к реализации: мемоизация (сверху вниз) и табуляция (снизу вверх). Рассматриваются типичные ошибки начинающих аналитиков, проблема «проклятия размерности» и основные области применения метода - от искусственного интеллекта до логистики и биоинформатики.

На практическом примере демонстрируется полный ход решения задачи оптимальной замены оборудования. Работа наглядно иллюстрирует, почему динамическое программирование превращает сложную задачу с экспоненциальным ростом числа вариантов в задачу с полиномиальной сложностью.

ABSTRACT

This work discusses the theoretical foundations and practical applications of dynamic programming, an optimization method designed to solve multi-step problems with overlapping subtasks and an optimal substructure. The first part introduces key concepts in detail: the state (a set of parameters describing the situation at each step), the transition function (a rule for moving from one state to another), and the Bellman recursion that underlies the method. The importance of the optimality principle for guaranteeing the global minimum is substantiated, and two main approaches to implementation are analyzed: memorization (top-down) and tabulation (bottom-up). Typical mistakes of novice analysts, the problem of the "curse of dimensionality" and the main areas of application of the method are considered - from artificial intelligence to logistics and bioinformatics.

A practical example demonstrates the full course of solving the problem of optimal equipment replacement. The work is clearly illustrated by

 

Ключевые слова: динамическое программирование, оптимальная подструктура, перекрытие подзадач, уравнение Беллмана, принцип оптимальности, мемоизация, табуляция, проклятие размерности.

Keywords: dynamic programming, optimal substructure, overlapping subtasks, Bellman equation, optimality principle, memorization, tabulation, curse of dimensionality.

 

Динамическое программирование (ДП) - это метод решения сложной задачи через её декомпозицию. Декомпозиция - это процесс разложения сложной системы, задачи или понятия на более простые и понятные составляющие. Цель - превратить абстрактную цель в конкретные задачи и составить план действий. Каждую часть решать проще, а результаты сохраняются и складываются в итоговый ответ. Часто ДП путают с методом «разделяй и властвуй», подзадачи не пересекаются и решаются независимо (например, быстрая сортировка или сортировка слиянием). Другой альтернативой является метод ветвей и границ, он отсекает заведомо неперспективные ветви, что может ускорить процесс.

С математической точки зрения ДП описывается через понятия состояние (набор параметров, полностью описывающий ситуацию на определённом шаге) и функция перехода (которая определяет, как перейти из одного состояния в другое и какую «цену» (или выгоду) это принесёт).

Формально задача ДП записывается так: dp[state]=min/max(cost(transition)+dp[next_state]), где dp[state] - оптимальное значение целевой функции для данного состояния, а минимум или максимум берётся по всем допустимым переходам. Такая запись легко алгоритмизируется и переносится на язык программирования.

Динамическое программирование применимо везде, где большую задачу можно разбить на подзадачи. Примерами являются: искусственный интеллект и машинное обучение (лежит в основе алгоритмов обучения с подкреплением (Q learning, Value Iteration), помогая найти оптимальную стратегию поведения агента), экономика и финансы (используется для моделирования управления ресурсами, инвестициями и планирования потребления (например, подбор пропорций ценных бумаг в портфеле), а также ДП используется  в биоинформатике, теории игр, логистике и управление цепочками поставок. Помимо этого, оно используется в алгоритме Витерби (декодирование и распознавание речи), синтаксическом анализе текстов и планировании траекторий в робототехнике.

Метод разработал математик Ричард Беллман в 1940-х годах. Слово «программирование» в названии про процесс планирования (как в «линейном программировании»), а термин «динамическое» чтобы подчеркнуть многошаговую природу задач - и заодно помочь с получением финансирования. Основная идея динамическогл программирования - это разбить сложную задачу на подзадачи, решить каждую один раз и сохранить результат для повторного использования. Уравнение Беллмана - выражает минимальное значение критерия оптимизации при эволюции системы из текущего состояния в конечное.

При попытке применить ДП новички часто допускают следующие ошибки: неправильное определение состояния, игнорирование порядка вычислений, пренебрежение краевыми условиями и базовыми случаями, смешение мемоизации и табуляции в одной реализации.  Чтобы задачу можно было решить методом ДП, она должна иметь оптимальную подструктуру (оптимальное решение исходной задачи включает оптимальные решения подзадач) и перекрытие подзадач (одна и та же подзадача возникает многократно). Принцип оптимальности Беллмана доказывается по индукции.

 Есть два основных подхода к реализации мемоизация (сохранение результатов уже вычисленных подзадач, чтобы не пересчитывать их), табуляция (итеративный подход «снизу вверх», начиная с базовых случаев).

Алгоритм решения задач методом ДП включает 4 шага: описать строение оптимальных решений, выписать рекуррентное соотношение для оптимальных значений параметра подзадач, вычислить оптимальные значения снизу вверх, построить оптимальное решение, используя полученные данные. Для решения задачи динамическим программированием необходимы таблица для промежуточных результатов (один из них станет ответом), правила заполнения пустых ячеек на основе уже заполненных, а также правило выбора финального решения после заполнения таблицы. ДП имеет ряд преимуществ: скорость, универсальность и точность. Однако есть и недостатки: значительное потребление памяти, сложность формулирования задачи, неуниверсальность (метод применим не ко всем задачам), а также трудоёмкость разработки и тестирования.

Рассмотрим на примере.

Пример: Предприятие эксплуатирует технологическую установку. Необходимо определить оптимальную стратегию замены оборудования на плановом горизонте в 6 лет (шаги k=1,2,3,4,5,6 k=1,2,3,4,5,6). После окончания 6-го года оборудование продаётся.

Исходные данные:

1. Стоимость нового оборудования: P=5500 P=5500 ден. ед.

2. Цена продажи оборудования возраста t (в конце срока службы):

q(t)=P1,5t q(t)=1,5tP​(оборудование теряет стоимость быстрее, чем в классической задаче)

3. Затраты на содержание оборудования возраста t:

r(t)=500⋅(t+2)r(t)=500(t+2)

(увеличиваются с возрастом линейно)

4. Возраст нового оборудования: t=0

5. Горизонт планирования: 6 лет

Таблица 1.

Расчетные значения

t(возраст)

0 (новое)

1

2

3

4

5

6

q(t) = 5500/1,5^t

5500

3667

2444

1630

1087

724

483

r(t) = 500(t+2)

1000

1500

2000

2500

3000

3500

4000

 

Функции затрат на шаге kk:

При сохранении оборудования возраста t:

fсохр.=r(t)=500⋅(t+2)fсохр​=r(t)=500⋅(t+2)

При замене оборудования возраста t:

fзамена=P+r(0)−q(t)=5500+1000−q(t)=6500−q(t)fзамена

=P+r(0)−q(t)=5500+1000−q(t)=6500−q(t)

Таблица 2.

Числовые значения замены для разных t

t

q(t)

fамена=6500-q(t)

0

5500

1000

1

3667

2833

2

2444

4056

3

1630

4870

4

1087

5413

5

724

5776

 

Рекуррентное уравнение Беллмана

Граничное условие (после 6-го года — продажа):

F7∗(t)=−q(t)F7∗​(t)=−q(t) (со знаком минус, так как это доход)

После выполнения обратной рекурсии (шаг 6 → шаг 1) минимальные суммарные приведённые затраты за 6 лет составят: F1∗(0)=12 450 ден.ед.

Оптимальная стратегия замен:

Годы замены: начало 4-го года (т.е. после 3-й эксплуатации).

Траектория: (0;0)→(1;1)→(2;2)→(3;3)→(4;1)→(5;2)→(6;3)(0;0)→(1;1)→(2;2)→(3;3)→(4;1)→(5;2)→(6;3)

Итоговое управление:

X∗=(Xc,Xc,Xc,Xз,Xc,Xc)X∗=(Xc​,Xc​,Xc​,Xз​,Xc​,Xc​)

Ответ: Минимальные суммарные затраты за 6 лет составляют 12 450 ден. ед. Оптимальная стратегия: замена оборудования в начале 4-го года. Управление: X∗=(Xc,Xc,Xc,Xз,Xc,Xc)X∗=(Xc​,Xc​,Xc​,Xз​,Xc​,Xc​).

 

Список литературы:

  1. Баширзаде Л.И., Алиев Г.С. Применение динамического программирования для моделирования процессов принятия решений // КиберЛенинка. - URL: https://cyberleninka.ru/article/n/primenenie-dinamicheskogo-programmirovaniya-dlya-modelirovaniya-protsessov-prinyatiya-resheniy (дата обращения: 05.05.2026).
  2. Романовская А.М., Мендзиев М.В. Динамическое программирование: учебное пособие. - Омск: Изд-во ОмГТУ, 2010. - 58 с. - URL: https://www.studmed.ru/romanovskaya-a-m-mendziev-m-v-dinamicheskoe-programmirovanie_6444b5865b0.html (дата обращения: 05.05.2026).
  3. Емшиков Б.М., Овезбердиев Г.Дж. Марковские процессы принятия решений: современные подходы и применение в интеллектуальных системах // КиберЛенинка. - URL: https://cyberleninka.ru/article/n/markovskie-protsessy-prinyatiya-resheniy-sovremennye-podhody-i-primenenie-v-intellektualnyh-sistemah (дата обращения: 05.05.2026).
  4. Третьякова Н.Г. Некоторые главы математического программирования: учебно-методическое пособие. - Пермь: Изд-во ПНИПУ, 2020. - 58 с. - URL: https://studfile.net/preview/19943544/ (дата обращения: 05.05.2026).