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

Автор работы: Пользователь скрыл имя, 04 Декабря 2010 в 18:20, Не определен

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

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

Файлы: 1 файл

Мочалов А.В..doc

— 198.50 Кб (Скачать файл)

 

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

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

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

     Предположим, что проект будет выполнятся в  течение 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-летнего возраста.

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

    

    (1)-если  эксплуатировать механизм,

    (2)-если  заменить механизм. 
 
 
 
 
 
 
 
 
 
 
 
 

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

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

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

     Рекуррентное  уравнение процедуры обратной прогонки выводится для общей задачи загрузки судна грузоподъемностью W предметов (грузов) n наименований. Пусть mi-количество предметов і-го наименования, подлежащих загрузке, ri-прибыль, которую приносит один загруженный предмет і-го наименования, wi-вес одного предмета і-го наименования. Общая задача имеет вид следующей целочисленной задачи линейного программирования.

    Максимизировать z=r1m1+r2m2+…+rnmn.

    при условии, что

    w1m1+w2m2+…+wnmn

W,

    m1,m2,…,mn

0 и целые.

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

    1. Этап і ставится в соответствии предмету і-го наименования, і=1,2,…n.
    2. Варианты решения на этапе і описываются количеством mi предметов і-го наименования, подлежащих загрузке. Соответствующая прибыль равна rimi. Значение mi заключено в пределах от 0 до [W/wi], где [W/wi] – целая часть числа W/wi.
    3. Состояние xi на этапе і выражает суммарный вес предметов, решения о погрузке которых приняты на этапах і,і+1,...n. Это определение отражает тот факт, что ограничения по весу является единственным, которое связывает n этапов вместе.

     Пусть fi(xi)-максимальная суммарная прибыль от этапов і,і+1,...,n при заданном состоянии xi. Проще всего рекуррентное уравнение определяется с помощью следующей двухшаговой процедуры.

     Шаг 1. Выразим fi(xi) как функцию fi+1(xi+1) в виде

    

     где fn+1(xn+1)=0.

     Шаг 2. Выразим xi+1 как функцию xi для гарантии того, что левая часть последнего уравнения является функцией лишь xi. По определению xi-xi+1 представляет собой вес, загруженный на этапе і, т.е. xi-xi+1=wimi или xi+1=xi-wimi. Следовательно, рекуррентное уравнение приобретает следующий вид:

    

 
 
 
 
 
 
 
 
 

     2.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,

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

 

     

     2.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

Информация о работе Динамическое программирование