ПОВЫШЕНИЕ ЭФФЕКТИВНОСТИ МУЛЬТИПЛЕКАТИВНОГО АЛГОРИТМА СИМПЛЕКС-МЕТОДА А. Б. Хакимова Puma_home@mail.ru Содержание Целью данной работы является доказательство перспективности дальнейшего развития предлагаемого алгоритма для решения задач линейного программирования путем его сравнения с мультипликативным алгоритмом симплекс-метода. Доказано, что алгоритм позволяет уменьшить по кубическому закону число арифметических операций, необходимых для решения задачи линейного программирования, уменьшить размерность и число ненулевых элементов мультипликаторов. Приводится теоретическое и экспериментальное сравнение эффективности алгоритмов. При построении предлагаемого алгоритма использован феноменологический подход, приведенный В.М.Лачиновым, А.О.Поляковым в работе [1]. С феноменологической и конструктивной точек зрения предлагаемый подход кратко опишем так. В проблемной области генерируются ограничения задачи, последовательно формируя вспомогательные задачи линейного программирования, содержащие соответственно 1,..,k,.. ограничений. Предлагаемый алгоритм последовательно выполняет построение описаний всего множества решений вспомогательных задач следующим образом. На итерации k алгоритма даны описание всего множества решений вспомогательной задачи, построенное на предыдущей итерации, и сгенерированное k-ое ограничение. Требуется перейти к описанию всего множества решений k-ой вспомогательной задачи. Сгенерированное ограничение меняет контекст описания всего множества решений вспомогательной задачи и инициирует переход к описанию k-ой вспомогательной задачи. Связь между ограничениями вспомогательной задачи отображается в системе ограничений. Система ограничений отображается в описании всего множества решений вспомогательной задачи. Таким образом, переход к описанию k-ой вспомогательной задачи это процесс изменения контекста и связей между ограничениями вспомогательной задачи. Остается привести построения описания всего множества решений вспомогательной задачи и перехода к следующему описанию. Предлагаемый подход к повышению эффективности мультипликативного алгоритма симплекс-метода раскрывается путем поэтапного решения следующих задач: 1. Построение модели алгоритма для ручного счета в строчной форме записи. Описание терминологии и семантики предлагаемого алгоритма, уменьшения размерности задач линейного программирования и построения решения, отличного от найденного решения. 2 . Описание методологии решения задач вручную путём решения задач на зацикливание симплекс-метода и уменьшение размерности, а также на построение решения, отличного от найденного решения. 3. Описание известного мультипликативного алгоритма симплекс-метода, который выбран в качестве аналога для последующего теоретического сравнения с предлагаемым алгоритмом. 4. Построение предлагаемого мультипликативного алгоритма в терминах мультипликативного алгоритма симплекс-метода. 5. Доказательство, что предлагаемый алгоритм позволяет уменьшить по кубическому закону число арифметических операций, необходимых для решения задачи линейного программирования. 6. Экспериментальное сравнение эффективности алгоритмов, которое подтверждает теоретическое сравнение. При изложении материала принят модельный подход, в основе которого лежит триада: принципиальная модель, диалектика развития принципиальной модели до реализуемой модели, реализуемая модель. Во-первых, такой подход позволит, не вдаваясь в детали, сосредоточить внимание на сравнении моделей. Во-вторых, сделать решающие выводы относительно принятых решений. В-третьих, самое главное, построить реализуемые модели. В данной работе различие принципиального и реализуемого алгоритмов будет опираться на следующий критерий: на каждой итерации принципиального алгоритма все вычисления могут осуществляться без ошибок округления. Следует отметить, что с точки зрения модельного подхода любой современный язык программирования имеет <вкус> и <запах> своих предшественников, так и предлагаемый алгоритм неизбежно несет черты алгоритма симплекс-метода. Пусть ![]() ![]() ![]() ![]() ![]() (1) ![]() На каждой итерации предлагаемого алгоритма выполняется построение описания всего множества решений вспомогательной задачи, число которых равно числу ограничений. Каждая задача учитывает одно ограничение и во всех последующих задачах, ограничения, учтенные в предыдущих задачах, выполняются тождественно. Допустим, что (1) имеет решение. Тогда, вводя скалярную переменную ![]() ![]() ![]() (2) ![]() Из (2) следует, что множество ![]() ![]() ![]() ![]() ![]() ![]() Пусть ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Если ![]() (3) ![]() (4) ![]() если ![]() ![]() (5) ![]() (6) ![]() если ![]() (7) ![]() если ![]() (8) ![]() ![]() Пусть ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Пусть для некоторого значения ![]() ![]() ![]() ![]() Шаг 1. Построить уравнение связи (7) ![]() Подстановкой ![]() ![]() ![]() . Если ![]() ![]() Иначе (3) достаточно умножить на ![]() Шаг 2. Провести анализ уравнения связи следующим образом: Если ![]() ![]() ![]() ![]() Если ![]() ![]() ![]() Если ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Если ![]() ![]() ![]() Если ![]() ![]() (10) ![]() Шаг 3. Положить ![]() Шаг 4. Выразить ![]() ![]() ![]() ![]() Шаг 5. Если ![]() ![]() Шаг 6. Вычислить индекс ![]() ![]() Шаг 7. Провести анализ уравнения связи (11) ![]() ограничения ![]() Если ![]() ![]() Если ![]() ![]() ![]() Если ![]() ![]() (12) ![]() . Шаг 8. Выразить ![]() ![]() ![]() ![]() ![]() Примечание 1. Приведенная модель алгоритма допускает модификацию, которая заключается в отказе от проверки условия ![]() Примечание 2. Величину ![]() ![]() (13) ![]() . Примечание 3. В случае ограничений неравенств ![]() (14) ![]() . Примечание 4. Пусть ![]() ![]() ![]() ![]() ![]() ![]() ![]() Алгоритм предназначен для ручного счета, поэтому при описании примеров решения задач основной упор будет сделан на упрощении описания ![]() Пример 1. На зацикливание алгоритма симплекс-метода [1, стр. 33]. ![]() ![]() ![]() ![]() ![]() ![]() В соответствии с (5)-(6) начнем с описания ![]() Из соотношения (13) ![]() ![]() ограничения ![]() ![]() ![]() ![]() Из соотношения (13) ![]() ![]() ограничения ![]() ![]() ![]() ![]() ![]() Из соотношения (13) ![]() ![]() ограничения ![]() ![]() ![]() ![]() ![]() ![]() Из уравнения связи ![]() ограничения ![]() ![]() ![]() ![]() ![]() ![]() Из уравнения связи ![]() ограничения ![]() ![]() ![]() ![]() ![]() ![]() ![]() Из уравнения связи ![]() Следует, что ![]() ![]() ![]() ![]() Из соотношения (13) ![]() ![]() ограничения ![]() ![]() ![]() ![]() ![]() ![]() ![]() Отсюда следует, что ![]() ![]() Пример 2. С бесконечным количеством решений. ![]() ![]() ![]() ![]() В соответствии с (3)-(4) начнем с описания ![]() Из соотношения (13) ![]() ![]() ограничения ![]() ![]() ![]() ![]() ![]() Из соотношения (13) ![]() ![]() ограничения ![]() ![]() ![]() и подставим в описание. В результате получим ![]() ![]() ![]() Отсюда ![]() ![]() Для нахождения решения, отличного от найденного, решим задачу линейного программирования с произвольным критерием оптимальности, например ![]() при ограничениях ![]() ![]() ![]() ![]() Подставляя решение этой задачи ![]() ![]() ![]() Вычислительный опыт решения задач ЛП показал, что практичнее оказывается алгоритм, в котором для текущего базисного решения нет строгой обязательности выполнения условий задачи ЛП. Такой алгоритм более гибок и в тех случаях, когда найденный оптимальный базис используется в качестве начального для той же задачи с изменёнными условиями, не намного сложнее обычного и отличается только правилом выбора выводимой из базиса переменной. Обычно в литературе описание модели мультипликативного алгоритма (МА) симплекс-метода, связывают с выделением допустимой базисной системы ограничений следующим образом [2]. Рассмотрим задачу (15) ![]() Пусть имеется базис ![]() ![]() ![]() ![]() ![]() ![]() ![]() Здесь ![]() ![]() Шаг 1. Вычислить текущее двойственное решение вектора оценок строк по формуле: (16) ![]() ![]() Шаг 2. Определить ведущий столбец, столбец для ввода в базис: ![]() (17) ![]() (18) ![]() Если ![]() Шаг 3. Разложить ведущий столбец по формуле: (19) ![]() если номер определялся из (3), и по формуле: (20) ![]() если номер ![]() ![]() ![]() ![]() Шаг 4. Вычислить номер ведущей строки из соотношения: (21) ![]() где ![]() Шаг 5. Пересчитать базисное решение: (22) ![]() ![]() пересчитать обратную базисную матрицу по формуле: (23) ![]() где ![]() ![]() Шаги с 1 по 5 повторяются до тех пор, пока не будет достигнут оптимум, или пока на шаге 4 не выяснится, что ![]() Для упрощения теоретического сравнения эффективности алгоритмов выделим описание первого этапа - этапа построения описания ![]() (24) ![]() двойственную задаче (14), и выберем параметр с > 0 , удовлетворяющий условию ![]() ![]() Очередная итерация этапа 1 (построение описания ![]() Шаг 0. Определить номер ведущей строки из соотношения: ![]() Если ![]() ![]() ![]() вычислить обратную базисную матрицу по формуле: ![]() положить ![]() ![]() ![]() вычислить обратную базисную матрицу по формуле: ![]() где ![]() ![]() положить ![]() Шаг 1. Определить ведущий столбец, Столбец для ввода в базис: ![]() где ![]() ![]() ![]() Шаг 2. Разложить ведущий столбец по формуле (19), если номер ![]() ![]() Шаг 3. Вычислить номер ведущей строки из соотношения: ![]() Если ![]() ![]() ![]() ![]() ![]() ![]() Шаг 4. Пересчитать текущее двойственное решение вектора оценок строк по формуле: ![]() где ![]() ![]() Шаг 5. Пересчитать обратную базисную матрицу по формуле (23). Шаг 6. Если ![]() ![]() ![]() ![]() ![]() положить ![]() Очередная итерация этапа 2 (построение описания ![]() Шаг 1. Определить ведущий столбец, столбец для ввода в базис: ![]() где ![]() ![]() Если ![]() Шаг 2. Разложить ведущий столбец по формуле (19), если номер ![]() Шаг 3. Вычислить номер ведущей строки из соотношения (21). Если ![]() Шаг 4. Пересчитать текущее двойственное решение вектора оценок строк по формуле (25). Шаг 5. Пересчитать базисное решение по формуле (22) и пересчитать обратную базисную матрицу по формуле (23). Шаги с 1 по 5 повторяются до тех пор, пока не будет достигнут оптимум, или пока на шаге 4 не выяснится, что ![]() Примечание. Начальное значение ![]() Сначала докажем, что модели алгоритмов генерируют одинаковую последовательность точек, а, следовательно, конечность и сходимость предлагаемого алгоритма. Затем проведём сравнение чисел арифметических операций, необходимых на очередной итерации моделей алгоритмов. Отсюда и последует вывод, что на очередной итерации, предлагаемого алгоритма, потребуется меньшее число арифметических операций. Доказательство конечности и сходимости непосредственно вытекает из доказательства следующей теоремы. Теорема. Пусть на очередной итерации ![]() Доказательство. Теорема верна тогда и только тогда, когда: ![]() Отсюда, полагая ![]() ![]() Так как ![]() ![]() ![]() Возможны два случая (в первом номер ![]() Случай 1. ![]() Случай 2. ![]() отсюда и вытекает доказательство теоремы. При сравнении предположим, что матрица исходной задачи имеет плотность ненулевых элементов ![]() ![]() ![]() ![]() ![]() Пусть для решения задачи (1) требуется ![]() ![]() В качестве критерия для сравнения эффективности алгоритмов принят показатель быстродействия, вычисляемый из соотношения: ![]() где ![]() ![]() Таблица. Сравнение эффективности алгоритмов
Доказано, что предлагаемый алгоритм позволяет уменьшить по кубическому закону число арифметических операций, необходимых для решения задачи линейного программирования, уменьшить размерность и число ненулевых элементов мультипликаторов. В заключении следует отметить, что задача повышения эффективности алгоритмов линейного программирования является актуальной и занимает немаловажное место не только в решении экономических задач, но и в решении проблемы оптимизации и автоматизации технологических процессов. 1. Лачинов В.М., Поляков А.О. Инфординамика. Изд. СПбГТУ, СПб, 1999. 2. В. Н. Шевченко, Н. Ю. Золотых. Линейное и целочисленное программирование. // Учебное пособие. - Изд. Нижегородского Государственного Университета.- Нижний Новгород.- 2002. 3. Малков У.Х. Обзор путей повышения эффективности мультипликативного алгоритма симплекс-метода. //В сборнике Математические методы решения экономических задач. М.: Наука.- 1977 - №7.
|