Учебная работа № 1430. Динамическое программирование (задача о загрузке)

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (6 оценок, среднее: 4,67 из 5)
Загрузка...
Контрольные рефераты

Учебная работа № 1430. Динамическое программирование (задача о загрузке)

АННОТАЦИЯ

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

СОДЕРЖАНИЕ

ВВЕДЕНИЕ……………………………………………………………………

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

1.1 Задача динамического программирования………………………..

1.2 Примеры задач динамического программирования………………

1.3 Общая структура динамического программирования……………

2 ЗАДАЧА О ЗАГРУЗКЕ……………………………………………………

2.1 Общие сведения…………………………………………………………

2.2 Рекуррентные соотношения для процедур прямой и обратной прогонки………………………………………………………………………

2.3 Решение задачи о загрузке…………………………………………….

2.4 Анализ чувствительности решения…………………………………..

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ……………………….

ПРИЛОЖЕНИЕ А……………………………………………………………

ПРИЛОЖЕНИЕ Б……………………………………………………………

ПРИЛОЖЕНИЕ В…………………………………………………………….

6

8

8

12

16

18

18

19

22

25

27

28

36

40

ВВЕДЕНИЕ

Работа над данным курсовым проектом позволяет закрепить знания по предмету «Математические методы исследования операций».

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

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

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

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

Итерационная природа алгоритмов обычно приводит к объемным однотипным вычислениям. В этом и заключается причина того, что эти алгоритмы разрабатываются, в основном, для реализации с помощью вычислительной техники.

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

1.1 Задача динамического программирования

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

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

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

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

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

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

Сформулируем общий принцип, лежащий в основе решения всех задач динамического программирования («принцип оптимальности»):

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

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

При постановке задач динамического программирования следует руководствоваться следующими принципами:

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

2. Расчленить операцию на этапы (шаги).

3. Выяснить набор шаговых управлений xi для каждого шага и налагаемые на них ограничения.

4. Определить какой выигрыш приносит на iом шаге управление xi , если перед этим система была в состоянии S, т.е. записать «функцию выигрыша»:

.

5. Определить, как изменяется состояние S системы S под влиянием управление xi на iом шаге: оно переходит в новое состояние

. (1.1)

6. Записать основное рекуррентное уравнение динамического программирования, выражающее условный оптимальный выигрыш Wi (S) (начиная с iго шага и до конца) через уже известную функцию Wi +1 (S):

. (1.2)

Этому выигрышу соответствует условное оптимальное управление на iм шаге xi (S) (причем в уже известную функцию Wi +1 (S) надо вместо S подставить измененное состояние )

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

8. Произвести условную оптимизацию (m1)го, (m2)го и т.д. шагов по формуле (1.2), полагая в ней i=(m1),(m2),…, и для каждого из шагов указать условное оптимальное управление xi (S), при котором максимум достигается.

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

9. Произвести безусловную оптимизацию управления, «читая» соответствующие рекомендации на каждом шаге. Взять найденное оптимальное управление на первом шаге ; изменить состояние системы по формуле (1.1); для вновь найденного состояния найти оптимальное управление на втором шаге х2 * и т.д. до конца.

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

(если только выигрыши wi положительны). Эти задачи решаются точно так же, как задачи с аддитивным критерием, с той единственной разницей, что в основном уравнении (1.2) вместо знака «плюс» ставится знак «умножения»:

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

Задача планирования рабочей силы :

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

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

Если xi – количество работающих на протяжении iй недели, то возможны затраты двух видов: 1) С1 (xi bi )затраты, связанные с необходимостью содержать избыток xi bi рабочей силы и 2) С2 (xi xi 1 )затраты, связанные с необходимостью дополнительного найма (xi xi 1 ) рабочих.

Элементы модели динамического программирования определяются следующим образом:

1. Этап і представляется порядковым номером недели і, і=1,2,…n.

2. Вариантами решения на іом этапе являются значения xi – количество работающих на протяжении ій недели.

3. Состоянием на ім этапе является xi 1 – количество работающих на протяжении (і1) –й недели (этапа).

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

где

Вычисления начинаются с этапа n при xn =bn и заканчиваются на этапе 1.

Задача замены оборудования :

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

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

Обозначим через r(t) и c(t) прибыль от эксплуатации tлетнего механизма на протяжении года и затраты на его обслуживание за этот же период. Далее пусть s(t) – стоимость продажи механизма, который эксплуатировался t лет. Стоимость приобретения нового механизма остается неизменной на протяжении всех лет и равна l.

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

1. Этап і представляется порядковым номером года і, і=1,2,…n.

2. Вариантами решения на ім этапе (т.е. для іого года) являются альтернативы: продолжить эксплуатацию или заменить механизм в начале іого года.

3. Состоянием на ім этапе является срок эксплуатации t (возраст) механизма к началу іого года.

Пусть fi (t)максимальная прибыль, получаемая за годы от і до n при условии, что в начале іого года имеется механизм tлетнего возраста.

Рекуррентное уравнение имеет следующий вид:

Учебная работа № 1430. Динамическое программирование (задача о загрузке)