Реализация на ЭВМ решения задачи оптимального распределения средств на расширение производства
Курсовая работа, 18 Сентября 2011, автор: пользователь скрыл имя
Краткое описание
Целью данной работы является реализация на ЭВМ решения задачи оптимального распределения средств на расширение производства.
Задачи курсовой работы:
Рассмотреть теоретические аспекты решения задач динамического программирования; рекуррентность природы задач данного типа; принципы оптимальности Беллмана.
Разработка алгоритма. Блок - схемы. Структура алгоритма.
Реализация на ЭВМ разработанного алгоритма на выбранном языке программирования
Оглавление
ВВЕДЕНИЕ 3
1. ДИНАМИЧЕСКОЕ ПРОГРАММИРОВАНИЕ 4
1.1. Основные понятия 4
1.2. Принципы динамического программирования. Функциональные уравнения Беллмана 4
1.3. Особенности задач динамического программирования 8
1.4. Примеры задач динамического программирования. 10
2. ЗАДАЧА РАСПРЕДЕЛЕНИЯ РЕСУРСОВ 12
2.1. Общая постановка задачи. 12
2.2. Пример задачи распределения ресурсов 14
ЗАКЛЮЧЕНИЕ 18
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ 19
ПРИЛОЖЕНИЕ А 20
ПРИЛОЖЕНИЕ В 25
Файлы: 1 файл
курсовая.doc
— 1.16 Мб (Скачать)Принцип погружения. Форма задачи, решаемая методом динамического программирования, не меняется при изменении количества шагов N, т.е. форма такой задачи инвариантна относительно N. В этом смысле всякий конкретный процесс с заданным числом шагов оказывается как бы погруженным в семейство подобных ему процессов и может рассматриваться с позиции более широкого класса задач.
Реализация названных принципов дает гарантию того, что решение, принимаемое на очередном шаге, окажется наилучшим относительно всего процесса в целом, а не узких интересов данного этапа. Последовательность пошаговых решений приводит к решению исходной N -шаговой задачи.
Функциональные уравнения Беллмана. Как отмечалось выше, в основе динамического программирования лежит принцип оптимальности, направленный на процедуру построения оптимального управления. Так как оптимальной стратегией может быть только та, которая одновременно оптимальна и для любого количества оставшихся шагов, ее можно строить по частям: сначала для последнего этапа, затем для двух последних, для трех и т. д., пока не придем к первому шагу. Отсюда принцип оптимальности связан со вторым принципом – принципом погружения, согласно которому при решении исходной задачи ее как бы погружают в семейство подобных ей и решают для одного последнего этапа, для двух последних и т. д., пока не получат решение исходной задачи.
Дадим
математическую формулировку принципа
оптимальности. Для простоты будем
считать, что начальное x0
и конечное xT состояния системы
заданы. Обозначим через z1(х0,
u1) значение функции цели на
первом этапе при начальном состоянии
системы x0 и при управлении
u1, через z2(х1,u2)
– соответствующее значение функции цели
только на втором этапе, ..., через
zi(хi-1,ui)
– на i-м этапе, ..., через zN(хN-1,
uN) —на N-м этапе. Очевидно,
что
Z = = (1)
Надо найти оптимальное управление u*= ( ; ;...; ), такое, что доставляет экстремум целевой функции (1) при ограничениях .
Для
решения этой задачи погружаем ее в
семейство подобных. Введем обозначения.
Пусть
– соответственно области
определения
для подобных задач на последнем
этапе, двух последних и т. д.;
– область определения исходной
задачи. Обозначим через F1(xN-1),
F2(xN-2),
…, Fk(xN-k),
…, FN(x0)
соответственно условно-оптимальные значения
функции цели на последнем этапе, двух
последних и т. д., на k последних и т.
д., на всех N этапах.
Начинаем с последнего этапа. Пусть хN-1 – возможные состояния системы на начало N-го этапа. Находим:
F1(xN-1) = zN(xN-1, uN). (2)
Для двух последних этапов получаем
F2(xN-2) = (ZN-1(xN-2, uN-1) + F1(xN-1)). (3)
Аналогично:
F3(xN-3) = (ZN-2(xN-3, uN-2) + F2(xN-2)). (4)
………………………………………………….
Fk(xN-k) = (zN-k+1(xN-k, uN-k+1) + Fk-1(xN-k+1)). (5)
…………………………………………………..
FN(x0) = (z1(x0, u1) + FN-1(x1)). (6)
Выражение (6) представляет собой математическую запись принципа оптимальности. Выражение (5) – общая форма записи условно-оптимального значения функции цели для k оставшихся этапов. Выражения (2) – (6) называются функциональными уравнениями Беллмана. Отчетливо просматривается их рекуррентный (возвратный) характер, т. е. для нахождения оптимального управления на N шагах нужно знать условно-оптимальное управление на предшествующих N – 1 этапах и т. д. Поэтому функциональные уравнения часто называют рекуррентными (возвратными) соотношениями Беллмана.
- Особенности задач динамического программирования
На основании выше сказанного можно выделить следующие особенности задач динамического программирования.
- Рассматривается система, состояние которой на каждом шаге определяется вектором xt. Дальнейшее изменение ее состояния зависит только от данного состояния xt и не зависит от того, каким путем система пришла в это состояние. Такие процессы называются процессами без последействия.
- На каждом шаге выбирается одно решение ut, под действием которого система переходит из предыдущего состояния xt-1 в новое хt. Это новое состояние является функцией состояния на начало интервала xt-1 и принятого в начале интервала решения ut, т. е. xt = xt(xt-1,ut).
- Действие на каждом шаге связано с определенным выигрышем (доходом, прибылью) или потерей (издержками), которые зависят от состояния на начало шага (этапа) и принятого решения.
- На векторы состояния и управления могут быть наложены ограничения, объединение которых составляет область допустимых решений .
- Требуется найти такое допустимое управление ut для каждого шага t, чтобы получить экстремальное значение функции цели за все Т шагов.
Любую допустимую последовательность действий для каждого шага, переводящую систему из начального состояния в конечное, называют стратегией управления. Стратегия управления, в результате которой можно получить экстремальное значение функции цели, называется оптимальной.
Геометрическая интерпретация задачи динамического программирования состоит в следующем. Пусть n – размерность пространства состояний. В каждый момент времени координаты системы имеют вполне определенное значение. С изменением времени t могут изменяться значения координат вектора состояния. Назовем переход системы из одного состояния в другое траекторией ее движения в пространстве состояний. Такой переход осуществляется воздействием на координаты состояния. Пространство, в котором координатами служат состояния системы, называется фазовым. Особенно наглядно задачу динамического программирования можно интерпретировать в случае, если пространство состояний двухмерно. Область возможных состояний в этом случае изобразится некоторой фигурой , начальное и конечное состояния системы – точками х0, , (рис. 1). Управление – это воздействие, переводящее систему из начального состояния в конечное. Для многих экономических задач не известно начальное либо конечное состояние, а известна область X0 или XT, которой эти точки принадлежат.
Рисунок 1
Тогда допустимые управления переводят точки из области Х0 в XT. Задача динамического программирования геометрически может быть сформулирована следующим образом: найти такую фазовую траекторию, начинающуюся в области Х0 и оканчивающуюся в области ХT, для которой функция цели достигает экстремального значения. Если в задаче динамического программирования известны начальное и конечное состояния, то говорят о задаче с закрепленными концами. Если известны начальные и конечные области, то говорят о задаче со свободными концами.
- Примеры задач динамического программирования.
Приведем еще несколько типичных задач, для решения которых необходимым является применение метода динамического программирования.
Задача
перспективного планирования.
Задача заключается в следующем: пусть
планируется деятельность группы N
промышленных предприятий П, (i=
) на период в t (t
=
) хозяйственных лет. В начале периода
на развитие системы предприятий выделены
какие-то средства, обозначим их К,
которые должны быть распределены между
предприятиями. В процессе деятельности
предприятия вложенные в него средства
частично амортизируются. Каждое предприятие
за год работы приносит доход, который
зависит от вложенных в процесс производства
средств. Часть этих средств отчисляется
в фонд предприятий. В начале каждого хозяйственного
года имеющиеся средства перераспределяются
между предприятиями. Таким образом, возникает
задача определения объема средств в начале
каждого года, которые нужно выделить
каждому предприятию, чтобы суммарный
чистый доход за Т
лет был максимальным. Это типичная задача
динамического программирования. Здесь
процесс принятия решения разбивается
на Т шагов. Управление им заключается
в начальном распределении и последующих
перераспределениях средств
ut
={
}, где
— объем средств, выделенных i-му
предприятию в начале t-го
года. Для описания динамики системы вводится
вектор состояния хt={
}, где
— состояние i-го предприятия на
начало t-го года. В свою очередь состояние
каждого предприятия
является вектором, координатами которого
служат трудовые ресурсы, основные фонды,
финансовое положение и т. д., т. е.
=(
). Очевидно, что вектор управления
— это функция состояния системы на начало
соответствующего года: ut=ut(xt-1),
при этом начальное состояние системы
x0 может быть заданным. Целевой функцией
будет суммарная прибыль объединения
за Т лет, тогда, если zt
— прибыль за t-й год, то получим задачу
max Z = , ,
где — область допустимых управлений, или множество экономических возможностей, определяемых различными ограничениями, которые налагаются на состояние системы и вектор управления.
Задача об оптимальном управлении поставками. В различных областях народного хозяйства возникает задача определения момента подачи партии поставки и ее объема. С размещением заказов связаны некоторые фиксированные затраты К, не зависящие от величины заказываемой партии, а зависящие только от факта заказа. С содержанием материальных ресурсов связаны затраты, пропорциональные остатку нереализованной продукции на конец интервала планирования. Пусть Т - промежуток планирования. Обозначим через vt интенсивность потребления ресурса в t-м интервале. Состояние системы будем описывать величиной остатка нереализованной продукции на конец интервала хt, при этом начальное х0 и конечное хt состояния системы можно считать заданными. Для обеспечения непрерывности потребления поставками нужно управлять. Обозначим через u = {ut} вектор управления, координаты которого величина поставок в начале соответствующих интервалов планирования. Очевидно, что вектор управления есть функция состояния на начало интервала. Из множества возможных управлений требуется выбрать такое, при котором достигается минимум издержек на заказ и содержание материальных ресурсов. Если St — издержки содержания единицы продукции в t-м интервале, то функция цели примет вид:
min Z = ,
где
Состояние системы опишется соотношением хt = xt-1 + ut – vt (t = ). На состояние системы может быть наложено ограничение, связанное с надежностью снабжения: хt ≥ , где - величина некоторого страхового запаса, защищающего с заданной надежностью от сбоев в системе. Объединение ограничений, налагаемых на состояние системы и вектор управления, обозначим через .
Получим задачу:
min Z =
,
.
- ЗАДАЧА РАСПРЕДЕЛЕНИЯ РЕСУРСОВ
- Общая постановка задачи.
Пусть на реконструкцию и модернизацию основного производства объединению выделяется некоторый объем материальных ресурсов X0. Имеется N предприятий, между которыми нужно распределить данный ресурс. Обозначим через zi(хi) прибыль, которую приносит народному хозяйству выделение i-му предприятию хi (i= ) единиц ресурса. Предполагается, что размер прибыли зависит как от выделенного количества ресурса, так и от предприятия. Причем констатируется, что прибыль, получаемая каждым предприятием, измеряется в одних и тех же единицах и прибыль, получаемая любым из предприятий, не зависит от того, какое количество этого ресурса выделено другим предприятиям, общая прибыль объединения состоит из прибылей отдельных предприятий.
Решение.
Сформулированные выше предположения приводят к функции цели:
max Z = z1(x1) + … + zN(xN). (7)
Задача оптимального распределения возникает оттого, что имеется ограниченный объем ресурса X0, т. е.
x1 + … + xN = X0, xi ≥ 0 (i = ). (8)
Чтобы решить задачу распределения ограниченных ресурсов, применим аппарат функциональных уравнений Р. Беллмана. Погружаем ее в семейство подобных задач распределения. Вместо решения одной задачи с заданным объемом ресурса Х0 и фиксированным числом предприятий N рассмотрим их семейства, в которых объем выделенного ресурса х может меняться от нуля до Х0 и число предприятий – от 1 до N. Введем последовательность функций F1(x), F2(x), …, FN(x), где F1(x) – это максимальная прибыль, если бы ресурс 0 ≤ x ≤ X0 был выделен только одному первому предприятию, F2(x)–максимальная прибыль, полученная при условии, что ресурс 0 ≤ x ≤ X0 был распределен двум предприятиям, и т. д. Пусть, наконец, FN(x) – максимальная прибыль, получаемая от распределения ресурса 0 ≤ x ≤ X0 между N предприятиями. Очевидно, что FN(X0) = max Z.
В двух случаях элементы последовательности F(х) имеют особенно простой вид:
F1(0) = 0 (i = ), F1(х) = z1(х), 0 ≤ x ≤ X0.
Пусть ресурс 0 ≤ x ≤ X0 распределяется между двумя предприятиями. Если x2 – объем ресурса, выделенного второму предприятию, то его прибыль составит z2(x2). Оставшийся ресурс x – x2 распределяется наилучшим образом.
Общая прибыль для двух предприятий составит
F2(x) = (z2(x2) + F1(x-x2)).
Аналогично
найдем рекуррентное соотношение, которое
связывает Fk(x) и
Fk-1(xxk)
(k =
) для произвольных значений 0
≤ x ≤ X0. Тогда, оставшийся
ресурс х – xk
распределится между остальными k – 1
предприятиями наилучшим образом. Так
как Fk-1(x
– xk)
известно, то