
- •Количество выпущенных столов должно быть не менее 180, а количество стульев не менее 200. Этим условиям будут соответствовать ограничения
- •Задача составления оптимального плана поперечного раскроя бревен
- •Лекция 6
- •Лекция 9
- •Открытые транспортные задачи
- •Модели задач, сводимых к транспортной
- •Лекция 10
- •Метод наискорейшего подъема
- •И приравняем полученное выражение к «0»
- •Градиентные методы нелинейного программирования
- •Оптимизация систем с учетом нескольких критериев оптимизации
И приравняем полученное выражение к «0»
(11.11)
Решив это уравнение относительно , получаем оптимальную величину
для первого шага: =0,5.
Воспользуемся еще раз выражениями ( 10.17) и (10.18) и определим координаты точки
Как видим, это координаты точки максимума функции ( ). Таким образом, в отличие от градиентного, метод наискорейшего подъема позволил (для рассматриваемого примера) определить оптимальное решение за один шаг.
Градиентные методы нелинейного программирования
До сих пор мы рассматривали применение градиентных методов для отыскания экстремума функций без учёта ограничений. В основе большинства методов решения задач нелинейного программирования также лежит идея перемещения в направлении градиента целевой функции. До тех пор, пока траектория движения к оптимуму находится внутри области допустимых решений, можно не учитывать ограничения и эти методы работают так же как и только что рассмотренные. При выходе на границу ОДР дальнейшее перемещение происходит вдоль этой границы в направлении проекции вектора градиента на ограничивающую поверхность. Такие методы называются методами проектирования градиента.
Лекция 12
Метод глобального перебора (перебора на сетке).
Все рассмотренные выше градиентные методы поиска экстремума функций нескольких переменных работают в предположении, что целевая функция имеет единственный экстремум. Задача отыскания глобального экстремума многоэкстремальной функции, т. е. функции, имеющей несколько максимумов или минимумов, значительно сложнее. Применение любого из изложенных методов позволяет в этом случае отыскать лишь какой-либо один из локальных экстремумов целевой функции, который не обязательно совпадает с глобальным экстремумом. Это утверждение иллюстрируется на рис. 1.12, где изображены линии уровня функции двух переменных, имеющей два максимума в точках А и В.
Рис.1.12
Предположим, что экстремум отыскивают одним из градиентных методов. Если движение начнется из точки , то будет найден максимум в точке А. Если же исходной точкой будет точка , то поиск закончится в точке В. Стрелки, выходящие из точек и 02, указывают направления градиента функции в этих точках. Это указывает на возможность модернизации рассмотренных методов поиска с тем, чтобы приспособить их для отыскания глобального экстремума многоэкстремальных функций. Для этого можно рекомендовать повторение процедуры поиска несколько раз из различных исходных точек. Полученные значения локальных экстремумов сравниваются между собой, и из них выбирается наибольшее (при поиске глобального максимума). Для выбора положений исходных точек может использоваться как случайная, так и детерминированная процедура.
Существует другой метод, позволяющий отыскать глобальный экстремум целевой функции с заданной точностью — метод глобального перебора, или сканирования. Предположим, что для каждого из аргументов целевой функции у = задан диапазон его изменения: В пространстве переменных системе этих неравенств соответствует многомерный параллелепипед, являющийся областью допустимых значений аргументов целевой функции. Для случая функции двух переменных
у = имеем прямоугольник (рис. 2.12).
Рис.2.12
Диапазон [ ] изменения каждой переменной разбивается на достаточно большое число равных отрезков. Это число выбирают, исходя из заданной точности отыскания точки экстремума. В результате в области допустимых значений выделяется конечное число точек. Для каждой из них вычисляется значение целевой функции, а из полученного множества этих значений выбирается максимальное (или минимальное).
Являясь наиболее простым и универсальным, метод глобального перебора одновременно, является и самым трудоемким методом решения задач нелинейного программирования
Практически он применим только при числе переменных целевой функции не больше 3—4 из-за того, что его трудоемкость быстро возрастает с ростом размерности задачи. В самом деле, пусть заданная точность решения задачи будет достигнута, если на каждом отрезке [ ] взять 10 равноотстоящих точек. Тогда для отыскания экстремума функции двух переменных надо вычислить ее значения в 100 точках, являющихся узлами полученной сетки. Для функции трех переменных потребуется уже 10 =1000 ее вычислений и т. д. Если переменных 5, то целевую функцию нужно рассчитывать уже 205 раз.
Для отыскания глобального экстремума можно использовать и методы случайного поиска, модернизировав их так, чтобы наряду с малыми шагами, посредством которых обеспечивается приближение к некоторому локальному экстремуму, иногда допускались и большие шаги, переводящие систему в область притяжения другого локального экстремума.
При решении задач с учетом ограничений для каждой точки пространства поиска, необходимо ,сначала, последовательно проверить выполняемость всех ограничений. Если хотя бы одно из них не выполняется, то это означает, что данная точка в пространстве поиска находится вне пределов области допустимых решений можно сразу перейти к следующей точке. И только в том случае, когда все ограничения вычисляется значение целевой функции.
Как правило, метод глобального перебора реализуется с использованием компъютера.
Рассмотри, сначала, алгоритма метода глобально перебора для отыскания максимума функции одной переменной. Блок –схема этого алгоритма показана на рис.3.12. Будем считать, для определенности, что требуется найти решение оптимизационной задачи, математическая модель которой имеет вид:
На
первом этапе (блок 1) осуществляется
ввод информации, необходимой для решения
задачи: вводится целевая функция
, ограничение , границы
и на котором происходит поиск максимума, а так же значение шага с которым будет происходить перебор точек внутри отрезка
.
Зарезервируем в памяти ЭВМ ячейку, в которой будем хранить одно единственное, наибольшее по всем предыдущем шагам значение целевой функции. Обозначим соответствующую переменную через М. В начале работы программы в эту ячейку запишем «0» (блок 2). То есть присвоим М значение равное «0»: М=0 (= символ присваивания).
Рис.3.12
Вычисление значений ограничения и целевой функции начинаем с левого конца отрезка на котором осуществляется поиск максимума. Для этого присваиваем (блок3) переменной Х значение равное :Х= .
Далее, (блок 4) вычисляем значение ограничения и производим (блок 5) сравнение полученного результата с правой частью ограничения ( )
Допустим, что условие
выполняется , то есть мы находимся в пределах области допустимых решений. В этом случае вычислительный процесс происходит по стрелке «Да» и мы переходим к выполнению блока 6.
Если условие ( ) не выполняется, целевая функция не вычисляется и сразу переходим к блоку 10 .
В блоке 7 происходит вычисление значения целевой функции, после чего (блок 8) происходит сравнение полученного значения целевой функции с переменной М. Так как переменная М (за исключением первой итерации) всегда равна наибольшему по всем предыдущим итерациям значению целевой функции, условие
будет выполняться только в том случае, если значение целевой функции в
данной точке Х будет больше, чем во всех предыдущих. В этом случае (блок 9) переменной М присваивается новое значение М=W, и она снова становится равной наибольшему среди всех рассмотренных значений целевой функции. В блоке 9 переменной присваивается текущее значение переменной X: . Таким образом переменная показывает, какому значении Х соответствует текущее максимальное значение целевой функции.
В следующем ( 10 блоке) происходит переход к новой точке вычисления (переменной присваивается новое значение, которое на величину шага большн предыдущего и производится проверка (блок11) условия , которое обеспечивает поиск максимума только в пределах заданного диапазона изменения переменной Х. Если условие выполняется, возвращаются к блоку 4, рассчитывают значение ограничения и происходит циклический повтор выполнения блоков каждый раз для нового значения Х. Так продолжается до тех пор, пока значение Х не станет больше верхней границы ( 200 ), после чего вычисления заканчиваются.
Рассмотрим алгоритм глобального перебора для решения задач нелинейного программирования с 2-мя переменными. Пусть требуется решить следующую задачу:
Схема алгоритма, основанного на идее перебора значений переменных , приведена на рис. 4.12.
Предварительно выбраны величины шагов по и , обеспечивающие удовлетворительную точность решения задачи. Обозначим их и пусть ; . Вначале (блок 1) переменные и полагают равными их исходным значениям: Переменная М в имеет тот же смысл и выполняет те же функции, что и в алгоритме поиска экстремума функции одной переменной (см. рис. 3.12) Поэтому вначале ее следует положить равной любому числу, заведомо меньшему максимального значения целевой функции. Поскольку в данной задаче целевая функция неотрицательна, можно положить М=0, что и сделано в блоке 1. Далее проверяется, удовлетворяет ли исходная точка { Х=; Х= ограничению решаемой задачи: С этой целью в блоке 2 вычисляется значение функции из этого ограничения, а полученное числовое значение присваивается переменной z. В блоке проверки условия 3, имеющем на схеме вид ромба, проверяется выполнение записанного внутри него соотношения (в данном случае неравенства z<9). Если это неравенство оказалось справедливым, т. е. рассматриваемая точка удовлетворяет данному ограничению, то осуществляется переход по стрелке «Да» к блоку 4, где вычисляется значение целевой функции в той же точке { }. Оно присваивается переменной у. Невыполнение условия в блоке 3 означает, что эта точка не
Рис.4.13
принадлежит области допустимых значений. Поэтому не имеет смысла вычислять в ней значение целевой функции, а следует сразу же перейти к следующей точке. Это и реализовано переходом к блоку 8. Соответствующее ему действие означает, что к зафиксированному ранее значению переменной добавляется число 0,1. Значит, при первом обращении к блоку 8 примет значение и таким образом будет исследоваться точка { }. Обратимся к операциям в блоке 5, выполняемым вслед за операциями в блоке 4. Здесь анализируется выполнение неравенства у>М, т. е. проверяется, будет ли только что найденное значение целевой функции больше М. При первом обращении к этому блоку М= = 0 (блок 1), поэтому неравенство у>М в этом случае наверняка будет выполнено и, следовательно, произойдет переход к блоку 6. Выполняемое здесь присваивание М:=у означает, что переменная М примет теперь значение, равное значению целевой функции в анализируемой точке. Согласно блоку 7, значения аргументов X и Х присваиваются новым переменным и , которые тем самым будут хранить значения переменных и х ,соответствующие значению целевой функции, равному М. Далее выполняется переход к следующей точке с большим значением (блок 8) и проверяется, не превысит ли это значение максимальной для него величины =4 (блок 9). Если оказалось, что < 4, то осуществляется возврат к блоку 2, т. е. все описанные выше процедуры, начиная с проверки выполнения ограничения <9, выполняются для новой точки { }. Отметим, что при втором и последующих обращениях к блоку 5 уже возможны разные случаи. До тех пор, пока значение целевой функции в очередной точке больше чем в предыдущей, неравенство у>М будет выполняться и согласно блоку 6 переменная М будет каждый раз принимать значение, равное очередному возрастающему значению целевой функции У( . Если же в некоторой точке ее величина окажется меньше, чем в предыдущей точке (или равна ей), то вследствие невыполнения неравенства у>М присваивание М:=у не будет сделано (блоки 6 и 7 обходятся). Благодаря этому переменная М сохраняет значение, равное максимальному значению целевой функции по всем предыдущим точкам, принадлежащим области допустимых решений, а переменные а и равны значениям аргументов х и в точке максимума.
Вернемся к блоку 9 и рассмотрим случай, когда записанное в нем условие не выполняется. Это означает, что для данного значения Х=25 перебор по х следует завершить и возобновить его вновь, начиная с =2, уже для следующего значения . Поэтому в блоке 10 реализовано присваивание 1: = 2, а согласно блоку 11 значение х увеличивается на величину ее шага. После этого осуществляется возврат к блоку 2, т. е. анализируется очередная точка. Невыполнение неравенства < в блоке 12 свидетельствует о необходимости завершить перебор. В этом случае согласно блоку 13 выводится найденное оптимальное решение: значение М, равное максимальному значению целевой функции по всем точкам из области допустимых решений, и значения переменных а и , равные аргументам и в точке оптимума. Этим завершается работа алгоритма. Реализация его на ЭВМ позволила получить следующие результаты: а= ; М .
Лекция 13
Общие сведения о задачах календарного планирования
В задачах календарного планирования решается вопрос об оптимальной последовательности выполнения тех или иных операций. В технологии деревообработки, в частности в мебельном производстве, это чаще всего относится к порядку запуска в обработку различных деталей. В лесопилении актуальна задача определения оптимальных размеров и порядка запуска в распиловку партий пиловочного сырья с различными размерно- качественными характеристиками. При этом сортиментный план производства пиломатериалов должен быть выполнен с наименьшими затратами.
Задачи календарного планирования изучаются теорией расписаний. Здесь термин «расписание» соответствует понятию календарного плана, т. е. последовательности проведения некоторых операций. Эти задачи оказались весьма сложными с математической точки зрения, поэтому точные решения получены лишь для самых простых случаев. Формально задачи календарного планирования можно свести к, задачам целочисленного программирования, но сам по себе этот прием не слишком облегчает их решение.
Задача об определении оптимальной последовательности запуска деталей в обработку
Задача определения оптимальной последовательности запуска деталей в обработку представляет один из примеров задач календарного планирования.
Рассмотрим вначале простейший случай- задачу об определении оптимальной последовательности запуска деталей в обработку на одном станке.
Пусть имеется один станок, на котором должны последовательно пройти обработку n деталей. Известна длительность i= обработки каждой I -ой детали. Требуется определить, какова должна быть оптимальная последовательность запуска этих деталей в обработку? Здесь и далее мы будем считать, что затрат на переналадку оборудования нет.
На первый взгляд кажется, что в качестве критерия оптимизации при решении этой задачи следует принять общее время Т обработки всех деталей, которое необходимо минимизировать. Но
Т=
и общее время обработки всех n деталей будет одним и тем же при любой последовательности их запуска. Однако при этом окажется различным среднее время ожидания обработки для одной детали. Эту величину и разумно принять в качестве критерия оптимальности задачи. Решение здесь очевидно: детали должны запускаться в обработку по мере увеличения времени обработки. Т. е. запуск деталей должен производиться начиная с той детали, для которой длительность обработки минимальна, и далее в порядке возрастания этой величины. Аналогичным образом поступает администратор, приема у которого ожидают посетители. Желая уменьшить среднее время пребывания их в очереди, он пропускает сначала тех посетителей, чьи вопросы можно решить за минимальное время.
Более сложен алгоритм определения оптимальной последовательности запуска деталей в обработку для случаю 2-х станков. Эта задача называется задачей о двух станках, или задачей Джонсона .
Рассмотрим постановку задачи о двух станках. Имеется n деталей, каждая из которых должна последовательно пройти обработку сначала на первом, затем на втором станке. Второй станок не может приступить к обработке детали, пока ее обработка не закончится на первом станке. Известно время обработки каждой -й детали на j-м станке, i=1, 2; n=1, 2. Требуется найти порядок запуска деталей, при котором общая длительность их обработки на обоих станках минимальна. В этой задаче общее время
обработки деталей уже зависит от порядка их запуска.
Эта задача решена С. Джонсоном. Им доказана оптимальность следующего алгоритма, определяющего порядок запуска деталей в обработку. Вначале детали, подлежащие обработке, условно делят на две группы. В первую группу включают детали, для которых , т. е. те, время обработки которых на первом станке не превышает времени обработки на втором станке. Остальные детали образуют вторую группу. Вначале в обработку следует запускать детали первой группы в порядке возрастания длительности их обработки на первом станке. Затем должны обрабатываться детали второй группы в порядке убывания времени их обработки на втором станке.
Пример. Определить оптимальный порядок запуска в обработку пяти деталей (n=5). Время обработки каждой детали на 1-м и 2-м станках показано в соответствующих строках табл. 13.1.
Таблица 13.1
№ детали |
1 |
2 |
3 |
4 |
5 |
Первый станок |
3 |
2 |
7 |
1 |
7 |
Второй станок |
6 |
1 |
4 |
2 |
3 |
В соответствии с алгоритмом Джонсона, делим детали на две группы. В первую группу входят детали № 1 и 4, а во вторую — № 2, 3, 5. Далее запускаем в обработку детали первой группы в порядке возрастания времени их обработки на первом станке. Т. е., сначала запускается деталь N 4, а затем деталь N 1. Затем переходим к деталям второй группы и запускаем их в порядке убывания времени обработки на втором станке. Т.е. запускаем сначала деталь N3, затем N5 и N5. Таким образом оптимальный порядок обработки деталей следующий: 4, 1,3, 5, 2.
Алгоритм Джонсона позволяет найти оптимальную последовательность запуска деталей в обработку, однако не дает ответа на вопрос чему равно время простоя оборудования и, в конечном итоге, общее время обработки всех деталей.
Удобной формой представления календарных планов, которая позволяет определить величину простоев и общее время обработки деталей является график Ганта, изображенный на рис. 13.2 для найденной оптимальной последовательности запуска деталей.
Рис.13.2.
Здесь каждому станку соответствует своя ось времени , на которой отрезками прямых отмечают промежутки, в течение которых данный станок занят обработкой той или иной детали. Как видно из графика, второй станок будет простаивать по 1 мин перед обработкой четвертой, первой и третьей деталей, а также 3 мин перед обработкой пятой детали. Обработка всех деталей займет 22 мин.
Чтобы оценить эффективность алгоритма Джонсона можно построить графики Ганта для тех же условий что и в рассмотренной задаче, но для естественной последовательности запуска деталей. Под естественной последовательностью запуска деталей в обработку понимают запуск деталей в соответствии с их номером. То есть, первой в обработку запускается деталь N1, затем N2 и т.д. в порядке возрастания номеров деталей. Графики Ганта для этого случая показаны на рис.13.3.
Как видим из рис 13.3 суммарное время обработки деталей при естественном порядке их запуска в обработку равно мин. То есть применение алгоритма Джонсона позволяет сократить время обработки деталей на минут.
Перейдем к задаче определения оптимальной последовательности запуска деталей в обработку для произвольного количества m станков, на которых должны последовательно пройти обработку n деталей. Универсальный алгоритм решения этой задачи до сих пор не найден. Для конкретных значений n и m можно получить ее решение перебором различных вариантов запуска. Однако уже при относительно небольших величинах n и m объем вычислений оказывается настолько велик, что подобный перебор недоступен даже для современных ЭВМ.
Вместе с тем, в результате анализа алгоритма Джонсона для задачи о двух станках, были сформулированы 4 правила, применение которых к общему случаю последовательной обработки n деталей на m станках позволяет получить достаточно хорошие результаты..
Правило1. Детали следует запускать в порядке возрастания времени их обработки на 1-м станке.
Правило 2. Детали следует запускать в порядке уменьшения времени их обработки на последнем станке.
Правило 3. Обрабатывать раньше те детали, для которых « узкое место»
Расположено дальше от 1-го станка. Узким местом, для какой либо детали, называют станок на котором обработка этой детали занимает наибольшее время.
Правило 4. Детали запускаются в порядке убывания суммарного времени обработки на всех станках.
Каждое из этих правил логично. Применение первого из них способствует скорейшему вовлечению в обработку второго станка. Второе правило позволяет уменьшить конечный простой первого станка. Третье правило способствует быстрейшему «проскакиванию» к концу технологической линии тех деталей, для которых обработка на первом станке занимает меньше времени, с тем, чтобы освободить первый станок деталям, для которых он является узким местом.
Эффективность применения каждого из этих правил зависит от исходных данных задачи и заранее сказать, какое из этих правил даст наилучший (в смысле минимизации общего времени обработки) результат, нельзя.
Поэтому при решении конкретных задач для трех и более станков задача решается с использованием каждого из четырех правил, затем для каждой из четырех найденных последовательностей строятся графики Ганта и определяется суммарное время обработки. В качестве окончательного варианта выбирают ту последовательность, которая оказалась лучшей, исходя из минимума суммарного времени обработки. Численные эксперименты показали, что наиболее эффективным чаще всего оказывается применение первого правила.
Если при использовании какого-либо правила две, или большее количество деталей окажутся эквивалентными с точки зрения используемого правила, обращаются к любому другому (например 1-му). Если рассматриваемые детали эквивалентны и с точки зрения этого правила, обращаются к следующему и т.д.
Рассмотрим пример. На мебельно-деревообрабатывающем комбинате изготавливали футляры для настенных и настольных часов. Имеется семь деталей футляров, каждая из которых должна последовательно пройти обработку на четырех станках: 1) рейсмусовом; 2) фуговальном; 3) торцовочном; 4) фрезерном. Наименования деталей: 1 — вертикальный брусок дверки; 2 и 3— нижний и средний бруски дверки; 4 — верхний брусок; 5 — нижняя доска; 6 — штанга; 7 — планка. В табл. 13.2 приведена длительность обработки каждой детали на каждом из станков, мин.
В соответствии с рассмотренными выше правилами можно рекомендовать следующие варианты запуска деталей в обработку (табл. 13.3).
Таблица 13.3
№ станка |
Длительность обработки детали № |
2 |
||||||
1 |
2 |
3 |
4 |
5 |
6 |
7 |
||
1 |
а |
4 |
5 |
6 |
3 |
2 |
1 |
30 |
2 |
5 |
2 |
8 |
(?Г) |
© |
1 |
1 |
33 |
3 |
7 |
©' |
9 |
8 |
1 |
2 |
3 |
37 |
4 |
6 |
3 |
4 |
5 |
2 |
® |
V |
27 |
2 |
27 |
15 |
27 |
31 |
10 |
8 |
9 |
|
В соответствии с рассмотренными выше правилами были получены следующие варианты запуска деталей в обработку (табл. 13.4).
Таблица 7.3
Правило № |
Последовательность запуска деталей |
ЛГ |
7, 6, 5, 2, 3, 4, 1 |
Г |
|
( , |
1, 4, 7, 3, 6, 2, 5 |
3 |
7, 6, 2, 3, 5, 4, 1 |
4 |
4, 1,3, 2, 5, 7, 6 |
Для каждой из последовательностей был построен график Ганта и определена общая длительность обработки всех деталей. Оказалось, что лучший результат в данном случае дает применение первого правила. Общая длительность обработки при соответствующей последовательности запуска равно 7 = 56 мин. Второе место по эффективности заняло правило 3: Т= = 57 мин.
Лекция 14