Лекция 4. Слайды 7.04.14.Лин. прогр-ние .pptx
- Количество слайдов: 46
Линейное программирование
Политическая задача В избирательном округе есть районы трех типов – городские, пригородные и сельские. В этих районах зарегистрировано, соответственно, 100000, 200000 и 50000 избирателей. Чтобы добиться успеха, желательно получить большин ство голосов в каждом из трех регионов. Известно, что определенные пункты программы могут помочь завоевать голоса определенных групп избирателей. Основными пунктами программы являются строительство до рог, контроль за использованием огнестрельного оружия, сельскохозяйственные субсидии и налог на бензин, направляемый на улучшение работы обществен ного транспорта. Согласно сследованиям, можно оценить, сколько голосов и будет приобретено или потеряно в каждой группе изби рателей, если потратить 1000 долл. на пропаганду по каждому пункту програм мы. Эта информация представлена в табл. 1. Каждый элемент данной таблицы показывает, сколько тысяч избирателей удастся привлечь, потратив 1000 долл. на агитацию в поддержку опре деленного пункта предвыборной программы. Отрицательные элементы отражают потерю голосов. Задача состоит в минимизации суммы, которая позволит заво евать 50000 голосов горожан, 100000 голосов избирателей из пригородных зон и 25 000 голосов сельских жителей.
Пункт программы Строительство дорог Горожа Жители Сельские пригорода жители не 2 5 3 Контроль использования оружия 8 2 5 Сельскохозяйственные субсидии 0 10 Налог на бензин 0 2 10 Таблица 1. Влияние предвыборной политики на настроения избирателей
Например, можно выделить 20 000 долл. на пропаганду строительства дорог, 0 долл. на агитацию в пользу контроля за использованием оружия, 4 000 долл. на пропаганду сельскохозяйственных субсидий и 9 000 долл. на агитацию за введение налога на бензин. При этом удастся привлечь 20 • ( 2) + 0 • (8) + 4 • (0) + 9 • 10 = 50 тысяч голосов горожан, 20 • (5) + 0 • (2) + 4 • (0) + 9 • 0 = 100 тысяч голосов жителей пригородов и 20 • (3) + 0 • ( 5) + 4 • 10 + 9 • ( 2) = 82 тысячи голосов сельских жителей. Таким образом, будет получено ровно необходимое количество голосов в городских и пригородных районах и большее количество голосов в сельской местности. (Получается, что в сельской местности привлечено голосов больше, чем наличное число избирателей!) Чтобы получить эти голоса, придется потратить на пропаганду 20+0+4+9 = 33 тысячи долларов. Вопрос: является ли данная стратегия наилучшей из возможных, т. е. можно ли достичь поставленных целей, потратив на пропаганду меньше денег?
Сформулируем данный вопрос математически. Введем 4 переменные: Х 1– сумма (в тысячах долларов), потраченная на пропаганду программы строительства дорог, Х 2 – сумма (в тысячах долларов), потраченная на агитацию в пользу кон троля за использованием оружия, Х 3 – сумма (в тысячах долларов), потраченная на пропаганду программы сельскохозяйственных субсидий, Х 4 – сумма (в тысячах долларов), потраченная на агитацию за введение налога на бензин. Требование получить не менее 50 ООО голосов избирателей горожан можно записать в виде неравенства 2 x 1 + 8 x 2 + 0 x 3 + 10 x 4 ≥ 50 (1)
5 x 1 + 2 x 2 + 0 x 3 + 0 x 4 ≥ 100 3 x 1 -5 x 2 + 10 x 3 -2 x 4 ≥ 25 (2) (3) Любые значения переменных x 1, x 2, x 3, x 4, удовлетворяющие неравенствам (1)–(3), позволят получить достаточное количество голосов избирателей в каждом регионе.
Чтобы сделать затраты минимально возможными, необходимо минимизировать сумму, затраченную на пропаганду, т. е. минимизировать выра жение x 1 + x 2 + x 3 + x 4 (4) Хотя отрицательная агитация часто встречается в политической борьбе, отрица тельных затрат на пропаганду не бывает. Поэтому следует записать условия x 1≥ 0, x 2≥ 0, x 3≥ 0, x 4≥ 0 (5)
Минимизировать x 1 + x 2 + x 3 + x 4 (6) при условиях: 2 x 1 + 8 x 2 + 0 x 3 + 10 x 4 ≥ 50 (7) 5 x 1 + 2 x 2 + 0 x 3 + 0 x 4 ≥ 100 (8) 3 x 1 5 x 2 + 10 x 3 2 x 4 ≥ 25 (9) x 1, x 2, x 3, x 4≥ 0. (10)
Максимизировать x 1 + x 2 при условиях 4 x 1 - x 2 ≤ 8 2 x 1 + x 2 ≤ 10 5 x 1 -2 x 2≥-2 x 1, x 2≥ 0
Рис. 1. а) Задача линейного программирования (12)–(15); б) Пунктирные линии показывают точки, в которых целевое зна чение равно 0, 4 и 8, соответственно
Определим: m n матрицу А = (aij), m мерный вектор b = (bj), n мерный вектор с = (cj) n мерный вектор x = (xj). Тогда задачу линейного программирования можно запи сать в следующем виде: Максимизировать с. Тх при условиях Ах ≤ b, х ≥ 0. где с. Тх – это скалярное произведение двух векторов, Ах – произведение матрицы и вектора, х ≥ 0 означает, что все компоненты вектора х должны быть неотрицательными. Таким образом, задачу линейного программирования в стандартной форме можно описать с по мощью тройки(A, b, с).
Преобразование задач линейного программирования в стандартную форму 1. Целевая функция минимизируется, а не максимизируется. 2. На некоторые переменные не наложены условия неотрицательности. 3. Некоторые ограничения имеют форму равенств, т. е. имеют знак равенства вместо знака "меньше или равно". 4. Некоторые ограничения неравенства вместо знака "меньше или равно" име ют знак "больше или равно". Преобразовывая задачу линейного программирования L в другую задачу ли нейного программирования L', мы хотим, чтобы оптимальное решение задачи L' позволяло найти оптимальное решение задачи L. Определение. Две зада чи максимизации. L и L' эквивалентны, если для каждого допустимого решения х задачи L с целевым значением z существует соответствующее допустимое ре шениех' задачи L' с целевым значением z, а для каждого допустимого решения х' задачи L' с целевым значением z существует соответствующее допустимое решение х задачи L с целевым значением z. (Это определение не подразумева ет взаимно однозначного соответствия между допустимыми решениями. ) Определение. Задачи минимизации L и задача максимизации L' эквивалентны, если для каждого допу стимого решениях задачи L с целевым значением z существует соответствующее допустимое решение х' задачи L' с целевым значением z, а для каждого допусти мого решениях' задачи L' с целевым значением z существует соответствующее допустимое решение х задачи L с целевым значением z.
1. Превратить задачу минимизации L в эквивалентную ей задачу максими зации ‘. L Пример. Пусть исходная задача имеет вид: Минимизировать -2 x 1+ 3 x 2 при условиях x 1 + x 2 = 7 x 1 - 2 x 2 ≤ 4 x 1 ≥ 0 Если мы поменяем знаки коэффициентов целевой функции, то получим следую щую задачу: Максимизировать при условиях x 1 + x 2 = 7 x 1 - 2 x 2 ≤ 4 x 1 ≥ 0 2 x 1 - 3 x 2
2. Преобразовать задачу линейного программирования, в ко торой на некоторые переменные не наложены ограничения неотрицательности, в задачу, где все переменные подчиняются этому условию. Предположим, что для некоторой переменной xj ограничение неотрицательности отсутствует. Заменим все вхождения переменной xj выражением x'j - x''j и добавим ограничения неот рицательности 'j ≥ 0 и x''j≥ 0. Так, если целевая функция содержит x слагаемое cjxj, то оно заменяется на cjx'j cjx''j , а если ограничение i содержит слагаемое aijxj, оно заменяется на aijx'j - aijx''j. Пример (продолжение нашего примера). Для переменной х1 такое ограничение есть, а для переменной х2 – нет. Заменив переменную х2 двумя переменными х'2 и х''2 и выполнив соответствующие преобразования, получим следующую задачу: Максимизировать 2 х1 З х'2 + З х''2 при условиях х1+ х'2 - х''2 = 7 х1 – 2 х'2 + 2 х''2 ≤ 4 x 1, х'2 , х''2 ≥ 0
3. Преобразовать ограничения равенства в ограничения неравенства. Предположим, что задача линейного программирования содержит ограничение равен ствоf(x 1, x 2, . . . , xn)= b. Поскольку x = у тогда и только тогда, когда справедли вы оба неравенства х ≥ у и x ≤ у, можно заменить данное ограничение равенство парой ограничений неравенств f(x 1, x 2, . . . , xn)≤ b и f(x 1, x 2, . . . , xn)≥ b. Вы полнив такое преобразование для всех ограничений равенств, получим задачу ли нейного программирования, в которой все ограничения являются неравенствами. Пример (продолжение нашего примера). Максимизировать 2 х1 З х'2 + З х''2 при условиях х1+ х'2 - х''2 ≤ 7 х1+ х'2 - х''2 ≥ 7 х1 – 2 х'2 + 2 х''2 ≤ 4 x 1, х'2 , х''2 ≥ 0
(34) (35) (36) (37)
Для задачи, заданной формулами, введя вспомогатель ные переменные x 4, x 5, x 6, получим: Максимизировать 2 х1 3 x 2 + Зх3 при условиях x 4 = 7 – x 1 - x 2 + x 3 x 5 = – 7 + x 1 + x 2 – x 3 x 6 = 4 – x 1 + 2 x 2 – 2 x 3 x 1 , x 2 , x 3 , x 4 , x 5 , x 6 ≥ 0 Переменные, находящиеся в левой части равенств, называются базисными переменными, а переменные, находящиеся в правой части, − небазисными переменными.
Опуская слова "максимизировать" и "при условии", а также "ограничения неотрицательности", и используя для обозначения целевой функции переменную z, получим форму записи, которая называется ка ноническойформой. Каноническая форма задачи линейного програм мирования ыглядит следующим в образом: z = 2 х1 3 x 2 + Зx 3 x 4 = 7 – x 1 - x 2 + x 3 x 5 = – 7 + x 1 + x 2 – x 3 x 6 = 4 – x 1 + 2 x 2 – 2 x 3
Пример. Для канонической формы z = 28 – x 3/6 –x 5/6 – 2 x 6/3 x 1 = 8 + x 3/6 +x 5/6 – x 6 /3 x 2 = 4 – 8 x 3/3 – 2 x 5/3 + x 6 /3 x 4 = 18 – x 3/2 +x 5/2 элементы шестерки имеют вид В = {1, 2, 4}, N = {3, 5, 6}, v = 28,
-1/6 A= b = = 8/3 1/2 -1/6 1/3 2/3 -1/2 0
с = (с3 c 5 c 6) T = (-1/6 -2/3)T , а индексы у A, b и с не обязатель но являются множествами последовательных целых чисел; они зависят от того, какие индексы входят во множества В и N.
Упражнения 1. Если записать задачу линейного программирования (24) (28) в ком актной форме (19} (21), чему будут равны п п, m, A, b и с? 2. Укажите три допустимых решения задачи линейного программирования (24) (28). Чему равно целевое значение для каждого решения? 4. Приведите следующую задачу линейного программирования к стандарт ой форме: н Минимизировать 2 х1 + 7 x 2 при условиях х1 = 7 3 х1 + х2 ≥ 24 х1 ≥ 0 х2 ≤ 0 5. Преобразуйте следующую задачу линейного программирования в кано ическую форму: н Максимизировать 2 х1 6 x 3 при условиях - 2 xi + Х 2 -1 х1 + x 2 x 3 ≤ 7 — Х — 3 x 1 x 2 ≥ 8 2 2 x 2 -x 1 + 2 х2 + 2 х3 ≥ 0 Х , > 0 Х 2 x 1 , х2 , х3 ≥ 0 Какие переменные являются базисными, а какие небазисными? 6. Покажите, что следующая задача линейного программирования является неразрешимой: Максимизировать 3 x 1 2 x 2 при условиях х1 + x 2 ≤ 2 2 x 1 2 х2 ≤ -10 x 1 , х2 ≥ 0 8. Пусть имеется задача линейного программирования общего вида с n переменными и m ограничениями. Предположим, что мы преобразовали ее в стандартную форму. Укажите верхнюю границу числа переменных и ограничений в полученной задаче. 9. Приведите пример задачи линейного программирования, для которой до пустимая область является неограниченной, но оптимальное целевое зна чение конечно.
Пример симплекс-алгоритма Рассмотрим следующую задачу линейного программирования в стандартной форме: Максимизировать 3 х1+ х2 + 2 х3 при условиях х1+ х2 + 3 х3 ≤ 30 2 х1+ 2 х2 + 5 х3≤ 24 4 х1+ х2 + 2 х3 ≤ 36 х1 , х2 , х3 ≥ 0.
z = 3 х1+ х2 + 2 х3 х4 = 30 -х1 х2 3 х3 х5 = 24 - 2 х1 - 2 х2 5 х3 х6 = 36 4 х1 х2 2 х3 Система ограничений содержит 3 уравнения и 6 переменных. Рассмотрим базисное решение: установим все (небазисные) переменные правой части равными 0 и вычислим значения (базисных) переменных левой части. Базисным ре шением является(х1, х2, х3, х4, х5, х6 ) = (0, 0, 0, 30, 24, 36) и ему соответствует целевое значение z = (3 • 0) + (1 • 0) + (2 • 0) = 0. В этом базисном реше нии i =bi для всех i ∊ В. x
Решим уравнение относительно х1 и получим x 1 = 9 - x 2/4 - x 3/2 - x 6/4 Для других уравнений поступаем аналогичным образом. В результате получаем задачу линейного программирования в виде: z = 27 + x 2/4 + x 3/2 - 3 x 6/4 x 1 = 9 - x 2/4 - x 3/2 - x 6/4 x 4 = 21 - 3 x 2/4 -5 x 3/2+ x 6/4 x 5 = 6 - 3 x 2/2 - 4 x 3+ x 6/2 Эта операция называется замещением. Как было показано выше, в процессе заме щения выбираются небазисная переменная хе, называемая вводимой переменной, и базисная переменная хk называемая выводимой переменной, которые затем меняются ролями.
Полученная задача эквивалентна исходной задаче. Исходное базисное решение (0, 0, 0, 30, 24, 36) удовлетворяет новым уравнениям и имеет целевое значение 27 + (1/4) • 0 + (1/2) • 0 (3/4) • 36 = 0. В базисном решении, связанном с новой задачей, новые небазисные переменные равны 0. Таким образом, оно имеет вид (9, 0, 0, 21, 6, 0), а соответствующее це левое значение = 27. z Простые арифметические действия позволяют убедиться, что данное решение удовлетворяет уравнениям исходной задачи и при подстановке в целевую функцию имеет целевое значение (3 • 9) + (1 • 0) + (2 • 0) = 27.
Ограничение для x 1 допускает увеличение, не превышающее 18, ограничение для x 4 – не превышающее 42/5, а ограничение для x 5 − не превышающее 3/2. Третье ограничение − самое строгое, следовательно, мы пере писываем его так, чтобы 3 было x в левой части, а x 5 − в правой части. Затем подставляем это новое выражение в другие уравнения и получаем новую эквивалентную задачу: z = 111/4 + x 2/16 x 5/8 11 x 6/16 x 1 = 33/4 x 2/16 + x 5/8 5 x 6/16 x 3 = 3/2 3 x 2/8 x 5/4+ x 6/8 x 4 = 69/4 + 3 x 2/16 +5 x 5/8 x 6/16 С этой системой связано базисное решение (33/4, 0, 3/2, 69/4, 0, 0) с целевым зна чением 11/4. 1 Единственная возможность увеличить целевое значение − увеличить x 2. Имеющиеся ограничения задают верхние границы увеличения 132, 4 и , соответственно (верхняя граница в ограничении равна оо, посколь ку при увеличении x 2 значение базисной переменной x 4 также увеличивается. Следовательно, данное уравнение не налагает никаких ограничений на величину возможного увеличения x 2). Увеличиваем x 2 до 4 и делаем ее базисной.
Решаем уравнение относительно x 2, подставляем полученное выражения в другие уравнения и получаем новую задачу: z = 28 - x 3/6 - x 5/6 - 2 x 6/3 x 1 = 8 + x 3/6 + x 5/6 - x 6/3 x 2 = 4 - 9 x 3/3 -2 x 5/3+ x 6/3 x 4 = 18 - x 3/2 +x 5/2 Таким образом, для данной задачи решение (8, 4, 0, 18, 0, 0) с целе вым значением 8 является оптимальным. 2 Ис ходная адача содержит только переменные х1, х2, х3, з поэтому оптимальное решение имеет вид х1= 8, x 2 = 4, х3= 0, с целевым значением (3 • 8) + (1 • 4) + + (2 • 0) = 28.
Замещение Формализуем процедуру замещения. Процедура PIVOT получает на входе ка ноническую форму задачи линейного программирования, заданную кортежем (N, В, А, b, с, v), индекс k выводимой переменной хk и индекс е вводимой пе ременнойхе. Она возвращает кортеж (N', В', А', b', с', v'), описывающий новую ка ноническую форму. напомним, что элементы ( матриц А и А' являются числами, обратными коэффициентам канонической формы. )
PIVOT (N, В, А, b, с, v, k, e) 1. //Вычисление коэффициентов уравнения //для новой базисной переменной хе 2 be' bk/ake 3 for (для) всех j ∊ N − {е} 4 do aej' akj/ake 5 aek 1/ ake 6 > Вычисление коэффициентов остальных ограничений 7 for (для) всех i ∊ В − {k} 8 do bi' bi − aie bе' 9 for (для) всех j ∊ N − {е} 10 do aij' aij − aie aej' 11 aik' −aieaek'’ 12 > Вычисление целевой функции 13 v' v+ cebe' 14 for (для) всех j ∊ N {e} 15 do cj' cj − ceaej' 16 ci' −ceaek' 17 > Вычисление новых множеств базисных и небазисных переменных 18 N' N-{e}U{k} 19 B' B-{k}U{e} 20 return (N', В', А', b', с', v')
Формальный симплекс-алгоритм Теперь мы готовы формализовать симплекс алгоритм, который уже продемонстрировали на примере. Этот пример был очень удачным, однако нам еще необходимо ответить на следующие вопросы. Как определить, что задача линейного программирования является разре шимой? Что делать, если задача линейного программирования является разрешимой, однако начальное базисное решение не является допустимым? Как определить, что задача линейного программирования является неогра ниченной? Как выбирать вводимую и выводимую переменные? Предположим, что у нас есть процедура INITIALIZE_SIMPLEX(A, b, с), которая получает на входе задачу линейного программирования в стандартной форме, т. е. матрицу А = (аij) раз мером m n т мерный вектор b = (bi) и n мерный вектор с = (ci). Если задача неразрешима, процедура возвращает соответствующее сообщение и завершается. В противном случае она возвращает каноническую форму, начальное базисное решение которой является допустимым. Процедура SIMPLEX получает на входе задачу линейного программирования в стандартной форме, описанной выше. Она возвращает n мерный вектор х = (xj), который является оптимальным решением задачи линейного программи рования, заданной формулами.
Simplex (A, B, С) 1. (N, В, А, b, с, v) INITIALIZE_SIMPLEX(A, b, с) 2. while (пока) cj > 0 для некоторого индекса j ∊ N 3. do выбрать индекс е ∊ N, для которого се > 0 4. for (для) каждого индекса i ∊ В 5. do if aie > 0 6. then Di b/aie 7. else Di оо 8. Выбираем индекс k ∊ В, который минимизирует Di 9. if Di = оо 10. then return "Задача неограниченна“ 11. else (N, B, A, b, c, v) PIVOT(N, В, А, b, с, v, k, e) 12. for i to n 13. do if i∊ В 14. then xi ' bi 15. else xi ' 0 16. return (х1' , x 2', . . . , xn’)
Упражнения. 1. Решите следующую задачу линейного программирования, используя про цедуру SIMPLEX: Максимизировать 18 x 1 +12. 5 x 2 при условиях x 1 +x 2 ≤ 20 x 1 ≤ 12 x 2 ≤ 16 x 1 , x 2 ≥ 0 2. Решите следующую задачу линейного программирования, используя про цедуру SIMPLEX: Максимизировать − 5 x 1 − 3 x 2 при условиях x 1 −x 2 ≤ 1 2 x 1 +x 2 ≤ 2 x 1 , x 2 ≥ 0 3. Решите следующую задачу линейного программирования, используя про цедуру SIMPLEX: Минимизировать x 1 + x 2 + x 3 при условиях 2 x 1 + 7. 5 x 2 + 3 x 3 ≥ 10000 20 x 1 + 5 x 2 + 10 x 3 ≥ 30000 x 1 , x 2 , x 3 ≥ 0
Двойственность При определенных предположениях процедура SIMPLEX за вершается. Однако еще не доказано, что она действительно находит оптимальное решение задачи линейного программирования. Чтобы сделать это, введем новое мощное понятие − двойственность (дуальность) задач линейного программи рования (linear programming duality). Двойственность − очень важное свойство. В задачах оптимизации определе ние двойственной задачи практически всегда сопровождается открытием алго ритма с полиномиальным временем выполнения. Двойственность также является очень мощным средством при доказательстве того, что решение действительно является оптимальным. Для задачи максимизации определяется связанная с ней задача минимизации, причем такая, что эти две задачи имеют одно и то же оптимальное значение. Опишем, как для заданной задачи линейного программирования, в которой требуется максимизировать целевую функцию, сформулировать двойственную (dual) задачу линейного программирования, в которой целевую функцию требу ется минимизировать и оптимальное значение которой идентично оптимальному значению исходной задачи. При работе с двойственными задачами исходная зада ча называется прямой (primal).
Для задачи линейного программирования в стандартной форме определим двойственную задачу следующим образом: Чтобы получить двойственную задачу для задачи максимизации, нужно изменить максимизацию на ми нимизацию, поменять роли коэффициентов правых частей и целевой функции и заменить неравенства "меньше или равно" на "больше или равно". С каждым из m ограничений прямой задачи в двойственной задаче связана переменная уi, а с каждым из n ограничений двойственной задачи связана переменная прямой задачи xj. Например, для рассмотренного ранее примера симплекс алгоритма двойственная задача выглядит следующим образом: Минимизировать З 0 у1 + 24 у2 + 36 у3 (прямая: Максимизировать 3 х1+ х2 + 2 х3 при условиях при условиях у1 + 2 у2 + 4 у3 ≥ 3 х1+ х2 + 3 х3 ≤ 30 у1 + 2 у2 + у3 ≥ 1 2 х1+ 2 х2 + 5 х3≤ 24 3 у1 + 5 у2 + 2 у3≥ 2 4 х1+ х2 + 2 х3 ≤ 36 у1, у2, у3 ≥ 0 х1, х2, х3 ≥ 0 ) Отметим, что оптимальное значение двойственной зада чи линейного программирования всегда равно оптимальному значению прямой задачи. Более того, симплекс алгоритм неявно решает одновременно обе задачи, прямую и двойственную, тем самым обеспечивая доказательство оптимальности
Упражнения 1. Сформулируйте двойственную задачу для задачи, приведенной в упраж нении 1. 2. Предположим, у нас есть задача линейного программирования, не при веденная к стандартной форме. Можно получать двойственную задачу в два этапа: сначала привести исходную задачу к стандартной форме, а затем формулировать двойственную. Однако было бы удобно иметь возможность сразу формулировать двойственную задачу. Объясните, ка ким образом, имея произвольную задачу линейного программирования, можно получить двойственную задачу непосредственно. 3. Покажите, что задача, двойственная к двойственной задаче линейного программирования, является прямой задачей.
Начальное базисное допустимое решение Cначала покажем, как проверить, является ли задача ли нейного программирования разрешимой, и как в случае положительного ответа получить каноническую форму, базисное решение которой является допустимым. В заключение мы докажем основную теорему линейного программирования, в ко торой утверждается, что процедура implex всегда дает правильный результат. S Поиск начального решения В алгоритме Simplex предполагалось, что у нас есть некая процедура Initialize^ Simplex, которая определяет, имеет ли задача линейного программирования до пустимые решения, и в случае положительного ответа возвращает каноническую форму, имеющую допустимое базисное решение. Опишем данную процедуру. Даже если задача линейного программирования является разрешимой, началь ное базисное решение может оказаться недопустимым. Рассмотрим, например, следующую задачу: Максимизировать 2 x 1− 3 x 2 при условиях 2 x 1 −x 2 ≤ 2 x 1 − 5 x 2 ≤ − 4 x 1 , x 2 ≥ 0
Если преобразовать эту задачу в каноническую форму, базисным решением будет х1 = 0, x 2 = 0. Это решение нарушает второе ограничение и, следователь но, не является допустимым. Таким образом, процедура INITIALIZE_SIMPLEX не может сразу возвратить эту очевидную каноническую форму. На первый взгляд, вообще неясно, имеет ли данная задача допустимые решения. Чтобы определить, существуют ли они, можно сформулировать вспомогательную задачу линейного программирования (auxiliary linear program). Для этой вспомогательной задачи мы сможем (причем достаточно легко) найти каноническую форму, базисное ре шение которой является допустимым. Более того, решение этой вспомогательной задачи линейного программирования позволит определить, является ли исходная задача разрешимой, и если да, то обеспечит допустимое решение, которым можно инициализировать процедуру SIMPLEX.
Теперь опишем стратегию поиска начального базисного допустимого решения задачи линейного программирования L, заданной в стандартной форме: Initialize_Simplex(A, b, с) Пусть k — индекс минимального коэффициента bi if bk ≥ 0 > Допустимо ли начальное базисное решение? then return ({1, 2, . . . , n}, {п + 1, n + 2, . . . , п + m}, А, b, с, 0) Образуем Laux путем добавления –х0 к левой части каждого уравнения и задаем целевую функцию равной –х0
Лекция 4. Слайды 7.04.14.Лин. прогр-ние .pptx