КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Линейное программирование. Под линейным программированием понимается раздел теории экстремальных задач, в котором изучаются задач и минимизации (или максимизации) линейных функций наПод линейным программированием понимается раздел теории экстремальных задач, в котором изучаются задач и минимизации (или максимизации) линейных функций на множествах, задаваемых системами линейных равенств и неравенств. В общем случае задача линейного программирования формулируется следующим образом. Найти вектор х* f(x) при ограничениях (7.18) : a11x1 + … a1nxn . . . . . . . . . . . . . . . . . . . am1x1 + … amnxn am+1x1+… am+1,nxn . . . . . . . . . . . . . . . . . . . (7.18) akx1 + … aknxn ak+1 x1 + … ak+1nxn am+1x1 + … am+1,nxn . . . . . . . . . . . . . . . . . . alx1 + … alnxn xi Каждое из условий-неравенств определяет полупространство, ограниченное гиперплоскостью. Пересечение полупространств образует выпуклый п-мерный многогранник Q. Условия равенства выделяют из n-мерного пространства (п-l) -мерную плоскость, пересечение которой с областью Q дает выпуклый (n-l) -мерный многогранник G. Экстремальное значение линейной формы (если оно существует) достигается в некоторой вершине многогранника. При вырождении оно может достигаться во всех точках ребра или грани многогранника. В силу изложенного для решения задачу линейного программирования теоретически достаточно вычислить значения функции в вершинах многогранника и найти среди этих значений наибольшее или наименьшее. Однако в практических задачах количество вершин области G настолько велико, что просмотр их даже с использованием ЭВМ невозможен. Поэтому разработаны специальные численные методы решения задач линейного программирования, которые ориентируются в основном на две формы записи задач. Каноническая форма задачи линейного программирования: f(x) a11x1 +… a1nxn . . . . . . . . . . . . . . . . . .(7.20) amx1 +… amnxn xi или в матричной форме: (с, х) ? > max(min);(7.21) Ax х Здесь А Задача линейного программирования с однотипными условиями f(x) a11x1 +… a1nxn . . . . . . . . . . . . . . . . . . amx1 +…amnxn или в матричной форме: (с, х) ? > max(min);(7.23) Ax Любую задачу можно привести к каждой из приведенных форм с помощью приемов, описанных ниже. Переход к эквивалентной системе неравенств. Знак неравенства можно поменять на обратный, меняя знаки свободного члена и коэффициентов. Например, ограничение a11x1 +…a1nxn можно заменить условием ‑a11x1 +…‑a1nxn Переход от ограничения - неравенства к равенству Для этого необходимо ввести дополнительную неотрицательную переменную. Так, условие a1x1 +…anxn эквивалентно двум ограничениям: ‑a11x1+…‑a1nxn+xn+1 Представление ограничения-равенства парой неравенств. Ограничение alx1 +… anxn можно представить парой условий: a11x1 +… a1nxn a11x1 +…-a1nxn Переход к неотрицательным переменным Если на знак переменной хi не наложено ограничений, можно заменить ее разностью двух неотрицательных переменных: xi Переход от переменных, ограниченных снизу, к неотрицательным переменным Если переменная ограничена снизу хi Наиболее употребительным численным методом решения задач линейного программирования является симплекс-метод. Идея этого метода состоит в следующем. Отыскиваются некоторая вершина многогранника G и все ребра, выходящие из этой вершины. Далее перемещаются вдоль того из ребер, по которому функция убывает (при поиске минимума), и попадают в следующую вершину. Находят выходящие из нее ребра и повторяют процесс. Когда приходят в такую вершину, в которой вдоль всех выходящих из нее ребер функция возрастает, то минимум найден. Отметим, что, выбирая одно ребро, исключают из рассмотрения вершины, лежащие на остальных траекториях. В результате количество рассматриваемых вершин резко сокращается и оказывается посильным для ЭВМ. Симплекс-метод весьма эффективен и широко применяется для решения задач линейного программирования.
|