Динамическое программирование в excel пример

Линейное программирование в Excel

В Excel 2007 для включения пакета анализа надо нажать перейти в блок Параметры Excel, нажав кнопку в левом верхнем углу, а затем кнопку «Параметры Excel» внизу окна:


Для того чтобы решить задачу ЛП в табличном процессоре Microsoft Excel , необходимо выполнить следующие действия:
1. Ввести условие задачи:
a) создать экранную форму для ввода условия задачи:
· переменных,
· целевой функции (ЦФ),
· ограничений,
· граничных условий;
b) ввести исходные данные в экранную форму:
· коэффициенты ЦФ,
· коэффициенты при переменных в ограничениях,
· правые части ограничений;
c) ввести зависимости из математической модели в экранную форму:
· формулу для расчета ЦФ,
· формулы для расчета значений левых частей ограничений;
d) задать ЦФ (в окне «Поиск решения» ):
· целевую ячейку,
· направление оптимизации ЦФ;
e) ввести ограничения и граничные условия (в окне «Поиск решения» ):
· ячейки со значениями переменных,
· граничные условия для допустимых значений переменных,
· соотношения между правыми и левыми частями ограничений.
2. Решить задачу:
a) установить параметры решения задачи (в окне «Поиск решения» );
b) запустить задачу на решение (в окне «Поиск решения» );
c) выбрать формат вывода решения (в окне «Результаты поиска решения» ).

Рассмотрим подробно использование MS Excel на примере решения следующей задачи.

Фабрика «GRM pic» выпускает два вида каш для завтрака — «Crunchy» и «Chewy». Используемые для производства обоих продуктов ингредиенты в основ­ном одинаковы и, как правило, не являются дефицитными. Основным ограничением, накладываемым на объем выпуска, является наличие фонда рабочего времени в каждом из трех цехов фабрики.

Управляющему производством Джою Дисону необходимо разработать план производства на месяц. В приведенной ниже таблице указаны общий фонд рабочего времени и число человеко-часов, требуемое для производства 1 т продукта.

Цех Необходимый фонд рабочего времени
чел.-ч/т
Общий фонд рабочего времени
чел.-ч. в месяц
«Crunchy» «Chewy»
А. Производство 10 4 1000
В. Добавка приправ 3 2 360
С. Упаковка 2 5 600

Доход от производства 1 т «Crunchy» составляет 150 ф. ст., а от производства «Chewy» — 75 ф, ст. На настоящий момент нет никаких ограничений на возможные объемы продаж. Имеется возможность продать всю произведенную продукцию.

а) Сформулировать модель линейного программирования, максимизи­рующую общий доход фабрики за месяц.

б) Решить ее c помощью MS Excel.

Ввод исходных данных
Создание экранной формы и ввод исходных данных

Экранная форма для решения в MS Excel представлена на рисунке 1.

В экранной форме на рисунке 1 каждой переменной и каждому коэффициенту задачи поставлена в соответствие конкретная ячейка на листе Excel. Имя ячейки состоит из буквы, обозначающей столбец, и цифры, обозначающей строку, на пересечении которых находится объект задачи ЛП. Так, например, переменным задачи 1 соответствуют ячейки B4 (x1), C4 (x2), коэффициентам ЦФ соответствуют ячейки B6 (c1=150), C6 (c2=75), правым частям ограничений соответствуют ячейки D18 (b1=1000), D19 (b2=360), D20 (b3=600) и т.д.

Ввод зависимостей из формальной постановки задачи в экранную форму

Для ввода зависимостей определяющих выражение для целевой функции и ограничений используется функция MS Excel СУММПРОИЗВ , которая вычисляет сумму попарных произведений двух или более массивов.

Одним из самых простых способов определения функций в MS Excel является использование режима «Вставка функций» , который можно вызвать из меню «Вставка» или при нажатии кнопки fx (рисунок 2) на стандартной панели инструментов.

Рисунок 2

Так, например, выражение для целевой функции из задачи 1 определяется следующим образом:
· курсор в поле D6;
· нажав кнопку fx , вызовите окно «Мастер функций — шаг 1 из 2»;
· выберите в окне «Категория» категорию «Математические»;
· в окне «Функция» выберите функцию СУММПРОИЗВ (рис. 3);

