Один из важнейших вопросов, который возникает у директора производства в период рыночных отношений, – куда направить свободные средства, чтобы получить наибольшую прибыль. Естественно, каждый руководитель расширяет свое производство и стремится вкладывать финансовые средства в ту сферу деятельности, которая обеспечит ему максимальный доход.
Динамическое программирование – это метод вычислений, который использует аппарат рекуррентных соотношений. Математические задачи, которые решаются с помощью динамического программирования, содержат условия, изменяющиеся в зависимости от времени. Даже если условия задачи от времени не изменяются, метод динамического программирования все равно может быть применен.
Рекуррентные соотношения, которые применяют в динамическом программировании, моделируют многоэтапный процесс нахождения оптимального решения. Используемый при этом принцип оптимальности состоит в том, что оптимальная стратегия ищется так, что, каково бы ни было начальное состояние системы и начальное решение, последующие решения должны приниматься исходя из оптимальной стратегии с учетом состояния, вытекающего из первого решения.
Классическими задачами динамического программирования являются задачи вложения свободных денежных средств в виды деятельности, приносящие прибыль. Это, например, повышение эффективности собственного производства путем направления финансовых накоплений на производство конкретного продукта из существующего ассортимента выпускаемой продукции, игра на фондовой бирже, покупка акций и облигаций других предприятий, кредитование других производств с целью получения дивидендов и другие.
Отметим, что данные вопросы полезно обсуждать с учащимися вузов при изучении не только экономики, но и математических дисциплин [1–3].
Задачи, связанные с последовательным принятием решений, можно решать, например, методами комбинаторики. Допустим, пусть изучается процесс, в котором много, например, n шагов. При этом на каждом из выполняемых шагов может быть выбрано K вариантов решений, то есть при выборе возможного решения, принимаемого, например, на 10-м шаге решения задачи, мы имеем K возможных решений, принимаемых на 9-м шаге. А для каждого возможного решения, принимаемого на 9‑м шаге, нужно проанализировать K возможных решений, принимаемых на 8-м шаге, и так далее. Таким образом, для определения оптимального решения в задаче с n этапами принятия решения должно быть проанализировано различных решений. При нахождении наилучшего варианта решения методом динамического программирования последовательно анализируется каждый шаг, и каждый раз выбираются наилучшие из имеющихся K решений. В результате на всех n шагах нужно проанализировать только nK возможных решений, что много меньше, чем . Это означает, что динамическое программирование дает те же результаты, что и комбинаторный метод, но требует существенно меньше усилий (в раз).
При сравнении методов динамического программирования и метода перебора всех решений можно заметить, что преимущество в скорости нахождения оптимума становится наиболее ощутимым с увеличением n . Дело в том, что на каждом шаге из вариантов решений удаляются все неблагоприятные сочетания. Если предположить, что K = 5, n = 10, то комбинаторный подход требует анализа комбинаций. Метод, применяемый в динамическом программировании, потребует анализа nK = 50 комбинаций. Если предположить, что K = 5, n = 100, то комбинаторный метод потребует анализа решений, в то время как в методе динамического программирования анализируются только 500 решений.
У динамического программирования есть и недостатки – это отсутствие универсального процесса нахождения решения, который можно было бы применять для решения всех видов задач. Возникают проблемы при решении задач с большим числом переменных.
Решим задачу о перераспределении средств по объектам вложения с целью получения наибольшей прибыли. Экономическая эффективность инвестиций очень существенный вопрос для хозяйствующего субъекта. В зависимости от степени правильности принятия решения мы обеспечим нашему производству развитие или же создадим проблемы. Иными словами, нам нужно заранее оценить целесообразность вложений свободных средств. Правильность решения вопроса о распределении инвестиций возможна лишь после экономических расчетов, с помощью которых можно найти способы получения наибольшей прибыли. Естественно, что нас интересует, как можно достичь самой большой прибыли при наименьших вложениях. Решая вопрос об инвестировании финансовых средств, важно также учитывать и общую динамику, которая наблюдается у нашего производства и у конкурентов; не забывать про основные фонды и планы их развития; помнить об уровне задействования основных мощностей, объема материалов и сырья, поступающих из смежных отраслей, и многих других факторах. Показателями нахождения наилучшего распределения финансовых средств могут быть: наибольшая прибыль, наибольший прирост продукции, максимальное снижение трудоемкости, себестоимости и так далее.
Вопрос об оптимальном распределении финансовых средств является вопросом комбинаторики. Предположим, что нам необходимо распределить 10 млн рублей по четырем объектам так, чтобы получить максимальную прибыль. При решении этого вопроса нужно оценить все варианты распределения 10 млн рублей по четырем объектам. При условии распределения вариантов, состоящих только из целых чисел, необходимо посчитать 286 комбинаций: от (10,0,0,0); (9,1,0,0); (8,1,1,0) и до (0,0,0,10).
Приведем вариант нахождения решения этой задачи приемами динамического программирования. Математическая постановка задачи о перераспределении однородных средств (денег, рабочих, сырья, средств производства и так далее) формулируется так: «Получить значения переменных , которые соответствуют следующим условиям: сумма всех вложений равна К – объему средств, предназначенных для инвестирования, то есть , . Считаем также, что – целые, обращающие в максимум функцию ».
Здесь – это сумма всех видов вложений в j-й объект (предприятие, отрасль, цех, участок); – фондоотдача j-го объекта, то есть функция прибыли от инвестиций (прирост продукции, отдача и так далее).
Рассмотрим алгоритм нахождения решения, предложенный Беллманом. Этот метод можно использовать для произвольных функций . Метод является одним из простейших вариантов использования динамического программирования. Алгоритм состоит в том, что последовательно решаются задачи оптимального распределения средств между несколькими первыми j объектами (при этом j принимает поочередно значения 1, 2, 3, … , n). Последняя из рассмотренных задач и дает искомое оптимальное решение.
При решении вопроса о распределении средств предварительно необходимо знать значения функций при всех возможных значениях их аргументов. Итак, для каждого объекта известна его фондоотдача (табл. 1).
Таблица 1
Значения функции при всех возможных значениях аргументов
Вложения x |
… |
… |
||||
0 |
… |
… |
||||
1 |
… |
… |
||||
… |
|
|
… |
|
… |
|
i |
… |
… |
||||
… |
|
|
… |
|
… |
|
K |
…. |
… |
Функция фондоотдачи должна быть непрерывна в области определения от 0 до K. Функции, значения которых равны прибыли при оптимальном распределении вложений x (x = 1, 2, 3, … , K) в первые j объектов, обозначают через , то есть, решив задачу, мы найдем значения столбцов , , …, и для каждого числа i найдем оптимальный вариант распределения ресурсов.
Решим задачу распределения K средств между первыми (j+1) объектами. Пусть на первые j объектов отводится средств. Тогда на (j+1)-й объект распределяется средств. На первые объекты средства распределены оптимальным образом, то есть вычислено значение функции . Поэтому можно вычислить значение показателя качества распределения всех средств на первые (j+1) объекта:
В зависимости от значения функция становится больше или меньше. Оптимальному распределению инвестиций соответствует такое значение , при котором функция становится наибольшей.
Это дает формулу , при .
Если значения функций и найдены на предыдущих этапах или даны по условию, то можно вычислить значение функции . Возникает K задач для разных значений ( = 1, 2, 3, … , K), которые необходимо решать последовательно. Как результат находят столбец , , …, , и план распределения ресурсов для достижения значений прибыли из полученного столбца. Таким образом, мы получаем решение задачи оптимального вложения инвестиций в объеме от 1 до K между первыми j+1 объектами. При этом если объект вложения только один j = 1, то задача имеет элементарное решение – столбец { } равен столбцу { }.
Итак, решение задачи по оптимальному инвестированию ресурсов объемом K в j = 1, 2, … , n объект состоит из однотипных шагов, на которых вычисляются значения функций . При этом оптимальный план распределения средств в первый объект состоит в направлении всех имеющихся средств в первый объект, то есть считают, что , = 0, 1, 2, … , K.
При решении задачи используют формулы:
;
;
;
…
.
При этом на каждом шаге используют вычисленный на предыдущем шаге столбец и столбец из таблицы условия задачи . Решение оформляется в виде нескольких таблиц.
Рассмотрим пример: «Найти распределение инвестиций в заводы производственного объединения, обеспечивающее максимальный выпуск продукции, причем лимит инвестиций установлен в размере пяти условных единиц. Показатели фондоотдачи по каждому заводу без учета временного интервала между моментами выделения инвестиций и их полным освоением приведены в табл. 2» [4].
Таблица 2
Показатели фондоотдачи по каждому заводу без учета временного интервала
Капитальные вложения |
Выпуск продукции заводами с указанного объема капитальных вложений |
||
первым |
вторым |
третьим |
|
0 |
0 |
0 |
0 |
1 |
2,5 |
2 |
3 |
2 |
3,5 |
3,5 |
5,5 |
3 |
4,5 |
5 |
6,5 |
4 |
6,5 |
7,5 |
8,5 |
5 |
9 |
8,5 |
10,5 |
Предполагаем на первом этапе, что все вложения мы направляем только первому заводу. Создаем столбец (табл. 3):
Таблица 3
Прибыль при условии направления инвестиций только первому заводу
Капитальные вложения |
Суммарная прибыль |
План распределения капитальных вложений по заводам |
||
первому |
второму |
третьему |
||
0 |
0 |
0 |
0 |
0 |
1 |
2,5 |
1 |
0 |
0 |
2 |
3,5 |
2 |
0 |
0 |
3 |
4,5 |
3 |
0 |
0 |
4 |
6,5 |
4 |
0 |
0 |
5 |
9 |
5 |
0 |
0 |
Теперь предположим, что все средства будут направлены на первые два завода. Найдем значения и соответствующие им планы распределения инвестиций.
.
Аналогично находим , ;
Результаты заносим в табл. 4.
Таблица 4
Прибыль при условии направления инвестиций первому и второму заводам
Капитальные вложения |
Суммарная прибыль |
План распределения капитальных вложений по заводам |
||||
первому |
второму |
третьему |
||||
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
2,5 |
2 |
2,5 |
1 |
0 |
0 |
2 |
3,5 |
3,5 |
4,5 |
1 |
1 |
0 |
3 |
4,5 |
5 |
6 |
1 |
2 |
0 |
4 |
6,5 |
7,5 |
7,5 |
1 |
3 |
0 |
5 |
9 |
8,5 |
10 |
1 |
4 |
0 |
Теперь вычисляют значения столбца и соответствующие им планы распределения средств на три завода. Результаты вычислений сведены в табл. 5
Таблица 5
Прибыль при условии направления инвестиций трем заводам
Капитальные вложения |
Суммарная прибыль |
План распределения капитальных вложений по заводам |
||||
первому |
второму |
третьему |
||||
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
2,5 |
3 |
3 |
0 |
0 |
1 |
2 |
4,5 |
5,5 |
5,5 |
0 |
0 |
2 |
3 |
6 |
6,5 |
8 |
1 |
0 |
2 |
4 |
7,5 |
8,5 |
10 |
1 |
1 |
2 |
5 |
10 |
10,5 |
11,5 |
1 |
2 |
2 |
Оптимальным является такое распределение лимита в 5 единиц, когда первому заводу будет выделена 1 единица средств, второму – 2 единицы, третьему – 2 единицы. В этом случае обеспечивается максимум фондоотдачи, равный 11,5 условных единиц.
Отметим, что рассмотренная задача может быть введена в процесс обучения студентов вузов как задача исследовательского характера для повышения уровня математической компетенции обучающихся [5, 6].