На этом шаге мы рассмотрим задачу о загрузке.
Задача о загрузке - это задача о рациональной загрузке судна (самолета, автомашины и т.п.), которое имеет ограничения по объему или грузоподъемности. Каждый помещенный на судно груз приносит определенную прибыль. Задача состоит в определении загрузки судна такими грузами, которые приносят наибольшую суммарную прибыль.
Перед тем как представить соотношения динамического программирования, заметим, что рассматриваемая здесь задача известна также как задача о снаряжении, где пилот реактивного самолета должен определить наиболее ценные (необходимые) предметы, которые следует взять на борт самолета, или как задача о рюкзаке, в которой солдат (или турист) должен определить наиболее ценные предметы, подлежащие загрузке в ранец (рюкзак).
Рекуррентное уравнение процедуры обратной прогонки выводится для общей задачи загрузки судна грузоподъемностью W предметов (грузов) n наименований. Пусть mi - количество предметов i-го наименования, подлежащих загрузке, wi - прибыль, которую приносит один загруженный предмет i-го наименования, wi - вес одного предмета i-го наименования. Общая задача имеет вид следующей целочисленной задачи линейного программирования.
Максимизировать z = r1m1 + r2m2 + ... + rnmn
w1m1 + w2m2 + ... + wnmn = W,
m1, m2, ..., mn > 0 и целые.
Три элемента модели динамического программирования определяется следующим образом.
Пусть fi(xi) - максимальная суммарная прибыль от этапов i, i + 1,..., n при заданном состоянии xi. Проще всего рекуррентное уравнение определяется с помощью следующей двухшаговой
Шаг 1. Выразим fi(xi) как функцию fi+1(xi+1) в виде
Шаг 2. Выразим xi+1 как функцию xi для гарантии того, что левая часть последнего уравнения является функцией лишь xi. По определению xi - xi+1 представляет собой вес, загруженный на этапе i, т.е. xi - xi+1 = wimi или xi-1 = xi - wimi. Следовательно, рекуррентное уравнение приобретает следующий вид.
На следующем шаге рассмотрим применение задачи о загрузке.