Рисунок 3
· в появившемся окне «СУММПРОИЗВ» в строку «Массив 1» введите выражение B$4:C$4 , а в строку «Массив 2» — выражение B6:C6 (рис. 4);

Левые части ограничений задачи (1) представляют собой сумму произведений каждой из ячеек, отведенных для значений переменных задачи ( B3, C3 ), на соответствующую ячейку, отведенную для коэффициентов конкретного ограничения ( B13, C13 — 1-е ограничение; B14, С14 — 2-е ограничение и B15, С15 — 3-е ограничение). Формулы, соответствующие левым частям ограничений, представлены в табл.1.
Таблица 1.

Формулы, описывающие ограничения модели (1)

Левая часть ограничения Формула Excel
10x1+4x2 или B3×B13+C3×C13 =СУММПРОИЗВ(B4:C4;B13:C13))
3x1+2x2 или B3×B14+C3×C14 =СУММПРОИЗВ(B4:C4;B14:C14))
2x1+5x2 или B3×B15+C3×C15 =СУММПРОИЗВ(B4:C4;B15:C15)

Дальнейшие действия производятся в окне «Поиск решения» , которое вызывается из меню «Сервис» (рис.5):

· поставьте курсор в поле «Установить целевую ячейку» ;

· введите адрес целевой ячейки $D$6 или сделайте одно нажатие левой клавиши мыши на целевую ячейку в экранной форме ¾ это будет равносильно вводу адреса с клавиатуры;

· введите направление оптимизации ЦФ, щелкнув один раз левой клавишей мыши по селекторной кнопке «максимальному значению».

Ввод ограничений и граничных условий
Задание ячеек переменных

В окно «Поиск решения» в поле «Изменяя ячейки» впишите адреса $B$4:$С$4 . Необходимые адреса можно вносить в поле «Изменяя ячейки» и автоматически путем выделения мышью соответствующих ячеек переменных непосредственно в экранной форме.
Задание граничных условий для допустимых значений переменных

В нашем случае на значения переменных накладывается только граничное условие неотрицательности, то есть их нижняя граница должна быть равна нулю (см. рис. 1).
· Нажмите кнопку «Добавить» , после чего появится окно «Добавление ограничения» (рис.6).
· В поле «Ссылка на ячейку» введите адреса ячеек переменных $B$4:$С$4 . Это можно сделать как с клавиатуры, так и путем выделения мышью всех ячеек переменных непосредственно в экранной форме.
· В поле знака откройте список предлагаемых знаков и выберите ≥ .
· В поле «Ограничение» введите 0.

Рис.6 — Добавление условия неотрицательности переменных задачи (1)

Задание знаков ограничений ≤ , ≥ , = .
· Нажмите кнопку «Добавить» в окне «Добавление ограничения» .
· В поле «Ссылка на ячейку» введите адрес ячейки левой части конкретного ограничения, например $B$18 . Это можно сделать как с клавиатуры, так и путем выделения мышью нужной ячейки непосредственно в экранной форме.
· В соответствии с условием задачи (1) выбрать в поле знака необходимый знак, например, ≤ .
· В поле «Ограничение» введите адрес ячейки правой части рассматриваемого ограничения, например $D$18 .
· Аналогично введите ограничения: $B$19 , $B$20 .
· Подтвердите ввод всех перечисленных выше условий нажатием кнопки OK .

Окно «Поиск решения» после ввода всех необходимых данных задачи (1) представлено на рис. 5.
Если при вводе условия задачи возникает необходимость в изменении или удалении внесенных ограничений или граничных условий, то это делают, нажав кнопки «Изменить» или «Удалить» (см. рис. 5).

Решение задачи
Установка параметров решения задачи

Задача запускается на решение в окне «Поиск решения» . Но предварительно для установления конкретных параметров решения задач оптимизации определенного класса необходимо нажать кнопку «Параметры» и заполнить некоторые поля окна «Параметры поиска решения» (рис. 7).

Рис. 7 — Параметры поиска решения, подходящие для большинства задач ЛП

