Курсовая работа
Оптимальное распределение средств на расширение производства
Содержание
Введение
1. Рекуррентная природа задач динамического программирования
1.1 Принцип оптимальности Беллмана
1.2 Вычислительная схема
2. Решение задачи оптимального распределения средств на расширение производства
2.1 Решение задачи оптимального распределения средств на расширение производства ручным способом
2.2 Решение задачи оптимального распределения средств на расширение производства в среде MicrosoftExсel
Заключение
Список использованных источников
С развитием техники, усложнением структуры производства, усложнением и удорожанием самих проектируемых конструкций начало складываться убеждение в необходимости создания более эффективной методики аналитического проектирования и планирования, основанного на выборе наилучшего, оптимального варианта в процессе предварительного математического исследования.
В настоящее время эта проблема оптимизации стала одной из основных проблем в технических и экономических науках. Необходимый для ее решения математический аппарат, казалось бы, имелся в готовом виде – это классический анализ и вариационное исчисление. Однако непосредственное применение известного аппарата столкнулось со значительными трудностями. Реальные задачи оптимизации не укладывались непосредственно в классические схемы.
Предложенный Р.Беллманом аппарат функциональных уравнений значительно расширяет возможности решения реальных проблем оптимизации. Его главным достоинством является хорошая "приспособленность" к использованию современной вычислительной техники.
Цель курсовой работы: решить задачу оптимального распределения средств на расширение производства.
Задачи: определить рекуррентную природу задач динамического программирования, изучить принцип Беллмана, его вычислительную схему, решить задачу в среде MicrosoftExcel.
Курсовая работа состоит из 2-ух частей. В первом разделе рассмотрены теоретические основы задач динамического программирования. Во втором разделе приведен пример решения задачи оптимального распределения средств на расширение производства.
Динамическое программирование (планирование) представляет собой математический метод для нахождения оптимальных решений многошаговых (многоэтапных) задач. Некоторые из таких задач естественным образом распадаются на отдельные шаги (этапы), но имеются задачи, в которых разбиение приходится вводить искусственно, для того чтобы их можно было решить методом динамического программирования.
Пусть на некоторый период времени Т, состоящий из m лет, планируется деятельность группы промышленных предприятий. В начале планируемого периода на развитие предприятий выделяются основные средства Qо, которые необходимо распределить между предприятиями. В процессе функционирования предприятий, выделенные им, средства частично расходуются. Однако каждое из этих предприятий за определенный период времени (хозяйственный год) получает прибыль, зависящую от объема вложенных средств. В начале каждого года имеющиеся средства могут перераспределяться между предприятиями. Требуется определить, сколько средств надо выделить каждому предприятию в начале каждого года, чтобы суммарный доход от всей группы предприятий за весь период времени Т был максимальным.
Процесс решения такой задачи является многошаговым. Шагом управления (планирования) здесь будет хозяйственный год. Управление процессом состоит в распределении (перераспределении) средств в начале каждого хозяйственного года.
Пусть имеется груз, состоящий из неделимых предметов различных типов, который нужно погрузить в самолет грузоподъемностью Р. Стоимость и масса каждого предмета j-гo типа известны и составляют соответственно cj, и pjединиц (
).Требуется определить, сколько предметов каждого типа надо загрузить в самолет, чтобы суммарная стоимость груза была наибольшей, а масса не превышала грузоподъемности самолета.Математически задача записывается следующим образом: найти такие целые неотрицательные значения хj (
), которые бы максимизировали функцию: (1.1)при ограничении
(1.2)где xj— количество груза j-гo типа, позволяющее достичь max
.Процесс решения рассматриваемой задачи не является многоэтапным. Она относится к классу задач целочисленного линейного программирования. Однако ее можно решить методом динамического программирования. Для этого весь процесс решения потребуется разбить на этапы искусственно. На первом этапе рассматривают всевозможные варианты загрузки самолета предметами первого типа и среди них находят оптимальный. На втором этапе определяют вариант загрузки самолета предметами первого и второго типов и т.д. Процесс решения задачи продолжается до тех пор, пока не будет найден оптимальный вариант загрузки самолета предметами nтипов.[1, с 241]
Вычисления в динамическом программировании выполняются рекуррентно в том смысле, что оптимальное решение одной подзадачи используется в качестве исходных данных для следующей. Решив последнюю подзадачу, мы получим оптимальное решение исходной задачи. Способ выполнения рекуррентных вычислений зависит от того, как производится декомпозиция исходной задачи. В частности, подзадачи обычно связаны между собой некоторыми общими ограничениями. Если осуществляется переход от одной подзадачи к другой, то должны учитываться эти ограничения.[2, с 441]
1.1 Принцип оптимальности Беллмана
Метод динамического программирования позволяет одну задачу со многими переменными заменить рядом последовательно решаемых задач с меньшим числом переменных. Процесс решения задачи разбивается на шаги. При этом нумерация шагов, как правило, осуществляется от конца к началу.
Основным принципом, на котором базируются оптимизация многошагового процесса, а также особенности вычислительного метода, динамического программирования, является принцип оптимальности Р. Беллмана.
Оптимальное поведение обладает тем свойством, что каковы бы ни были начальное состояние и начальное решение, последующие решения должны быть оптимальными относительно состояния, полученного в результате первоначального решения.
Принцип оптимальности имеет конструктивный характер и непосредственно указывает процедуру нахождения оптимального решения. Математически он записывается выражением вида:
(1.3)где
— оптимальное значение эффекта, достигаемого за шагов; n — количество шагов (этапов); — состояние системы на - мшаге; — решение (управление), выбранное на - м шаге; — непосредственный эффект, достигаемый на - м шаге."Optimum" в выражении (1.3) означает максимум или минимум в зависимости от условия задачи. Все вычисления, дающие возможность найти оптимальное значение эффекта, достигаемого за nшагов, ¦n(So), проводятся по формуле (1.3), которая носит название основного функционального уравнения Беллмана или рекуррентного соотношения. Действительно, при вычислении очередного значения функции
используются значение функции , полученное на предыдущем шаге, и непосредственное значение эффекта , достигаемого в результате выбора решения при заданном состоянии системы . Процесс вычисления значений функции осуществляется при естественном начальном условии ,которое означает, что за пределами конечного состояния системы эффект равен нулю.[1, с 243]Оптимальное решение задачи методом динамического программирования находится на основе функционального уравнения (1.3). Чтобы определить его, необходимо: