русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

СИМПЛЕКС-МЕТОД РЕШЕНИЯ ЗАДАЧ ЛИНЕЙНОГО ПРОГРАММИРОВАНИЯ


Дата добавления: 2014-05-01; просмотров: 1393; Нарушение авторских прав


Алгоритм поиска опорного и оптимального решения

Геометрическая интерпретация, которой мы пользовались при решении задач линейного программирования, перестает быть пригодной для этой цели при числе свободных переменных n-m , а затруднительна уже при n-m=3. Для нахождения решения задачи линейного программирования в общем случае (при произвольном числе свободных переменных) применяются не геометрические, а вычислительные методы. Из них наиболее универсальным является так называемый симплекс-метод.

Идея симплекс-метода относительно проста. Пусть в задаче линейного программирования иметься n переменных и m независимых линейных ограничений, заданных в форме уравнений. Мы знаем, что оптимальное решение (если оно существует) достигается в одной из опорных точек (вершин ОДР), где, по крайней мере, k=n-m из переменных равны нулю. Выберем какие-то переменных в качестве свободных и выразим через них остальные m базисных переменных. Пусть, например, в качестве свободных выбраны первые k=n-m переменных х12,…,хk, а остальные m выражены через них:

(5.1)

Попробуем, что будет, если положить все свободные переменные х12,…,хk равными нулю:

При этом мы получим:

Это решение может быть допустимым или недопустимым. Оно допустимо, если все свободные члены βk+1, βk+2,…, βn неотрицательны. Предположим, что это условие выполнено. Тогда мы получили опорное решение. Но является ли оно оптимальным? Может быть да, а может быть и нет. Чтобы проверить это, выразим максимизируемую линейную функцию L через свободные переменные х12,…,х k:

(5.2)

Очевидно, что при х12=….=хk=0, L=γ0. Посмотрим, не можем ли мы улучшить решение, т.е. увеличить функцию L, увеличивая какие-нибудь из переменных х12,…,х k (уменьшить мы их не можем, так как все они равны нулю, а отрицательные значения переменных недопустимы). Если все коэффициенты γ1, γ2, …, γk в формуле (5.2) отрицательны, то, увеличивая какие-то из переменных х12,…,х k сверх нуля, мы не можем увеличить L; следовательно, найденное нами опорное решение является оптимальным. Если же среди коэффициентов γ1, γ2, …, γk в формуле (5.2) есть положительные, то, увеличивая некоторые из переменных х12,…,х k, а именно – те, коэффициенты при которых положительны, мы можем улучшить решение, т.е. увеличить L.



Пусть, например, коэффициент γ1 в формуле (5.2) положителен Значит, есть смысл увеличить х1, т.е. перейти от данного опорного решения к другому, где переменная х1 не равна нулю, а вместо нее равна нулю какая-то другая. Увеличение х1 «полезно» для линейной функции L, делает ее больше. Однако увеличивать х1 надо осторожно, так чтобы не стали отрицательными другие переменные хk+1k+2,…,хn, выраженные через свободные переменные, в частности, через х1 формулами (5.1).

Посмотрим, опасно ли для переменных хk+1k+2,…,хn увеличение х1, т.е. может ли оно сделать их отрицательными? Да, опасно, если коэффициент при х1 в соответствующем уравнении отрицателен. Если среди уравнений (5.1) нет уравнения с отрицательным коэффициентом при х1, то величину х1 можно увеличивать беспредельно, а, значит, линейная функция L не ограничена сверху и оптимального решения ОЗЛП не существует.

Допустим, что это не так и среди уравнений (5.1) есть такие, в которых коэффициент при х1 отрицателен. Для переменных, стоящих в левых частях этих уравнений, увеличение х1 опасно – оно может сделать их отрицательными.

Возьмем одну из таких переменных хi и посмотрим, до какой степени можно все же увеличить х1 пока переменная хi не станет отрицательной? Выпишем -е уравнение из системы (5.1):

Здесь свободный член βi ≥ 0, а коэффициент αi1 отрицателен. Легко понять, что если мы оставим х2=…=хk=0, то х1 мы можем увеличивать только до значения, равного - βi/ αi1 , а при дальнейшем увеличении х1 переменная хi станет отрицательной.

Выберем ту из перемeнных хk+1k+2,…,хn , которая раньше всех обратится в нуль при увеличении х1, т.е. ту, для которой величина - βi/ αi1 меньше всего. Пусть такая «наиболее угрожаемая» переменная будет хr . Тогда имеет смысл «переразрешить» систему уравнений (5.1) относительно других базисных переменных, выведя из числа свободных переменных х1 и переводя вместо нее в группу свободных переменных хr . Действительно, мы хотим перейти от опорного решения, задаваемого равенством х12=….=хk=0 , к опорному решению, в котором уже х1 ≠0, х2=….=хkr=0. Первое опорное решение мы получили, положив равными нулю все прежние свободные переменные х12k; второе мы получим, если обратим в нуль все новые свободные переменные х2,…,хkr. Базисными переменными при этом будут х1, хk+1,…, хr-1, xr+1, …, xn.

Предположим, что уравнения типа (5.1) для нового набора базисных и свободных переменных составлены. Тогда можно выразить через новые свободные переменные и линейную функцию L. Если все коэффициенты при переменных в этой формуле отрицательные, то мы нашли оптимальное решение: оно получится, если все свободные переменные положить равными нулю. Если среди коэффициентов при переменных есть положительные, то процедура улучшения решения продолжается: система вновь переразрешается относительно других базисных переменных, и так далее, пока не будет найдено оптимальное решение, обращающее функцию L в максимум.

Проследим описанную процедуру постепенного улучшая решения ОЗЛП на конкретном примере.

Пример. Имеется задача линейного программирования с ограничениями-неравенствами:

(5.3)

Требуется максимизировать линейную функцию

Решение.Приводя неравенства к стандартному виду (≥0) и вводя добавочные переменные у123, переходим к условиям-равенствам:

(5.4)

Число переменных n=7 на 4 превышает число уравнений m=3. Значит, четыре переменных могут быть выбраны в качестве свободных.

Попробуем выбрать в качестве свободных переменных х1234 и положить их равными нулю. При этом мы сразу получим опорное решение: х1234 = 0; у1=2;у2=5;у3=7.

При этих значениях переменных L=0.

Посмотрим, является ли это решение оптимальным? Нет! Потому что в выражении линейной функции L коэффициент при х3 положителен. Значит, увеличивая х3 , можно увеличить L.

Попробуем увеличить х3 . Проследим по уравнению (5.4), опасно ли это для других переменных? Да, опасно для у1 и у2 – в оба эти уравнения переменная х3 входит с отрицательным коэффициентом, значит, при увеличении х3 соответствующие переменные у1 и у2 могут стать отрицательными.

Посмотрим, какая из этих переменных у1 или у2 является наиболее «угрожаемой», какая раньше обратится в нуль при увеличении х3. Очевидно, у1: она станет равной нулю при х3=1, а величина у2 – только при х3=5.

Поэтому выбираем переменную у1 и вводим ее в число свободных вместо х3. Чтобы «переразрешить» систему (5.4) относительно новой базисной переменной х3:

.

Это выражение подставим вместо х3 во второе уравнение, получим

Что касается третьего уравнения, то оно, как не содержащее х3 не изменится. Итак, мы привели систему (5.4) к виду:

(5.5)

со свободными переменными х1214 и базисными х323.

Выразим линейную функцию L через новые свободные переменные:

L= -5х1+5х121+2

или

L= х21+2 (5.6)

Положим теперь свободные переменные равными нулю. Линейная функция L станет равной 2. Это уже лучше, чем прежнее значение L=0. Но является ли это решение оптимальным? Все еще нет, так как коэффициент при х2 в выражении (5.6) положительный. Итак, будем увеличивать х2. Посмотрим, для какой из переменных, стоящих в левых частях системы (5.5) это может быть «опасно». Только для у2 (в первом уравнении х2 входит с положительным коэффициентом, а в третьем совсем не входит).

Итак, обменяем местами переменные х2 и у2 – первую из числа свободных, а вторую – введем. Для этого разрешим второе уравнение (5.5) относительно х2 и подставим это х2 в первое уравнение. Получим еще один вид системы (5.4):

(5.7)

Выразим L через новые свободные переменные:

L= -3х1-2у21+2х4+8-у1+2

или

L= -3х1- 2у2-2х4+ 10. (5.8)

Полагая х1124 =0, получим L=10.

Является ли это решение оптимальным? На этот раз – да, так как коэффициенты при всех свободных переменных в выражении (5.8) отрицательны.

Итак, оптимально решение ОЗЛП найдено:

При таких значениях переменных линейная функция L принимает максимальное значение:

Заметим, что в рассмотренном примере нам не пришлось искать опорного решения: оно сразу же получилось, когда мы положили свободные переменные равными нулю. Это объясняется тем, что в уравнениях (5.4) все свободные члены были неотрицательны и, значит, первое же попавшееся решение оказалось опорным. Если же окажется не так, можно будет прийти к опорному решению с помощью такой же процедуры обмена местами некоторых базисных и свободных переменных, переразрешая уравнения до тех пор, пока свободные члены не станут неотрицательными. Как это делается, мы увидим в дальнейшем (смотри параграф 6).



<== предыдущая лекция | следующая лекция ==>
ЗАДАЧА ЛИНЕЙНОГО ПРОГРАММИРОВАНИЯ С ОГРАНИЧЕНИЯМИ НЕРАВЕНСТВАМИ. ПЕРЕХОД ОТ НЕЕ К ОЗЛП И ОБРАТНО | Табличный метод замены базисных переменных.


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.172 сек.