Задача распределения ресурсов
Пример №1 . Планируется работа двух предприятий на n лет. Начальные ресурсы равны s0. Средства x, вложенные в 1-е предприятие в начале года, дают в конце года прибыль f1(x), и возвращаются в размере g1(x). Средства y, вложенные в 2-е предприятие в начале года, дают в конце года прибыль f2(y) и возвращаются в размере g2(y). В конце года возвращенные средства заново перераспределяются между отраслями. Определить оптимальный план распределения средств и найти максимальную прибыль.
Задачу решим методом динамического программирования. Операцию управления производственным процессом разобьём на этапы. На каждом из них управление выберем так, чтобы оно приводило к выигрышу как на данном этапе, так и на всех последующих до конца операции. В этом состоит принцип оптимальности, сформулированный американским математиком А. Беллманом.
Разобьём весь период на три этапа по годам и будем нумеровать их, начиная с первого.
Обозначим через xk и yk количество средств выделяемых каждому предприятию на k-ом этапе, а через xk + yk = ak – общее количество средств на этом этапе. Тогда первое предприятие приносит на этом этапе 3 xk, а второе 4 yk единиц дохода. Общий доход на k-ом этапе 3xk + 4yk.
Обозначим через fk (ak) – максимальный доход, который получает отрасль от обоих предприятий на k-ом и всех последующих. Тогда функциональное уравнение, отражающее принцип оптимальности Беллмана, принимает вид:
fk (ak)=maxxk + 4yk + fk+1 (ak+1)>. (1)
Так как xk + yk = ak, то yk = ak — xk и 3xk + 4yk = 3xk + 4(ak — xk) = — xk + 4ak. Поэтому fk(ak) = maxk + 4ak + fk+1(ak+1)>. (2)
0 ≤ xk ≤ ak
Кроме того, ak – это средства выделяемые обои предприятиям на k-ом этапе, и они определяются остатком средств, получаемых на предыдущем (k-1)-ом этапе. Поэтому по условию задачи оптимальное управление на каждом этапе
ak = 0,5xk-1 + 0,2yk-1 = 0,5xk-1+0,2(ak-1 — xk-1) = 0,3xk-1+0,2ak-1. (3)
I.Условия оптимизации
Планирование начинаем с последнего третьего этапа
II. Безусловная оптимизация
Выясним, каким должно быть оптимальное управление процессом выделения средств между первым и вторым предприятиями для получения максимального дохода в количестве 4950 ден. ед.
1-й год. Так как x1 = a1 и , y1 = 0, то все средства в количестве 900 ден. ед. отдаются первому предприятию.
2-й год. Выделяются средства a2 = 0,3x1 + 0,2a1 = 0,5 a1 =450 ед., x2 = a2 , y2 = 0.
Все они передаются первому предприятию.
3-й год. Выделяются средства a3 = 0,3x2 + 0,2a2 = 0,5 a2 = 225 ед., x3 = 0, y3 = a3 . Все они передаются второму предприятию.
Результаты решения представим в виде таблицы.
Период | Средства | Предприятие №1 | Предприятие №2 | Остаток | Доход |
1 | 900 | 900 | 0 | 450 | 2700 |
2 | 450 | 450 | 0 | 225 | 1350 |
3 | 225 | 0 | 225 | 45 | 900 |
4950 |
Пример №2 . Оптимальное поэтапное распределение средств между предприятиями в течении планового периода.
Руководство фирмы, имеющей договор о сотрудничестве с тремя малыми предприятия, на плановый годовой период выделила для них оборотные средства в объеме 100000 у.е. Для каждого предприятия известны функции поквартального дохода и поквартального остатка оборотных средств в зависимости от выделенной на квартал суммы x. В начале квартала средства распределяются полностью между тремя предприятиями (из этих вложенных средств и вычисляется доход), а по окончанию квартала остатки средств аккамулируются у руководства фирмы и снова распределяются полностью между предприятиями.
Составить план поквартального распределения средств на год (4 квартала), позволяющего достичь максимальный общий доход за год.
f1(x)=1,2x, f2(x)=1.5x, f3(x)=2x; g1(x)=0.7x, g2(x)=0.6x, g3(x)=0.1x
Задача распределения средств на два года
Найти оптимальный способ распределения средств S0 = 100 тыс.руб между двумя предприятиями на два года, если вложенные средства в первое предприятие дают доход f1(x) = 0.9x и возвращаются в размере j1(x) = 0.5x. Аналогично, для второго предприятия f2(x) = 0.8x и j2(x) = 0.7x.
1 предприятие | 2 предприятие | Всего | |
Средства в начале года 1 года | х1 | 100-х1 | 100 |
Прибыль на первом году | 0,9х1 | 0,8(100-х1) | (0,9-0,8)х1+80 |
Возврат денег | 0,5х1 | 0,7(100-х1) | (0,5-0,7)х1+70 =70-0,2х1 |
Средства в начале 2 года | х2 | 70-0,2х1— х2 | 70-0,2х1 |
Прибыль во втором году | 0,9х2 | 0,8(70-0,2х1— х2) | 56-0,16х1+0,1х2 |
Прибыль за два года | 0,1х1+80+56-0,16х1+0,1х2=136-0,6х1+0,1х2 |
Отсюда можно сделать вывод о том, что х1=0, х2=70, максимальная прибыль за два года составит 143 ден. ед.
Глава 7. Динамическое программирование §1. Примеры задач динамического программирования
В рассмотренных ранее задачах оптимизации решение находилось как бы за один шаг. Однако процедуру принятия решений во многих задачах планирования и управления можно представить как многошаговый процесс, т.е. состоящий из нескольких шагов.
Динамическое программирование — это математический метод оптимизации многошаговых процессов, разработанный в начале 50-х годов американским ученым Р. Беллманом. Его использование позволяет свести решение сложной задачи к последовательному решению серии более простых «подзадач». Название метода связано с тем, что первоначально с его помощью проводилась оптимизация динамических систем, т.е. систем, изменяющихся во времени. Однако затем он стал применяться и для решения задач, в которых временной фактор отсутствует, в частности для задач целочисленного программирования.
В настоящее время динамическое программирование является одним из наиболее распространенных оптимизационных методов, пригодным для решения различных прикладных задач: распределения ресурсов, управления запасами, замены оборудования, и т.п. Типичным примером задачи, для решения которой можно применить этот метод, является следующая задача перспективного планирования.
Пример 1.1. Планируется производственная деятельность фирмы на период времени в n лет. Для ее развития выделены капиталовложения в объеме K, которые нужно распределить по годам планового периода. Известно, что годовой доход фирмы зависит от объема средств, вложенных в начале года. Нужно определить, сколько капиталовложений следует выделить фирме в начале каждого года, чтобы общий доход за n лет был максимальным.
Это типичная задача динамического программирования. Распределение капиталовложений можно представить в виде многошагового процесса, где шагом является выделение средств фирме в начале каждого года планового периода.
Управление uk на k-м шаге (k = ) этого процесса — величина капиталовложений, полученных фирмой в начале k-го года. Управление u в целом представляет собой совокупность всех пошаговых управлений:
Обозначим xk — величину средств, доступных для выделения фирме после k-го года (остаток капиталовложений). Переменная xk характеризует состояние управляемого процесса после k-го шага. Ясно, что
Из этих соотношений видно, что состояние системы в конце любого шага зависит только от предшествующего состояния и управления на этом шаге. Очевидно, что объем средств, выделяемых фирме в текущем году, не может быть больше, чем остаток капиталовложений после предыдущего года. Поэтому управление k-го шага должно удовлетворять неравенству:
Управление u = (u1, u2,…, un), для которого эти условия выполнены, будем называть допустимым.
Обозначим fk(uk) — доход, который получит фирма в k-м году, если ей выделить в начале этого года средства в объеме uk. Функция fk характеризует эффективность управления на k-м шаге.
Общая эффективность управления u оценивается при помощи показателя Z — суммарного дохода фирмы за весь плановый период. Этот показатель равен сумме пошаговых показателей эффективностей (годовых доходов):
Таким образом, задача состоит в выборе таких допустимых управлений , т.е. распределения капиталовложений, при котором функция Z достигнет максимума.
В этом примере многошаговый характер процесса управления, по сути, был задан его условиями, согласно которым средства выделяются в начале каждого года. Однако иногда, чтобы использовать метод динамического программирования, «многошаговость» управления приходится вводить искусственно.
Пример 1.2. Имеется груз, состоящий из неделимых предметов n видов, который нужно погрузить на баржу грузоподъемностью Р. Известны стоимость ck и вес pk каждого предмета k-го вида (k = ). Нужно определить, сколько предметов каждого вида следует погрузить на баржу, чтобы суммарная стоимость груза была максимальной, а его общий вес не превышал грузоподъемности баржи.
Обозначим uk — количество предметов k-го вида, загружаемых на баржу. Тогда математическая модель этой задачи выглядит так:
uk — целые числа для всех k = .
Это задача линейного целочисленного программирования, но для нахождения ее оптимального решения можно использовать динамическое программирование. Для этого процесс загрузки следует представить в виде многошагового управляемого процесса, состоящего из n шагов, причем на каждом шаге баржа загружается предметами одного вида.
Будем считать, что на первом шаге баржа загружается предметами первого вида, на втором шаге — второго вида и т.д. Управление uk на k-м шаге (k = ) — это количество предметов k-го вида, загружаемых на баржу. Параметры состояния xk на k-м шаге — это количество груза, которое еще можно погрузить на баржу после того как на нее погрузили предметы первых k видов. Ясно, что
Так как на каждом шаге должны выполняться неравенства xk ≥ 0, то управления на каждом шаге должны удовлетворять неравенствам:
Управление u = (u1, u2,…, un), для которого эти условия выполнены, назовем допустимым.
Эффективность управления на k-м шаге определяется стоимостью всех предметов, загруженных на этом шаге, т.е. она равна ckuk. Эффективность всего процесса управления Z равна сумме эффективностей всех шагов, т.е. суммарной стоимостью загруженных предметов:
Оптимальное управление доставляет максимальное значение этой функции на множестве всех допустимых управлений.
Пример 1.3. Решается задача оптимального распределения дефицитного ресурса (сырье, оборудование, инвестиции) между n объектами, причем общий объем ресурса равен S. Для каждого объекта считается известной зависимость между размером ресурса и величиной прибыли, полученной в результате выделения ресурса данному объекту. Эта зависимость, вообще говоря, имеет нелинейный характер. Нужно найти распределение ресурса, дающее максимальную общую прибыль.
Обозначим fk(uk) (k = ) — величину прибыли, получаемую от k—го объекта при выделении ему ресурса в объеме uk. единиц. Математическая модель этой задачи имеет следующий вид:
Z = f1(u1) + … + fn(un) → max,
Это задача нелинейного программирования. Если все функции fk вогнутые, то она является задачей выпуклого программирования, и ее оптимальное решение можно найти при помощи какого-либо метода решения задач этого класса, например, при помощи метода множителей Лагранжа. Если же хотя бы одна из функций прибыли не является вогнутой, то использование методов нелинейного программирования может не привести к нужному результату, так как в этом случае найденный локальный максимум может не быть глобальным (см. п.6 §2 главы 5).
В такой ситуации для нахождения оптимального решения целесообразно использовать аппарат динамического программирования. Для этого нужно, представить распределение ресурса как многошаговый процесс, состоящий из n шагов, причем на каждом шаге ресурс выделяется одному из объектов. Будем считать, что на первом шаге ресурс выделяется первому объекту, на втором шаге — второму и т.д.
Управление uk на k-м шаге (k = ) — это количество ресурса, выделяемого k-му объекту, а параметры состояния xk — это остатки ресурса после его выделения первым k объектам, задаваемые формулами:
Управление uk на каждом шаге должно удовлетворять условию:
Управление u = (u1, u2,…, un), для которого эти условия выполнены, будем называть допустимым.
Эффективность управления uk на k-м шаге определяется величиной прибыли, получаемой от k—го объекта, т.е. она равна fk(uk). Эффективность всего процесса управления Z равна сумме эффективностей всех шагов:
Оптимальное управление доставляет максимальное значение этой функции на множестве всех допустимых управлений.