Методы динамического программирования

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    897,15 Кб
  • Опубликовано:
    2015-07-14
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Методы динамического программирования

Введение

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

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

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

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

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

Первый класс - это задачи планирования деятельности экономического объекта (предприятия, отрасли и т.п.) с учётом изменения потребности в производимой продукции во времени.

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

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

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

Будем считать, что состояние рассматриваемой системы  на  - ом шаге

             (1)

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

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

         (2)

где .

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

Задача оптимизации в этом случае состоит в отыскании оптимальной стратегии управления, т.е. такой совокупности управлений

            (3)

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

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

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

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

(4)

было бы наибольшим при ограничениях общей суммы ,

где - общая сумма капитальных вложений.

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

где  - некоторое количество предприятий, для которых определяется параметр и функция состояния.

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

Если  - количество единиц ресурса, то -ое предприятие получит  единиц ресурса, то остаток  необходимо распределить между предприятиями от -го до -го так, чтобы был получен максимальный прирост прибыли или мощности  Следовательно, прирост прибыли будет равен  и нужно выбрать такое значение -ое между 0 и x, чтобы увеличение прибыли -предприятий было максимальным.

1.Построение математической модели

Общая сумма в 4 млн. руб. распределяется между пятью предприятиями в количествах, кратных 1 млн. руб. В результате выделение средств предприятию в размере  оно дает доход  =1,2,3,4,5 величина которого может быть найдена из таблицы №1:

Таблица №1. «Исходные данные»

0

1

2

3

4

0

5

9

11

12

0

3

4

5

10

0

7

9

10

11

0

4

8

12

14

0

3

5

7

9

1.      Заполним таблицу первой итерации.

Таблица №2. «Первая итерация»

f1(x-x2) f2(x2)

0

1

2

3

4


0

5

9

11

12

0

0

0

5

9

11

12

1

3

3

8

12

14


2

4

4

9

13



3

5

5

10




4

10

10






Строку f1 (x-x2) заполним данными первого субъекта f1(x1) из таблицы 1. Столбец f2(x2) заполним данными, соответствующими данным из таблицы 1. Незаполненные элементы таблицы находятся путем сложения элементов строки f1 (x-x2) и столбца f2(x2) , т.е. по формуле:

FK(XK) + FK-1 (x-XK)            (5)

где -некоторое количество субъектов, для которых определяются параметры и функция состояния;

x-сумма капитальных вложений, выделяемая нескольким субъектам.

. Затем находим максимумы среди элементов, полученных в результате предыдущего шага, по побочным диагоналям таблицы (максимальные элементы выделены в таблице №2. Например, среди элементов диагонали 12,14,13,10 выберем 14.

. После чего заполним новую таблицу данными, полученными в результате предыдущего шага. Строкаx2(x) заполняется элементами столбца ресурсов из таблицы 2, соответствующих максимальным элементам побочных диагоналей, полученным на шаге 3.

Таблица №3. «Максимальный прирост прибыли на первых двух предприятиях»

x

0

1

2

3

4

F2(x)

0

5

9

12

14

2(x)00011







. Заполняем «вторую итерацию»

Таблица №4. «Вторая итерация»

f2(x-x3) f3(x3)

0

1

2

3

4


0

5

9

12

0

0

0

5

9

12

14

1

7

7

12

16

19


2

9

9

14

18



3

10

10

15




4

11

11






Строку f2 (x-x3) заполним данными строки F2(x) из таблицы №3. Столбец f3(x3) заполним данными, соответствующими данным из таблицы №1. Незаполненные элементы находим аналогично шагу 2 (формула 5).

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

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

Таблица №5. «Максимальный прирост прибыли на первых двух предприятиях»

x

0

1

2

3

4

F2(x)

0

7

12

16

19

3(x)01111







. Заполним таблицу третьей итерации.

Таблица №6. «Третья итерация»

f3(x-x4) f4(x4)

0

1

2

3

4


0

7

12

16

19

0

0

0

7

12

16

19

1

4

4

11

16

20


2

8

15

20



3

12

12

19




4

14

14






Строку  заполним данными строки (x) из таблицы №3. Столбец f3(x3) заполним данными, соответствующими данным из таблицы №1. Незаполненные элементы находим аналогично шагу 2 (формула 5).

. Далее снова находим максимумы среди элементов, полученных в результате предыдущего шага, по побочным диагоналям таблицы (максимальные элементы выделены в таблице №6).

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

Таблица №7. «Максимальный прирост прибыли на первых двух предприятиях»

x

0

1

2

3

4

F4(x)

0

7

12

16

20

5(x)000

1 / 0

1 / 2





Заполним «четвертую итерацию»

Таблица №8. «Четвертая итерация»

f4(x-x5) f5(x5)

0

1

2

3

4


0

7

12

16

20

0

0





20

1

3




19


2

5



17



3

7


14




4

9

9






Заполним последнюю диагональ таблицы путем сложения элементов (формула 5).

Находим максимальное число побочной диагонали, полученной на предыдущем шаге.

zmax=20 млн.рублей.

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

Пятому предприятию должно быть выделено (см. табл. 3.):

=5(4)=0 млн. руб.

причем четвертому предприятию должно быть выделено :

=4(4-0)=4(4)=1 млн. руб.

Тогда третьему предприятию должно быть выделено (см. табл. 5.):

=3(4--)=3(4-0-1)=3(3)=1 млн. руб.

второму предприятию должно быть выделено (см. табл. 7.):

 млн. руб.

Hа долю первого предприятия остается:

 млн. руб.

которое обеспечивает производственному объединению наибольший возможный прирост прибыли:

млн. руб.

Описание решения с использованием инструментальных средств MicrosoftExcel

.Используя данные из таблицы №1, составим подобную таблицу в Excel.

Рисунок 1«Построение капиталовложений»

Пусть:

¦j(xj)-Прирост мощности или прибыли j-го предприятия, если оно получит xj денежных единиц капитальных вложений.

Xj-Сумма капитальных вложений в j-ое предприятие.

x-Сумма капитальных вложений, выделяемая нескольким предприятиям (0 £x£b)

Решение в Excel

Рассмотрим теперь подробнее четыре предприятия.

«Исходные данные»


f1(x1) -прирост прибыли 1-го предприятия, если оно получит капитальные вложения;

f2(x2) -прирост прибыли 2-го предприятия, если оно получит капитальные вложения;

f3(x3) -прирост прибыли 3-го предприятия, если оно получит капитальные вложения;

f4(x4) -прирост прибыли 4-го предприятия, если оно получит капитальные вложения.

Для заполнения Таблицы 2 «Первого предприятия» необходимо в Таблице1«Построение капиталовложений» сложить значения функции ¦1(x1) и ¦2(x2).

В ячейку С11 внесем формулу =$B$11+C10

В ячейку D11внесем формулу=$B$11+D10

В ячейку С12внесем формулу=$B$12+C10

И т.д для всех клеток. Для заполнения остальных северо-восточной диагонали.

Рисунок 2 «Первое предприятие »

И на каждой северо-восточной диагонали выбрать наибольшее число (отмечено голубым цветом), указав соответствующие значение 2(x):

В ячейку С23 внесем формулу =МАКС(C11)

В ячейку D23 внесем формулу =МАКС(C12;D11)

В ячейку С24внесем формулу =ЕСЛИ(C11=C23;A11)

В ячейку D24 внесем формулу =ЕСЛИ(C12=D23;A12;A11)

И.т.д для всех остальных клеток.

Рисунок 3 «Первое предприятие максимальное значение»

Рисунок 4 «Подробное решение первого предприятия и максимальное значение»

Рисунок 5 «Второе предприятие и максимальное значение»

Рисунок 6 «Подробное решение второго предприятия и максимальное значение»

Рисунок 7 «Третье предприятие»

Таблица 8 «Подробное решение третьего предприятия»

Рисунок 9 «Четвертое предприятие»


Таблица 10 «Подробное решение четвертого предприятия»





Рисунок 11 «Zmax»

Чтобы найти Zmax, нам нужно в ячейку В71 внести формулу =МАКС(C68;D67;E66;F65;G64)

. Руководство пользователя к разработанному решению

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

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

·        ПК на базе процессора Intel, AMD;

·        Оперативная память 128 МБ;

·        Видео: совместимая VGA видеокарта;

·        Операционная система Windows XP/Windows7;

·        Клавиатура, мышь;

·        Microsoft.NET Framework 3.0;

Для начала работы с программой запустите файл RZMK.exe. Далее вы должны заполнить пустые поля на форме данными.

Рисунок 17 «Главная форма приложения»

Для проведения операций над введенными данными необходимо воспользоваться кнопками (Рис.19):

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

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

О программе - вызывает информацию о программе и его разработчике

Рисунок 19 "Кнопки"

После нажатия кнопки "Рассчитать" программа выдает результаты максимального суммарного прироста прибыли, прирост прибыли на каждом предприятии и количество необходимых ресурсов (Рис.20),

Рисунок 20 "Максимальный прирост прибыли и прирост прибыли и выделенные ресурсы на предприятиях "

Алгоритм решений унифицированной задачи

Рисунок 24 «Алгоритм решения унифицировнанной задачи»

Заключение

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

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

1. Кузнецов А.М., Сакович В.А, Холод И.И. Высшая математика. Математическое программирование. Минск, Высшая школа, 2011.

2.      Федосеев В.В. и др. Экономико-математические методы и прикладные модели: Учебное пособие для ВУЗов. - М:. Юнити, 2002.

.        Шикин Е.А., Чхартишвили А.Г. Математические методы и модели в управлении - М:. Дело 2010.

Приложение

unit Unit1;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls, Grids, Math, ExtCtrls, Menus, ShellAPI;= class(TForm): TStringGrid;: TButton;: TButton;: TMainMenu;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;: TMenuItem;Button1Click(Sender: TObject);FormCreate(Sender: TObject);Button2Click(Sender: TObject);N2Click(Sender: TObject);N3Click(Sender: TObject);N4Click(Sender: TObject);N5Click(Sender: TObject);N6Click(Sender: TObject);

{ Private declarations }

{ Public declarations };: TForm1;:Array[0..5,0..5] of Integer; // Массив для хранение суммы:Array[1..5,1..5] of Integer; // Массив для хранение максимальных чисел

Cells:Array[0..20] of TPoint; // Массив точек (записи координат максимальных чисел)

L:Integer;Unit2;

{$R *.dfm}TForm1.FormCreate(Sender: TObject);: TGridRect;:Integer;

// Смещаем фокус (выделение)myRect do:=-1;:=-1;:=-1;:=-1;;.Selection:=myRect;

// Заполняем заголовки таблицыStringGrid1 do[0,0]:='U';I:=1 to 5 do[0,I]:='L'+IntToStr(I)+'(U)';[I,0]:=IntToStr(I-1);;;

end;

// Процедура для подсчета суммы

procedure Sum();, J: Integer;I:=1 to 5 doJ:=1 to 5 do[I,J]:=MasSum[I,0] + MasSum[0,J];;

// Процедура для нахождние максимальных чисел (диагонали)

// и записи координат в массив

procedure Max();

var,J,iMax,jMax:Integer;:TPoint;:=0; jMax:=0;I:=5 downto 1 do[I,1]:=MasSum[1,I];J:=I downto 1 doMasSum[I-J+1,J] >= MasMax[I,1] then[I,1]:=MasSum[I-J+1,J];:=I-J+1;:=J;[I,2]:=J-1; // В какой строке найдено максимальное знач.

end;

C.X:=jMax; C.Y:=iMax; // Координаты максимальных значений

Cells[L]:=C;:=L+1;;;

// Сбрасываем введенные нами значенияTForm1.Button1Click(Sender: TObject);,J: Integer;I:=1 to 5 doJ:=1 to 5 do.StringGrid1.Cells[I,J]:='';2.Close;

end;

// Процедура подсчета итераций

// Вывод результата в таблицыTForm1.Button2Click(Sender: TObject);,J,K,C,P:Integer;.Show;:=0; C:=0; P:=2;C<=6 do:=1;I:=1 to 5-K+1 doJ:=1 to 5-K+1 doC=0 then MasSum[I,0]:=StrToInt(StringGrid1.Cells[I,1])MasSum[I,0]:=StrToInt((Form2.Components[C-1] as TStringGrid).Cells[I,1]);[0,J]:=StrToInt(StringGrid1.Cells[J,P]);

(Form2.Components[C] as TStringGrid).Cells[I,0]:=IntToStr(MasSum[I,0]);

(Form2.Components[C] as TStringGrid).Cells[0,J]:=IntToStr(MasSum[0,J]);();

(Form2.Components[C] as TStringGrid).Cells[I,J]:=IntToStr(MasSum[I,J]);

(Form2.Components[C+1] as TStringGrid).Cells[I,0]:=IntToStr(K-1);;:=K+1;;();I:=1 to 5 do

(Form2.Components[C+1] as TStringGrid).Cells[I,1]:=IntToStr(MasMax[I,1]);

(Form2.Components[C+1] as TStringGrid).Cells[I,2]:=inttostr(MasMax[I,2]);

(Form2.Components[C+1] as TStringGrid).Cells[0,0]:='E';

(Form2.Components[C+1] as TStringGrid).Cells[0,1]:='F'+IntToStr(P)+'(E)';

(Form2.Components[C+1] as TStringGrid).Cells[0,2]:='X'+IntToStr(P)+'(E)';;:=C+2;:=P+1;;.StringGrid1.Invalidate;

// z(max).LabeledEdit1.Text:=' '+Form2.StringGrid8.Cells[5,1];

// x5.LabeledEdit6.Text:=' '+Form2.StringGrid8.Cells[5,2];

// x4.LabeledEdit5.Text:=' '+Form2.StringGrid6.Cells[4-(Form2.LabeledEdit6.Text)+1,2];

// x3.LabeledEdit4.Text:=' '+Form2.StringGrid4.Cells[4-(Form2.LabeledEdit6.Text)-StrToInt(Form2.LabeledEdit5.Text)+1,2];

// x2.LabeledEdit3.Text:=' '+Form2.StringGrid2.Cells[4-(Form2.LabeledEdit6.Text)-(Form2.LabeledEdit5.Text)-(Form2.LabeledEdit4.Text)+1,2];

// x1.LabeledEdit2.Text:=' '+IntToStr(4-(Form2.LabeledEdit6.Text)-(Form2.LabeledEdit5.Text)-(Form2.LabeledEdit4.Text)-(Form2.LabeledEdit3.Text));;

// Кнопка "Решить"TForm1.N2Click(Sender: TObject);.Button2.Click;;

// Кнопка "Мой пример"TForm1.N3Click(Sender: TObject);:Integer;StringGrid1 doI:=1 to 5 do Cells[1,I]:=IntToStr(0);[2,1]:='5'; Cells[4,1]:='11';[2,2]:='3'; Cells[4,2]:='5';[2,3]:='7'; Cells[4,3]:='10';[2,4]:='4'; Cells[4,4]:='12';[2,5]:='3'; Cells[4,5]:='7';[3,1]:='9'; Cells[5,1]:='12';[3,2]:='4'; Cells[5,2]:='10';[3,3]:='9'; Cells[5,3]:='11';[3,4]:='8'; Cells[5,4]:='14';[3,5]:='5'; Cells[5,5]:='9';;;

// Кнопка "Сброс"TForm1.N4Click(Sender: TObject);.Button1.Click;;

// Кнопка "Выход"TForm1.N5Click(Sender: TObject);.Close;.Close;;

// О программеTForm1.N6Click(Sender: TObject);

ShowMessage('Программа предназначена для решения задачи' + chr(13) +

'максимизации капатиловложений' + chr(13) + chr(13) +

'Разработал студент группы 10п-1' + chr(13) +

'Урусов Алексей' + chr(13) + chr(13) +

'УАвиаК, 2013г.');

end;.Unit2;, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, Grids, Math, StdCtrls, ExtCtrls, jpeg, ColorGrd, Buttons,;= class(TForm): TStringGrid;: TStringGrid;: TStringGrid;: TStringGrid;: TStringGrid;: TStringGrid;: TStringGrid;: TStringGrid;: TLabeledEdit;: TLabeledEdit;: TLabeledEdit;: TLabeledEdit;: TLabeledEdit;: TLabeledEdit;: TStaticText;: TStaticText;: TStaticText;: TStaticText;SG_OnDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);FormCreate(Sender: TObject);

{ Private declarations }

{ Public declarations };: TForm2; Unit1;

{$R *.dfm}

// Процедура для закрашивание максимальных элементов

// по найденным координатам

(Components[f] as TStringGrid).Canvas.Brush.Color:=clRed;;

(Components[f] as TStringGrid).Canvas.FillRect(Rect);

(Components[f] as TStringGrid).Canvas.TextOut(Rect.Left, Rect.Top, (Components[f] as TStringGrid).Cells[ACol, ARow]);;:=N+5;:=F+2;;

end;

// Процедруа для смещений фокуса (выделения)

procedure TForm2.FormCreate(Sender: TObject);:TGridRect;:Integer;myRect do begin:=-1;:=-1;:=-1;:=-1;;C:=1 to 8 do

(Form2.FindComponent('StringGrid'+IntToStr(C)) as TStringGrid).Selection:=myRect;

end;.

Похожие работы на - Методы динамического программирования

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!