Динамическое программирование. Задача оптимального распределения ресурсов. Распределение ресурсов методом динамического программирования

План урока

Учебная дисциплина МАТЕМАТИЧЕСКИЕ МЕТОДЫ И МОДЕЛИ В ЭКОНОМИКЕ

Тема урока Решение различных практических задач ДП с применением математических методов.

Цели урока

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

    Развитие качества ума, внимания, умений учебного труда студентов.

    Воспитание дисциплинированности, целеустремленности студентов.

Оснащение урока конспект лекций, В.П.Агальцов «Математические методы в программировании».

Ход урока:

    Организационный момент:

проверка отсутствующих, заполнение журнала.

    Актуализация опорных знаний : ответы на контрольные вопросы

    Какие задачи называются многошаговыми?

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

    Что такое оптимальное управление u*?

    Каков алгоритм метода последовательных приближений в два круга?

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

    Изучение нового материала:

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

  • Задача о наибольшей общей подпоследовательности: даны две последовательности, требуется найти самую длинную общую подпоследовательность.

  • Задача поиска наибольшей увеличивающейся подпоследовательности: дана последовательность, требуется найти самую длинную возрастающую подпоследовательность.

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

  • Задача о вычислении чисел Фибоначчи

  • Задача о порядке перемножения матриц: даны матрицы, …, требуется минимизировать количество скалярных операций для их перемножения.

  • Задача о выборе траектории

  • Задача последовательного принятия решения

  • Задача об использовании рабочей силы

  • Задача управления запасами

  • Задача о ранце: из неограниченного множества предметов со свойствами «стоимость» и «вес» требуется отобрать некое число предметов таким образом, чтобы получить максимальную суммарную стоимость при ограниченном суммарном весе.

  • Алгоритм Флойда - Уоршелла: найти кратчайшие расстояния между всеми вершинами взвешенного ориентированного графа.

  • Алгоритм Беллмана - Форда: найти кратчайший путь во взвешенном графе между двумя заданными вершинами.

  • Максимальное независимое множество вершин в дереве: дано дерево, найти максимальное множество вершин, никакие две из которых не связаны ребром.

Пример: Оптимальное распределение ресурсов

Капитал 40 млн.руб. инвестор должен вложить в четыре инвестиционных проекта так, чтобы получить максимальный доход. Доходность проектов дана в таблице (вложения кратны 8 млн. руб.)

u

Прибыль от внедрения

f4 (u )

f3 (u )

f2 (u )

f1 (u )

55

39

120

115

10 0

120

135

134

14 0

145

158

147

Решение:

Это задача динамического программирования. Решение состоит из двух этапов. На первом этапе (от конца к началу) ищем условное оптимальное решение, на втором (от начала к концу) – ищем оптимальное решение задачи.

1 этап.

Распределяем капитал между четырьмя проектами и считаем получаемую прибыль L (i ), i = 8,16,24,32,40.

1 шаг : Денежные средства вкладываются в четвертый проект.

L (8)=55

L (16)=58

L (24)=90

L (32)=100

L (40)=140

2 шаг : Денежные средства вкладываются в четвертый и третий проекты.

u

Прибыль от внедрения

1 шаг

f3 (u )

55

39

10 0

120

14 0

145

3 шаг : Денежные средства вкладываются в четвертый, третий (2 шаг) и второй проекты.

u

Прибыль от внедрения

2 шаг

f 2(u )

94

108

120

135

135

175

158

175

134

214

147

2 этап:

На четвертом шаге выбираем максимальное из полученных значений прибыли L (40)=214.

И возвращаясь в обратном порядке от таблицы к таблице (от 4 шага к 1) выбираем такие значения доходов, при которых и получено значение 214.

Максимальный доход 214 млн. руб. от вложенных средств может быть получен при следующем распределении средств:

1 проект – 0 млн. руб.

2 проект – 24 млн. руб.

3 проект – 8 млн. руб.

4 проект – 8 млн. руб.

    Закрепление нового материала:

5. Подведение итогов урока: выводы, оценки, домашнее задание:

(2) п.5.1

Ср12: формирование и усвоение содержания теоретического материала

Подпись преподавателя

- 1.03 Мб

Дадим математическую формулировку принципа оптимальности. Для простоты будем считать, что начальное x 0 и конечное x T состояния системы заданы. Обозначим через z 1 (х 0 , u 1) значение функции цели на первом этапе при начальном состоянии системы x 0 и при управлении u 1 , через z 2 (х 1 ,u 2) – соответствующее значение функции цели только на втором этапе, ..., через
z i (х i -1 ,u i) – на i-м этапе, ..., через z N (х N -1 , u N) -на N-м этапе. Очевидно, что