Параметр «Максимальное время» служит для назначения времени (в секундах), выделяемого на решение задачи. В поле можно ввести время, не превышающее 32 767 секунд (более 9 часов).
Параметр «Предельное число итераций» служит для управления временем решения задачи путем ограничения числа промежуточных вычислений. В поле можно ввести количество итераций, не превышающее 32 767.
Параметр «Относительная погрешность» служит для задания точности, с которой определяется соответствие ячейки целевому значению или приближение к указанным границам. Поле должно содержать число из интервала от 0 до 1. Чем меньше количество десятичных знаков во введенном числе, тем ниже точность. Высокая точность увеличит время, которое требуется для того, чтобы сошелся процесс оптимизации.
Параметр «Допустимое отклонение» служит для задания допуска на отклонение от оптимального решения в целочисленных задачах. При указании большего допуска поиск решения заканчивается быстрее.
Параметр «Сходимость» применяется только при решении нелинейных задач.Установка флажка «Линейная модель» обеспечивает ускорение поиска решения линейной задачи за счет применение симплекс-метода.
Подтвердите установленные параметры нажатием кнопки «OK» .

Запуск задачи на решение
Запуск задачи на решение производится из окна «Поиск решения» путем нажатия кнопки «Выполнить» .

После запуска на решение задачи ЛП на экране появляется окно «Результаты поиска решения» с сообщением об успешном решении задачи, представленном на рис. 8.

Рис. 8 -. Сообщение об успешном решении задачи

Появление иного сообщения свидетельствует не о характере оптимального решения задачи, а о том, что при вводе условий задачи в MS Excel были допущены ошибки, не позволяющие MS Excel найти оптимальное решение, которое в действительности существует.
Если при заполнении полей окна «Поиск решения» были допущены ошибки, не позволяющие MS Excel применить симплекс-метод для решения задачи или довести ее решение до конца, то после запуска задачи на решение на экран будет выдано соответствующее сообщение с указанием причины, по которой решение не найдено. Иногда слишком малое значение параметра «Относительная погрешность» не позволяет найти оптимальное решение. Для исправления этой ситуации увеличивайте погрешность поразрядно, например от 0,000001 до 0,00001 и т.д.
В окне «Результаты поиска решения» представлены названия трех типов отчетов: «Результаты», «Устойчивость», «Пределы» . Они необходимы при анализе полученного решения на чувствительность. Для получения же ответа (значений переменных, ЦФ и левых частей ограничений) прямо в экранной форме просто нажмите кнопку «OK» . После этого в экранной форме появляется оптимальное решение задачи (рис. 9).

Источник

Тема: Решение задач динамического программирования

Средствами ЭТ Excel

1. Ознакомиться с основными понятиями динамического программирования

2. Освоить порядок решения задачи

3. Научиться оценивать полученные результаты

1 Теоретические сведения

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

Рассматривается управляемый процесс, например экономический процесс распределения средств между предприятиями в течение ряда лет. В результате управления система (объект управления) S переводится из начального состояния s0 в состояние ŝ. Обозначим через sk состояние системы после k-го шага управления. Получаем последовательность состояний s0, s1, …, sk-1, …, sn-1, sn=ŝ, которая изображена на рисунке 8.1

Формулировка задачи динамического программирования:

Определить такое допустимое управление X, переводящее систему S из состояния s0 в состояние ŝ, при котором целевая функция принимает наибольшее (наименьшее) значение.

Особенности модели динамического программирования:

1. Задача оптимизации интерпретируется как n – шаговый процесс управления.

2. Целевая функция равна сумме целевых функций каждого шага.

3. Выбор управления на k-м шаге зависит только от состояния системы к этому шагу , не влияет на предшествующие шаги (нет обратной связи).

4. Состояние sk после k-го шага управления зависит только от предшествующего состояния sk-1 и управления Xk (отсутствие последействия).

5. На каждом шаге управление Xk зависит от конечного числа управляющих переменных, а состояние sk – от конечного числа параметров.

ПРИМЕР выполнения лабораторной работы

Постановка задачи

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

Таблица 8.1 – Ожидаемая прибыль в зависимости от капиталовложений

Филиалы Млн. тг
0,28 0,45 0,65 0,78 0,9
0,25 0,41 0,55 0,65 0,75
0,15 0,25 0,4 0,5 0,62
0,2 0,33 0,742 0,48 0,53

— R(i,j) – прибыль, получаемая от вложения i млн. тг в j – й филиал, где i Î [0,5], j Î [1,4]

— F(A,1,2) – оптимальное распределение средств, когда А млн. тг вкладываются в 1 и 2-й филиалы вместе.

— F(A,1,2,3) – оптимальное распределение средств, когда А млн. тг вкладываются в 1, 2 и 3-й филиалы вместе.

