Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Решение задач целочисленного и дискретного программирования на ЭВМ
Ряд программных продуктов позволяет решать оптимизационные задачи в целочисленной постановке. В качестве примера рассмотрим решение задачи примера 9.1 в целочисленной постановке с использованием MS Excel. Для этого последовательность действий п. 9.7 необходимо дополнить вводом требования целочисленности содержимого ячеек B2 и B3 (на рис. 10.2). Одно из целочисленных решений представлено на рис. 10.3. Аналогично могут быть решены рассмотренные выше задачи оптимизации раскроя.
Рис. 10.2.
Рис. 10.3. Контрольные вопросы и задания
1. Приведите математическую формулировку задачи целочисленного программирования. 2. Изложите основную идею метода ветвей и границ. 3. Решите задачу примера 9.1 графически методом ветвей и границ. 4. Изложите алгоритм метода ветвей и границ. 5. Объясните суть задач раскроя и приведите примеры. 6. Приведите математическую формулировку задачи дискретного программирования. 7. Решите по вариантам задачи линейного программирования 9-19 раздела 9.8. Глава 11. Динамическое программирование Общие понятия
Все рассматриваемые в главах 9-10 задачи характеризуются тем, что в них не учитываются изменения оптимизируемых параметров во времени (процессы считаются статичными). Выбирается некоторый период времени и для него определяются проектируемые или планируемые значения показателей, например, объемы выхода ликвидной или деловой древесины, поставок лесопродукции потребителям, прибыль, приведенные затраты и т.д. При этом предполагается, что управляемые или неуправляемые параметры систем в течение всего планового периода не будут изменяться или, по крайней мере, не претерпят серьезных изменений, требующих пересмотра принятых решений. Однако в лесной экономике, технологии и технике есть задачи, в которых необходимо учитывать изменения параметров систем во времени. Эти параметры могут меняться непрерывно или дискретно - от этапа к этапу. Например, из года в год меняется возраст машин и оборудования, изменяется производственная мощность и производительность труда на предприятиях, фондоотдача. Прирост древостоев в зависимости от породного состава принято отслеживать в пять - десять лет. Очевидно, что необходимо принимать оптимальные решения на год (или другой срок) и одновременно на весь рассматриваемый период в целом с учетом возможных изменений параметров. Для решения такого рода задачи, которые получили название многошаговые, разработан соответствующий математический аппарат, который получил название динамическое программирование. Рассмотрим операцию, состоящую из m шагов. Некоторые расчленяются на шаги естественно, например, деятельность предприятия в течение нескольких месяцев, эксплуатация трактора в течение нескольких лет, прирост древостоя в течение 10 лет и т.д. В других случаях, разбивку приходится вводить искусственно, например, при прокладке лесовозной дороги и т.д. На каждом шаге с целью улучшения результата операции в целом осуществляется распределение и перераспределение ресурсов, т.е. управление u. Эффективность операции в целом характеризуется показателем W, который зависит от всей совокупности управлений u и на каждом шаге операции W = W(u) = W(u1, u2,..., um). (11.1) Управление, при котором показатель W достигает оптимума (максимума или минимума), называется оптимальным управлением u*, которое состоит из совокупности оптимальных шаговых управлений u* = (u1*, u2*,..., um*). (11.2) Задача динамического программирования - определить ui* (ui* - не только число, а может быть вектором, функцией) на каждом шаге i=1,2,...,m и тем самым u* всей операции в целом. Большинство практических задач имеет дело с одномерной задачей динамического программирования: W = ® max (min), (11.3) где Wi - эффективность действий на i шаге. Пример 11.1. Проектирование лесной дороги Прокладывается участок лесовозной дороги между нижним складом леспромхоза и погрузочной площадкой лесопункта по пересеченной местности. Требуется провести дорогу, чтобы суммарные затраты на сооружение участка были минимальные. Искусственно отрезок [L,U] между нижним и верхним складами разделим на m частей, проведем через точки деления прямые, перпендикулярные отрезку [L,U] и условимся считать на каждом шаге участок пути прямолинейным. Шаговое управление на i шаге представляет собой угол ji. Управление всей операции состоит из совокупности шаговых управлений u = (j1, j2,..., jm). Требуется найти такое оптимальное управление u*, при котором суммарные затраты W на сооружение участков минимальны, т.е. W = ® min. Метод динамического программирования был предложен и развит Р. Беллманом и его учениками в начале 50-х годов и состоит в нахождении оптимума целевой функции при ограничении общего вида на варьируемые параметры. Рассмотрим подход к решению данной задачи. Характерным для динамического программирования является то, что переменные рассматриваются не вместе, а последовательно - одна за другой. При этом вычислительная тема строится таким образом, что вместо одной задачи с n переменными решается серия задач с небольшим числом, а чаще всего с одной переменной. Сам же вычислительный процесс производится на основе метода последовательных приближений в два круга: · от последнего шага к первому; · от первого шага к последнему или же, наоборот, в зависимости от исходных данных. На первом круге ищется так называемое условное оптимальное решение. Оно выбирается так, чтобы все предыдущие шаги обеспечили максимальную эффективность последующего. Основу такого подхода составляет принцип оптимальности Беллмана, который формулируется следующим образом: нельзя получить оптимальное значение целевой функции i-шагового процесса, если для любого ui, выбранного на шаге i, значение целевой функции для оставшихся i-1 шагов не является оптимальным. Такой процесс продолжается до тех пор, пока решение не потеряет свой условный характер, т.е. до первого шага или последнего. Для него решение просто оптимально. Поэтому второй круг начинают именно с этого шага и последовательно переходят от условных к оптимальным решениям, тем самым обеспечивается оптимальность операции в целом. Другими словами, управление на i шаге выбирается не так, чтобы выигрыш именно на данном шаге был максимален (минимален), а так, чтобы была оптимальна сумма выигрышей на всех оставшихся до конца шагах плюс данный. Исключение - последний шаг. Поэтому процесс динамического программирования обычно разворачивается от конца к началу - прежде всего планируется последний шаг. А как его спланировать, если неизвестен предпоследний? Необходимо сделать разные предположения о том, чем завершится m-1 шаг и для каждого из этих предположений найти условное оптимальное управление и соответствующий ему условный оптимальный выигрыш на m шаге. Далее, двигаясь назад, оптимизируем управление на m-2 шаге и т.д., пока не дойдем до первого.
После этого можно построить не условно оптимальное, а искомое оптимальное управление u* и найти искомый оптимальный выигрыш W*. Для этого достаточно, двигаясь от начала к концу, прочитать уже готовые рекомендации и найти u*, состоящие из u1*, u2*,..., um*. Что касается оптимального выигрыша W* за всю операцию, то он нам уже известен - именно на его оптимальности выбрано управление на первом шаге. Поясним вышесказанное, продолжая рассмотрение примера 11.1. Дадим графическую интерпретацию задачи (рис. 11.1), разделив отрезок от нижнего L до верхнего U складов в направлении сторон света, допустим, на 5 частей. В общем случае коэффициент дробления может быть каким угодно. В нашем случае трасса из L до U состоит из m=5+5=10 участков, направленных на север или восток. Проставим на каждом из отрезков число, выражающее затраты на строительство дороги на этом участке. Требуется выбрать такой путь из L в U, для которого сумма чисел, стоящих на отрезках, была бы минимальна. Будем рассматривать сооружаемую дорогу как управляемую систему, перемещающуюся под влиянием управления из начального состояния L в конечное U. Состояние этой системы перед началом каждого шага будет характеризоваться двумя координатами: восточной (x) и северной (y), обе - целочисленные. Для каждого из состояния системы, т.е. узловой точки прямоугольной сетки, необходимо найти условное оптимальное управление: двигаться на север (), юг (¯), восток (®) или запад (). Выбирается это управление так, чтобы затраты всех оставшихся до конца шагов (включая данный) была минимальной. Эти затраты принято называть условным оптимальным выигрышем для данного состояния системы перед началом очередного шага.
Аналогично оптимизируем предпоследний, 9 шаг, который может быть сделан из точек B1, B2 и B3. Отличие данного шага от последнего 10-го шага заключается в том, что управление здесь уже не вынужденное. Например, из точки B2 возможно движение как на север с затратами до точки U в 2+1=3 единицы, так и на восток с затратами в 4+4=8 единиц. Следовательно, условное оптимальное управление из точки B2 - (), помечено на рис. 11.3 стрелкой. Найденные для B1, B2 и B3 условные оптимальные управления и условные оптимальные выигрыши также представлены на рис. 11.3, соответственно, в виде стрелок и значений в квадратах. Двигаясь от предпоследнего шага назад к L, найдем для каждой точки с целочисленными координатами условное оптимальное управление (), (¯), (®) или () и условный оптимальный выигрыш (затраты до конца пути), который записывается в квадрате. Вычисляется он так: затраты на данном шаге складываются с уже оптимизированными затратами, записанными в квадрате, куда ведет стрелка. Следовательно, на каждом шаге мы оптимизируем только этот шаг, а следующие за ним уже оптимизированы. Конечный результат процедуры оптимизации показан на рис. 11.4. Итак, условная оптимизация выполнена - в какой бы из узловых точек мы ни находились, известно, куда двигаться (по стрелке) и во что обойдется прокладка трассы до конца (по числу в квадрате). В прямоугольнике при точке L записан оптимальный выигрыш на всем протяжении пути из L в U: W*= 21.
Теперь остается построить безусловное оптимальное управление - траекторию, ведущую из L в U самым дешевым способом. Для этого необходимо следовать указаниям стрелок. Такая оптимальная траектория отмечена на рис. 11.4 утолщенными линиями. В текстовом виде безусловное оптимальное управление запишется так: u* = (,,,®,®, ®,,,®,®), т.е. первые четыре участка трассы от нижнего склада необходимо вести на север, далее повернуть на восток, далее на север и остальные четыре участка - на восток. Задача решена. Date: 2016-07-25; view: 769; Нарушение авторских прав |