Автор работы: Пользователь скрыл имя, 14 Января 2014 в 15:18, курсовая работа
Целью исследования операций является выявление наилучшего способа действия при решении той или иной задачи. Главная роль при этом отводится математическому моделированию. Для построения математической модели необходимо иметь строгое представление о цели функционирования исследуемой системы и располагать информацией об ограничениях, которые определяют область допустимых значений. Цель и ограничения должны быть представлены в виде функций.
Введение 1
1. Динамическое программирование 2-4
1.1. Метод динамического программирования 4-7
2. Идеи метода динамического программирования 8-9
3. Общая структура динамического программирования 10
4. Примеры задач динамического программирования 11-13
5. Задача о загрузке 14
5.1. Общие сведения 14-15
5.2. Рекуррентные соотношения для процедур прямой
и обратной прогонки 15-16
5.3. Решение задачи о загрузке 16-19
5.4. Анализ чувствительности решения 19-20
6. Пример задачи динамического программирования 21-25
Заключение 26
Список используемой литературы 27
Пусть fi(xi)- оптимальная сумма инвестиций для интервала от і-го до n-го года при условии, что в начале і-го года имеется денежная сумма xi. Далее обозначим через si накопленную сумму к концу n-го года при условии, что li и (xi-li)-объемы инвестиций на протяжении і-го года в первый и второй банк соответственно. Обозначая , і=1,2, мы можем сформулировать задачу в следующем виде.
Максимизировать z=s1+s2+…+sn, где
(13)
Так как премиальные за n-й год являются частью накопленной денежной суммы от инвестиций, в выражения для sn добавлены qn1 и qn2.
Итак, в данном случае рекуррентное уравнение для обратной прогонки в алгоритме динамического программирования имеет вид
(14)
где xi+1 выражается через xi в соответствии с приведенной выше формулой, а fn+1(xn+1)=0.
5. Задача о загрузке.
5.1 Общие сведения.
Задача о загрузке – это задача о рациональной загрузке судна (самолета, автомашины и т.п.), которое имеет ограничения по объему или грузоподъемности. Каждый помещенный на судно груз приносит определенную прибыль. Задача состоит в определении загрузки судна такими грузами, которые приносят наибольшую суммарную прибыль.
Рекуррентное уравнение процедуры обратной прогонки выводится для общей задачи загрузки судна грузоподъемностью W предметов (грузов) n наименований. Пусть mi-количество предметов і-го наименования, подлежащих загрузке, ri-прибыль, которую приносит один загруженный предмет і-го наименования, wi-вес одного предмета і-го наименования. Общая задача имеет вид следующей целочисленной задачи линейного программирования.
Максимизировать z=r1m1+r2m2+…+rnmn.
при условии, что
w1m1+w2m2+…+wnmn W,
m1,m2,…,mn 0 и целые.
Три элемента модели динамического программирования определяются следующим образом:
Пусть fi(xi)-максимальная суммарная прибыль от этапов і,і+1,...,n при заданном состоянии xi. Проще всего рекуррентное уравнение определяется с помощью следующей двухшаговой процедуры.
Шаг 1. Выразим fi(xi) как функцию fi+1(xi+1) в виде
(15)
где fn+1(xn+1)=0.
Шаг 2. Выразим xi+1 как функцию xi для гарантии того, что левая часть последнего уравнения является функцией лишь xi. По определению xi-xi+1 представляет собой вес, загруженный на этапе і, т.е. xi-xi+1=wimi или xi+1=xi-wimi. Следовательно, рекуррентное уравнение приобретает следующий вид:
(16)
5.2. Рекуррентные соотношения для процедур прямой
и обратной прогонки.
Фермеру принадлежит стадо овец, насчитывающее k голов. Один раз в год фермер принимает решение о том, сколько овец продать и сколько оставить. Прибыль от продажи одной овцы в і-м году составляет pi. Количество оставленных в i-м году овец удваивается в (1+1)-м году. По истечении п лет фермер намеревается продать все стадо.
Этот чрезвычайно простой пример приводится для того, чтобы наглядно продемонстрировать преимущества алгоритма обратной прогонки по сравнению с алгоритмом прямой прогонки. Вычислительные схемы процедур прямой и обратной прогонки обладают различной эффективностью в случаях, когда этапы модели нумеруются в некотором специальном порядке. Такая ситуация имеет место в приводимом примере, где этап j ставится в соответствие году j, т. е. этапы должны рассматриваться в хронологическом порядке.
Сначала построим рекуррентные соотношения для процедур прямой и обратной прогонки, а затем проведем сравнение двух вычислительных схем. Важное различие между двумя формулировками непосредственно следует из определения состояния.
Обозначим количества оставленных и проданных в j-м году овец через xj и yj, соответственно. Положим Zj,=xj+yj. Из условий задачи следует, что
z1=2x0=2k,
zj=2xj-1,j=l,2,
...,n.
Состояние на этапе j можно описать с помощью переменной zj, которая выражает количество имеющихся к концу этапа j овец для распределения на этапах j+1, j+2, ..., n, или с помощью переменной xj, которая выражает количество имеющихся к началу этапа j+1 овец, обусловленное принятыми на этапах 1,2,...,j решениями. Первое определение ориентировано на построение рекуррентного соотношения для процедуры обратной прогонки, тогда как второе определение приводит к использованию алгоритма прямой прогонки.
Обозначим через fi(zi) максимальную прибыль, получаемую на этапах j,j+1,…,n, при заданном zj. Рекуррентное соотношение имеет следующий вид:
Заметим, что yj и zj - неотрицательные целые числа. Кроме того, уj (количество овец, проданных в конце периода j) должно быть меньше или равно zj. Верхней границей для значений zj, является величина 2jk (где k- исходный размер стада), которая соответствует отсутствию продажи.
Обозначим через gj(xj) максимальную прибыль, получаемую на этапах 1,2,...,j при заданном xj, (где xj— размер стада к началу этапа J+1). Рекуррентное соотношение записывается в следующем виде:
- целое.
Сравнение двух формулировок показывает, что представление xj-1 через xj создает более существенные препятствия для вычислений, чем представление zj+1 через zj.
В замене xj-1=(xj+yj)/2 подразумевается целочисленность правой части, тогда как на равенство zj+1=2(zj-yj) такое требование не накладывается. Таким образом, в случае процедуры прямой прогонки значения yj и xj, связанные неравенством
Yj <=2jk -Xj,
должны дополнительно
удовлетворять условию
5.3 Решение задачи о загрузке.
Контрольная работа содержит вопросы по N различным темам. Каждый вопрос типа i имеет вес Vi(i=1,2,…N), а также время, отводимое на ответ Wi. Максимально время, которое может затратить студент на контрольную работу W. Требуется определить максимальное количество баллов (вес), которое может набрать студент за отведенное время W=30. Данные приведены в таблице:
I |
Wi |
Vi |
1 5 2 6 3 4 4 3 5 6 6 7 5 8 7 |
2 3 1 4 7 5 3 2 |
2 3 2 4 6 5 4 2 |
Решить задачу, приведя ее к рекуррентным соотношениям.
Сначала рассмотрим задачу в общей постановке. Если обозначить количество вопросов типа і через ki, то задача принимает следующий вид:
при ограничениях
ki-неотрицательные числа.
Если отбросить требования целочисленности ki, то решение задачи нетрудно найти с помощью симплекс-метода (см. Приложение В). В самом деле, так как остается лишь одно ограничение, базисной будет только одна переменная, и задача сводится к выбору типа і, для которого величина viW/wi принимает максимальное значение. Исходная задача не является задачей линейного программирования, и для ее решения необходимо использовать метод динамического программирования. Следует отметить, что рассматриваемая задача может быть также решена с помощью методов целочисленного программирования.
Каждый из трех основных элементов модели ДП определяется следующим образом.
Пусть fi(yi)-максимальный суммарный вес вопросов, ответы на которые приняты на этапах j,j+1,…,N при заданном состоянии yj.
Рекуррентное соотношение (для процедуры обратной прогонки) имеет следующий вид:
(19)
Заметим, что максимальное допустимое значение kj ограничено величиной [yj/wj]. Это позволяет автоматически исключать все не являющиеся допустимыми варианты при заданном значении переменной состояния yj.
Этап 8.
Этап 7.
Этап 6.
Этап 5.
Этап 4.
Этап 3.
Этап 2.
Этап 1.
Оптимальное решение определяется теперь следующим образом. Из условия W=30 следует, что первый этап решения задачи при y1=30 дает оптимальное решение k1=0, которое означает, что на 0 (нуль) вопросов 1-го типа будут даны ответы. Далее находим:
y1=30 |
k1=0 |
y2=y1-2*k1=30 |
k2=0 |
y3=y2-4*k2=30 |
k3=4 |
y4=y3-k3=26 |
k4=1 |
y5=y4-4*k4=22 |
k5=0 |
y6=y5-7*k5=22 |
k6=0 |
y7=y6-5*k6=22 |
k7=5 |
y8=y7-3*k7=7 |
k8=7 |
Соответственно оптимальным решением задачи является (0,0,4,1,0,0,5,7), соответственно максимально количество баллов, которое студент может набрать за отведенное время равно 46.
5.4 Анализ чувствительности решения.
В таблице для первого этапа нам, по существу, необходимо получить оптимальное решение лишь для y1=30, так как это последний этап, подлежащий рассмотрению. Однако в таблицу включены вычисления для y1=0,1,…,30, которые позволяют провести анализ чувствительности решения.
Например, что произойдет, если время, отводимое на контрольную работу будет 20, вместо 30?
Y1=20 |
k1=0 |
Y2=y1-2*k1=20 |
k2=0 |
Y3=y2-4*k2=20 |
k3=4 |
Y4=y3-k3=16 |
k4=0 |
Y5=y4-4*k4=16 |
k5=0 |
Y6=y5-7*k5=16 |
k6=0 |
Y7=y6-5*k6=16 |
k7=3 |
Y8=y7-3*k7=7 |
k8=7 |
соответственно максимально количество баллов, которое студент может набрать за отведенное время равно 34.
Что произойдет, если время, отводимое на контрольную работу будет 5, вместо 30?
y1=5 |
k1=0 |
y2=y1-2*k1=5 |
k2=0 |
y3=y2-4*k2=5 |
k3=0 |
y4=y3-k3=5 |
k4=0 |
y5=y4-4*k4=5 |
k5=0 |
y6=y5-7*k5=5 |
k6=0 |
y7=y6-5*k6=5 |
k7=0 |
Y8=y7-3*k7=5 |
k8=5 |
соответственно максимально количество баллов, которое студент может набрать за отведенное время равно 10.
Что произойдет, если типов вопросов будет 4, вместо 8?