Надо найти оптимальное управление u*= (; ;...;), такое, что доставляет экстремум целевой функции (1) при ограничениях.

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

определения для подобных задач на последнем этапе, двух последних и т. д.;
– область определения исходной задачи. Обозначим через F 1 (x N -1), F 2 (x N -2), …, F k (x N -k), …, F N (x 0) соответственно условно-оптимальные значения функции цели на последнем этапе, двух последних и т. д., на k последних и т. д., на всех N этапах.

Начинаем с последнего этапа. Пусть х N-1 – возможные состояния системы на начало N-го этапа. Находим:

F 1 (x N -1) = z N (x N -1 , u N). (2)

Для двух последних этапов получаем

F 2 (x N -2) = (Z N -1 (x N -2 , u N -1) + F 1 (x N -1)). (3)

Аналогично:

F 3 (x N -3) = (Z N -2 (x N -3 , u N -2) + F 2 (x N -2)). (4)

………………………………………………….

F k (x N -k) = (z N-k +1 (x N -k , u N-k +1) + F k- 1 (x N-k +1)). (5)

…………………………………………………..

F N (x 0) = (z 1 (x 0 , u 1) + F N -1 (x 1)). (6)

Выражение (6) представляет собой математическую запись принципа оптимальности. Выражение (5) – общая форма записи условно-оптимального значения функции цели для k оставшихся этапов. Выражения (2) – (6) называются функциональными уравнениями Беллмана. Отчетливо просматривается их рекуррентный (возвратный) характер, т. е. для нахождения оптимального управления на N шагах нужно знать условно-оптимальное управление на предшествующих N – 1 этапах и т. д. Поэтому функциональные уравнения часто называют рекуррентными (возвратными) соотношениями Беллмана.

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

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

  • Рассматривается система, состояние которой на каждом шаге определяется вектором x t . Дальнейшее изменение ее состояния зависит только от данного состояния x t и не зависит от того, каким путем система пришла в это состояние. Такие процессы называются процессами без последействия.
  • На каждом шаге выбирается одно решение u t , под действием которого система переходит из предыдущего состояния x t -1 в новое х t . Это новое состояние является функцией состояния на начало интервала x t -1 и принятого в начале интервала решения u t , т. е. x t = x t (x t -1 ,u t).
  • Действие на каждом шаге связано с определенным выигрышем (доходом, прибылью) или потерей (издержками), которые зависят от состояния на начало шага (этапа) и принятого решения.
  • На векторы состояния и управления могут быть наложены ограничения, объединение которых составляет область допустимых решений.
  • Требуется найти такое допустимое управление u t для каждого шага t, чтобы получить экстремальное значение функции цели за все Т шагов.

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

Геометрическая интерпретация задачи динамического программирования состоит в следующем. Пусть n – размерность пространства состояний. В каждый момент времени координаты системы имеют вполне определенное значение. С изменением времени t могут изменяться значения координат вектора состояния. Назовем переход системы из одного состояния в другое траекторией ее движения в пространстве состояний. Такой переход осуществляется воздействием на координаты состояния. Пространство, в котором координатами служат состояния системы, называется фазовым. Особенно наглядно задачу динамического программирования можно интерпретировать в случае, если пространство состояний двухмерно. Область возможных состояний в этом случае изобразится некоторой фигурой, начальное и конечное состояния системы – точками х 0 , (рис. 1). Управление – это воздействие, переводящее систему из начального состояния в конечное. Для многих экономических задач не известно начальное либо конечное состояние, а известна область X 0 или X T , которой эти точки принадлежат.

Рисунок 1

Тогда допустимые управления переводят точки из области Х 0 в X T . Задача динамического программирования геометрически может быть сформулирована следующим образом: найти такую фазовую траекторию, начинающуюся в области Х 0 и оканчивающуюся в области Х T , для которой функция цели достигает экстремального значения. Если в задаче динамического программирования известны начальное и конечное состояния, то говорят о задаче с закрепленными концами. Если известны начальные и конечные области, то говорят о задаче со свободными концами.

  1. ЗАДАЧА РАСПРЕДЕЛЕНИЯ РЕСУРСОВ

2.1 Общая постановка задачи

Рассмотрим применение метода динамического программирования на примере распределения средств между шестью объектами реконструкции предприятия горводоканала:

1. Центральная насосно- фильтровальная станция;

2. Восточная насосно- фильтровальная станция;

3. Водопроводная насосная станции перекачки;

4. Центральная станция аэрации;

5. Восточная станция аэрации;

