![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
|||
![]() |
![]() |
||||||||
![]() |
Eng | Rus | Ukr | ![]() |
![]() |
||||||
![]() |
|||||||||
![]() |
![]() |
||||||||
![]() |
![]() |
![]() |
|||||||
![]() |
Исследование операций
|
24.12.2008
|
![]() |
![]() |
|||||
4.4. Задача булева программирования и аддитивний алгоритм ее решения
максимизировать при условиях
К этому классу задач сводятся многочисленные задачи исследования операций, такие как задачи о размещении производств, задачи о назначении, задачи синтеза структуры транспортных и информационных сетей и т.д. Разработано много точных и приближенных методов ее решения. Некоторые из них будут рассмотренны ниже. Первый точный алгоритм решения булевой задачи предложил Э. Балаш в 1966 г. [3]. Этот алгоритм получил название аддитивного. Рассмотрим його основные идеи. Если учитывать только условия (4.4.3), то существует Рассмотрим некоторое подмножество Такое подмножество называется частичным решением. Переменные xj, не входящие в частичное решение, носят название свободных переменных. Любой набор числовых значений называется дополнением соответствующего частичного решения. Если частичное решение содержит s переменных, то существует
Рис. 4.8. Допустим, что известна нижняя достигнутая оценка оптимального значения целевой функции (4.5.1) и зафиксировано допустимое решение, дающее эту оценку. Тогда, если каким-то образом удается доказать, что для некоторого частичного решения не существует допустимого дополнения, которое имеет значение целевой функции, превышающее нижнюю текущую оценку, то нет необходимости в дальнейшем решении, т.е. это решение отсеивается. В этом случае говорят, что частичное решение прозондовано. При зондировании частичного решения, содержащего s переменных, неявным образом перебирается алгоритма и принципом оптимальности динамического программирования (см. п.7.1). Применительно к данному алгоритму этот принцип формулируется так. При заданном частичном решении значения остальных переменных должны выбираться так, чтобы дополнение этого решения было оптимальным. При отсутствии таких значений свободных переменных или в случае, когда оптимальные значения этих переменных приводят к худшему значению целевой функции по сравнению с текущей оценкой, не существует оптимального решения, содержащего заданное частичное решение. Пусть на любой итерации n известна нижняя оценка Кроме того, на каждой итерации формируется основной список задач, в котором каждой задаче соответствует определенное частичное решение. На итерации 1 основной список содержит две задачи, полученные в результате выбора Существует несколько способов, которые можно применить, чтобы установить, существует ли какое-либо дополнение решения, дающее значение ц.ф., превышающее текущую нижнюю оценку. Например, если задача содержит ограничение - 1x1 + 2x2-5x3 + 4x4-3x5 £ 0, (4.4.4) то не существует дополнения частичного решения x1 = 1, x3 = 0, x4 = 1, удовлетворяющего условию (4.4.4). Предположим, что целевая функция описывается выражением z0 = 1x1 + 2x2 + 4x3 + 3x4-1x5 (4.4.5) и Тогда, чтобы улучшить значения 1x1 + 2x2 + 4x3 + 3x4-1x5 ³ Ни одно дополнение частичного решения x3 = 0, x5 = 0 не является допустимым по условию (4.4.6). Формализуем наши рассуждения следующим образом. При заданном частичном решении
где I - множество индексов переменных частичного решения, N\I - множество индексов свободных переменных, N - множество всех индексов переменных, и каждой переменной xj частичного решения поставлено в соответствие определенное значение, входящее в знак ∑ в правой части (4.4.7), а коэффициенты в ограничении при i = 0 (ц.ф.) равны a0 j = - cj, a b0 = -
Как видим, левая часть (4.4.8) представляет собой суму всех отрицательных коэффициентов при свободных переменных. Если эта сумма больше правой части неравенства, то даже, полагая Другим важным моментом является то, что при заданном частичном решении иногда удается определить, какое значение должна иметь свободная переменная при любом допустимом дополнении и в случае, когда значение целевой функции превосходит текущую нижнюю оценку. В частности, для любой свободной переменной
Справедливость этого утверждения можно проверить на примере задачи, содержащей такое ограничение: 2x1 + (-2)x2 + 3x3-2x4 £ 0. (4.4.10) Нетрудно убедиться, что при частичном решении x1 = 1, x2 = 1 в любом дополнении должно выполняться условие x3 = 0, так как только тогда будет выполняться ограничение (4.4.10). Проверки (4.4.8),(4.4.6) можно применять также и к составным ограничениям, образованным в виде линейной положительной комбинации исходных ограничений (4.4.2), а именно:
где Приведем пример использования таких сложных ограничений. Рассмотрим условия: - x1 - x2-2x3 £ -1; 3x2-3x4 + 3x5 £ 0; 2x3 + 3x4-3x5 £ 0. При частичном решении x1 = 0 применение проверки (4.4.8) к каждому ограничению в отдельности не указывает на недопустимость дополнения. Однако можно убедиться, что применение (4.4.8) к сумме этих ограничений: - x1 + 2x2 £ -1 при x1 = 0 сразу показывает, что допустимого дополнения не существует. Аналогичным образом, применение проверки (4.4.9) к сумме этих ограничений при x1 = 1 дает, что в любом допустимом дополнении x2 = 0. Описание аддитивного алгоритма. Пусть уже проведено k итераций и найдена текущая нижняя оценка оптимального решения П е р в ы й ш а г. Закончить вычисление, если основной список задач пуст. В противном случае выбрать очередную задачу из основного списка и вычеркнуть ее из него. В т о р о й ш а г. Если можно найти свободные переменные, которые должны иметь определенные значения при любом дополнении, когда значение ц.ф. превосходит Т р е т и й ш а г. Если расширенное частичное решение является полным (т.е. содержит все n переменных), зафиксировать его и вернутться к первому шагу. В противном случае перейти к четвертому шагу. Ч е т в е р т ы й ш а г. Выбрать любую свободную переменную Замечание. При прекращении работы алгоритма в случае, когда зафиксировано допустимое решение, дающее значение ц.ф. Пример 4.5. Рассмотрим задачу булева программирования максимизировать при ограничениях
Первая итерация. П е р в ы й ш а г. Примем В т о р о й ш а г. Найдем некоторые свободные переменные ( Затем проверяется допустимость этого решения при i = 0, 1, 2, которая в данном случае сводится к проверке допустимости его по условиям (2) - (4). Итак, фиксируем этт решение Вторая итерация. П е р в ы й ш а г. Выберем из списка задачу 2, где
или В т о р о й ш а г. Применение условий (4.4.9) при i = 0, 1, 2 не приводит к расширению частичного решения Ч е т в е р т ы й ш а г. Выберем свободную переменную Третья итерация. П е р в ы й ш а г. Выберем из списка задачу 3. Проверка по условиям (4.4.9) при i = 0, 1 не позволяет определить обязательные значения исходных переменных. Поэтому переходим к ограничению (3) i = 2. Проверка условия (4.4.9) для ограничения (3) дает
Рис. 4.9. Расширяя соответствующим образом текущий частичное решение ( Поэтому второй шаг заканчивается, и возвращаемся к первому шагу очередной итерации, положив Четвертая итерация. П е р в ы й ш а г. Выберем задачу 4, в которой
Структурная схема алгоритма для этого примера приведена на рис.4.9. Как следует из анализа решения задачи 3, всякий раз, когда проверка (4.4.9) приводит к расширению частичного решения, может оказаться выгодным повторение этой процедуры по всем ограничениям i = 0,1,2,.на основе расширенного частичного решения. Замечание. 1. Одним из основных отличий между аддитивним методом Балаша и методом ветвей и границ является то, что в аддитивном алгоритме требуется выполнение только операций сложения и вычитания (не требуются операции умножения и деления). Выбор на первом и четвертом шагах может основываться на информации, полученной из оптимального решения задачи ЛП (4.4.1),(4.4.2) при условиях 0 £ 2. Второе отличие следующее: каждое частичное решение удовлетворяет условию целочисленности, но в отличие от метода ветвей и границ, может не удовлетворять линейным неравенствам (4.4.2). 3. Применяя эффективные правила выбора на первом и четвертом шагах с помощью аддитивного алгоритма, можно найти допустимое по всем ограничениям и близкое к оптимальному решение уже на начальных итерациях. 4. Вычислительная сложность алгоритма тесно связана с числом целочисленных переменных. В данном алгоритме объем вычислений определяется прежде всего числом задач, входящих в основной список. Заметим, что дополнительные ограничения на самом деле могут оказаться весьма полезными для уменьшения объема вычислений, и хотя нужно выполнить большее число проверок на втором шаге, гораздо чаще удается возвращаться непосредственно к первому шагу без добавления новых задач в основной список. |
![]() |
||||||||
![]() |
|||||||||
Copyright © 2002-2004 | ![]() |
||||||||
![]() |
![]() |