Главная    Почта    Новости    Каталог    Одноклассники    Погода    Работа    Игры     Рефераты     Карты
  
по Казнету new!
по каталогу
в рефератах

Динамическое программирование (задача о загрузке)

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

    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. Рекуррентное соотношение имеет следующий вид:

                                    [pic]
    Заметим, что yj и zj - неотрицательные  целые  числа.  Кроме  того,  уj
(количество овец, проданных в конце периода j) должно быть меньше или  равно
zj. Верхней  границей  для  значений  zj,  является  величина  2jk  (где  k-
исходный размер стада), которая соответствует отсутствию продажи.

    Алгоритм прямой прогонки


    Обозначим через  gj(xj)  максимальную  прибыль,  получаемую  на  этапах
1,2,...,j при заданном xj, (где xj—  размер  стада  к  началу  этапа  J+1).
Рекуррентное соотношение записывается в следующем виде:
                                    [pic]
                               [pic] - целое.
    Сравнение двух формулировок показывает, что представление 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 [pic] 5      |2                          |2                   |
|2 [pic] 6      |3                          |3                   |
|3 [pic] 4      |1                          |2                   |
|4 [pic] 3      |4                          |4                   |
|5              |7                          |6                   |
|6 [pic] 6      |5                          |5                   |
|7 [pic] 5      |3                          |4                   |
|8 [pic] 7      |2                          |2                   |

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

      Сначала  рассмотрим  задачу  в  общей  постановке.   Если   обозначить
количество вопросов типа і через ki, то задача принимает следующий вид:
                                    [pic]
      при ограничениях
                                    [pic]
      ki-неотрицательные числа.
      Если  отбросить  требования  целочисленности  ki,  то  решение  задачи
нетрудно найти с помощью симплекс-метода (см. Приложение В). В  самом  деле,
так  как  остается  лишь  одно  ограничение,  базисной  будет  только   одна
переменная, и задача сводится к выбору типа і, для которого величина  viW/wi
принимает  максимальное  значение.  Исходная  задача  не  является   задачей
линейного программирования, и для ее решения необходимо  использовать  метод
динамического  программирования.  Следует  отметить,   что   рассматриваемая
задача  может  быть  также   решена   с   помощью   методов   целочисленного
программирования.
      Каждый из трех основных элементов  модели  ДП  определяется  следующим
образом.
     1. Этап  j ставится в соответствии типу j, j=1,2,…,N.
     2. Состояние yj на этапе j выражает суммарный вес вопросов, количество
        ответов на которые приняты на этапах j,j+1,…,N;  при  этом  y1=W  и
        yj=0,1,…,W при j=2,3,…,N.
     3. Варианты решения kj на этапе  j  описываются  количеством  вопросов
        типа j. Значение kj заключено в пределах от  нуля  до  [W/wj],  где
        [W/wj]-целая часть числа (W/wj).
      Пусть fi(yi)-максимальный суммарный вес вопросов,  ответы  на  которые
приняты на этапах j,j+1,…,N при заданном состоянии yj.
      Рекуррентное  соотношение  (для  процедуры  обратной  прогонки)  имеет
следующий вид:

                                    [pic]
                                    [pic]

      Заметим, что максимальное допустимое значение kj ограничено  величиной
[yj/wj].  Это  позволяет   автоматически   исключать   все   не   являющиеся
допустимыми варианты при заданном значении переменной состояния yj.
      Решение исходной задачи (см. приложении А):

      Этап 8.
                                    [pic]

      Этап 7.

                                    [pic]

      Этап 6.
                                    [pic]

      Этап 5.
                                    [pic]

      Этап 4.
                                    [pic]

      Этап 3.
                                    [pic]

      Этап 2.
                                    [pic]

      Этап 1.
                                    [pic]

      Оптимальное решение определяется теперь следующим образом. Из  условия
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.

      2.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  
1234
скачать работу

Динамическое программирование (задача о загрузке)

 

Отправка СМС бесплатно

На правах рекламы


ZERO.kz
 
Модератор сайта RESURS.KZ