6. Загородная станция аэрации.

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

Таблица 1.1 Входные данные продуктивности объектов реконструкции

Порядковый номер объекта

Объем ресурсов, выданных на развитие объектов (тыс. грн.)

Продуктивность объектов результате развития (тыс. м3)

    1. Блок схема программы

Рисунок 1. Основная программа

QtObj – количество объектов


QtRes – количество ресурсов

effMatrix - матрица производительности объектов,


distVector – вектор выделенных ресурсов


Шаг 1. Условная оптимизация

Шаг 2. Безусловная оптимизация


I = QtObj-1,0 формируем вектор результат

Рисунок 2. Ввод данных

distVector – вектор дистанций, effMatrix = матрица производительности

если все элементы матрицы введены



если вектор производительности- не

отрицательный

Рисунок 3. Условная оптимизация,

формируем мартицу выхода (максимум функции цели)


outMatrix – матрица максимума цели

QtObj – количество объектов

QtRes – количество ресурсов

Matrix – матрица производительности

distVect – вектор дистанций (вектор ресурсов)

нет да Если первое предприятие

Поиск максимума


да maxItem = temp; outMatrix[i][j] = maxItem

    1. Структура алгоритма программы
  1. Ввод данных – класс DataDlg.

Переменные члены класса.

//вектор для хранения объема ресурсов

std::vector distVector;

//матрица производительности объектов

int** effMatrix;

//функция перевода строки в число

int StringToInt(CString);

//функция проверки корректности введенных данных

BOOL FillMatrix();

//функция очистки ресурсов, после закрытия окна

virtual BOOL DestroyWindow();

//функция инициализации диалога

virtual BOOL OnInitDialog();

  1. Вычисление результатов – основ ной класс программы courseWorkDlg

Переменные члены класса

int Value; //значение производительности

int MaxIndex;// максимальный индекс в векторе ресурсов

int Facility;//предприятие

int Recource;//выделенный ресурс

Item ** outMatrix; //матрица максимума цели

std::vector resVector; //вектор результатов

void BuildOutMatrix(int **,std::vector);//функция формирования матрицы цели (условная оптимизация)

afx_msg void OnBnClickedButton1();// обработчик нажатия на кнопку «Вычислить», который запускает процесс вычислений.

virtual BOOL DestroyWindow();//очистка ресурсов программы

  1. Вывод результатов класс Report

Назначение данного класса – это вывод вектора результата в табличной форме.

2.4 Результаты работы программы

Начальный ввод данных

  1. Ввод данных о продуктивности объектов реконструкции
  1. Если не все поля заполнены
  1. Если введен неправильный символ

Корректный ввод данных

Показ результата

  1. Ввод данных

Результат работы программы

Начальный ввод данных

Ввод продуктивности объектов

Приложение.

Листинг программы

int DataDlg::StringToInt(CString str)

const wchar_t* s = T2CW(str);

int val = _wtoi(s);

// все поля заполнены?

BOOL DataDlg::FillMatrix()

bool flag = true;