— F(A,1,2,3,4) – оптимальное распределение средств, когда А млн. тг вкладываются в 1, 2, 3 и 4-й филиалы вместе.

Значения i, при которых достигается максимум, определяют оптимальные капиталовложения в филиалы.

Порядок решения задачи

1. Откройте рабочую книгу Excel «Задача динамического программирования» или самостоятельно создайте рабочую книгу, содержащую исходные формы для решения задачи и модуль VBA ( текст программы).

2. Перейдите на лист «Решение задачи»

3. В ячейки B2, D3, B6:G13 (в рабочей книге – выделены голубым цветом) введите исходные данные:

В2 – количество филиалов

D3 – размер капиталовложений

B6:E11 – ожидаемую прибыль

4. Нажмите кнопку “Вычислить”, расположенную на рабочем листе

Результат решения задачи приведен на рисунке 8.2.

В диапазон ячеек H6:J11 программа выводит значения F(A,1,2), F(A,1,2,3) и F(A,1,2,3,4). В диапазоне ячеек B17:G22 программа выводит оптимальное распределение капиталовложений по филиалам.

Вывод: Из рисунка 8.2 видно, что максимальная ожидаемая прибыль равна 1,1 млн. тг, а оптимальные капиталовложения состоят в выделении 1 –му филиалу 3 млн. тг, 2-му филиалу – 1 млн. тг и 4-му филиалу – 1 млн. тг.

ЗАДАНИЕ

— Решить задачу динамического программирования по приведенным исходным данным (приложение 8.1)

· Откройте рабочую книгу Excel «Задача динамического программирования»

· Перейдите на лист «Исходные данные»

· Скопируйте интервал таблицы Вариант 1, выделенный голубым цветом

· Перейдите на лист «Решение задачи»

· Вставьте в ячейку В6 скопированный интервал

· Введете в ячейку В2 количество филиалов для данного варианта

· Введите в ячейку D3 размер капиталовложений для данного варианта

· Нажмите кнопку “Вычислить”, расположенную на рабочем листе

· По результатам решения задачи сделайте выводы.

· Очистите содержимое ячеек B6:L13, B17:K24

· Решите задачу для других вариантов исходных данных, приведенных на листе «Исходные данные»

— Составить и решить задачу динамического программирования

Требования к отчету по лабораторной работе

Отчет должен содержать:

1. Условие задачи.

2. Результаты решения задач.

3. Выводы по решению задачи.

Варианты задания

Форма для решения задачи о размещении капитала.

Текст программы для решения задачи о размещения капитала.

Программа написана на языке программирования VBA.

Dim aa,nn,nn1,kk1, i, j, k, n, p, l, t As Integer

Dim m, R(), A() As Double

ReDim R(k + 1, NN), A(k + 1)

For i = 1 To k + 1

For j = 2 To NN + 1

R(i, j — 1) = Cells(i + 5, j).Value

For j = 1 To k + 1

A(j) = Cells(j + 5, 2).Value

For j = 1 To k + 1

A(j) = Cells(j + 5, p + nn1 — 1).Value ‘nn-1

Продолжение приложения 8.3

For n = 1 To k + 1

Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого.

Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций.

Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим.

Источник

Get it on Apple Store

Get it on Google Play

Public user contributions licensed under
cc-wiki license with attribution required

Skolkovo resident

В статье рассказывается:

  1. Что такое динамическое программирование
  2. Преимущества и недостатки динамического программирования
  3. Пример решения задачи при помощи динамического программирования
  4. Роль таблиц в динамическом программировании
  5. Использование динамического программирования в реальной жизни
  6. Пройди тест и узнай, какая сфера тебе подходит:
    айти, дизайн или маркетинг.

    Бесплатно от Geekbrains

Динамическое программирование – это раздел математики, который занимается методами решения многошаговых задач по оптимизации. Данный инструмент вычислений сегодня буквально незаменим во многих сферах человеческой деятельности.

Особенно он важен, когда требуется срочная оценка данных, поступивших из разных источников и значительно отличающихся как по объему, так и характеру. В подобных ситуациях динамическое программирование сложно чем-либо заменить.

Что такое динамическое программирование

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

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

Как следствие, Беллману понадобилось немало времени, чтобы выбрать подходящее название. Вместо слова «планирование», которые вызывало ассоциации с тем, что в это время происходило в Советском Союзе, он предложил вариант «программирование».