for (int i = 0; i < Cells.GetSize(); i ++){

for (int j = 0 ; j < Cells.GetAt(i)->Edits.GetSize(); j ++){

CEdit * temp = Cells.GetAt(i)->Edits.GetAt(j) ;

if (temp->m_hWnd != NULL){

temp->GetWindowText(str);

if (str.IsEmpty()){

MessageBox(L"Нужно заполнить все поля", L"Ошибка", MB_ICONERROR | MB_OK);

Описание работы

Целью данной работы является реализация на ЭВМ решения задачи оптимального распределения средств на расширение производства.
Задачи курсовой работы:
Рассмотреть теоретические аспекты решения задач динамического программирования; рекуррентность природы задач данного типа; принципы оптимальности Беллмана.
Разработка алгоритма. Блок - схемы. Структура алгоритма.
Реализация на ЭВМ разработанного алгоритма на выбранном языке программирования.

Содержание

ВВЕДЕНИЕ ……………………………………………2
Динамическое программирование
Основные понятия …………………4
Принципы динамического программирования. Функциональные уравнения Беллмана …………………….5
Особенности задач динамического программирования……………….10
Задача распределения ресурсов……………………12
Общая постановка задачи ………………………….13
Блок схема программы
Структура алгоритма программы
Результат работы программы
Заключение
Список используемой литературы

Назначение сервиса . Данный сервис предназначен для решения задачи оптимального распределения инвестиций в онлайн режиме. Результаты вычислений оформляются в отчете формата Word (см. пример оформления).
Такого рода задачи основаны на функции Беллмана и при решении используется метод обратной прогонки (см. Типовые задания). Также можно воспользоваться сервисом Процедура прямой прогонки .

Инструкция . Выберите количество предприятий и количество строк (количество вариантов эффективного вложения), нажмите Далее (см. Пример заполнения). Если доход и остатки предприятий задан в виде функций f(x) и g(x) , задача решается через этот калькулятор .

Количество предприятий 2 3 4 5 6 7 8 9 10
Количество строк (количество вариантов эффективного вложения) 2 3 4 5 6 7 8 9 10

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

f1 f2 f3 x i
40 30 35 0
90 110 95 1
395 385 270 2
440 470 630 3
620 740 700 4

I этап. Условная оптимизация .
1-ый шаг. k = 3.

e 2 u 3 e 3 = e 2 - u 3 f 3 (u 3) F* 3 (e 3) u 3 (e 3)
1 0 1 35
1 0 95 95 1
2 0 2 35
1 1 95
2 0 270 270 2
3 0 3 35
1 2 95
2 1 270
3 0 630 630 3
4 0 4 35
1 3 95
2 2 270
3 1 630
4 0 700 700 4

2-ый шаг. k = 2.

e 1 u 2 e 2 = e 1 - u 2 f 2 (u 2) F* 2 (e 1) F 1 (u 2 ,e 1) F* 2 (e 2) u 2 (e 2)
1 0 1 30 95 125 125 0
1 0 110 0 110
2 0 2 30 270 300
1 1 110 95 205
2 0 385 0 385 385 2
3 0 3 30 630 660 660 0
1 2 110 270 380
2 1 385 95 480
3 0 470 0 470
4 0 4 30 700 730
1 3 110 630 740 740 1
2 2 385 270 655
3 1 470 95 565
4 0 740 0 740

3-ый шаг. k = 1.

e 0 u 1 e 1 = e 0 - u 1 f 1 (u 1) F* 1 (e 0) F 0 (u 1 ,e 0) F* 1 (e 1) u 1 (e 1)
1 0 1 40 125 165 165 0
1 0 90 0 90
2 0 2 40 385 425 425 0
1 1 90 125 215
2 0 395 0 395
3 0 3 40 660 700 700 0
1 2 90 385 475
2 1 395 125 520
3 0 440 0 440
4 0 4 40 740 780 780 0
1 3 90 660 750
2 2 395 385 780
3 1 440 125 565
4 0 620 0 620

Примечание : Столбцы 1 (вложенные средства), 2 (проект) и 3 (остаток средств) для всех трех таблиц одинаковы, поэтому их можно было бы сделать общими. Столбец 4 заполняется на основе исходных данных о функциях дохода, значения в столбце 5 берутся из столбца 7 предыдущей таблицы, столбец 6 заполняется суммой значений столбцов 4 и 5 (в таблице 3-го шага столбцы 5 и 6 отсутствуют).
В столбце 7 записывается максимальное значение предыдущего столбца для фиксированного начального состояния, и в 8 столбце записывается управление из 2 столбца, на котором достигается максимум в 7.
Этап II. Безусловная оптимизация .
Из таблицы 3-го шага имеем F* 1 (e 0 = 4 млн.руб.) = 780 тыс.руб., то есть максимальная прибыль от инвестирования e 0 = 4 млн.руб. равна 780 тыс.руб.
Из этой же таблицы получаем, что первому предприятию следует выделить u* 1 (e 0 = 4 млн.руб.) = 0 млн.руб.
При этом остаток средств составит: e 1 = e 0 - u 1 , e 1 = 4 - 0 = 4 млн.руб.
Из таблицы 2-го шага имеем F* 2 (e 1 = 4 млн.руб.) = 740 тыс.руб., т.е. максимальная прибыль при e 1 = 4 млн.руб. равна 740 тыс.руб.
Из этой же таблицы получаем, что второму предприятию следует выделить u* 2 (e 1 = 4 млн.руб.) = 1 млн.руб.
При этом остаток средств составит: e 2 = e 1 - u 2 , e 2 = 4 - 1 = 3 млн.руб.
Последнему предприятию достается 3 млн.руб. Итак, инвестиции в размере 4 млн.руб. необходимо распределить следующим образом: первому предприятию ничего не выделять, второму предприятию выделить 1 млн.руб., третьему предприятию выделить 3 млн.руб., что обеспечит максимальную прибыль, равную 780 тыс.руб.

Пример №2 . Имеются 4 предприятия, между которыми необходимо распределить 100 тыс. усл. ед. средств. Значения прироста выпуска продукции на предприятии в зависимости от выделенных средств Х представлены в таблице. Составить оптимальный план распределения средств, позволяющий максимизировать общий прирост выпуска продукции.

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

Спрашивается, как нужно распределить средства К между предприятиями, чтобы в сумме они дали максимальный доход?

Эта задача легко решается методом динамического программирования. Хотя в своей постановке она не содержит упоминания о времени, можно все же операцию распределения средств мысленно развернуть в какой-то последовательности, считая за первый шаг вложение средств в предприятие за второй - в и т. д.

Управляемая система S в данном случае - средства или ресурсы, которые распределяются. Состояние системы S перед каждым шагом характеризуется одним числом S - наличным запасом еще не вложенных средств. В этой задаче «шаговыми управлениями» являются средства выделяемые предприятиям. Требуется найти оптимальное управление, т. е. такую совокупность чисел при которой суммарный доход максимален:

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

Начнем оптимизацию с последнего, шага. Пусть мы подошли к этому шагу с остатком средств S. Что нам делать? Очевидно, вложить всю сумму S целиком в предприятие Поэтому условное оптимальное управление на -м шаге: отдать последнему предприятию все имеющиеся средства S, т. е.

а условный оптимальный выигрыш

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

Перейдем к предпоследнему, шагу. Пусть мы подошли к нему с запасом средств S. Обозначим условный оптимальный выигрыш на двух последних шагах: (который уже оптимизирован). Если мы выделим на шаге предприятию средства то на последний шаг останется Наш выигрыш на двух последних шагах будет равен

и нужно найти такое , при котором этот выигрыш максимален:

Знак означает, что берется максимальное значение по всем какие только возможны (вложить больше, чем S, мы не можем), от выражения, стоящего в фигурных скобках. Этот максимум и есть условный оптимальный выигрыш за два последних шага, а то значение при котором этот максимум достигается, - условное оптимальное управление на шаге.

и соответствующее ему условное оптимальное управление - то значение при котором этот максимум достигается.

Продолжая таким образом, дойдем, наконец, до предприятия Здесь нам не нужно будет варьировать значения S; мы точно знаем, что запас средств перед первым шагом равен К:

Итак, максимальный выигрыш (доход) от всех предприятий найден. Теперь остается только «прочесть рекомендации». То значение при котором достигается максимум (13.4), и есть оптимальное управление на 1-м шаге.

После того как мы вложим эти средства в 1-е предприятие, у нас их останется . «Читая» рекомендацию для этого значения S, выделяем второму предприятию оптимальное количество средств: и т. д. до конца.

А теперь решим численный пример. Исходный запас средств (условных единиц), и требуется его оптимальным образом распределить между пятью предприятиями Для простоты предположим, что вкладываются только целые количества средств. Функции дохода заданы в таблице 13.1.

Таблица 13.1

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

Произведем условную оптимизацию так, как это было описано выше, начиная с последнего, 5-го шага. Каждый раз, когда мы подходим к очередному шагу, имея запас средств?, мы пробуем выделить на этот шаг то или другое количество средств, берем выигрыш на данном шаге по таблице 13.1, складываем с уже оптимизированным выигрышем на всех последующих шагах до конца (учитывая, что средств у нас осталось уже меньше, как раз на такое количество средств, которое мы выделили) и находим то вложение, на котором эта сумма достигает максимума. Это вложение и есть условное оптимальное управление на данном шаге, а сам максимум - условный оптимальный выигрыш.

В таблице 13.2 даны результаты условной оптимизации по всем шагам. Таблица построена так: в первом столбце даются значения запаса средств S, с которым мы подходим к данному шагу. Далее таблица разделена на пять пар столбцов, соответственно номеру шага.

Таблица 13.2

В первом столбце каждой пары приводится значение условного оптимального управления, во втором - условного оптимального выигрыша. Таблица заполняется слева направо, сверху вниз. Решение на пятом - последнем - шаге вынужденное: выделяются все средства; на всех остальных шагах решение приходится оптимизировать. В результате последовательной оптимизации 5-го, 4-го, 3-го, 2-го и 1-го шагов мы получим полный список всех рекомендаций по оптимальному управлению и безусловный оптимальный выигрыш W за всю операцию - в данном случае он равен 5,6. В последних двух столбцах таблицы 13.2 заполнена только одна строка, так как состояние системы перед началом первого шага нам в точности известно: . Оптимальные управления на всех шагах выделены рамкой. Таким образом, мы получили окончательный вывод: надо выделить первому предприятию две единицы из десяти, второму - пять единиц, третьему - две, четвертому - ни одной, пятому - одну единицу. При этом распределении доход будет максимален и равен 5,6.