А слово «динамическое» оказалось удачным не только потому, что передавало суть методики, но и потому, что оно было понятным и его сложно было подменить чем-либо другим. Для Беллмана было важно, чтобы его термин нельзя было неправильно интерпретировать, исказить смысл. Отсюда и возникло понятие «динамическое программирование».

Далее рассмотрим саму суть динамического программирования. Оно заключается в том, что при решении задачи та разбивается на несколько более мелких подзадач, непосредственно зависящих друг от друга.

Что такое динамическое программирование

Что такое динамическое программирование

«Более мелкие подзадачи» – это то же самое, что «более простые». Другими словами, это задачи, входные данные для которых имеют меньший размер. Входными данными могут быть число, массив, совокупность настраиваемых параметров и т.д. Как пример, можно привести последовательность чисел Фибоначчи, N-й член которой обозначается как Ф(N).

Чтобы найти пятое число Фибоначчи Ф(5), сначала нужно получить третье Ф(3) и четвертое Ф(4) числа в этой последовательности, то есть необходимо решить те самые мелкие подзадачи.

Скачать файл

В основе динамического программирования лежит выполнение следующих условий:

  • Отдельные элементы должны находиться в зависимости друг от друга. Это может следовать непосредственно из условий, что наиболее характерно для задач на числовые последовательности. Если такую зависимость не удается проследить, можно попробовать найти некоторую числовую последовательность наподобие рассмотренных чисел Фибоначчи, рассчитав значения первых ее членов.
  • Должны быть определены начальные значения элементов. Для этого необходимо последовательно разделять функцию на подзадачи до тех пор, пока не будут получены уже известные значения, либо функция не сведется к элементарной.

Преимущества и недостатки динамического программирования

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

Циклы в Python: виды и примеры

Читайте также

Допустим, что хакеру нужно взломать пароль, для чего он поочередно перебирает различные комбинации символов. Если в пароле могут быть 10 цифр, по 26 больших и маленьких букв, а также 32 специальных символа, то существует 94 варианта одного символа.

То есть, если пароль состоит из одного символа, он имеет 94 возможных значения, если из двух символов, то на каждый из них приходится 24 варианта, и всего нужно 94*94 = 8836 комбинаций. Для десятизначного пароля нужно провести уже 94^10 проверок.

В наиболее общем сценарии для взлома пароля из N символов нужно перебрать 94^N комбинаций. Особенность такого подхода в том, что число попыток растет по экспоненте, то есть при увеличении длины на один знак возможных вариантов становится в 94 раза больше. Можно подумать, что взлом пароля – это условный пример, но в реальности задачи, для решения которых необходимо перебрать все варианты, встречаются повсеместно.

Преимущества и недостатки динамического программирования

Преимущества и недостатки динамического программирования

При возрастании по экспоненте временные затраты становятся огромными. Даже если на один элемент приходится всего несколько возможных значений, никто не станет заниматься подобными вычислениями – когда в задаче сто элементов, ее решение может занять миллиарды лет. А в действительности число элементов в задаче может быть намного больше. Именно в таких случаях возникает необходимость в динамическом программировании.

Данный метод обладает рядом преимуществ:

  • Скорость. Благодаря этому динамическое программирование является эффективным. Сложнейшие задачи можно решить за максимально короткие сроки – достаточно лишь заполнить каждую ячейку таблицы.
  • Универсальность. Для решения задачи любой сложности существует определенный набор правил, которые не предусматривают никаких исключений и требуют проведения минимальных расчетов.
  • Точность. В процессе динамического программирования охватываются все возможные варианты событий. Это позволяет найти наиболее оптимальное решение без каких-либо погрешностей и неоднозначностей.

pdf иконка

Топ-30 самых востребованных и высокооплачиваемых профессий 2023

Поможет разобраться в актуальной ситуации на рынке труда

doc иконка

Подборка 50+ ресурсов об IT-сфере

Только лучшие телеграм-каналы, каналы Youtube, подкасты, форумы и многое другое для того, чтобы узнавать новое про IT

pdf иконка

ТОП 50+ сервисов и приложений от Geekbrains

Безопасные и надежные программы для работы в наши дни

Уже скачали 20407 pdf иконка

При этом у него есть и слабые стороны:

  • Память. Перед тем как запустить алгоритм динамического программирования, нужно построить и заполнить таблицы, которые занимают определенный объем памяти. Возможно, что для решения задачи понадобится строить и размещать в памяти большие таблицы или множество различных таблиц.
  • Когнитивная нагрузка. Безусловно, многих привлекает использование компактной системы правил для решения сложных задач. Но в то же время необходимо иметь соответствующий образ мышления, чтобы составлять подобные системы или хотя бы разбираться в них. Из-за этого динамическое программирование зачастую не пользуется большой популярностью.

Пример решения задачи при помощи динамического программирования

Теперь попробуем решить задачу с помощью динамического программирования. Допустим, что нам требуется вычислить сумму n чисел: 1 +2 +3 + … + n

Вначале данная задача может показаться непростой из-за того, что для получения ответа нужно одновременно сложить большое количество чисел. Однако можно решить ее методом динамического программирования, то есть путем разделения на подзадачи.

Пример решения задачи при помощи динамического программирования

Пример решения задачи при помощи динамического программирования

Динамическое программирование всегда начинается с определения начальных условий. В нашем примере достаточно взять сумму одного первого элемента, равную этому элементу: F(1) = 1

Для нахождения суммы двух элементов надо взять полученную сумму первого элемента и прибавить к ней второй элемент: F(2) = F(1) + 2 = 1 + 2 +3

Для трех элементов сумма равна F(3) = F(2) +3 = 6

Отсюда делаем вывод, что искомая функция имеет вид F(n) = F(n-1) + n

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

Роль таблиц в динамическом программировании

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

Data science: что это, где используется

Читайте также

В простейшем варианте эта таблица будет представлять собой обычный массив, состоящий из одной строки. Такое динамическое программирование называется одномерным, оно занимает О(n) памяти. Например, в процессе вычисления чисел Фибоначчи лучше всего сохранять результаты отдельных вычислений в обычном массиве. Стандартный алгоритм с использованием рекурсии крайне неудобен – каждый раз приходится заново проводить вычисления, которые уже были сделаны на предыдущих этапах.

В большинстве случаев используется двумерное динамическое программирование, при котором таблицы состоят из строчек и столбиков точно также, как в Excel. Объем потребляемой памяти для таблицы из n строк и n столбцов равен О(n*n) = О(n*2). То есть, таблица в виде квадрата из 10 строк и 10 столбцов состоит из 100 ячеек.

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

Только до 17.04

Скачай подборку тестов, чтобы определить свои самые конкурентные скиллы

Список документов:

Тест на определение компетенций

Чек-лист «Как избежать обмана при трудоустройстве»

Инструкция по выходу из выгорания

Чтобы получить файл, укажите e-mail:

Подтвердите, что вы не робот,
указав номер телефона:


Уже скачали 7503

Кроме исходных данных, для динамического решения задачи требуется следующее:

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

Использование динамического программирования в реальной жизни

Динамическое программирование нельзя назвать сугубо теоретической концепцией, используемой только учеными. Оно находит практическое применение во многих сферах деятельности, таких как прикладная информатика, машиностроение, финансовое прогнозирование. Рассмотрим некоторые типичные примеры динамического программирования.

Довольно часто встречается задача построить маршрут через несколько заданных точек, например, в приложениях для онлайн-карт или вызова такси.

Использование динамического программирования в реальной жизни

Использование динамического программирования в реальной жизни

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

Аналогичная ситуация имеет место в компьютерных сетях, когда требуется доставить пакет данных по нескольким адресам. Здесь также необходимо рассчитать маршрут и определить последовательность доставки данных получателям.

Использование динамического программирования хорошо демонстрирует утилита diff, которая занимается поиском похожих фрагментов в двух строках. Данный алгоритм основан на известной задаче динамического программирования по поиску наибольшей общей последовательности.

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

В заключение можно сделать вывод, что динамическое программирование позволяет значительно ускорить решение алгоритмических задач. При этом объем используемой памяти не является постоянной величиной, для решения больших задач его необходимо увеличить. Однако в большинстве случаев выгоды от уменьшения времени на вычисления серьезно перевешивают расходы на память.

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

Понравилась статья? Поделить с друзьями:
  • Динамический массив данных в excel
  • Динамическое построение графика в excel
  • Динамический массив vba excel это
  • Динамическое обновление таблицы excel
  • Динамический массив excel как включить