Текст
                    Р. ГАБАСОВ,
Ф. М. КИРИЛЛОВА,
А. И. ТЯТЮШКИН
КОНСТРУКТИВНЫЕ
МЕТОДЫ
ОПТИМИЗАЦИИ
Часть I
ЛИНЕЙНЫЕ ЗАДАЧИ
Минск
Издательство «Университетское»
1984


УДК 519.852 Scan AAW Рекомендовано Советом факультета прикладной математики Белгосуниверситета имени В. И. Ленина Рецензент — Б. Н. Пшеничный, доктор физико-математических наук Габасов Р., Кириллова Ф. М., Тятюшкин А. И. Конструктивные методы оптимизации. Ч. 1. Линейные задачи.— Мн.: Изд-во «Университетское», 1984.—214 с. Рассматриваются статические линейные задачи общего вида. Для их решения построены алгоритмы различных классов. В основу прямых точных алгоритмов положен созданный ранее в Минске адаптивный метод. Исследованы модификации метода (конечная, |и-адаптивная, с блочной заменой, многошаговая) с повышенной эффективностью. Разработаны конечные двойственные точные алгоритмы. Построена новая теория безопорных методов. Излагается новый подход к созданию приближенных методов, на итерациях которых допускается нарушение ограничений. Много внимания уделяется алгоритмам решения больших задач. Новые алгоритмы программно реализованы на ЭВМ, приведены результаты массовых численных экспериментов. Рассчитана на специалистов, занятых решением разнообразных прикладных оптимизационных задач. Ее материал можно использовать в учебных целях при подготовке специалистов по прикладной математике. Библиогр. 44 назв. Ил. 4. Табл. 30. Прилож. с. 201—211. 1502000000—004 М 317—84 © Издательство «Университетское», 1984
ОГЛАВЛЕНИЕ Предисловие 4 Глава 1. ОБЩИЕ ЗАДАЧИ ЛИНЕЙНОГО ПРОГРАММИРОВАНИЯ 6 § 1. Адаптивный метод 9 § 2. Вариант метода с пересчетом оценок .... 33 § 3. Мультипликативная форма 37 § 4. Адаптивный алгоритм для канонической задачи 43 § 5. Алгоритм с симплексной нормировкой ... 47 § 6. Конечные модификации 50 § 7. ^-адаптивный метод 74 § 8. Блочный метод 90 § 9. Многошаговые методы 96 § 10. Безопорные методы ПО § 11. Приближенные методы 116 § 12. Особенности реализации алгоритмов линейного программирования на ЭВМ 122 Глава 2. БОЛЬШИЕ ЗАДАЧИ 129 § 1. Задачи с большим числом переменных . . . 131 § 2. Задачи с большим числом ограничений . . . 140 § 3. Декомпозиция опоры канонической задачи . . 147 § 4. Адаптивный метод с декомпозицией опоры . . 161 § 5. Прикладные задачи 169 § 6. Адаптивный метод решения динамической транспортной задачи 174 § 7. Вычислительная технология решения больших задач оптимизации 194 Комментарии к главе 1 197 Комментарии к главе 2 199 Приложение 201 § 1. Программа адаптивного метода с оптимальной заменой элементов опоры 201 § 2. Программа опорного метода 202 § 3. Программа адаптивного метода с декомпозицией опоры 203 Литература 212
ПРЕДИСЛОВИЕ Оптимизационные задачи продолжают оставаться одним из основных объектов прикладной математики. Их значение в течение последних 30—35 лет неуклонно растет. В разные периоды развития современных методов оптимизации на первый план выходили задачи разных типов, но общая тенденция состояла в постоянном расширении класса порожденных практическими запросами моделей и в постепенном переходе от их качественного изучения к построению конструктивных алгоритмов. В качественной теории к настоящему времени разработана весьма общая теория необходимых условий оптимальности. С точки зрения классических методов непрямого типа это означает, что создана база для численных методов решения исключительно широкого класса задач. Однако практика развития современных численных методов математического программирования показывает, что на пути непрямых методов встречаются серьезные трудности. Первым результатом в области методов прямого типа для решения неклассических экстремальных задач, который оказал большое влияние на развитие численных методов оптимизации, явился симплекс-метод линейного программирования. Линейные модели широко используются в качественной и конструктивной теориях всех разделов математики. Они с момента создания симплекс-метода привлекались и для построения численных методов нелинейного программирования [39]. Как показывает опыт работы [34], модели и методы линейного программирования эффективны и в оптимальном управлении. В каждой конкретной сфере приложений линейных моделей возникают специфические особенности. От их полного учета во многом зависит эффективность метода решения всей задачи. Пример [34] и другие применения линейных моделей показывают, что на современном этапе развития методов оптимизации стала весьма актуальной проблема разработки хороших алгоритмов решения специальных задач линейного программирования, имеющих большие размеры. Этой проблеме посвящена и данная монография. При этом основным предметом исследований в ней являются большие задачи, возникающие в теории оптимального управления. В идейном плане монография непосредственно примыкает к работам [5, б, 8], в которых разработан новый подход к конструктивной теории линейного программирования. В данной работе этот подход развивается дальше, дополняется новыми результатами. Методы, разработанные в [5, 6, 8], детализируются и испытываются на ряде численных машинных экспериментов. 4
Теоретическая часть монографии основана на результатах Р. Га- басова, Ф. М. Кирилловой, их сотрудников. Основная работа, связанная с реализацией и испытанием алгоритмов, выполнена А. И. Тя- тюшкиным. Дополнительные эксперименты проведены авторами соответствующих разделов (они перечислены ниже). Кратко о содержании монографии. В гл. 1 сначала детально излагаются некоторые ключевые методы из [5, 6, 8] с тем, чтобы любой программист смог по приведенным описаниям составить программу для ЭВМ. При этом в отличие от [5, 6, 8] приводится несколько форм алгоритмов, удобных для разных целей. Затем разрабатываются обобщения построенных ранее методов, которые оказываются конечными методами решения любой задачи линейного программирования. Приведенные здесь правила выхода из цикла принципиально отличаются от известных [26]. Надо подчеркнуть, что новый материал выходит за рамки теоретических рассуждений. Подобные вопросы в последнее время привлекают внимание многих ученых в связи с их возросшим прикладным значением. В остальной части главы изложены методы, не вошедшие в [5, 6, 8]. К ним, в частности, относятся многошаговые и приближенные методы. Вторая глава посвящена алгоритмам решения больших задач, в которых матрица условий не имеет специальной структуры. Здесь излагается несколько общих принципов построения алгоритмов, не опирающихся на специфику задач. Подобные алгоритмы интересны как дежурные средства для решения (возможно, не всегда лучшим образом) задач, специфика которых пока четко не описана. Как и в гл. 1, основные методы разработаны до деталей, испытаны на многих задачах. Глава завершается изучением нескольких прикладных задач. Монография снабжена приложением, в котором приводятся тексты программ основных алгоритмов. В библиографии указаны лишь цитируемые работы. Данная монография, состоящая из пяти частей, как и ранее изданная в трех частях монография по методам линейного программирования, ни в коей мере не претендует на энциклопедичность. Она содержит описание, обоснование и результаты экспериментальной проверки на ЭВМ разнообразных алгоритмов, основанных на едином подходе к проблемам оптимизации, который был предложен Р. Га- басовым и Ф. М. Кирилловой в начале 70-х годов. В ней отражен многолетний опыт работы участников Минского семинара по конструктивным методам оптимального управления, функционирующего на базе кафедры методов оптимального управления факультета прикладной математики Белорусского ордена Трудового Красного Знамени государственного университета им. В. И. Ленина и лаборатории теории процессов управления Института математики АН БССР. В книгу включены результаты В. С. Глушенкова (гл. 1 § 1 п. 14, §7), О. И. Костюковой (гл. 1 § б, 11, гл. 2 § 6), А. А. Сенько (гл. 1 § 1 пп. 11—13), Фам Тхе Лонга (гл. 1 § 8, 9, гл. 2 § 3 п. 7), Е. И. Шилкиной (гл. 1 § 10). В подготовке рукописи принимали участие А. В. Гуминский и А. В. Покатаев. Всем указанным товарищам авторы выражают искреннюю благодарность. Авторы
Глава 1. ОБЩИЕ ЗАДАЧИ ЛИНЕЙНОГО ПРОГРАММИРОВАНИЯ Линейные оптимизационные задачи известны в некоторых общих формах. С теоретической точки зрения они эквивалентны между собой, поскольку к любой из них может быть сведена каждая линейная задача оптимизации. При численном решении прикладных задач предпочтение отдается той форме, которая ближе к математической модели задачи и не требует дополнительных преобразований, увеличивающих ее размеры. В первые годы развития теории линейного программирования удобной была нормальная (стандартная) форма с ограничениями-неравенствами c'x-^max, Ax^ib, х^О. Численные методы, построенные по образцу симплекс- метода, опираются, как правило, на каноническую форму (с основными ограничениями-равенствами) с'х-+тах, Ах = Ь, х^О. (1) В машинных программах симплекс-алгоритмов любая линейная задача с'х->- max, Л(1)А:^Ь(1), А{2)Х = Ь(2), А^х^Ь^, (2) *(1)^0, *(2)<0, *=(*(1), *(2), *(3)) автоматически сводится к канонической форме (1) несмотря на то, что при этом теряется специфика ограничений (2), увеличиваются размеры задачи. Это, естественно, влияет и на эффективность численного решения. Однако в начальный период развития симплексных методов указанный путь был популярным в силу своей универсальности и того благоприятного факта, что размеры решаемых в то время прикладных задач не служили пре- 6
пятствием для реализации стандартных методов на ЭВМ. В современных машинных программах некоторые частные задачи из (2), например, c'x-^max, Ax = b, 0^.x^:d, уже не сводятся к (1). Для их решения используется модификация симплекс-алгоритма, существенно увеличивающая эффективность алгоритма. Имеются и другие задачи из (2), для которых разработаны соответствующие варианты симплекс-алгоритма. Среди общих задач линейного программирования с середины 70-х годов стала выделяться задача в естественной форме (интервальная задача) с'*->тах, b*^.Ax^b*, d^^-x^d*. Она положена и в основу алгоритмов данной главы. Последние базируются на подходе, развитом в монографии [8]. Напомним, несмотря на то, что в реальных расчетах симплекс-метод проявил себя с наилучшей стороны, с момента возникновения не прекращалась работа по его совершенствованию. Большие усилия были направлены на обоснование новых правил выбора ведущего столбца, разработку блочных способов замены базисной матрицы, при этом неизменным оставался основной элемент метода — базисный план. Итерации по базисным планам обладают определенными достоинствами, но это не единственный метод организации точных методов. Более того, обязательное соблюдение базисности промежуточных планов можно рассматривать как ограничение на метод, не вызванное исходной задачей оптимизации. С начала 70-х годов в Минске ведутся работы по созданию точных методов, не опирающихся на базисные планы. Результаты, полученные до 1977 г., вошли в монографию [5]. Дальнейшие разработки в этом направлении отражены в данной главе. Однако здесь содержатся не только новые теоретические результаты, но и результаты численных экспериментов, объем которых к моменту написания монографии [8] был еще невелик. В настоящее время накоплен достаточно обширный экспериментальный материал как по методам монографии [8], так и по новым методам, включенным в данную книгу. По существу, каждый новый принцип построения метода, каждый новый элемент итерации теперь прохо- 7
дит проверку в численном эксперименте. Работа эта очень трудоемкая, но, по нашему мнению, чрезвычайно актуальная на современном этапе развития методов оптимизации. Многочисленные теоретические работы, содержащие только общие рекомендации, но не подкрепленные четким описанием области их эффективных приложений, не столько способствуют, сколько тормозят прогресс методов оптимизации из-за возможности появления ложных направлений исследования. Приведем краткое описание содержания гл. 1. В § 1 излагается алгоритм адаптивного метода, предложенного в [8]. Приводятся результаты новых численных экспериментов. Версия адаптивного алгоритма с пересчетом оценок описана в § 2. Третий параграф посвящен построению мультипликативного варианта адаптивного метода, который от основного варианта отличается формой представления в памяти ЭВМ опорной матрицы. В § 4, 5 строятся два алгоритма для решения канонической задачи (в предыдущих параграфах рассматривалась интервальная задача). Сначала описывается вариант адаптивного метода, а затем прямой метод с симплексной нормировкой, являющийся непосредственным развитием симплекс-метода на небазисные планы. По- другому эта задача решается в [5]. Следующие два параграфа (§ 6, 7) содержат результаты по обоснованию конечных алгоритмов. В § 6 конечность достигается за счет использования вырожденных сопровождающих двойственных планов. Более общий случай исследуется в § 7. Проблема конечности (другими словами, задача избежания зацикливания) из плоскости теоретических рассуждений постепенно переходит в плоскость конструктивных построений. Она широко обсуждается в специальной литературе. Опасность зацикливания и связанное с этим явлением замедление сходимости становятся реальной угрозой при решении практических задач. Вопросы повышения эффективности адаптивного алгоритма рассматриваются в § 8, 9. Сначала строится вариант с блочной заменой опоры, затем — несколько многошаговых вариантов. Предварительные эксперименты подтвердили перспективность обоих направлений развития адаптивного метода. Новому изложению безопорных методов решения общей задачи линейного программирования посвящен § 10. 8
Здесь обсуждаются различные варианты реализации общей схемы, предлагаются новые алгоритмы решения вспомогательных задач. Перспективна идея использования субоптимальных планов вспомогательных задач. Приближенные методы решения общей задачи разрабатываются в § 11. Они основаны на идеях векторной оптимизации и включают в себя ряд известных методов с использованием модифицированной функции Лагранжа. Глава завершается обсуждением вопросов численной реализации алгоритмов на ЭВМ. § 1. Адаптивный метод Адаптивный метод возник в результате длительной работы над развитием симплекс-метода [8]. В данной монографии он положен в основу всех излагаемых методов. Поэтому первый параграф посвящен детальному изложению основных элементов адаптивного метода. Все операции метода аккуратно выписаны, формулы доведены до такой формы, которая удобна для составления алгоритмов, программ (см. приложение). С момента создания адаптивного метода в Институте математики АН БССР, в Белгосуниверситете им. В. И. Ленина, в ИВЦ СО АН СССР постоянно ведутся численные эксперименты, в которых этот метод всесторонне испытывается, сравнивается с другими. Многие результаты этих экспериментов содержатся в соответствующих местах данной монографии. Часть из них помещена и в первом параграфе. 1. Постановка задачи. Основные обозначения. Рассмотрим интервальную задачу линейного программирования c'*->max, b*^Ax^b*, d*^x^d*. (1) Здесь с, х, d*, d* — n-векторы; ft*, b* — m-векторы; Л = = Л(/, /) — raXn-матрица, /={1, 2, ..., га} — множество индексов основных ограничений (строк матрицы Л), / = {1, 2, ..., п) — множество индексов переменных (столбцов матрицы А). Квадратную матрицу Лоп=Л(/оп, /оп), составленную из элементов aijy ге/опс=/, /е/опс:/, матрицы Л, будем называть опорной матрицей, если det Лоп^О, /оп — множество индексов опорных строк, /оп — множество индексов опорных столбцов, |/оп| = |Лш|. Обозначим далее /н =/\/оп; JH = J\Jои —множество индексов неопорных 9
строк, столбцов соответственно; а[ = A (i, J) — i-я строка A;I*(x)={i=I:A(i,J)x=b*i}, I* (x)={i^I:A(i, J) x= = Ь;}, T(x)={i^I:b^<A(l9 J)x<Vt}, J*(x) = {jee <=J:xj = d^}, J* (x) ={j^J: Xj = d*}, J(x) = {j e ^.J:d^<Xj<d*}. Вектор x, на котором выполняются основные (Ь*^ ^.Ах^Ь*) и прямые (d^^x^d*) ограничения, называется планом задачи (1). План хР, доставляющий целевой функции с'х максимальное значение, назовем оптимальным. Субоптимальный (е-оптимальный) план определяется неравенством с/х°—с/хе^.е. Пара {х, Лоп} из плана и опоры задачи (1) называется опорным планом. Опорный план считается невырожденным, если он не вырожден по основным (&*(/н)<Л(/н, /)*(/) <&*(/н)) и прямым (d*(/0n) <*(/0n) <d*(/on)) ограничениям. Необходимо создать алгоритм, который для любого е^О при любом начальном опорном плане {#, Лоп} за конечное число итераций строит е-оптимальный план. 2. Формула приращения. Пусть {х, Лоп} — опорный план задачи (1). Подсчитаем на нем со* = &*—Ах, со*== = Ь*—Ах — нижний и верхний векторы невязок, и' = = и' (Лш) = с' (^оп) Л^1—вектор потенциалов, Д' = Д'(/) = = u'A(Iou, J)—c'(J)—вектор оценок. Тогда при любом другом плане х = х + Ах приращение с'х — с'х целевой функции с'Ьх = [и'А(10п, J)-A'(J)]Ax(J). Введя обозначение г(/оп) =А(70п, J)Ax(J) и учитывая, что А(/Оп)=0, получим с' (J) Ах (/) = U' (Ion) Z (/од) - А' (/н) Л* (/н) • (2) 3. Критерий оптимальности. Анализ формулы (2) позволяет получить условия, при которых любые допустимые вариации переменных не увеличивают значений целевой функции. Теорема 1. Соотношения и (7*оп) < 0, и (О > 0, и (/оп) = 0, ^ Д(</*н)>0, а(/;хо, Д(7Н)=0 достаточны, а в случае невырожденности и необходимы для оптимальности опорного плана {х, Л0п}- 10
(5) 4. Критерий субоптимальности. При нарушении соотношений (3) найдется такое допустимое приращение Ах, что с'Ах>0. Допустимые приращения Ах удовлетворяют неравенствам d* (/н) -х (7Н) ^ Ах (7Н) ^ d* (7Н) -х (/н), СО* (/оп) <2 (/оп) ^СО* (/оп) • Максимальное значение приращения целевой функции (2) при ограничении (4) достигается при d*j — Xj> если Aj->>0, Axj = \ d*. — xj, если Д7- < О, О, если Aj = О, / 6Е /ш со*, если ^ >0, г^: = i со^г, если щ<.0, О, если м« = 0, t'G/оп» и равно Р = 2 М*7 - <**>) + 2 А,- (*у - d*) + Ау> Ау<0 + 2 и*®** + 2 "К- (б) Поскольку неравенства (4) не учитывают неопорные основные и опорные прямые ограничения на допустимые приращения, то с'х°—с^^р, т. е. р — оценка субоптимальности плана х. Рассмотрим задачу, двойственную к (1): я|)(Х) = 6*'s — Ь4-{- d*'w — d*y->-min, A'y+w—v = c, y = s—t, 5^0, f^O, ш^О, u>0. ' ' По опоре Лоп=^(/оп, /on) построим вектор Я={#, 5, ?, у, w} с компонентами у(1оп) =Щ у(1н) =0, Si = yi, U = 0, если z/*^0; 5г = 0, и = —уи если г/г<0, fe/; (8) Vj = Aj, Wj = 0, если Aj^O; ^• = 0, Wj = — Aj, если Aj<0, /e/, который, как легко проверить, является планом задачи (7). С помощью прямого х и двойственного К планов из (6), (8) получим 11
р = (с'х° — с'х) + (b*'s — b'J — dlv + dL*'w — b*'s° + + b'J» + dlv» - d* W) = $x + Pon» (9) где $х = с'х°—с'х— мера неоптимальности плана х\ р0п = = г|)(Я)— г|)(^°) — мера неоптимальности опоры. Если плану х приписать опору ЛоШ сопровождающий двойственный план которой является оптимальным двойственным базисным планом задачи (1), то рОп = 0 и р = рх, т. е. оценка субоптимальности станет точной: с'х°—с'х = $. Теорема 2. При р^е опорный план {х, Лоп} является е-оптимальным планом задачи (1). Для каждого е-опти- мального плана хе существует такая опора Лоп, что оценка субоптимальности р опорного плана {хе, Лоп} удовлетворяет неравенству р^е. 5. Итерация. Построение подходящего направления. В адаптивном алгоритме для построения подходящего направления решается задача максимизации приращения целевой функции (2) при ограничениях (4). В отличие от максимизации производной, применяемой в симплекс-методе, задача (2), (4) полнее отражает цель и структуру ограничений исходной задачи (1). Решение задачи (2), (4) строится по формуле (5). Используя эту формулу и обозначение г(1оп) =А(10Пу /0п) А* (Лш)+Л (/оп, /н)Д*(/н), построим подходящее направление 1={1(Joh),1(Jb)}' ( d* — xj, если А,- < О, lj = \ d^j — Xj, если Д7>0, (10) ( 0, если А7- = 0, / е JK\ l(Jou) = Аоп со (/оп) — Aon A (/on, J и) I (J*)> где Ico^t, если iii<.0> соГ, если щ>0, 0, если щ = 0. 6. Итерация. Вычисление шага. В случае оптимальной опоры Лоп(Роп = 0) и невырожденного сопровождающего двойственного плана подходящее направление (10) за одну итерацию приводит к оптимальному плану х = х-\-1. В общем случае неизвестно, оптимальна ли опора. Поэтому для построения х вычислим шаг 9 вдоль 1(х = х+в1). 12
Поскольку условия (4) учтены при построении /, то они, очевидно, будут выполнены на х при в^1. Найдем максимально допустимый шаг в по опорным прямым и неопорным основным ограничениям: ( (dtj — xfi/lj, если /7<0, в7-0 - min e,f / е J0n> ®j = (d/ ~~ Х'У1!* если li > °' (И) ( оо, если lj = 0; I(u%i/a'.l, если at'/<0, со?/а:/, если а:/>0, (12) оо, если а.7 = 0. Следовательно, максимально допустимый шаг в вдоль /, при котором х = х-{-®1 остается планом задачи (1), e = min{l, ei0, ви}. (13) При переходе от х к новому плану х целевая функция получает приращение вс'/^О, причем с'х°—с'х = с/х°— -с/х-вс/1^^-всЧ = р —е(и'Л(/0П, /)—Д')/(/) = = Р + в(Д'/ — к'©(/0п)) = Р — ©Р =(1 — в)р, т. е. при (1—@)р^8 план х — е-оптимальный, задача (1) решена. При р=(1—в)р>е итерация продолжается: улучшается компонента Лоп начальной информации {ху Лоп}. 7. Итерация. Замена сопровождающего двойственного плана. Опору Лоп заменяем на опору Лоп такую, чтобы уменьшилось второе слагаемое в оценке субоптимальности (9). Уменьшения |30п можно добиться с помощью итерации двойственного метода. Введем обозначения: Д (/н U /оп) = {Д (/н), —-н(/0п)}; х(/н U /оп) = (*(/н) + /(/н), Л(/оп, /)[*(/) + /(/)]}; 2*(/HU/on) = {^(/н), &*(/оп)}; 2,(/HU/on) = {^(/н), 6* (/оп)}. Подходящее направление для вектора Д (/н U /оп) в случае 6 = 0г-о<;1 вычисляется по формуле Г (^н U/од) =4^^' J»)-AV«> ^ш)А-1А(1т, JH), Л(/н, Jon)A7n1}, (14) (1, если а. х = ft*, 7 to to — 1, если а,х = b ,- и в случае 0 = ejo<l — l'(JaUIon) = ke'h{A-1A(Iow JH),-A-4, (15) 13
1, если х/о = ?**/., - 1, если XjQ = d*., ^ ' где ei — единичный вектор с единицей на i-м месте. Начальная скорость убывания двойственной функции J х/о —d*/o при k=l, а° = \dfo- х'о при k = -1, /0 ЕЕ /оп, если в = в/о; (16> { XiQ — b*i0 при k = —1, а° = 1 b*iQ — *io при ? = 1, 1'0е/н, если в = в,0. (17) При движении вдоль направления g компоненты вектора A+ag меняют знаки и скорость убывания двойственной функции уменьшается (по модулю): аш =ak+ 2 lj (XJ — d/) + 2 ?y(*j—d*j) 6/<o.a}*U 6/>о.а)Л)=о (18) (из-за появления новых положительных слагаемых). При некотором k = s получим as ^ 0. Тогда имеем А = S—1 = Л + ? ^ Gk- Индекс /, с которым была вычислена по- k=Q следняя положительная добавка в (18), обозначим через /#, если /е/н> а при *€=/0п— через г*. Соответственно обозначим и двойственный шаг o = Oj^ или a = а* , значе- S—1 ние которого равно ^ ак. k=0 8. Итерация. Построение матрицы, обратной к новой опорной матрице. __ 1)_Пусть в = в1о< 1, a = atV Тогда 70п = (I0U\Q U U *о> •'оп == ^оп» А~1 = Л"1 + Л^1 еи [A (i„ J0JI) — A (i0> /оп)] Л"1 /ее, (19) a = Л (*0, Jon) Л~Ч* - kl (У ф 0. 2) Пусть в = вг0<1, а=сг5> Тогда /0п=/оп LUo, /оп = {A7n+AonA(Ioa, U)A{i0, Joa)Aon/a, —A7nA(Im, /,)/oj 1 —Л (t0, /оп)^™/«. 1/а Г (20) 14
а = А (/„, /*) — A (i0, /on) Лоп А (Лт. /*) = *? (/*) Ф О- 3) Пусть в = в/,<1, o = ot,. Тогда 70п = Im\imi /on == /on \/о» •Доп = -Доп ('оп\'*» ¦'on \/о) "on (t*> Jon\h)A™(Ion\i*,io)fa, (21) а = Ло"п1(*'*. /o) = -*E(t«)=?feO. 4) Пусть в = в/0 < 1, а = ayV Тогда 70п = /оп, Jm = = (^on\/o)U/*. -Доп = -Доп Лоп [А. (Уош /*/ ^ (Уош /о/J ^/о^оп /Ot, (^) a = ву0Л^п/4 (70п, /J = kl и*)Ф0. На основе изложенных результатов построим вычислительную схему адаптивного метода. 9. Алгоритм. Пусть х — заданный план задачи (1), т. е. b.k^Ax^.b*, d*^:x^zd*. В случае, когда х не является планом, применяется стартовый алгоритм, который изложен в § 6. Если дополнительно известна опора, та вычислим векторы и' = c'(Jou) A~J- и Д' = и'А (/оп, J)—с' и, полагая it = 0, перейдем в п. 2 следующего алгоритма. 1. Если информации об Аои нет, то положим /оп=0, /н={1, 2, . .., т}\ /Оп=0, /н={1, 2, ..., п}\ размерность опоры г=0; счетчик итераций it = 0; Aj = —cjf /=1, п. 2. Вычислим векторы невязок со* = 6*—Ах, ы* = Ь*—Ах. 3. По формуле (6) найдем оценку субоптимальности |3, при этом параллельно вычислим Ц, /е/н. При |3^е перейдем к п. 21. 4. По формуле (10) вычислим /(/<щ). 5. По формулам (11) — (13) вычислим шаг в и-одновременно найдем индекс i0 или /0. 6. Построим новый план х = х-\-@1 и псевдоплан и = = х+1. 7. Положим it = it-{-L Вычислим значения прямой и двойственной целевых функций: у = с'х, «t-<0. Ы;>0, Ay<0, Ay>0, ie/on te/on /e/H /e7H Печать: it, y, w. 8. Проверим неравенство (1— в)|3^е. Да-»-п. 21, нет -»- п. 9. 15
9. Если 0 = 0jo, то по формулам (15), (16) вычислим подходящее направление i (/ж U Лш) и значение а0. Переход к п. И. 10. Если 6 = вг0, то вычислим ?(/ниЛш) по формуле (14), а значение а0— по формуле (17). 11. Положим А(/0п)= — и(1ои), х(/0п) = Л(1оиу /)Х Х(*(/)+/(/)),а = 0. 12. Вычислим ay = mino/, Oj — — Aj/lj при Д;-^-<0, 13. Найдем А; = А} + оу%3, /е/ниЛ>п. о = g + gj. 14. Если Aj = 0, /e/HU^on, то положим a = a+gj(xj—v), J d; при ?7-<0, Y "" { d^ при lj > 0, если / e ^H» И j 6; при^.<0, Y ( &*j при |j>0, если /e/on- 15. Проверим неравенство a<0. Да^п. 12, нет->- ->п. 16. 16. Если /е/ош то положим j# = /, at+= a^; если / е ^н, то ]\ = /, ay, = ar. _ _ 17. Если 6 = 6l0<J, o = GUy то /оп = (/onV*) U «о, Лщ = Л>п» и (i0) = kot^ Ам вычислим по формуле (19). Переход в п. 2. 18. ЕСЛИ 6 = 6г0<1, a = CFj„ ТО 70П = /on U to, /on — = /0nU/*i r = r+ 1, *г(/0) = йогу/, Л^1 вычислим по формуле (20). Переход в п. 2. 19. Если 6 = 6/о< 1, а = аи, то 70п = /оп\^ /0а = = Лш\/о> А (/о) = *<***. и (Q = и (г), г = г — 1; Л™ вычислим по формуле (21). Переход в п. 2. 20. Если е = е/в<1, ст=_(Ту„ то 70П = /0Ш /оп = = (Лж\/о) U/*, Д(/о)=^у*; Ло^1 вычислим по формуле (22). Переход в п. 2. 21. Выдача результатов: #, с'л;, до, л, со*, со*. Программная реализация изложенного алгоритма приведена в приложении (§ 1). 10. Первая группа численных экспериментов. Алгоритм реализован на языках ФОРТРАН и АЛГОЛ (ГДР и БЭСМ-АЛГОЛ). На ЭВМ БЭСМ-6 проведен ряд экспе- 16
риментов. Параметры а^у cjy d*j9 d*> b*t, b*> i=l, ra, / = 1, /г, задачи (1) генерировались различными способами. В частности, с помощью библиотечных процедур UR и RANDOM генерировались случайные числа, равномерно распределенные на отрезках [—1, 1] и [0, 1], которые затем линейно отображались на заданные отрезки [а, Ь]. Границы отрезков выбирались так, чтобы множество планов не было пустым: а^е[—100, 100], с^[—100, 100], ?^€=[-1оо, о], </;<=[о, юо], &*г€Е[-юо, о], г>;<=[о, iool Оптимальный план в полученных задачах, как правило, имел опору небольших размеров, меньше т/2. Задачи, в которых число активных ограничений достигало значения Ле{т/2, т], были получены с помощью генератора 'PROCEDURE' GENER1(A, В, N, J, К, CS); 'VALUE' А, В, К; 'REAL' А, В; 'INTEGER' N, J, К; 'ARRAY' CS; 'BEGIN' 'REAL' F; 'INTEGER' I; F:=3.14; 'FOR' I: = l 'STEP' 1 'UNTIL' N 'DO' 'BEGIN' CS[I]: = (I. J. (K • K))/F —ENTIER (I * J* (K* K)/F); CS[I] : = A + SIN(F» CS [I]) * (B — A) 'END' 'END' GENER1; Назначение этой процедуры — построить м-вектор CS, компоненты которого выбираются из отрезка [a, b], а их значения зависят от номера компоненты /, номера задачи / и от параметра &, который принимает разные значения при генерировании векторов задачи. Например, при k=l генерируется первая строка матрицы А, при k = 2 — вторая и т. д. При k = m+l генерируется вектор с. Параметры процедуры GENER1 имеют следующее назначение: А, В — границы отрезка, из которого выбираются элементы вектора; N — размерность вектора; J — номер задачи (по его значению различаются параметры разных задач); К — параметр, определяющий некоторый вектор в данной задаче; CS — имя массива, куда заносится сгенерированный вектор. Чтобы получить N-вектор с первой задачи, достаточно выполнить оператор GENER1(—100, 100, N, 1, М+1, С). Эксперимент 1. Цель — ознакомиться с процессом решения задачи. В табл. 1 приведены (с точностью до 0,1) значения параметров задачи 10X20, сгенерированных процедурой GENER1 на указанных выше отрезках при / = 200. Полагалось k=l, m — для строк A; k = m-\-l, m+2, m+3, 17
ь* -38.7 -3.1 -8.3 -51,9 -84.1 -26.9 -0.4 -15.8 -66.5 -68.5 с d* X1 1 d А 64.0 29.1 40.7 -33.3 80.0 -95.7 -88.0 95.6 34.9 94.7 -S6.0 -13.8 0 23.8 87.8 97.1 100 25.8 56.9 -91.7 -76.1 -18.2 99.2 -10.9 -92.0 -12.7 0 46.2 -48.6 72.5 43.7 70.4 -56.3 -87.7 -64.2 61-6 59.3 54.1 -83.0 -97 8 0 65.9 29.1 *-зз.з -95.7 95.6 94.7 -83.7 -52.5 49.1 -63.9 59.3 -84.0 -14.8 0 81.9 99.2 -29.2 37.8 98.3 26.0 -79.7 -40.9 -0.6 6.2 -18.4 -80.0 -11.7 0 93.2 -0.6 74.6 99.9 78.4 -14.8 -75.7 -29.5 90.5 92.7 96.4 -76 0 -95.8 0 99.1 -14.5 96,4 46.4 38.0 100 -71.8 -18.4 -80.0 78.4 -91.7 -72.1 -15.9 0 99.4 97.1 26.8 -91.7 -18.2 -10.9 -67.8 -7.6 98 8 -29.2 92.7 -68.1 -10.8 0 94.0 40.6 -95.7 34.9 -83.7 22.6 -63.9 2.8 -36.8 -25.8 -3.8 -64.2 -93.8 0 83.1 -63.9 32.1 99.7 -48.6 95 6 -60.0 12.9 72.5 80.0 48.9 -60,3 -16.9 0 67.5 /n-j-4, т-\-Ъ — для векторов с, ft*, tf«, d*9 ft* соответственно. Начальный план x={xi = 0, t=l, п). Изменение значений прямой и двойственной целевых функций на итерациях адаптивного алгоритма показано в табл. 2. Оптимальный план л:* = {—13.76, -12.69, —97.84, 27.35, -11.73, 47.16, -13.36, -10.81, 68.90, 54.97, 48.08, 0.04, —7.55, 12.28, 27.82, -10.84, -8.26, —87.87, -20.44, —7.49}. Опора достигла максимальных размеров (10X10). Сравнивая х* с d* и d*, замечаем, что десять его компонент принимают промежуточные значения (dmi<.Xj<.d*), остальные (неопорные) равны граничным значениям, т. е. х* — невырожденный базисный план. Эксперимент 2, Цель — сравнить адаптивный и симплексный методы по числу итераций и по времени счета. Задачи вида (1) размеров 20X30 генерировались процедурой GENERl при /=100, 114, а задачи размеров 30X40 —с помощью библиотечной процедуры UR при /=103, 104, ..., 112. При этом в задачах 30X40 вектор ft* полагался равным —оо, т. е. основные условия имели вид Ах^Ь. Каждая задача решалась двумя методами. Процесс решения начинался с плана х=0. При решении задач вида (1) симплекс-методом использовалась программа, реализующая метод с обратной матрицей применительно к задаче с двухсторонними ограничениями: с'я-^тах, Ах—2=0, d«^x^d*, 6*<г^&*, где г — т-вектор дополнительных переменных. Начальный базис состоял из единичных векторов. 18
Табл. 1 А 81.9 97.8 49.1 12.9 -52.2 -56.0 22.6 35.1 91.7 64.0 -56.4 -9,9 0 48.1 72 5 70.4 -87.7 61.6 54.1 -52.1 319 16.2 3.1 -25.8 -52.4 -91.8 0 25 9 -84.0 -37.1 31.9 91.6 81 9 -48.3 40.7 83.5 -60.3 97.8 -48.6 -18.1 0 2.2 54.3 -25.5 99.5 99.8 -95.7 -44.4 48.9 -60 3 61.5 -83.7 -44.7 -9.1 0 21.8 92.7 76.5 51.8 85.0 78.2 -40.6 56.7 100 98.8 90.4 -40.9 -89.9 0 44.4 -33.3 95.6 -83.7 49.1 59.3 -36.8 63.8 -56.0 32.1 3.1 -37.1 -19.2 0 64.4 16.5 22.6 28.8 -3.8 -60.3 -33.0 70.4 81.7 -96.0 43.5 -33.3 -8.3 0 80.8 100 -91.7 99.2 -67.8 93.7 -29.2 76.4 19.7 37.8 68.5 -29.5 -87.9 0 92.5 12.9 35.1 54.4 -64.2 29.1 -25.5 81.7 31.9 99.5 -33.3 -25.8 -20.4- 0 98.9 -29.2 98.3 -79.7 -0.6 -18.4 -21.8 86.4 74.6 56.9 98.8 -22.1 -7.5 0 99.6 b* 8.1 16.1 23.9 31.6 39.1 46.3 53.3 59.8 66.1 71.8 с d* *' d* I Адаптивный метод применялся непосредственно к задаче (1). Начальная опора имела размеры 0X0. Результаты эксперимента приведены в табл. 3. В задачах, сформированных с помощью GENER1 (опора достигает размеров k^[m/2, т]), адаптивный алгоритм эффективнее симплексного в 2—3 раза; в задачах, сгенерированных с помощью UR (размер опоры не превосходит т/2),— в 10 раз. Расчеты проводились по программе, написанной на языке АЛГОЛ-БЭСМ (ДОС ДИСПАК). Эксперимент 3. Цель — изучить характеристики адаптивного алгоритма при решении задач, по структуре и размерам, близких к реальным. Табл. 2 Номер итерации 1 2 3 4 5 6 7 8 С'Х 2.3213 11.1057 11.4691 46.5518 46.5564 46.5597 46.5830 46.6024 •Р (М 44108.925 42105.443 41919.542 31370.523 63.7572 63.2809 61.9724 59.2809 Номер итерации 9 10 11 12 13 14 15 с'х 46.6159 46.8633 46.9173 47.1981 48.0823 48.3769 50.1071 ф(Х) 59.0448 58.6458 51.6202 50.9567 50.5163 50.4411 50.1071 19
Табл. 3 со т Рч а о Д 1 2 3 4 5 6 7 8 9 10 GENER1 Симплекс * к и ^ я ? 46 55 41 49 43 45 48 44 41 44 К « X S « 18 21 16 18 15 16 18 16 17 15 Адаптивный к IS" F я 22 30 28 29 26 26 25 27 28 24 к" <и я PQ о*о 6 10 9 10 8 9 8 8 9 7 UR Симплекс * я к* ц tr Я 118 112 91 57 89 106 100 119 85 107 к я к к 0) я PQ fto 78 74 57 37 56 72 64 79 55 72 Адаптивный * я я ? erg 12 41 19 12 38 32 21 14 33 39 0? и- S 5 Е <и я PQ о,о 3 11 5 3 9 8 5 4 8 10 Задавалась разреженная матрица. Число ее ненулевых элементов составляло от 0,5 до 20 %. Такие матрицы с помощью процедуры GENER2 генерируются в файл, длина которого равна числу ненулевых элементов. Ненулевой элемент со своим номером строки хранится в одной ячейке. Элементы располагаются по столбцам, начала которых запоминаются в массиве целых чисел. Использовалась следующая процедура: 'PROCEDURE' GENER2 (Kl, М, A, NCA); 'INTEGER' Kl, М; 'INTEGER' 'ARRAY' NCA; 'ARRAY' A; 'BEGIN' 'INTEGER' I, II, К, K2, Jl; 'BOOLEAN' LOG; 'REAL' R2; NCA[1]: = 1; K:=0; K2: =M/(K1 + 1); K2: = R2*K1; K2:=M —K2; 'FOR' J: = 1 'STEP' 1 'UNTIL' N 'DO' 'BEGIN'LOG:='TRUE'; 'FOR'I: = l 'STEP' 1 'UNTIL' Kl 'DO' 'BEGIN'J1:=*R2*I; Jl : = Jl + K; 'IF' LOG 'AND'Jl > J 'THEN' 'BEGIN' 'IF' J1-R2-K<J 'THEN' J1:=J; LOG:='FALSE' 'END'; II: = NCA [J] + I; A [II]: = SIN (J ** 2 + I) * 200; PLA031(A[I1], Jl) 'END' I NCA[J+1]:=NCATJ]+K1; 20
'IF' K<K2 'THEN' K:=K+1 'ELSE' K:=0 'END'J 'END7 GENER2; Эта процедура генерирует элементы столбцов со значениями из отрезка [—200, 200]. Смысл параметров процедуры: К1 —число ненулевых элементов матрицы; М—число строк матрицы; А[1: АК]— файл для хранения матрицы, АК — число ненулевых элементов; NCA[1:N+1] указывает адреса в файле, с которых начинаются столбцы. Векторы с, d*, d*, ft*, ft* генерировались процедурой 'PROCEDURE' VEK (К, А, В, С, N); 'VALUE7 К, А, В; 'REAL' А, В; 'INTEGER' К, N; 'ARRAY' C; 'BEGIN' 'FOR' J: = l 'STEP' 1 'UNTIL' N 'DO' 'BEGIN' С [J]: = (A+B)/2 + SIN (K ** 2 + J) * (B—A)/2; PLA031 (C[J], J) 'END' 'END' VEK; Эта процедура генерирует /г-вектор с компонентами из [a, ft]. Параметр К принимает значения 1, 2, 3, 4, 5 при генерировании векторов с, d*, d*y ft*, ft*, элементы которых выбираются из отрезков [—100, 100], [—100,0], [0, 100], [—5000,0], [0,5000], соответственно. Для решения сгенерированных задач применялась программа на языке АЛГОЛ-ГДР (МС «ДУБНА»), реализующая адаптивный алгоритм с использованием внешней памяти (МБ и МД) для хранения файла А и обратной матрицы А^п • Результаты эксперимента приведены в табл. 4. Табл. 4 тХп К1 Число итераций Время решения, с 30X45 3 4 5 6 7 24 28 29 33 32 12 15 15 18 17 70X100 1 2 3 43 45 72 56 64 120 100X150 2 3 4 76 78 84 202 225 275 200X250 1 111 720 Значительный рост времени решения задачи с увеличением ее размеров объясняется тем, что программа, по 21
которой проводились расчеты, ориентирована на файл, хранящий ненулевые элементы матрицы только по столбцам. При вызове опорных элементов строки в этом случае необходимо списывать из внешней памяти все опорные столбцы, выбирая из них по одному элементу нужной строки. Эта операция выполнялась бы значительно быстрее, если бы матрица А хранилась и по столбцам и по строкам, что, разумеется, потребовало бы дополнительной памяти. Обратная матрица в данной программе хранится полностью и занимает k2(k^.m) слов. Все операции с матрицами проводились посредством вызова их по частям в буферную память объемом в 1024 слова. С ростом размеров матриц увеличивается число обменов с внешней памятью, а следовательно, и время решения задачи. 11. Модификация двойственного опорного метода. В адаптивном методе, изложенном в пп. 1—8, при замене опоры (п. 7) использовался двойственный опорный метод [5,33] (для задачи (1)). В связи с этим возник вопрос о построении новых эффективных двойственных методов решения задачи (1). Особенность предлагаемой модификации состоит в том, что движение во множестве двойственных планов, приводящее к уменьшению двойственной целевой функции (7), происходит не по элементарным направлениям (приведенным координатным осям), а по градиенту целевой функции (вдоль линейной комбинации элементарных направлений). Вектор {у, 5, t, v, ш}, удовлетворяющий (7), назовем двойственным планом задачи (1). Вектор &=А'у—с, вычисленный по двойственному плану,— коплан задачи (7). Будем считать, что векторы s, t, у, w согласованы с у, б: Si = yu U = 0, если г/г^0; 5г = 0, U = —yu если уг<0, /<=/; i>j = 6j, Wj = 0, если 6j^0; i;j = 0, Wj = — 6j, если бу<0, /e/. Совокупность {б, Лоп} коплана и опоры задачи (7) называется опорным копланом, который считается невырожденным, если yi?=0, te/on, и 6j=7^=0, /^/н. По опорному коплану {б, Аол\ построим соответствующий ему псевдоплан к: 22
Kj = d*. при Sj < 0; Kj = d*j при 8j > 0, / e /H; a>i = b* при Уг>0; сог = б^г при */?<0, iG/on; * ('оп) = ^ I® (7оп) - Л (/оп, /н) X (/н)]; со(/н)=Л(/н, /)х(/). Теорема 3 (критерий оптимальности). Соотношения d*j Kuj^Cd*. при б7- = 0; Kj=d^j при 67->0; xy = d! при б7-<0, /е/од; &*г<СОг-<&? п (25) при уг = 0; v ' Of = 6*f при ?/;<0; сог = 6* при yi>0, /е/н достаточны, а в случае невырожденности и необходимы для оптимальности опорного коплана. Псевдоплан х в этом случае является оптимальным планом прямой задачи (1). Теорема 4 (достаточное условие субоптимальности). Если для псевдоплана х и вектора со, построенных по формулам (24), выполняются соотношения 2 (*,-A,)6,+ 2 (*;-<*;) 6,+ 8у>о./е/оп в/<о./е/оп + 2 (&*«—<*>*)#* + 2 w —®0^<е, *,«>, te/H ^><Ые/н то псевдоплан х является е-оптимальным планом задачи (1) (т. е. Л°-Л<е). Опишем процедуру улучшения опорного коплана. Пусть {б, Аол}—опорный коплан, 6 = 6+Д6— другой коплан, соответствующий двойственному плану {у, s, ?, Й, ^}» У = У-\-&У, 5 = 5+А5, ?=*+Д?, ?/ = У+Ди, Ш = АУ+Д0У, для которого также выполняется условие согласования (23). Используя (24) и условие согласования (23), получим формулу приращения двойственной целевой функции задачи (7): 6*'д5 _ bIM — d'.bx) + d*'Aw = (Ах — со)' Ay + b*'As — —b№ — dlbv + d*'bw=by'AK — d'Av + d*'bw — by'® + 23
+ Ъ* 'As - KM = 2 I(*> - d/') &i - (*i - d*i) 8A 4 Sy.>0,5;.<0, /eJon + 2 i(*,-d*,)6,-(x,-d;)6,j + !j<0, S;.>0, + 2 (^-^)as,+ 2 K-d;)A6,.+ 5-»0, ij>0, °:<0,-bj<0, i&on >e/on + 2 (*J-d*i)bj+ 2 (x,-d;)^ + 5y=0, 5;.>0, Sy=0, Sy<0, + 2 w;-^)«/+ 2 <<***-<*;)^+ (26) S;<0,S.>0, 5;.>o, 6/<o, + 2 W—©0 У*+ 2 (b*t—®t)yi + yi=o,yt>ot yt=o, у(<о, + 2 (b\-b*i)yi+ 2 (^1-ь;)л + У/<0.^>0. у{>0,у{<0, fG/on 1'е/оп + 2 (Ь*—<х>()Ауг+ 2 (b*i"w0AS/i + i/t->0, ^>0, yt<0, yt<0, + 2 [(6**-©*)»i-w-®i)yi] + + 2 IW - ©i) Уг - (6** — ©«) yt]. **<o.5*>0' Если соотношения (25) не выполняются, то приращение (26) можно сделать отрицательным (в невырожденном случае). В предлагаемом методе на каждой итерации будем варьировать ky &^1, переменных, включающих опорные компоненты коплана б и неопорные компоненты вектора у. 24
*л ПоСТрОИМ ПОДМНОЖеСТВа Jon с: /0п и /2 сг /н, | /оп | + + | /° | = &, следующим образом. Выберем опорные переменные коплана б и неопорные переменные вектора у, на которых не выполняется критерий оптимальности (25), и для каждой из них подсчитаем числа у?п, / ее /0ш Y"» Yon_{ *1 — й*1> еСЛИ вУ>° ИЛИ б7- = 0 И Х7<4, ' ~~ { ху — d*, если бу<0 или б^ = 0 и x7->d*; Y? = | G>i — Ь*и если ^ < 0 или уг = О и со< < 6#ь 1 | а>1 — &*, если yt>0 или у,- = 0 и Ш; > 6*. Положим /°п = {/ : / €= /оп, | Y?n | > (*>, /2 = С:' 6= /н, | Y? I > (*}, (27) где (Li, jx^sO,— параметр метода. При построении множеств /оп и /« можно использовать и другие принципы, например, в число варьируемых переменных включать определенный процент или конкретное число переменных, на которых не выполняется критерий оптимальности (25). Подходящее направление для коплана б и вектора у построим по следующему правилу: t) = о, / е= /onVoV <} = - v?n, / €= ^о0п; <? =0,/е/н\/«; Ц =у«, /е/»; (28 *2' (Am) = К1' (Am)-'2' (/н) Л (/„, /ои)] Л-1; **'(/н) = *»'(/М (Л -М- Начальная скорость убывания двойственной целевой функции задачи (7) вдоль подходящего направления (28) «о = - 2 (Y?n)2- 2 (Y?)2- Максимальный шаг а вдоль подходящего направления (28) находим по правилу длинного двойственного шага (см. п. 7). Новые коплан б и вектор у равны 6 = 6+af1, y=y+ot2. Опишем правила построения новой опоры Лоп = = А (Т0ПУ 70п). Вычислим y° = max {тах I Y?n I» тах I Y1? I}- /SJ0n 'е/н 25
Пусть y° = Y/0n> /о e JL Если a = ou, /* e /н, то Лш = = Am. Am = (Аш\/о) U /*• Если a = a,„ ^ e An» то /on = = AnV*> Am = Аш\/о- Пусть y°_= y?0, f0 e /н. Если a = = 0/ф, /* e /H. T0 (on = Am U *0» Am = Am U /*• ЕСЛИ G = = a*„ t* e /on> T0 ^on = (AnV*) U *<» Am = Лш- При a = = <?/*, /# e /0n» или ° = °i*> i* ?= /н, опора сохраняется. 12. Блочная замена опоры. Решение задачи (1) адаптивным методом с элементарной заменой опоры (АЭ) описано в пп. 1—8. В адаптивном методе с блочной заменой опоры (АБ), как и в АЭ, на каждой итерации осуществляется переход от опорного плана {х, Лоп} к новому опорному плану {х, Лоп}, на котором с'х^с'х, х = х+@01у где I — подходящее направление подъема, во — максимально допустимый шаг вдоль /. В отличие от АЭ в АБ для получения Лоп решается вспомогательная задача. Выберем некоторые подмножества /0, /о(/ос/ш /о cz /оп). Среди всевозможных опор А0ц = А (70П, 70П), таких, что 70П П /о = 0, 70пр/о, найдем ту, при которой оценка субоптимальности р опорного плана {х, Аои} минимальна. Требования /0с=:7оп и /оПАш=0 эквивалентны условиям w(J0)=v(J0)=0, y(h) =s(I0) =t(IQ) =0. (29) Таким образом, поиск опоры Лоп сводится к поиску оптимального базисного плана вспомогательной задачи, полученной из двойственной задачи (7) с учетом дополнительных условий (29): / (г) = &*' (7) s (Г) - К (/) t (/) - < (J) v (J) + + d*'(J)w(J)-+mm, A' (I, /0) y(J) = c (Jb), A' (7, J) y(7) + w (J) - -v(J) = c(J), у (/)=s (/)-*(/), s(/)^0, /(7)>0,j»(/)>0, w(/)>o, где 7=1 \I0, J = /\/0, r={if(7), 5(7), f(7), у(7), w(7)}. Для решения задачи (30) в качестве начального базисного плана можно взять план г, составленный из компонент двойственного плана (8), сопровождающего опору 26
Лоп. Базис оптимального базисного плана г* = {у*(1), s*(I), **(/), v*(J), ш*(/)} задачи (30) и есть искомая опора Лоп. Для новой опоры Лоп оценка (30п=Роп— (f(r)— /(г*)). Следовательно, опора Лоп не хуже опоры Лоп, поскольку f(r)^f(r*)- Оценка субоптимальности нового опорного плана {х, Лоп} равна р= (1— в0)|3— (f(г)— f(г*)). Естественно ожидать, что величина f(r)—f(r*) будет большей, если в множество /0п \ /о войдут индексы /, для которых числа х^-\-Ц в наибольшей степени выходят за границы отрезка [d%j, d]\ (аналогично для /н\/0). Рассмотрим задачу, двойственную к (30): с'СО* СО ->max, (31) МЛ <Л (?/)*(/) <&*(/); d*(7)^x(7)^d*(J), которую можно решать вместо (30), начиная с опорного плана {х, Лоп}. Если на оптимальном опорном плане {х*, Лоп} задачи (31) (на оптимальном псевдоплане задачи (30)) выполняются условия d*;<x;<d;, /е/0; &»*<<**<&?, *е/0, (32) то Лоп — оптимальная опора задачи (1) (т. е. величина /(г) —/(г*) максимально возможная) их* — ее оптимальный план. Следовательно, в множество /0 имеет смысл включать те опорные компоненты плана х, которые далеки от границы (аналогично для /0): </0 = {/:/ЕЕЛш; d^+l<Xj<dj--l}y /о = {*: i ^ /н; &** + ?< ^ * < &* — ?}, или те, на которых при движении вдоль / прямые ограничения нарушаются в последнюю очередь (аналогично для /о): /о={/:/е/оп; е,->е0+?}, /0={t:fe/H; в*>в0+Б}, ( ' где g — параметр метода. С другой стороны, от выбора опоры Лоп существенно зависит выбор подходящего направления на следующей итерации (для опорного плана {х, Лоп}). Пусть условия (32) не выполняются. Возьмем в качестве подходящего 27
направления_вектор х*—х. Если коплан А, сопровождающий опору Дш, невырожденный, то этот вектор совпадет с вектором 7, построенным по формулам (10) для копла- на А. При вырожденном коплане А векторы х*—х и 7 могут не совпадать, однако в любом случае оба они являются оптимальными планами задачи максимизации функции (2) при ограничениях (4), построенной по опоре Лоп. Из (31) видно, что максимально допустимый шаг во вдоль направления х*—х достигается либо на прямых ограничениях /е/0, либо на основных ограничениях ie/o, причем во>0. Это говорит о том, что в /0 и 10 следует включать далекие (на плане х) от границ переменные и ограничения. При больших g в (33) множество /о = /о = 0 и задача (30) ((31)) совпадают с исходной. При g = 0 и условии, что шаг во на предыдущей итерации определился однозначно, имеем случай элементарной замены (см. п. 7). В АБ переход от {#, Лоп} к {х, Аол} называется большой итерацией метода. Она состоит из малых итераций решения вспомогательной задачи (30) ((31)). 13. Вторая группа численных экспериментов. Рассматривалась интервальная задача линейного программирования (1). Сравнивались четыре метода АЭ, АБ, двойственный опорный (ДО) и модифицированный двойственный опорный (МДО) (см. п. 11) [33]. На ЭВМ ЕС-1030 проведен ряд экспериментов. Перечисленные методы реализованы в виде подпрограмм на языке ФОРТРАН-IV. Этими методами решались серии задач вида (1) при разных значениях т, п. Каждая серия состояла из пяти задач. Все задачи были поделены на два типа: т^п (I), т>п (II). Значения Cj, ац элементов с, А задач генерировались датчиком случайных чисел с равномерным распределением на отрезках — IO^Cj^IO, — 10<aij< 10, i = 1, m, / = 1, п. Компоненты Х/, / = = 1, /г, вектора хи генерировались на отрезке [—50, 50]. По вектору хн и матрице А вычислялись а'{хн, i = = 1, т. Далее генерировались случайные числа yt Ez [0, s±] и yf^[0, s2]. После этого полагалось Ь^ = щ хн — — у}, bl = alхн + y?i i = 1> т- Числа slf s2 в серии выбирались разными и принимали одно из следующих значений: 10, 120, 200, 350. Аналогичным образом поступали при формировании прямых ограничений: d*7- = х* — _ y), &] = jcy + Y/i / = 1, п (со значениями 30, 120, 200, 28
350 для Si и 52). Для генерирования случайных чисел использовалась библиотечная подпрограмма RANDU. Сгенерированная описанным способом задача имела непустое множество планов, ее оптимальному плану, как правило, соответствовали опоры размеров, равных или близких k, где & = min(m, п). Эксперимент 1. Цель — сравнить эффективность АЭ и АБ *) (по быстродействию), а также установить влияние на эффективность АБ величины параметра g, t,c\ ?^0, от которого зависят размеры вспомогательной задачи (30) ((31)). При формировании вспомогательной задачи для построения подмножеств /0 и /о использовалось правило (33). Задача решалась двойственным опорным методом с оптимальной заменой опоры (с длинным шагом). В качестве начального плана выбирался сгенерированный вектор хя. Начальная опора в обоих методах имела размеры 0X0. Во всех сериях каждая задача методом АБ решалась 14 раз при следующих значениях параметра |: 0, 1, 3, 5, 7, 10, 15, 20, 25, 30, 35, 40, 45, 50 % от величины d = max {max (b* — bti), max (d*- — d^)}. Качественное исследование АБ показало, что для задач типа I АБ работает лучше при ?3^50 % d> хуже при 1^1—3 % d. Для задач типа II этот метод лучше работает при \жЪ—10 % d, хуже при ?^50 % d. На рис. 1 показана зависимость от ? времени (t) решения методом 0,0240 *> Результаты численного эксперимента по сравнению АЭ и симплекс-метода приведены в п. 10 и [8]. 29
АБ задач типа I (в качестве примера взята серия задач 30X40), а на рис.2 — задач типа II (серия задач 200X10). В табл. 5 приведены результаты этого эксперимента: среднее время (стандартизированное по Колвилу) решения задач по сериям указанными методами и оптимальное значение параметра ?onT (параметра АБ). Табл. 5 тхп 30X40 10x90 90x10 200x10 300x10 150x20 АЭ Время 0.1604 0.0829 0.0223 0.0525 0.0771 0.1691 АБ 1 Время 0.0957 0.0499 0.0119 0.0177 0.0191 0.0825 ?ОПТ 50.0 50.0 4.6 6.3 3.7 10.0 тхп 400x20 600x20 270x30 600x30 900x30 АЭ Время 0.3144 0.5142 0.6356 1.4124 1.7807 АБ Время 0.1112 0.1309 0.3055 0.3806 0.4542 ?опт 6,3 3,0 7,3 3,7 4,0 Эксперимент 2. Цель — сравнить эффективность ДО и МДО (по числу итераций и по времени счета), а также выявить эффективность МДО при различных значениях параметра метода. Процесс решения задач ДО и МДО начинался с ко- плана б = — с и вектора у = 0. Начальная опора имела размеры 0X0. В выполненной программной реализации МДО для построения подмножеств /оп и 1Н использовалось правило (27). Каждая задача из серии решалась 12 раз при значениях параметра \х: 100, 97, 94, 90, 87, 85, 80, 75, 60, 50, 20, 0 % от величины у0 (см. п. 11). Наибольшая эффективность МДО получена при pi«70—100 % 7°- Проведено исследование МДО для случая, когда компоненты подходящего направления на подмножествах /0п и 1и, в отличие от (28), определялись следующим образом: t) = - sign (Y/on)f / ЕЕ JL tf = sign (tf), i e /h°. (35) Время решения задачи при одинаковых значениях параметра \i и оптимальные значения \i для модификаций (28) и (35) не совпадали, но время при оптимальных значениях [х в том и другом случае было почти одинаково. 30
Анализ численного эксперимента показал, что МДО работает лучше ДО для задач типа I, а для задач типа II лучше работает ДО (табл. 6). Замечание. Из результатов численных экспериментов, приведенных в данном пункте, видно, что для задач типа I самым эффективным из четырех рассмотренных методов оказался МДО, а для задач типа II — АБ. Табл. 6 тхп 20x20 30x40 40x40 10x90 10x300 20x150 20x400 90x10 200x10 150x20 400x20 ДО Число итераций 20.75 35.00 42.25 18.75 22.00 39.33 48.67 23.90 32.33 50.00 68.33 Время 0.0210 0.0941 0.1678 0.0471 0.2919 0.3239 1.3926 0.0231 0.0607 0.1603 0.4631 мдо Число итераций 20.25 32.75 39.50 13.25 15.67 33.00 41.67 25.00 30.00 50.00 58.00 Время 0.0184 0.0875 0.1386 0.0317 0.2087 0.2292 1.0516 0.0445 0.1091 0.2583 0.7570 [Д,опт 97.00 89.50 77.50 76.00 20.00 74.67 75.00 99.25 97.00 100.00 100.00 14. Третья группа численных экспериментов. С помощью датчика псевдослучайных чисел было сформировано 14 серий канонических задач для различных тип [24], [29]. Каждая серия состояла из 10 задач. В основе генератора лежал следующий датчик: FUNCTION Y(P) P = SIN(137.*P + 2.) К = Р**3* 100 Y=K/10 RETURN END При генерировании каждой задачи вначале псевдослучайными числами заполнялись вектор с и матрица А. Для получения d*, d* и начального плана хн генерировались тройки псевдослучайных чисел а^, а^2, a,j3J после чего по- 31
я н Со II * & > " II ^ 2 V. Й Н *я> w р 8 "О о о О) Я X о я fD Со Я Я Со й + я ffiJ3 со ?*¦ и » Со о * S а о л я »^' 3 ^: «3 Р? КС о со g Г* ^ Й ° 2 я ? о 0 ~ я I 2 о я СО о 2=1 я« о я 1 СО а,§« to CD Я о СЛ 4*> СО ь- СТ> СО СО О СО 00 | со 00 о со со *^ -*J 4*. to to О 00 о со N3 tO 00 ^J -^ 00 со со **1 со ^- to <1 со о оо ->4 ь- tO tO СЛ СЛ со to СЛ СЛ оо о (Л со 00 СЛ to ^1 00 to 05 00 to оо о to 00 to о to со -si со to CO 00 со о о со to со ^1 to СЛ оо 4*. со to to со 4*. ^3 ~ со to to 00 оо ? о со -^ CD to 4*. 4^ 4*. ОО to ел 00 СЛ to to Номер задачи ~ ю со *. СЛ 05 «5 *° я о я s в» * to о * о оЕ хя «^ °я Номер задачи ~ N0 СО 4ь СЛ О) п> s Я О ¦К So Sg 11 ^ О СО о to "^ СО ^ со 00 со to ^ t—L to ОЭ со С5 to со о Со о СЛ о 00 00 4*» ^ СЛ 4^ ^1 00 СЛ со **| 4*. to со t—k 05 4*. to о со о to to to ¦—' со to to О со со -4 го 4^ оо >—Ь о СЛ оо СО о СО ^1 CD о> to со to ~ о СЛ о 00 4*. 4* к—к 05 ^ о 00 СЛ о 4*> 4^ СО СО СГ) 4* 4^ СО о о со 4^ со о И—к 4^ со со оо со о ^ со to to со to *-* — со СЛ 4^ to ь- оо СО СЛ оо ^4 СО о 00 4* ст> ^1 to 00 Оо 05 о СО со Оо о Со Н—L (Л — ¦<! <| СЛ о со *v| СО ^1 со 4*. СЛ ^1 СЛ СЛ СЛ 4^ СЛ G5 1—1 со С5 О ^а со О О СЛ н- 00 СО to СЛ СО СО to СО to СЛ со СО 00 сл -^ о to со to со to 00 1—к о СЛ to оо со о 4^ СЛ СО о со 00 Oi СО — -J ^1 о 00 ^4 ст> ^1 о 00 1—к *^ сл со СЛ СЛ о •—' to СО 4^ 00 4^ со СО 4^ о> 00 СО 00 О) t—k О ^1 to СЛ со о оо — ^^ 00 — to to СЛ to о СЛ to о со ^1 -* t—к СЛ о to CD СО 4^ 4^ to 00 со со со to СО о X (Т> о «•о 3 3 ь- ND СО 4ь Сл <Л п я п Л) л о п 2 я о 3 •о 2 ю ° я я ¦S а г
Сравнивались следующие методы: 1) прямой метод с адаптивной нормировкой и оптимальной заменой элементов опоры (длинный шаг); 2) прямой метод с адаптивной нормировкой и упрощенной заменой элементов опоры (короткий шаг); 3) прямой опорный метод с симплексной нормировкой [5]; 4) двухфазный симплекс-метод; 5) метод Чарнса [40]. (В отличие от метода 3 при выборе ведущего столбца предпочтение отдается столбцам, соответствующим некритическим компонентам текущего плана); 6) модифицированный прямой метод с адаптивной нормировкой и оптимальной заменой элементов опоры. (В отличие от метода 1 ведущая строка выбирается из условия максимума начальной скорости убывания двойственной целевой функции.) Перечисленные методы реализованы в виде подпрограмм на языке FORTRAN-IV ЕС ЭВМ. Результаты экспериментов приведены в табл. 7, 8. § 2. Вариант метода с пересчетом оценок Для задачи c'jt->max, Ь*^Лл:^Ь*, d*^.x^.d* рассматривается новая реализация адаптивного метода, в которой, как и в методе обратной матрицы (в одной из классических реализаций симплекс-метода), компоненты д-вектора оценок не запоминаются, а в случае необходимости заново вычисляются по формуле Д* = и' (7оп) А (/011, /) — С], ] е /н; и' (Лш) =с' (Лш) лГп1- Такая реализация позволяет при одном и том же объеме оперативной памяти решать задачи со значительно большим числом переменных, чем при использовании алгоритма § 1. Однако при этом вместо процедуры оптимальной замены опоры (основанной на вычислении «длинного» двойственного шага) используется процедура простой замены опоры (основанной на вычислении «короткого» двойственного шага). В излагаемой ниже реализации компоненты коплана на каждой итерации вычисляются дважды: для построения подходящего прямого направления и для вычисления двойственного шага. В силу указанных причин количество итераций (и время счета) в алгоритме § 1 меньше, чем в алгоритме данного параграфа. Поэтому новую реализацию целесообразно зз
применять лишь в случаях, когда ощущается недостаток оперативной памяти ЭВМ, а задача содержит много переменных. 1. Алгоритм. 1. Зададим план х и положим /Од=0, /н={1, 2, ..., т}, /Оп=0, /н={1, 2, ..., п}, размерность опоры г = 0, число итераций it=0. 2. Вычислим вектор потенциалов и' (/оп) = с' (70п) Л^1. 3. Положим у(/)=со(/)=0, р = 0. 4. Организуем цикл по /е/={1, 2, ..., п), в котором выполним следующие операции: а) со(7) =со(/)+^4(Л /)*?; б) A = u'(I0JI)A(/0п, j)—Cj\ в) /=0, если Д = 0; l=d*j—Xj9 если А>0; l = d] — xh если А<0; г) у(/)=у(/)+Л(/, /)/; д) р = р + А/. (Здесь операции б) — д) выполняются только при /е/ш причем величины А и Z скалярные.) 5. Вычислим вектор w(Ion): wt = b*— со?, если ut>Q\ Wi = b*i — соь если ut<0; wt = 0, если щ = 0, (е/оп- 6. Найдем полное значение оценки субоптимальности р = Р+^/(/0п)^(/оп) и проверим неравенство р^е. При выполнении неравенства перейдем на конец решения задачи, т. е. к п. 25, в противном случае продолжим ее решение. 7. Положим it=it+1 и вычислим / (/on)=^on lw (Лш)— -0(/оп)1- 8. Вычислим у(/н) =Л(/Н, /)/(/). Для этого к найденному в п. 4 вектору а(/) = A(I, Jb)I(Jb) добавим Л(/, J on) I (Jon). 9. Найдем максимально допустимый шаг вдоль /(/оп): положим в jo = 1; в цикле по /S'{/e/On^j?=0} выполним операции: а) 0 = (d^j — Xj)/tj, если lj < 0; 9 = (d] — — Xj)/lj, если //>0; б) если 6<в/0, то положим 9/о = 9, /о = /• 10. Вычислим вг0 — шаг по неопорным основным ограничениям. Положим 9г0 = 9J0, k = 0. Цикл по г<={*е/н: t^O}: а) в = (b* — (ot)/vi9 если vt>0; в = = fai — щ)fa, если ^<0; б) если 9<9*0, то положим 11. Если to = 0, то e = 6j0, в противном случае 9 = 0^. При 9=1 положим х = х-\-1 и перейдем в п. 25. 12. В случае i0 = 0 положим f 1, если //0<0, — 1 —1, если //0>0, 34
в противном случае Г 1, если ^0>0, ~~ 1 —1, если vio<:0. 13. Если /0>0, то перейдем в п. 19. 14. Найдем а^, Положив о,* = оо, /* = 0, для /е/н выполним следующие операции: а) ? = Мот (/0, /оп) Л (70п, /); б) А = и' (Ion)A(Iom i)—cj\ в) если Д=0, х3фй^ %>0 или А = 0, Xj Ф d], | < 0, то положим а/, = 0, а = feg, /* = /; г) при А |<0 вычислим а = —Д/?, если а < а/,, то положим сг/з = а, /# = /, а = Щ>\ д) если А < 0, то Z = d^ — */; если А > 0, то / = d] — ху, I = 0 при А = 0; е) вычислим неопорные компоненты нового плана xj = = Xj + QL Здесь А, /, ? — скалярные величины, принимающие новые значения при каждом / ?= /н. 15. Вычислим опорные компоненты нового плана *j — = #j+6Zj, /е/оп(/(/оп) вычислено в п. 7). Если (1—6)Р< <е, то х — субоптимальный план и, следовательно, перейдем в п. 25. Если (7j*=0, то перейдем в п. 18, так как в этом случае о=о^. 16. Найдем (T2v Положив i* = 0, аи = а^^ для fe/0n выполним следующие операции: a) l = kAl~n {jo, i)\ б) если щ = 0, I > 0, C0t- =^= 6* ИЛИ Н* = 0, I < 0, СО; =^= &**, то положим Gt# = 0, /# = i, а = kl; в) при щ g < 0 вычислим а = — и^/1, если сКа^, то положим а^ = а, *# = г, а = = kt _ 17. Если 1#>0 (G = Gi:it), то, положив /оп = /оп\**» Лш = Л>п\/о> вычислим новую матрицу Лот =4^ (/on\t*. **¦ J<m\lо) Aon (/on\'*t /о)/а- (Для удобства удаленные строку и столбец следует поменять местами с последними (r-ми) строкой и столбцом. Аналогичную перестановку нужно сделать и в множествах /оп и /оп.) Положив г=г—1, перейдем в п. 2, т. е. начнем выполнение новой итерации. __ 18. При /* > 0 (а = а/J вычислим Лот = Afn — — [Л7п Л (/оп, /*) — //о] в/0 Лот /а и, положив /оп = = (Л>пМо)1)/*, перейдем в п. 2. 19. Пусть *"о>0(6 = вг0), ВЫЧИСЛИМ V(lou) =Л (t0, /on) X 20. Вычислим (7j*. Положив /* = 0, ст;а = оо, для /е/н выполним операции: а) ? = &[Л(/0, /)— и(/0п)Л (/on, /)]; б)— е) из п. 14. 35
21. Вычислим опорные компоненты плана xj = xj-{-Qlj, /<=/оп. Если (1—в)р^е, то перейдем в п. 25; если Gjil = 0> то — в п. 24. 22. Вычислим а**. Положив (7;* = tfjft, l'* = 0, ДЛЯ fe/on выполним операции: a) l = — kvi\ б)—в) из п. 16. 23. При ^ > 0 (а = aije) вычислим Аоп1 = Аоп1 + А~0 X А~1 - <^оп — X еи [еи — v (/оп)]/а и, положив /оп = (70nV*) U *о, перейдем на новую итерацию, т. е. в п. 2. 24. При/*>0 (a=ajA) вычислим Аоп + А~п А (70п> /#) и (70П)/а; —Л™ Л (70п, /#)/сГ — »(/оп)/а; 1/а и, положив /оп=70п U *о, 7оп=7оп U /*, r = r+l, перейдем в п. 2. 25. Вывод результатов: л: — субоптимальный план, с'* — значение целевой функции на этом плане, tf — число выполненных итераций. Замечания. 1. Некоторые векторы, например ш(/0п) в п. 5, были введены для сокращения описания алгоритма. При его реализации компоненты этих векторов легко восстановить через другие. 2. Индексным множествам /оп и /оп в программе соответствуют файлы целых чисел; перебирая подряд элементы этих файлов, получаем индексы (te/on или /е/оп), например, плана х. 3. Здесь e'iQA~nl и Л"1 ej0 — /0-строка и /0-столбец матрицы Л~* соответственно и, конечно, умножение вектора на матрицу в этом случае выполнять не нужно. 4. В отличие от алгоритма § 1 в данном алгоритме не вводится дополнительно ни одного n-мерного вектора. Это, во-первых, приводит к дополнительным вычислениям на итерации: дважды вычисляется коплан (при этом вызывается по столбцам вся матрица Л), во-вторых, увеличивает число итераций из-за необходимости выполнять короткий двойственный шаг (без полной минимизации приращения двойственной функции). Табл. 9 тХп Число итерации Время решения, с § 1 §2 § 1 § 2 30X45 3 4 24 28 34 36 12 15 20 23 5 29 30 15 17 70X100 1 2 3 43 54 12 43 58 81 56 64 120 109 187 317 юох 2 3 16 18 86 97 202 225 140 902 50 4 84 116 275 1182 200X250 1 111 117 720 1916 36
2. Численные эксперименты. Для сравнения алгоритмов § 1, 2 по числу итераций и по времени счета приведем результаты решения нескольких задач, сгенерированных так же, как и в эксперименте 3 § 1 (табл. 9). Программная реализация алгоритма § 2 была выполнена на языке АЛГОЛ-ГДР для БЭСМ-6. § 3. Мультипликативная форма Одна из широко распространенных версий симплекс- метода, удобная с точки зрения экономии оперативной памяти для реализации на ЭВМ, называется мультипликативным методом. Изложению соответствующей версии адаптивного метода из § 1 посвящен данный параграф. Приводятся детали реализации, полезные программистам при работе над аналогичными вопросами для других методов. 1. Мультипликаторы. В соответствии с элементарными преобразованиями, которые выполняются над опорной матрицей на итерациях адаптивного алгоритма, мультипликативное представление обратной матрицы будет получено в следующем виде: Аш1 = Лл-Лл-г Лг'ЛгЕгЕг- gv-r?v, (1) где г]г, 1=1, k,— левые мультипликаторы, отличающиеся от единичной матрицы одним столбцом; gj, /=1, v,— правые мультипликаторы, которые отличаются от единичной матрицы одной строкой. Приведем формулы, по которым вычисляются мультипликаторы [1, 35], соответствующие преобразованиям (19) —(22) из§ 1. 1) Замена строки: /оп = (/on\'*) U h, A.Qn /Ion fe> 1 = E; 0 -h(Ion\i*)/h(Q; \/h{Q\' h (^on) = A \l0> «'on) ^on • •'on «'on» _(2) 2) Добавление строки и столбца: 70п = /оп IHo, 70П = ==»'ОП U /*> Аоп1 = Т0ОП1 I, Г) = 0; 1 37
1 = — Лоп Л (/от /*)» (3) . h(Ion) = A(io> Jon)А™, (4) g(Jou) Е] О " L— h(I0U)/a; 1/а а=Л(10, /*)— A (to, Jon) g (Jon) = Jn 3) Исключение строки и столбца: /0п=Л>п\'*> Лт = ^/о> Лоп — "П Лоп ё» Л — g (/on) = Л°п (/, Е; g{J0u\io) 0; i/g(h) (5) ?; 0 L—л(/0п\«"*)/А('*); l 4) Замена столбца: . h(Ion) = A0„ (/01 /оп). (6) «'on = \Jon\]o) U /*» •»оп * оп» 1-1 , g(/on) = 4onM(/0n> /о). (7) Лоп — Л*Лоп » Г?; -g{Jon\lo)/g(1o) п L0; 1/?(/о) 2. Основные процедуры для работы с мультипликаторами. Векторы g и h для мультипликаторов (2) — (7) вычисляются посредством умножения столбца или строки матрицы А (их опорных элементов) на Л^1 слева или справа. Только в формулах (5), (6) умножение на Ло^1 выполняется для единичного вектора: g = Л^1^*, А' = На итерациях адаптивного алгоритма матрица Ао~п1 так же, как и в симплекс-методе, используется только при разложении заданных векторов по строкам или столбцам .матрицы Лоп. Для этого опять-таки выполняется умножение вектора на Л^1 справа или слева. Таким образом, нет необходимости вычислять матрицу Л^ по формуле (1). Для реализации алгоритма достаточно иметь вычислительную процедуру, которая организует умножение заданного вектора на матрицу Ао~п в форме (1) как слева, так и справа: 'PROCEDURE' MULT (Q, АР, AL, NMP, NML, MP, ML, K); 'ARRAY' Q; 'REAL' AP, AL; 'INTEGER' 'ARRAY' NMP, NML; 'INTEGER' MP, ML, K; 'BEGIN' 'INTEGER' I, J, Jl, J2, 12; 'REAL' Rl, R2; 'ARRAY' P[1:K+1]; 38
TOR7 I:=MP 'STEP'-l 'UNTIL7 1 'DO' 'BEGIN' I2:=NMP[I+1]-NMP[I]; R1:=0; REXRD(P[1], P[I2], AP, NMP[I]); TOR'J: = l 'STEP' 1 'UNTIL' 12-1 'DO' 'BEGIN' PLA0R1 (P [J], J2); Rl: = Rl + P[J] * Q [J2] 'END' J; J:=P[I2]; Q[J]:=R1 'END' I; 'FOR' I: = l 'STEP' 1 'UNTIL' ML 'DO' 'BEGIN' I2:=NML[I+1]-NML[I]; REXRD(P[1], P[I2], AL, NML[I]); J2:=P[I2]; R1:=Q[J2]; 'IF'ABS(R1)>E1 'THEN' 'BEGIN' 'FOR' J: = l 'STEP' 1 'UNTIL' 12-1 'DO' 'BEGIN'PLA0R1 (P[J], Jl); 'IF' Jl = J2 'THEN' Q [Jl] : = P [J] * Rl 'ELSE' Q [Jl] : = Q [Jl] + P [J] * Rl 'END' J 'END' 'END' I 'END' MULT; Назначение параметров процедуры MULT: Q — вектор, который умножается на матрицу (1), результат заносится на место этого же вектора; АР, AL — файлы, где хранятся правые и левые мультипликаторы; NMP, NML — целые массивы для хранения начальных адресов правых и левых мультипликаторов в файлах АР и AL; MP, ML — число правых и левых мультипликаторов; К — размер опоры. REXRD(P[1], P[I2], АР, NMP[I]) списывает правый мультипликатор из файла АР, начиная с AP[NMP[I]], в массив Р. Мультипликатор имеет 12—1 ненулевых элементов в строке (или столбце) с номером, находящимся в Р[12]. PLA0R1 (P([J], J2) из пяти последних разрядов P[J] выделяет индекс ненулевого элемента (P[J]) (например, номер столбца для строчного мультипликатора) и заносит в J2. Процедура MULT выполняет умножение вектора на матрицу (1) слева или справа в зависимости от порядка расположения параметров. Например, если требуется выполнить умножение с' (Jou) Л^\ то обращение к этой процедуре записывается так: MULT (С, AL, АР, NML, NMP, ML, MP, К), а при вычислении произведения вида ^nQ(/on)-MULT(Q, АР, AL, NMP, NML, MP, ML, К). 39
Поскольку в больших задачах ЛП матрица Л, как правило, сильно разрежена (число ненулевых элементов менее 1 %), то и векторы h и g, по которым строятся мультипликаторы, будут содержать большое число нулевых элементов. Поэтому в файлы AL и АР следует записывать лишь ненулевые элементы и их индексы. Пусть в Q находится вектор h (или g"), с помощью которого нужно вычислить мультипликатор ? (или г)) и записать его в компактной форме в файл АР (или AL). Эту операцию можно выполнить с помощью следующей процедуры: 'PROCEDURE7 SPMR (10, Q, ML, NML, AL, В, К); 'ARRAY' Q; 'REAL' AL; 'INTEGER' 10, ML, K; 'INTEGER' 'ARRAY' NML; 'BOOLEAN' B; 'BEGIN' 'INTEGER' I, J, Jl, II; 'REAL' Rl, R2; 'ARRAY' P[1:K+1]; R1: = 1/Q[I0]; R2:='IF' В 'THEN' 1 'ELSE' Rl; J:=0; 'FOR' I: = l 'STEP' 1 'UNTIL' К 'DO' 'BEGIN' 'IF' ABS(Q[I]) <ю-\0 'THEN' 'GO' 'TO' EK; J:= J+l; P[J] : = 'IF'I = 10 'THEN' R2 'ELSE' —Q [I] * Rl; PLA031 (P[J], I); EK: 'END' I; J1:=J+1; P[J1]:=I0;ML:=ML+1; I1:=NML[ML]; NML[ML+1]: = I1+J1; REXWT (P[l], P[J1], AL, II) 'END' SPMR; Здесь 10 — номер ведущей строки (столбца) мультипликатора; ML — число ранее записанных мультипликаторов; NML запоминает начальный адрес следующего мультипликатора, при B = 'TRUE' на место ведущего элемента записывается 1, при B = 'FALSE/—1/Q[I0]; К — размерность опоры; AL — файл, в который записываются мультипликаторы. PLA031(P[J], I) запаковывает i-и элемент мультипликатора вместе с индексом i в одну ячейку. REXWT(P[1], P[J1], AL, II) переписывает информацию о мультипликаторе в файл AL, начиная с адреса I1=NML[ML]. При формировании и записи, например, правого мультипликатора g (2) достаточно с помощью оператора MULT получить вектор H = /i(/0n), IZ = u, а затем выполнить оператор SPMR(IZ, Н, MP, NMP, АР, 'FALSE', К). Замечание. Если число итераций велико, то даже при компактной записи длина файлов AL и АР, необходимая для запоминания мультипликаторов, может стать чрезмерно большой. Во избежание трудностей, связанных с этим обстоятельством, в программе следует предусмотреть процедуру повторения (обновления), которая по имеющейся совокупности опорных строк и столбцов формирует новые 40
файлы меньшей длины, так как в процессе их формирования будут записываться только мультипликаторы вида (3) и (4), соответствующие накоплению опоры. Рассмотрим мультипликативный вариант адаптивного алгоритма, в котором, как и в алгоритме § 2, оценки Aj, /^/н, вычисляются через вектор потенциалов, но в отличие от алгоритма § 2 эти оценки запоминаются, что позволяет избежать их повторного вычисления и организовать оптимальную замену опоры. 3. Алгоритм. 1. Зададим План X И ПОЛОЖИМ ion — 0, /оп = 0, /н={1, 2, ..., т), /н= {1,2,..., /г}, it = 0, k = r=09 ML = MP = 0, NML[1] = NMP[1]=1. 2. Вычислим вектор потенциалов и' (/оп) = с' («ЛшМ"1. Для этого при U = с (Jon) выполним процедуру MULT (U, AL, АР, NML, NMP, ML, MP, К), после чего будем иметь U = и' Von) = С (J0n) А™. Если ML=MP = 0, в MULT вычислений не будет. 3. Положив i;(/) =©(/)= 0, |3 = 0, выполним в цикле по /е/={1, 2, ..., п} следующие операции: а) со(7) = = со(/) + Л(/, j)xfi б) А, = и'Л (70П, j)-cj\ в) lj = = d*.—xJf если Aj<0; lj = d*j — xh если Aj>0; lj=0, если A,- = 0; г) v (I) = v(I) — A (/, /) Ifi д) P = p - A,/,. Здесь A (J) и I (J) — я-векторы, поэтому значения A7-, lh j ЕЕ JR, запоминаются. 4. Вычислим w (/on): oj* = b\ — соь если щ > 0; ^ = = 6^^ — co?, если щ<0\ Wi = 0y если щ = 0. 5. Досчитаем оценку субоптимальности р = р + +и/(/оп)10(/оп) и проверим неравенство р^е. Да->п. 19, нет->п. 6. 6. Вычислим / (70П) = А7п (w (70п) — v (70п)). Для этого положим L = w (70п) — ^ (70п) и обратимся к процедуре MULT(L, АР, AL, NMP, NML, MP, ML, К). 7—10. Выполнив пп. 8—10 из алгоритма § 2, найдем шаг в. 11. Вычислим новый план Xj = xj-\-@lj1 /е/, и псевдоплан Kj=Xj-\-lj, j^J; положим it = it-\-l; если (1— в)Р^е, то перейдем в п. 19. 12. Пусть e = 0jo. 1) При Xj0<rf*i положим &i=l, а = = и/о —d,/0; 2) при x/o>d* положим ft1 = —1, а = d! — jo /о — х/0; 3) по формуле (15) § 1 вычислим подходящее двойственное направление. Для этого, положив Р = рь pt = 0, /= 1, k, гф\ъ, pjo= 1, выполним оператор MULT (Р, AL, 41
АР, NML, NMP, ML, MP, К). В результате получим вектор Р Con) = e'j,A7n = Am (/о, /оп) и с его помощью построим I (70П U /н) = {— КР (/on). kiP (/оп) А (/оп, /н)}. Перейдем в п. 14. 13. Пусть в=в*0. 1) При a'ioK<.b*i0 положим k±= — 1, а = а'.к — &.•; 2) при а,'х>Ь* положим &i = l, а=й! — —а^х; 3) по формуле (14) § 1 вычислим подходящее направление для двойственного плана. Для этого, положив Q = = A(i0, Jon), выполним оператор MULT (Q, AL, АР, NML, NMP, ML, MP, К). Тогда будем иметь Q = q(I0IL) = = A(i0y /опМшЛ с помощью которого вычислим ?(/опи и/н)={*1^(/оп). МЛ(*о, /н)-?'(/оп)^(/ош 4)1}. 14. Выполним оптимальный (в смысле минимума приращения двойственной функции) двойственный шаг. Это делается так же, как в пп. 11—16 алгоритма § 1. В результате получим индексы i* и /* для преобразования опоры. 15. Пусть 0 = 0го, сг=(Тг* (при 0 = 0jo перейдем в п. 17). Правый мультипликатор (2) Q = q (70п) = A (i0, Jon) А^п уже вычислен в п. 13. Выполним его запись в файл AP:IZ = i_#, SPMR(IZ, Q, MP, NMP, АР, 'FALSE', К). Полагая /оп = (/0п\'*) U'o, перейдем в п. 2. 16. Пусть 0 = 0го, a=crjv- Тогда при Q=A(I0n, /*) выполним оператор MULT(Q, АР, AL, NMP, NML, MP, ML, К). Получим Q = q{I0n)=AonA{Iow /*). При Р = = A (iQy Jon) выполним оператор MULT (Р, AL, АР, NML, NMP, ML, MP, К). Получим Р = р (/оп) = А (*0, /оп) Л'1. Положив К = К+ 1, Q[K] = h запишем левый мультипликатор (3) в файл AL: SPMR (К, Q, ML, NML, AL, 'TRUE', К). Положив Р [К] = &iE/*, запишем правый мультипликатор (4) в файл AP:SPMR(K,_P, MP, NMP^ АР, 'FALSE', К). Положив г = г+ 1, /оп =/<шU*о. -Лт = = /onU/*, перейдем на новую итерацию, т. е. в п. 2. 17. Пусть 0 = 0jo, сг=<7г*. Положив Q = qu 9г = 0, i=l, ky хф1„ qu=ly выполним оператор MULT(Q, АР, AL, NMP, NML, MP, ML, К). Получив Q = А7п (Лш> **) — левый мультипликатор (5), запишем его в файл AL:J0 = /0, SPMR (JO, Q, ML, NML, AL, 'FALSE', К). Правый мультипликатор (2) P = A7n (/о, /оп) был вычислен в п. 12. Запишем его в файл АР: IZ = t*, SPMR(IZ, Р, MP, 42
NMP, АР, 'TRUE', К). Полагая r = r—1, Ion = Ion\i^ Лш = Лш\/о» перейдем в п. 2. 18. Пусть e = 6j0, a=(7j*. Положив Q=A(I0II, /*), выполним оператор MULT(Q, АР, AL, NMP, NML, MP, ML, К). Будем иметь Q = A7nA(Ion9 /*) — левый мультипликатор (7), запись которого в файл AL реализует оператор SPMR(J0, Q, ML, NML, AL, 'FALSE', К). Положив /on = (/0n\/o)U/*, перейдем в п. 2. 19. Вывод результатов: х— субоптимальный план, с'х — значение целевой функции, it — число итераций. Замечание. Описанный алгоритм не включает процедуру повторения, которая работает по достижению большого числа левых или правых мультипликаторов (ML>MAX VMP>MAX). Эта процедура повторяет операции п. 16 при /*е/оп, io^/оп, k=l, г (не меняя г — достигнутый размер опоры), кроме операции получения Р[К]=а (из (4)) и дополнительной операции для упорядочения опорных индексов. 4. Численный эксперимент. Некоторые примеры из табл. 5 были решены и с помощью мультипликативного алгоритма. Результаты приведены в табл. 10 для сравнения с алгоритмами § 1,2. Табл. 10 тхп k Число итераций Время решения, с § 1 §2 §3 § 1 §2 §3 70X100 1 43 43 43 56 109 67 2 45 59 45 64 187 75 100X150 1 59 62 59 156 401 180 2 76 86 76 202 740 242 200X250 1 111 117 111 720 1916 876 § 4. Адаптивный алгоритм для канонической задачи 1. Постановка задачи. Рассмотрим линейную задачу с'я-^тах, Ax=b, d*^x^.d*, (1) где с, х, d*, d* — я-векторы, b — /n-вектор, А — mX/г- 43
матрица, А = А (/, /), причем rank Л = т, п> т, I = = {1,2, ...,т}, /={1,2, ...,п}. Пусть допустимое отклонение 8^0 от максимума целевой функции, начальный план х и опора Л0п=Л (/, /оп), /опс=/, заданы. Требуется построить алгоритм поиска е-оптимального плана задачи (1): с'х°—с'х^е, где х° — оптимальный план. 2. Критерий оптимальности и субоптимальности. Из уравнения и/А0и=с/(10л) найдем вектор потенциалов и' = с' (/оп) Л^1. Вычислим оценки Д7- = и'А (/, /) — cjy ] ЕЕ */н, JK = J\J0u- Тогда приращение целевой функции, соответствующее допустимой вариации Ал:(ЛАл:=0), можно записать в виде с'Д* = —Д'(/н)Д*(/н). (2) Условие неположительности приращения (2) для допустимых Axj (Axj^CO, если xj = d*\ Ах7->о» если xj=d*n Axj — произвольное, если d^j<Cxj<Cd*.) сводится к соотношениям А7- > 0 при Xj = d%j, Aj < 0 при Xj = d?, Д7- = 0 при d*j<xj<d*r (3) составляющим достаточное условие оптимальности плана X. Максимум приращения (2) при условиях d*j — *j<A*j<dy* — xj, /G/H. (4) равен P = - 2 Д/ (<**>• - *i) - 2 A> Ц! - *j)- (5) A;->0 A;-<0 Поскольку при вычислении p ограничения на Ax(Jon) не были учтены, то $^с'х°—с'х, т. е. (3 — оценка сверху для приращения целевой функции. Таким образом, выполнение неравенства Р^в (6) означает е-оптимальность плана х: с'х°—с'х^.г. 3. Подходящее направление для плана х. Пусть при заданном е план х не удовлетворяет условию (6). Построим подходящее направление /(/н) из условия максимального приращения целевой функции (2) при допустимых приращениях (4) плана х: 44
lj = d* — xjy если Д7- < 0; lj = d*j — xj, если Д7- > 0; /j = 0, если Aj = 0, /g/h. (7) Опорные компоненты lj, /е/ош найдем из равенства Л/=0: /(/оа)"^1^/, /н)'(/н)- (8) 4. Вычисление шага. При вычислении нового плана х=х-\-®1, где I определено по формулам (7), (8), 6^1, могут нарушиться только ограничения на опорные переменные. Вычислим максимально возможный шаг вдоль /: в = min{l, в/о}; в/о = mine,-, вj = (d! - xj)/ljy если Z/>0; (9) 0j= (d*j—Xj)/Lj, если Zj<0; 6j=cx), если Zj = 0. Новый план х=х-\-Ы при 0=1 будет оптимальным, при (1—6)р^е— е-оптимальным. 5. Разложение оценки субоптимальности. Дальнейшее улучшение плана х возможно только при новой опоре. Операцию замены опоры проведем с помощью итерации в двойственной к (1) задаче: b'y + d*'w — d'v-+ min, A'y+w — a>c, ш>0, u>0. (10) Имея коплан Д, сопровождающий опорный план {х, Лоп}, легко построить план задачи (10): У' = и' =с' (J0U)A-nl; wj = 0, Vj = Aj, если Д7->0; (11) Wj = —Aj, Vj = 0, если Д;^0. Подставив двойственный план (11) в выражение (5) и воспользовавшись равенством с'х° = b'y°-\- d*'w° — d'v°y получим р = Д' (J) х (J) — v'd* + w'd* = (y'A — c')x-v'd*+w'd* = = с'х° — c'x+(b'y + d*'w — d'v) — - (6V-dy + d*W) = p,+ p0n, (12) где Рэс — мера неоптимальности плана х, роп — мера неоптимальности опоры. 6. Двойственный шаг. Построим подходящее направление для коплана Д. Положив k = — 1, если х/0 =d*-9 k=l, если Xf0 = d*/0, вычислим вектор g(/H) = fe;/-M(/, /н). (13) 45
Двойственный шаг а вдоль ?(/н) найдем, минимизируя приращение двойственной функции pon в (12). Начальная скорость убывания двойственной функции вдоль g равна: а0 = и/0 — dj0, если k=l, а0 = d*e — х/о, если k = — 1, где к = х + I. При движении вдоль направления ?(/н) скорость убывания двойственной функции остается постоянной, пока некоторые компоненты коплана Д = Д+а? не обратятся в нуль. Если до этого момента скорость была равной ал, то при дальнейшем движении она будет равна a*+i = «а + 2 ^ ^Ki ~ d*ri + |,<0, aW=o + 2 ?; (*-<*=»)' (И) где Д}й) — новые нулевые компоненты, полученные при движении, соответствующем скорости а&. Если на каком- то этапе получим as^0, то движение вдоль ?(/н) следует прекратить. Пусть длительность движения при скорости аи равна а&. Тогда новый коплан, полученный в результате движения вдоль |(/н), А(/н) = Д(/н) + S—1 + 2 аА:? (^н)- Любой индекс /# кз множества /н0 = например, тот, с которым было вычислено последнее положительное слагаемое в (14), можно взять для преобразования опоры. 7. Преобразование опоры. В опоре Лоп заменим столбец а1о на аи, 70п = (Jou\j0) U/V При этом оценка субопти- S—1 мальности Роп уменьшится на величину г = ^ | afe | ай и, следовательно, станет равной Р = (1—в) Р — г. Если Р<!е, то л; — е-оптимальный план. Матрица, обратная к Лоп(/, /оп), вычисляется по формуле Аоп =[Е+ (е1о - Аоп А (/, и)) е;/а]А7п\ <* = Чи. (15) 8. Алгоритм. 1. Вычислим вектор потенциалов а' = = с' (Jot^Aw и найдем оценки Aj = u,A{I, j)—cjy /=/н- 46
2. По формуле (5) найдем оценку субоптимальности р. При |3^е перейдем в п. 13. 3. Вычислим подходящее направление / по формулам (7), (8). 4. Максимально допустимый шаг в вдоль / найдем по формуле (9). 5. Вычислим новый план х=х-\-®1 и псевдоплан х = = х+1. При (1—в)р^е переходим в п. 13. _ 6. Положив k = — 1, если xIo = d*.\ k=l, если xIo = = d#/0, вычислим подходящее направление g для коплана А по формуле (13). 7. Вычислим начальную скорость убывания двойственной функции при движении вдоль g: a = Xj0—d*j0, если k = 1; а = d*.Q— и/0, если k = — 1. 8. Среди Aj, /е/н, выявим нулевые компоненты и по формуле (14) найдем новое значение а. Если среди индексов /, по которым вычислена положительная добавка в (14), есть такие, что d^j<Xj<id*., то полагаем /* =/. (В противном случае в качестве /* берется любой индекс, с которым вычислена положительная добавка в (14).) 9. Если а^О, то переходим в п. 12, иначе — в п. 10. 10. Вычислим шаг а& = гтп{—Aj/gj, ?Д/<0, /е/н}. 11. Пересчитаем коплан Aj = Aj+(Tfcgj, /^/н> и переходим в п. 8. ^12. Преобразуем опору 70П= (/оп\/о) U/*, матрицу Л^и пересчитаем по формуле (15). Положим Aj0 = ko, тем самым закончено построение нового коплана. Новую итерацию начинаем с п. 2. 13. Выдача результатов. Результаты численного эксперимента приведены в § 5. § 5. Алгоритм с симплексной нормировкой 1. Схема метода. Рассмотрим прямой опорный метод решения c'x-+max, Ax = b, d^^x^d*, (1) задачи (1), отличающийся от изложенного в § 4 адаптивного алгоритма видом нормировочного условия, которое используется при построении подходящего направления. В данном параграфе максимум приращения (2) § 4 47
будем вычислять не при условии (4), а при симплексной нормировке ^ 1 А*/1 = 1 • /&/н Очевидно, что максимум функции — А'(/н)/(/н) при условии ^ 1^1 = 1 достигается на векторе l(JH) с ком- понентами *j* = — signAjft, /j = 0, /<=/н, /V=/*; |А/*| = max |Aj|. (2) Опорные компоненты / вычисляются по формуле (8) § 4, шаг вдоль направления l(J0U) вычисляется, как и в § 4, но при этом учитывается дополнительное условие <**/•< */# + e//,<d7V Двойственный шаг в методе данного параграфа не выполняется, а для преобразования опоры используется индекс /*, найденный в (2). 2. Алгоритм. 1. Вычислим вектор потенциалов и'=- = с' (Jon) Ам и найДем оценки А7- = и'А (/, j) — Cj, jeJK. 2. По формуле (5) § 4 найдем оценку субоптимальности (3. Если р^е, перейдем в п. 7. 3. Подходящее направление / для изменения плана найдем по формулам (8) § 4, (2). 4. Максимально допустимый шаг G вдоль /(/0п) найдем по формуле (9) § 4. Положив 6/„ = dj — Х]ф при 1Ы = 1; в/, = xjm — djm при 1-ы = — 1, проверим неравенство в/„ <; 0. Если неравенство выполнено, вычислим новый план х = х + ®jj и перейдем в п. 2; если нет, перейдем в п. 5. 5. Вычислим новый план х = х-\-Ш. При (1— в)(3^е х — субоптимальный план^Выдаем результаты. 6. Преобразуем опору Jon = (/Оп\/о) U/*» пересчитаем А^п по формуле (15) § 4 и перейдем в п. 1. Для данного алгоритма в мультипликативном варианте так же, как и для алгоритма § 4, будет строиться последовательность только левых мультипликаторов вида (7) § 3. Сравнивая трудоемкость итераций алгоритмов § 4, о, замечаем, что в обоих алгоритмах необходимо выполнение основной операции — скалярное умножение т-векто- ра на все неопорные столбцы матрицы А. В алгоритме § 4 она выполняется при вычислении подходящего на- 48
правления ?(/н) для коплана Д(/н), в алгоритме § 5 — при вычислении коплана Д(/н). Вторая из операций — пересчет Л^1 — присутствует в обоих алгоритмах. Для реализации алгоритма § 4 требуется больший объем памяти для запоминания векторов Д(/н) и ?(/н). Число итераций в алгоритме § 5 значительно больше, чем в алгоритме § 4, следовательно, решение задачи по алгоритму § 5 требует больше времени. Из приведенных ниже результатов экспериментов видно, что с ростом отношения п/т разница в числе итераций в алгоритмах § 4, 5 становится заметной. 3. Численные эксперименты. Задачи (1) для экспериментов генерировались процедурой GENER1, описанной в § 1. В пределах заданной размерности задачи различались с помощью параметра /, который принимал значения / = 33+7&, k=l, 2, 3, 4. Элементы матрицы А генерировались при i= 1, m, где i — номер строки матрицы А со значениями на отрезке [—100, 100]; компоненты векторов с, d*, d* со значениями на отрезках [—50, 50], [—150, 0], [0, 100] — при i = m+l, m+3, m+4 соответственно. Эксперимент 1. Цель эксперимента — сравнить алгоритмы § 4, 5 по времени решения и числу итераций для различных значений тип. Вектор правых частей и начальный план брались равными нулю. Результаты эксперимента приведены в табл. 11. Эксперимент 2. Цель эксперимента — сравнить алгоритмы § 4, 5 по времени решения и числу итераций при п^>т. Компоненты вектора генерировались при i=m+2 со значениями на отрезке [20, 100]. Для поиска начального Табл. 11 тхп Номер задачи Число итераций Время решения, с §4 §5 §4 §5 30X45 1 18 21 3 3 2 15 21 2 3 3 12 18 2 3 4 13 18 2 3 70X100 1 48 58 30 35 2 53 56 32 35 3 38 51 26 30 4 54 58 32 36 49
опорного плана использовался алгоритм § 5. Как и на первой фазе симплекс-метода, решалась задача т — 21Xn+i->• max, Ax+xu = b, d*^x^.d*, xu^0, xu = t=i = (Xn+i, ..., xn+m). Для некоторых тип, например, т = 30, я = 45, сгенерированные описанным способом задачи не имели планов (при решении задач первой фазы получались ненулевые искусственные переменные). В задачах с п^т почти всегда находились планы, после чего решение задачи продолжалось с помощью алгоритмов § 4, 5. Время решения и число итераций для каждого алгоритма фиксировались с момента окончания первой фазы. Результаты эксперимента при га=10, п= 100 приведены в табл. 12. Табл. 12 Номер задачи Число итераций Время решения, с §4 §5 §4 §5 1 34 123 4 8 2 26 113 4 7 3 26 125 4 8 4 40 121 5 7 5 28 119 3 7 6 33 128 4 7 7 52 133 5 7 8 29 116 4 7 9 22 132 4 8 10 40 127 5 7 § 6. Конечные модификации Адаптивный метод, изложенный в трех вариантах (см. § 1—3), конечен лишь при выполнении определенных условий невырожденности. Эти условия выполняются почти в каждой задаче (и далеко не просто записать задачу, для которой адаптивный метод приводит к циклу), поэтому на первый взгляд при разработке алгоритмов, нацеленных на решение прикладных задач, не имеет смысла заботиться об исключительных ситуациях, тратить усилия на построение специальных дополнений, обеспечивающих конечность алгоритмов. Подобные аргументы в свое время приводились и в теории симплекс- метода. Однако там уже давно разработаны конечные модификации. Безусловно, они имеют большое теоретическое значение, так как позволяют завершить теорию симплекс-метода. Нельзя принижать и практического значения конечных методов. Хотя в «чистом» виде зацикли- 50
вание из-за вырожденности в практических расчетах, по утверждению многих специалистов, пока не встречалось, но не исключено, что замедление сходимости, часто наблюдаемое при решении прикладных задач, вызывается ситуациями, близкими к вырожденным. В связи с этим в научной литературе повысился интерес к явлению зацикливания. Например, в 1977 г. Р. Блэнд предложил новый конечный вариант симплекс-алгоритма. В данном параграфе излагается конечная модификация адаптивного метода, основанная на вырожденных планах, сопровождающих двойственные планы [12, 13]. Предварительно описываются два конечных варианта симплекс-алгоритма. 1. Конечные варианты симплекс-алгоритма. Во введении описан классический симплекс-метод решения канонической задачи с'я-^тах, Ах=Ь, х^О, (1) где А=А(1, /), /={1, 2, ..., т}, /={1, 2, ..., п). Как известно, симплекс-алгоритм конечен, если задача (1) невырождена, т. е. у любого ее базисного плана х = К, хя = 0}, хб = х {J6) = Atlb > 0, Аб=А(1, J6), J6czJ, det Абф0, xu=x(JK), JK=J\J6, базисные переменные xjf /е/б, отличны от нуля. В этом случае на каждой симплексной итерации положителен шаг в = в/0 = min Sh i е /б» в* = Xt/xtIo, xiJo > 0, i \^) {xi}o1 /e J6) = Аб a/o, ДУо < 0, что ведет.к строгому возрастанию целевой функции. В вырожденных задачах на некоторых итерациях могут появиться шаги 6 = 0. В этих случаях происходит смена базиса, но не изменяется значение целевой функции. Многократное повторение подобной ситуации может привести к базису, который уже встречался на предыдущих итерациях. Иными словами, происходит зацикливание и метод оказывается бесконечным. Классический метод предотвращения зацикливания состоит в дополнении правила (3) вычисления ведущего индекса i"o. В вырожденных задачах минимум по te/б в (3) может достигаться не на одном to, а на множестве индексов 7б = {'* е J6, ©и = min **/**/«,» ' ^ h* *</„ > 0}- 51
Для выбора среди j\ ведущего индекса /0 строится множество Уб = {!* е J б, в/, = ттхц/хц0, i е /?}. Если |/б|>1| то строятся множества j\, Jt, .... Пусть построено множество J%. Тогда ./б41 = {'* G ^б> в?,, = mmxik/xiIoy /e4i %о > 0}- Для каждой задачи (1) и любого базисного плана (2) через конечное число шагов будет построено множество ]\ с единственным элементом, который и берется в качестве ведущего i0. Известно несколько обоснований описанной процедуры избежания зацикливания (метод возмущений, лексикографический метод). Конечный вариант симплекс-алгоритма, предложенный Р. Блэндом, связан с определенными правилами выбора как индекса /0 ведущего столбца (выше этот индекс удовлетворял только необходимому условию Ajo<0), так и индекса i0 ведущей строки симплексной таблицы: /0= = min {/ е /н: Aj<0}, i0 = min {U е J б'-® и = min Xi/xijo, Xij0>0, ie/б}. Покажем, следуя В. С. Глушенкову, что при таком выборе ведущих элементов возникновение цикла невозможно. Предположим противное: пусть при решении некоторой задачи методом Блэнда возник цикл. Разобьем множество / на непересекающиеся подмножества: /Пб — множество индексов, принадлежащих /б на каждой итерации цикла, /дн — множество индексов, не принадлежащих /б ни на одной итерации цикла,/бн =/\(7пбиЛш)- На любой итерации цикла выполнены соотношения А(/пб) = 0, Д^пн) = 0- Пусть /# = max {/: / е J6H}, ^* — направление на итерации цикла, когда /* выходит из базиса, Д* — оценки на итерации цикла, когда /# входит в базис. Из правила Блэнда следует Д*(/бн\/*)>0, /* (Л>н\/*) >0, Д/\ < 0, //\ < 0. Тогда д*'/* = д;;/;* + д*'(^н\/*)/*(^н\/*)+ + А*' (/пб) /* (/пб) + Д*' (/пн) /* (/ш) > 0. С другой стороны, А*'/* = (#*'А — с')1* = — с'/* < 0. Полученное противоречие доказывает невозможность цикла в модификации Блэнда. Приведем конечную модификацию симплекс-алгоритма, предложенную и обоснованную В. С. Глушенковым после ознакомления с материалом данного параграфа. Рассмотрим задачу (1). Процесс решения задачи на- 52
чинается с некоторого базисного плана {х, /б}. Положим s = o, An =0. Опишем итерацию метода. Шаг 1. По аналогии с классическим симплекс-методом строим вектор оценок A'(JH) = с' (J^A'e1 А(1, /н) — — с' (/н). Проверяем достаточное условие оптимальности Д'(^н)^0- Если оно выполнено, то решение задачи закончено. При s = О оптимальным планом задачи будет х, при s>0 — план л:, х(№) = x(J(6n), x(J\J{6n) = 0. Если Н/е=/н, Ay<C0, то переходим к следующему шагу. Шаг 2. Выбираем произвольно /0 е /н, Aj0 < 0, и строим направление I улучшения плана х: lj0 = 1, *(/н\/о) = 0, l(J6) = -AJlA(I, /о). Ш а г 3. Вычисляем шаг G0 вдоль I: e° = min {0j, / е </б\4п}, в;- = — Xj/lj, если /7- < 0, в; = оо, если lj > 0. При в0 = 0 переходим к шагу 5; при 6° = оо — к шагу 6. В случае 0 < 6° < оо переход к следующему шагу. Шаг 4. Заменяем базис: /б = (/б\/*) U /о» гДе /* — индекс, на котором достигается минимум при вычислении О0. Вычисляем новый план х, x(J{6n) = x(J&l)9 x(J\J$)= = x(J\J$) + e°l(J\J$). Переход к шагу 1. Шаг 5. Положим /бп+1) = {/6Е J& */>0}. Хотя бы одна компонента xjy /е/б\./бп+1), увеличивается на положительное число. Увеличиваем s на единицу и осуществляем переход к шагу 3. Ш а г 6. Если 5 = 0, то целевая функция исходной задачи не ограничена на множестве ее планов. Решение закончено. Если s> 1, то полагаем x(J6\J{<$n) = 0, уменьшаем s на единицу и осуществляем переход к шагу 3. Теорема 1. При любых А, Ь, с и начальном базисном плане {х, /б} решение задачи (1) заканчивается через конечное число итераций. Итерация заканчивается при переходе к шагу с меньшим номером, построении оптимального плана либо обнаружении неограниченности сверху значений целевой функции на множестве планов. Для доказательства конечности алгоритма достаточно показать конечность числа итераций, заканчивающихся на шагах 4, 5 или 6. Такие итерации назовем соответственно итерациями первого, второго и третьего типов. Доказательству теоремы предпошлем несколько лемм. 53
Лемма 1. Величина 5 в процессе работы метода ограничена. Доказательство. При замене базиса введенная компонента Xj0 всегда будет положительной. Следовательно, общее число положительных компонент не уменьшается. При увеличении s число ненулевых компонент Xj, /е/оп, увеличивается. Поэтому справедливо строгое вложение AV <= An cz ... a J^ Vs. Но J^ с= J6 Vs, поэтому s <; га. Лемма доказана. Лемма 2. За итерацией второго типа не может следовать итерация третьего типа, а за итерацией третьего типа не может следовать итерация второго типа. Доказательство. Итерация второго типа выполняется при в° = 0, т. е. з/^/б\^бп, Xj = 0, //<0. На следующей итерации /§Ё/бп+1\ ^->0, а значение /7- остается прежним. Следовательно, 67-<<оо, что влечет за собой в°<Соо. При этом переход к шагу 6 (итерация третьего типа) невозможен. Первая часть леммы доказана. Итерация третьего типа выполняется при 0; = оо. Это означает, что У/е/б\/бп» lj^-О. Справедливо неравенство Я/Х) V/e^n. Значит, на следующей итерации G°>0 и переход к шагу 5 (итерация второго типа) невозможен. Лемма доказана. Лемма 3. Число итераций первого типа конечно. Доказательство. Предположим противное: пусть найдется задача, при решении которой бесконечно число итераций первого типа. Величина 5 ограничена. Следовательно, найдется хотя бы одно s0, при котором число итераций первого типа бесконечно. Без ограничения общности можно считать, что s0 — минимальное из таких чисел. Покажем, что, начиная с некоторой итерации, все время s^Sq. Действительно, в противном случае при s = s0 бесконечное число раз выполняется итерация третьего типа. В силу леммы 2 после этого каждый раз при 5<50 должна выполняться итерация первого типа. Следовательно, бесконечное число итераций первого типа должно выполняться при 5<50, что противоречит предположению о минимальности s0. Рассмотрим задачу c'z->max, Az = b{So\ z{J\A$)>0, (4) где g(sq) определяется по плану х сразу после перехода s0— 1 —>-5о- С каждой итерацией первого типа на уровне 54
So осуществляется переход к новому базисному плану задачи (4) со строгим увеличением целевой функции. Поскольку число базисных планов у задачи (4) конечно, то и число итераций первого типа на уровне s0 конечно. Получено противоречие с предположением о бесконечном числе итераций первого типа. Лемма доказана. Лемма 4. Число итераций третьего типа конечно. Доказательство. Согласно лемме 2 за каждой итерацией третьего типа следует итерация первого или третьего типов. Предположим, что число итераций третьего типа бесконечно. При этом возможны два случая: за каждой итерацией третьего типа следует конечное число (возможно 0) итераций третьего типа, а затем следует итерация первого типа; начиная с некоторой итерации, все последующие принадлежат к третьему типу. В первом случае в задаче бесконечно число итераций первого типа, что невозможно в силу леммы 3. Во втором случае 5 неограниченно уменьшается, что невозможно в силу s^O. Следовательно, число итераций третьего типа конечно. Лемма доказана. Лемма 5. Число итераций второго типа конечно. Доказательство. Согласно леммам 3 и 4 число итераций первого и третьего типов конечно. Следовательно, если число итераций второго типа бесконечно, то, начиная с некоторой итерации, все последующие должны принадлежать ко второму типу. При этом 5 должно неограниченно увеличиваться, что противоречит лемме 1. Лемма доказана. Доказательство теоремы. С одной стороны, итерации могут закончиться либо построением оптимального плана задачи, либо обнаружением неограниченности значений целевой функции, с другой — согласно леммам 3—5 число итераций каждого из возможных типов конечно. Следовательно, через конечное число итераций задача (1) при любом плане (2) будет решена. Теорема доказана. Для иллюстрации метода рассмотрим пример, на котором зацикливается стандартный симплекс-метод: 0,75*5—20*6+0,5*7—6*8 -*- max, *i+0,25*5—8*6—*7+8*8 = 0, *2+0,5*5—12*6—0,5*7+3*8 = 0, *з—0,5*5+0,25*6+0,25*7+0,25*8=0, *4+*7=1, *г^0, 1=1, 8. 55
Начальный план xH={0, О, О, 1, О, О, О, 0}; начальный базис /н={1, 2, 3, 4}. Приведем последовательность симплексных таблиц, соответствующих итерациям метода. Исходной является табл. 13. В первый столбец зане- Табл. 13 \ /б \ 1 2 3 4 А 1 1 0 0 0 0 2 0 1 0 0 0 3 0 0 1 0 0 4 0 0 0 1 0 5 0,25 0,5 0,5 0 —0,75 6 —8 —12 0,25 0 20 7 —1 —0,5 0,25 1 —0,5 8 9 3 0,25 0 6 s=0 хб 0 0 0 1 ®i 0 0 ос оо s=l хб 1 1 1 1* ®i 4 2 оо сен список базисных индексов, во втором — восьмом столбцах содержатся коэффициенты разложения столбцов матрицы А по базисным векторам и компоненты вектора оценок, в последующих—компоненты базисного плана и числа в* для различных s. На первой итерации: /о = 5, в1 = 62 = 0, 63 = 64=°°, e° = min6i = 0. Следовательно, эта итерация относится ко второму типу. Базис заменяться не будет, к таблице добавляется новый столбец хб при s= 1, /бп} = {4}. Полагаем x{l)(J5\j№) = xi0) + {1, 1, 1}, х{1) = х[0). Индексы j^JS6n\JS(fal отмечаем звездочкой в правом верхнем углу клетки в столбце s, хб. Увеличиваем s на единицу. На второй итерации: Gi = 4, 62 = 2, 03=°°, /* = 2, 6° = 2 (см. столбец Хб, 5=1). Пересчитываем таблицу по правилу прямоугольника с ведущим элементом х2ь и заменяем множество /б. Получаем симплексную таблицу (табл.14). На третьей итерации: /о = 7, 6i = G5 = 03 = °° = eo. Следовательно, эта итерация относится к третьему типу. Воз* вращаемся к s = 0. На четвертой итерации: в1 = в5 = вз = оо, G4=l, в°=1, /# = 4. Заменяем базис, пересчитываем таблицу, получаем следующую симплекс-таблицу (табл. 15). Она удовлетво- 56
Табл. 14 \ 1 5 3 4 А 1 1 0 0 0 0 2 —0,5 2 1 0 1,5 3 0 0 1 0 0 4 0 0 0 1 0 5 0 1 0 0 0 6 —2 —24 —11,75 0 2 7 —0,75 —1 —0,25 1 —1,25 8 7,5 6 3,25 0 11,5 s=0 хб 0 0 0 1 &i оо оо оо 1 s=\ хб 0,5 3 2 1* ®i ос оо ОС Табл. 15 N. / /б ^\ 1 5 3 7 А 1 1 0 0 0 0 2 —0,5 2 1 0 1,5 3 0 0 1 0 0 4 0,75 1 0,25 1 1,25 5 0 1 0 0 0 6 —2 —24 —11,75 0 2 7 0 0 0 1 0 8 7,5 6 3,25 0 10,5 s=0 хб 0,75 1 0,25 1 ©. ряет критерию оптимальности. Оптимальный план #° = = {0,75; 0; 0,25; 0; 1; 0; 1; 0}. Задача решена. В заключение приведем последовательность базисов при решении данного примера стандартным симплекс- методом, методом возмущений, методом Блэнда и предлагаемым методом (s) (табл. 16). 2. Конечный вариант адаптивного метода. Рассмотрим общую задачу линейного программирования с двухсторонними прямыми ограничениями с'л:->-тах, Ах = Ъ, d^^x^d*. (5) В § 1 описан адаптивный метод решения задачи (5), который состоит в последовательном преобразовании опор- 57
Табл. 16 Номер базиса 0 1 2 3 4 5 6 Симплекс- метод 1, 2, 3, 4 5, 2, 3, 4 5, 6, 3, 4 7, 6, 3, 4 7, 8, 3, 4 1, 8, 3, 4 1, 2, 3, 4 Метод возмущений 1, 2, 3, 4 1, 5, 3, 4 1, 5, 3, 7 Метод Блэнда 1, 2, 3, 4 5, 2, 3, 4 5, 6, 3, 4 5, 6, 7, 4 5, 1, 7, 4 5, 1, 7, 2 5, 1, 7, 3 Метод (s) 1, 2, 3, 4 1, 5, 3, 4 1, 5, 3, 7 ных планов {х, Лоп} и основан на принципе уменьшения оценки субоптимальности р(#, Лоп) =А/(/н+) (л'(/н+) — -d* (/н+)) -Л' (/*-) (* (/*-) -d* (/н-)), где А = л И — С, U = С (J on) ^оп » «/ н = ** \J on» /д\ /H+={/e/H:Ai>0}, /H-={/e=/H:Ai<0}. В классическом симплекс-методе (см. введение) мера успешности итерации определяется приращением целевой функции с'х. Эта мера зависит только от текущего базисного плана х и поэтому в симплекс-методе появляются дополнительные итерации всякий раз, когда не увеличивается с'х. Подобные явления наблюдаются [26] почти во всех прикладных задачах и связаны с вырожденностью планов. Мера успешности итерации адаптивного метода в силу указанного выше принципа определяется уменьшением оценки субоптимальности. Последняя, как известно (см. § 1), зависит как от плана, так и от опоры: р(*, Лоп) =Р(*)+р(Л0п). Поэтому опорный план улучшается адаптивным методом в отличие от симплекс-метода и за счет замены плана, и за счет изменения опоры. Цель настоящего и следующих пунктов — модифицировать метод § 1 на случай, когда он на опорном плане не приводит к уменьшению оценки субоптимальности. Две модификации симплекс-метода для вырожденных базисных планов, описанные в п. 1, направлены только на предупреждение зацикливания и не учитывают непосредственно исходной цели оптимизации в рассматриваемой задаче. Изложенный далее подход основан на том убеждении, что вырождение — один из признаков внутренней 58
специфики задачи. Поэтому следует не «бояться» вырожденных планов, а, напротив, приспосабливать к ним метод оптимизации с учетом дополнительной информации, доступной на итерациях. Пусть {х, Лоп} — опорный план, оценка субоптимальности которого превосходит заданную точность приближения к оптимальному значению целевой функции: Р(*, Лоп)>е. Построим план x№=x+QM№, где № = = /(*>(/): /(1)(/ч+) = 4(/н+)-*(Л+), /(Vh-) = d*(JH_)-*(/H-), /(¦U=0, JH0= JU\(JH+ U/HJ, /(1)(/0п)= -^п1 Л(/, /Н)Х х/(/н); e(1) = min{i, ehi e/i = miney> /е/оп; (7) ej = (d*j-xj)/l(jl) при1\1)<0; ej = (d;-xj)/l]-l) при /}п>0; вj = оо при /}1} = 0. Согласно § 1 имеем р^1), Лоп) = (1—©(1))Р(*. Лоп). Если р(*(1), Лоп) ^е, то решение задачи (5) прекращается на е-оптимальном плане х№. Эта часть итерации совпадает с аналогичной из § 1. Предлагаемая модификация относится к случаю Р(*(1), Лоп) >е. Зададим параметр алгоритма т]>0, положим 5=1, А = «'оп» ^нб = Jн+ U «mi—» «*н0 = •'но» ^0 («'нб ) — &(?нб )» /о = 0. 1*1 = 1 ПРИ */1} = d*A> 1*1 = — 1 ПРИ 4П = dh и по правилам следующего пункта приступим к корректировке направления /(1), считая /i5={/o}- Корректировка закончится построением или е-оптимального плана хг (задача (1) решена), или опорного плана {х, Лоп} с Р(лг, Л^п) < Р (#, ^оп) (начало следующей итерации). 3. Процедура корректировки направления. Пусть при выбранном т]>0 для натурального числа 5 известны: Л', /СН=/\Д, Лб\ k=o, s-i, 4о_1); zk(j$), fe=oTs=I; /о, /*, [**, fe=lTi; 0(s); x(s); Z(s); P(x(s), Л (/, K))\ В (К, /) = [Л(/, Я)]"1- (8) Для 5 = 1 эта информация приведена в п. 2. Используем ее для корректировки направления /<8). Рассмотрим 59
отдельно две возможности: 1) js & {/0, ..., /s-i}; 2) /se{/o, ..., /s-i}. В случае 1) положим zs(K*)=ixsB(js, /)А(/, Кв) (9) и рассмотрим два подслучая: 1а) Ло_1) = 0, 16) ^so~1)=^0. В случае 1а) корректировка начинается с замены в (8) множества К'-К-^К. Для этого сначала подсчитаем а(у)= (—М/)/М/)> если **(/)*,(/)< О, (ш) в остальных случаях, где / е Л<ь ft = s— 1, ... , 0. В каждой ft-й группе (а(/), / е= /нб}} числа о (/) < оо упорядочим по возрастанию: а (/l, *Х а (/*2, ^) < • • • < а (/рл, *)• ДаЛее ПОЛОЖИМ а(0, s_l) = ^(l_ew)Z):) (11) и введем рекуррентно числа а (г, ft), i=l, р&, ft = 5—1, s—2, . ..,0: а(/, й) = а(/-1, *) +12.о;*)iц;л-^л), считая a(0, ft) =a(pfe+i, ft+1). По построению, числа a(i, ft) удовлетворяют неравенствам a(0, 5-1)<0, a(p0, 0)^0; a(0, 5—l)<a(l, 5— l)<a(2, 5— 1) <...<a(pe_i, s—l)<a(l, s—2)<a(2, 5—2) ^.. .<a(pe_2> 5—2)^... <a(l, 0)<a(2, 0)< ... ^a(p0, 0). Поэтому найдутся такие индексы v, 5*, что a(v, s*)^ ^0, a(v—1, 5*)<0 (при v = l считаем, что a(0, 5*) = = a(Ps*+i, s*+l)). После этого множество К в (8) заменяем на множество К = (K\js) U/v> s- Если при этом s^ = 0, v > 1, то корректировку заканчиваем без изменения /(s) построением нового опорного плана {х, Лоп}, Лоп = = Л(/, /од), J0U = K- Согласно § 1 при замене опоры Лоп-^^оп значение двойственной целевой функции на соответствующих сопровождающих планах уменьшается на величину V—1 — ]?a(k, 0)(а(/л,о)—а(/ь-1,о)), где сг(/0,о)=0. Следова- /e=l 60
тельно, для {х, А0п} выполняется неравенство $(х, Аоп) <; <$(х, Лоп), ибо Р(Д<ш)-рИоп) = J?a(?, 0)(ff(/ft.o)-a(/ft_i,o))<0. (12) При s*>0 (s* = 0, v = l) корректировку /<s> продолжаем, заменив данные (8) на следующие *); s*; К, KH = J\K, Jr6 =Jh6, k = 0, s#—1; Ун0* = r(ft). , / И*К _ - / r(*)> = /CH\ U -С; г,(ЛбО = zk(4б')>ft = 0, s, — 1; /0 = 0, Я = /a. hi = I**, k = 177,, e(s,) = 6<s); (13) >.) = *W; 7(«.) = /W. p (~<M Л (/) ?)) = p (JCW> Л (/,*)); Я(?, /) = [Л(/, Я)Г'. Рассмотрим случай 16): Jho'1)?:0- Положим 4о = = {/ев ЛГ" : 2S (/)=0}, Л% = {/еЛГ0: 2S (/) >0}, J™ = = {/ €= y4o-1):2s (/) < 0}, 4б = Л+ U J в-, построим вектор /(s+1) (*hV#) = (i - e(s)) /(s) (tfHV#); lil+l)(Ji4)=d,{J&)-xw(J&y, Z(s+1,(4?)=d* (/?!)- (14) - x(s) (41); /<s+1) (К) = - В (К, I) А (I, Кв) /(s+1) (Кя) и найдем число a(0, S-l) = fis^+1). (15) В зависимости от параметра г]>0 может реализоваться одна из следующих возможностей: 1бА) a(0, 5—1)<0; 162) a(0, s-l)>0, y=(dl-dj) P(*(s), A(I, K))/\ lfs+l)\> >min{p(x(s), Л(/, К)), г)}; 163) а(0, 5-1)^0, v<min{p(^s), Л(/, К)), т|}. *> Вся информация, связанная с номерами &=s*+l, s, во внимание не принимается. 61
В случае 16i) по правилам случая 1а) находим индексы v, s* и заменяем множество К на К, используя вместо (11) выражение (15). При s* = О, v>l корректировка заканчивается опять без изменения /(s) построением нового опорного плана {*, Лоп}, х = x{s\ Лоп = Л (/, 7on)L Jln=K, для которого будет выполняться неравенство p(#, Лоп) < <р(я, Лоп) в силу (12). При 5*>0 (s* = 0, v = l) в случае 16i) корректировку /(*) продолжим, заменив исходные данные (8) на (13). Пусть реализовался случай 1б2). Вектор № заменяем на вектор /<s+1) из (14) (корректируем направление №) и строим новый план #(s+1) = x(s)+0(s+1№+1), где G<s+1)— максимально допустимый шаг вдоль /(s+i): @(s+i) = = min{l, G7s+1}, 6y.s+1 =mmejJj^K,@j=(d^-xf))/lf+l) при /}s+1)<0; ®j = (dj-x(js))/l(fs+l) при /Js+1)>0; e,=oo при /js+1) = 0. Для {x{s+1\ A (I, К)} имеем P(x(s+1), A (I, K)) = (1-в(5+1)) p (*(s), A (I, К)). Если P(x(s+1), A (/, /())<e, то корректировка заканчивается на е-опти- мальном плане хг=х{3+1). При p(*(s+1), А (/, К))>? корректировка продолжается с исходными данными: s+1; /С, Kh>Jh6> k = 0, s; JHoi 2# (Дб)» & = 0, s; /0, jkJ \ik, k=l9 s+1, 6(s+1); *(s+1); /(s+1); P(x(s+1), Л (/, /С)); В (К, /), где [xs+1 = 1 при *(*+!> =d#/s+1; [xs+1 = — 1 при x^+i) = d: . Рассмотрим случай 1б3). В исходных данных (8) заменяем: множество К на К = (K\j8) U /*» где /# —любой элемент из J$ Ф 0, множества /Сн» Лб> Ло на множества Kn = J\K, 4б = /„ 4о = ЛТ1)\1'*\ вектор ze(Jffi) на вектор zs(/h6) = — IV Далее строим направление Z(s+1) по формулам (14). После этого обязательно окажемся в условиях случая 1б2), по правилам которого и продолжаем корректировку. Рассмотрим, наконец, случай 2): /ве{/о, ..., /s-i}. Он может реализоваться только при 5>1 (см. п. 2). Положим x = x^s\ Л0П=Л(/, Jon), Jon=K. Корректировку^заканчиваем построением нового опорного плана {ху Л0п}, для которого р(?, Лоп) ^Р(*, Лоп)—Л- 62
Докажем последнее утверждение. Пусть js = /-, s<s. Тогда согласно проведенным построениям в силу того, что х? =xf + eif+l\ j е= и 4б}, где e=(dl- й*}-)/\ /fl+1) |, J J J k=0 s s s имеем с' x{s) = с' хЩ + вр (xCs\ А (/, K))>c'x<*)+i\>c'x+ + г). Из разложения (9) § 1 с учетом последнего неравенства следует справедливость утверждения. Лемма 6. При любых исходных данных процедура корректировок направления состоит из конечного числа шагов. Доказательство. Данным (8) поставим в соответствие набор вспомогательных задач \ik х. -> max, A (I, K\)JiV))x{K\)J\tl))=b-A{I, J[k~l))X X(x(J[k'l)) + l(J[k-l))); (16) d*, < xj < d], / e 4o_1) U /C\{/o, • • • , /a-i}, /^1}=/\(/СиЛо"1}) с двойственными базисными копланами kk{K\}J%~l)Y Ak (К) = 0, А, (4о_1)) = гк (4о_1)), * = TTs. (17) Процедура корректировок, описанная выше, осуществляется двумя способами: без замены множества К (при этом увеличиваются номера s:s-^s-\-l (см. случай 1б2)) и с заменой множества К'-К-^К. При этом номер s либо уменьшается: s->¦ s*<s (см. случай 1а), 1б1)),либо остается прежним*): s-+s* = s (см. случай 1б3)). Проследим, как преобразования данных (8), соответствующие двум способам корректировок, сказываются на наборе вспомогательных задач (16) и их двойственных базисных копланах (17). Если корректировка идет первым способом, то исходные данные (8) заменяются на данные (13). Очевидно, что задачи (16) с номерами 4=1, 5 и их двойственные базисные копланы (17), соответствующие данным (8) и (13), совпадают. Следовательно, при первом способе *> В дальнейшем не будем отдельно рассматривать случаи s->s*<Cs и s-+s, считая, что s->s*^s. 63
корректировки вспомогательные задачи не решаются, а только увеличивается их число. Легко проверить, что и при втором способе корректировки вспомогательные задачи (16) с номерами k=l, s* совпадают для новых и старых данных. Однако в этом случае двойственный базисный коплан 5*-й задачи, соответствующей новым данным, будет лучше по значению двойственной целевой функции s*-pi задачи (16), чем коплан, соответствующий старым данным. Поскольку 5<|/|, то первый способ не может повторяться подряд бесконечное число раз. Через конечное число корректировок обязательно встретится хотя бы одна корректировка, осуществляемая вторым способом, и при этом произойдет улучшение двойственного базисного плана в 5*-й задаче (16). Поскольку число двойственных базисных копланов в каждой задаче (16) конечно, то и второй способ не может повторяться бесконечно. Таким образом, через конечное число итераций реализуется ситуация, когда надо закончить процедуру корректировок (см. случай s* = 0, v>l, либо случай 2)). Лемма доказана. Теорема 2. При любых Л, Ь, с, d*, d*, m<Coo, n<°°, e^O, r]>0 для каждого начального опорного плана {х, Лоп} через конечное число итераций будет построен 8-оптимальный план задачи (5). Доказательство. Согласно описанному выше алгоритму каждая итерация включает в себя процедуру корректировок направления, конец которой совпадает с концом итерации. Из сказанного выше следует, что процедура корректировок заканчивается в следующих ситуациях: 1) если в случаях la), 16i) выполняются условия s* = = 0, v>l; 2) если в случае 1б2) имеет место неравенство p(^U(U))^e; 3) если реализовался случай 2). Если процедура корректировок закончилась ситуацией 1), то двойственный базисный план задачи (5), сопровождающий опору Лоп, лучше двойственного базисного плана, сопровождающего опору Лоп. В силу того, что число двойственных базисных планов задачи (5) конечно, ситуация 1) может повториться лишь конечное число раз. 64
Ситуация 2) может встретиться только один раз, ибо она означает, что исходная задача решена. Рассмотрим ситуацию 3). Выше показано, что в этом случае целевая функция задачи (5) увеличивается не менее чем на т]>0. Множество планов задачи (5) компактно, следовательно, целевая функция задачи (5) ограничена сверху на множестве планов: с'х ^ М для Vx^{x : Ax = b, d*^.x^d*}. Значит, ситуация 3) может повториться не более чем [М/т]] раз. Из сказанного следует, что для решения задачи (5) необходимо конечное число итераций (процедур корректировок). Теорема доказана. 4. Конечный двойственный точный алгоритм линейного программирования. Рассмотрим задачу f(b) = b'y — d'j) + d*'w-+ min, A'y — v + w = c, (18) а>0, оу>0, которая является двойственной к задаче (5). В линейном программировании наряду с прямыми методами большую роль играют двойственные методы. Известны дополнительные правила к классическому двойственному симплекс-методу, гарантирующие конечность этого метода для любой задачи (5). Однако эти правила выхода из цикла не связаны непосредственно с задачей оптимизации (5). Построим конечный двойственный алгоритм, близкий в идейном отношении к прямому алгоритму, изложенному в пп. 2, 3. Пусть {б, Лоп}, А0ц=А(1, /оп), /опС=7,—начальный опорный коплан [5] задачи (5). Обозначим: /н = /\/ош /й}={/ €= /н : 8,= 0}, Л°1 = {/ €= /н: 8, > 0}, Л°1 = {/е=/н: 67<0}, Л°б = Л°+ U Л-- Построим соответствующий псевдоплан %(1) = *(1) (/): *(1) (Л°1 U Л°о]) = d, (/?> U 48}), и(1) (J{H°l)=d* (Л% х(1) (/оп) = Л"1 (Ь- А (/, /н) %(1 Vh)). Если ^(/оп)^Х(1Ч/опХ^(^оп), (19) то %(1>— (3-оптимальный план задачи (5), |3 = б/(/0П+)Х Х(х(1)(/оп+)- d.(/on+))+ б^/оп-Хх^С/оп-)- <**(/оп-)), /on+={/^Jron:fij>0}, /0п-= {/e/On:6j<0}. При |3^е решение задачи (5) прекращается на е-оптимальном плане х(1). Эта часть итерации совпадает с аналогичной из § 1. 65
Рассмотрим случай, когда на псевдоплане условие (19) не выполняется или выполняется, но |3>е. В этом случае найдется такой индекс*) Д G Уоп, что хд1* ф. [dj19 4l- Здесь dJx = d*hj= dj^ при 8h > 0, dJt = djt = d7* при 67l < 0; d*h = dmh, dy* - 4 при 6/t = 0. Положим Hi = 1> если x}^ < d^; |хх = — 1, если ид1)>3у1; z0 (</нб}) = б(Лб))- С этими данными корректируем псевдоплан х(1> по правилам п. 5, начиная вычисления с s = l. Корректировка псевдоплана х(1> заканчивается либо построением е-оптимального плана хЕ исходной задачи (т. е. задача (5) решена), либо построением нового опорного коплана {б, Л0п}, на котором значение двойственной целевой функции задачи (5) лучше, чем на {б, Лоп}, либо будет обнаружена несовместимость ограничений задачи (5). В первом и третьем случаях решение задачи (5) прекращается. Во втором случае продолжаем решение задачи (5), исходя из опорного коплана {б, Лоп}- 5. Процедура корректировок псевдоплана х. Пусть для натурального числа 5 известны: Лш» *^н ~ J\^ow ^нб » k = 0, S — 1, «/нО 1 И( > //г» М'/г» ft=l, s; 2А(4б}), k = 09 s—L (20) Положим zs (/н) = \isAm (/s, I) A (/, /H), zs (js) = Vs- Возможны случаи: 1) «/но-1) = 0'» 2) 4o~1)?=0- В случае 1) корректировку псевдоплана x(s> начинаем с замены опоры Л0п- Для этого найдем числа Ч U)/*s (/)> если zk (/) zs (/) < 0, "' ' ^ в остальных случаях, /е=/нб\ k = s—l, 5—2, ..., 0; б/|, если б/ zs(/s)<0, ^'s' | оо в остальных случаях. В каждой группе {cr(/), j^J$}, ft = s— 1, ... , 1; {<?(/), / е 4б} U /s) числа а (/) < оо упорядочим по возрастанию: <* (/l. *) < б (/2, А)< ... < a (/Pjk, ft). Положим dt/j = dj5 = *> При конкретных вычислениях индекс^ можно искать из условия максимального удаления xj- ' от [d%j, d.], jEzJou- 66
= dmJs при 6,s > 0; dJs = d]s = d]s при 67j < 0; \1s = d,7^ dh = d*Js ПРИ 6>* = 0; 14 lKh-^s ПРИ Р*= !' /01Ч a 0, s-l)= / (S)J (21) Из рекуррентных соотношений a (i, k) = a (i — 1, k) + + \*8 (ji, k) (4. *~d**. k) 1, i=h~P~k, k = s— 1, s — 2,.. ., 0, с начальными условиями a(0, k)=a{pk+\, fe+1)» & = = s — 2, ... , 0, найдем числа a(j, &), i"=l, рЛ, fe=0, s—1. Если cc(p0, 0)<0, то решение задачи (5) прекращается, ибо задача (5) не имеет планов (двойственная целевая функция задачи (5) неограниченно убывает на множестве двойственных планов). Предположим, что а(/?о, 0)^=0. Тогда найдутся такие индексы v, s*, что a(v, s*)^0, a(v—1, s*)<0 (при v = l полагаем a(0, s*)=a(ps*+i, s*+l)). Вместо Лоп берем НОВУЮ ОПОру Лоп = А (/, /0п)> Л>п = (Лш\Ь) U К s*. Если s^^O, v>l, то корректировка завершается построением опорного коплана {б, 1оп}, б7- = б7- + a(/v, sJ zs (/), /e/hU /s; Oj = O/» / ЕЕ J ovals'* ^on == ^ (* » •'on)' •'on == «'on- Нетрудно показать, что при замене коплана б на б двойственная целевая функция задачи (5) уменьшается на величину 2 a (&, 0) [a (/*, 0) — a (/V-i, о)] < 0, где А:=1 <*(/о. о) =0. Замечание 1. При /s=/v s фактически меняется только ко- план: 6 -> 6. Опора остается прежней, поскольку Jou=(Jou\is)[Jis = = •'оп- При s*>0 (s* = 0, v=l) всю информацию, связанную с номерами k = s*+\, s, забываем. Корректировку продолжаем с исходными данными: st, 70n,^H = J\Jon, № = №> k = 0> s*~l>y н0*~"1)== = Vx^ 7^; *м = k{s), 7k = ik, Vk=Vk, k = lTv, zk&$) = Рассмотрим случай 2): /но~1)?=0- Положим J^l = = {/е4Г1):гЛ/)=0},452={/^4Г1):гЛ/)<0}, 4$ = 67
= {/ е 4о " : zs (/) > 0}, 4б = 4- U Л+. Построим новый псевдоплан x(s+1) = k<s+1> (/): K(»+D (JB\Jib = xw (/н\4б'); x(»+») (4S1) = d* (4S2); x^D(4si)=d,(4si); (22) *(5+1>(Лш) =Aon (b-A(I, JH)^+lHJB)). Возможны подслучаи: 2a) x}*+1) < d^ при fxs = 1 или x{-s+n >d]s при (яй=—1; 26) x^eeK/,, d;j; 2b) x}*+1) > d]s при [xs = 1 или xj-*+1) < d,7j при |i,= —1. В случае 2a) действуем согласно случаю 1), заменив в (21) xjs) на x}s+1). В случае 26) проверяем условия ^^on)<^S+1)(^on)<d*(^on), Р = б' (/оп+) (х(«Н) (/оп+) -d* (/оп+)) + + б' (Уоп_) (- d* (Уоп_) + х(*м> /оп_)) < 8. Если они выполняются, то корректировка прекращается на е-оптимальном плане *e = x(s+1) задачи (1). В противном случае существует такой индекс /s+1 е= J0n\{ii> • • •» /J, что хЦ^Яу^р 2;s+1]f где 2ф/з+1=3;8+1 = d,/s+1 ПРИ 67s+l>°J 5*7S+1 =^/s+l = 4+1 ПРИ ^s+l<0; ~d*h+l = = d*js+v d*'s+l=d*-s+l при 8h+l=0. Полагаем ^+1 = 1, если хЦ}}<^8+1; |xs+i= —1, если xgj^d^, и повторяем описанный процесс корректировки, заменив s на s4- 1. В случае 2в) множество /оп заменяем на множество Лш = (Jon\Js) U /*, где /+ — любой элемент из /$ ^ 0. При б/ = 0 множества /н, 4б\ До заменяем на множества 7Н=7\70П, 7$ =/„ 7$ = 4о-1)\/*; вектор ze(4se/)— на вектор zs (Дб) = — [ii<5; остальные данные не меняются, т. е. s = s, 7^) = 4б), k = 09 s— 1, и т. д. При 6/^0 в исходных данных (20) производим следующие изменения: номер s заменяем на s = s—1; множества «/оп, /н, АУ - на 70П, 7Н = У\70П, 7<°б} = AV U /в; вектор z0 (АУ)- 68
на вектор г0 (Лб}) = б (Л°б)'> в псевдоплане к^~1) ]8-ю компоненту полагаем равной dj при 6/ >0 и d* при 6/ <0; все остальные данные, связанные с номерами k = 0, 5—1, не меняются (информация, связанная с номером 5, во внимание не принимается). Используя новые данные, переходим к построению псевдоплана x(s+1> по формулам (22), заменив s на §. При этом обязательно реализуется случай 26) и дальнейшие операции проводим согласно этому случаю. Замечание 2. В случае 2в) индекс /* можно выбирать из J^ по следующему правилу. Пусть J^ = {i±, . . . , ip}. Положим Vo = X^+1)' ^л = Тл_1—^lZjtWK^ —d*^)» *= lT~p. По построению, при \is = 1 имеем у0 = xjs+1* > d) , Yo = x^s) < d#/ , ¦'^ [s ' s __s Ук < Vjfe i; при fij = -— 1 имеем Yo = %js+1} < d#/e, ур = к^ > d] , Y&^>Y&—i* Следовательно, существует такой номер &, что y- < ~ds , Vjfe_j > <*/, ПРИ ^ = 1; Y? > 2*ye> Yl_i < 5#/в при fXj = — 1. В качестве индекса /*, вводимого в опору вместо /8, выбираем индекс /# = /- Е: ^нУ • Если в псевдоплане к^ изменить компоненты >c?s), k=l, k—1, положив %!s) = <2*1- , если x^s) = d*- , и ySs^ = = d\ , если yS^=d*ibi k=l, k—1, то для /*-й опорной компо- k k л ненты псевдоплана к^1\ построенного по формулам (22), будет выполняться критерий оптимальности, т. е. и}^"1* 6= [^*/*> ^/*Ь Замечание 3. Можно упростить алгоритм, если в случае 2) при б- ф О индекс js сразу вывести из опорного множества s _ «/on : «'on-*" •* оп= (^on\/j)U/*i гДе /* —любой элемент из /?s0 п=?0, и закончить корректировку на опорном коплане {б, Лоп}, б = б, Лемма 7. Процесс корректировки состоит из конечного числа шагов. Доказательство леммы аналогично доказательству леммы п. 3. Теорема 3. При любых Л, &, с, d*, d*, /п<оо, /г<оо, 8^0 для каждого начального опорного коплана {б, Лоп} через конечное число итераций задача (5) будет решена, т. е. будет построен ее е-оптимальный план либо обнаружена несовместимость ее ограничений. 69
Доказательство. Как отмечалось выше, каждая итерация метода (корректировка псевдоплана) заканчивается либо решением задачи (5), либо построением нового опорного коплана {б, Лоп} с лучшим значением двойственной целевой функции. Пусть {8{k\ А{<$}9 А{оп = А (I, 4п), —опорный коплан, f(8{k))—значение двойственной целевой функции на fe-й итерации. Обозначим J{0kn\ = {/ ge Jon '• б/Л) Ф 0}. Согласно процедуре корректировки имеем в)я) = в}Л), 1'^ЛЬ (24) f(6(s))</(6(*)) (25) для любого s>k. Предположим, что возможно бесконечное число итераций. Тогда, в силу (23) и |/|=ai«<oo, через конечное число итераций будут построены опорные копланы {8(/г), А{0% {6(s), А{0% s>k, для которых J™ = J™, J{oku\ = Job- Учитывая последние равенства, (24) и то, что в}8) = в)Л) = 0, / е J0u\Jokl, заключаем, что 8{k) (4*}) = = u{s)(Jon)- Откуда следует б(Л) = 6(s), ибо коплан однозначно определяется своими опорными компонентами. Однако это противоречит (25). Полученное противоречие доказывает теорему. 6. Пример. Рассмотрим задачу линейного программирования —2*12—5*13+4*14 ->• max, *i+4*9+2*i0—*и+2*12+*1з= 19, *2 + 2*7 + *8+5*9—5*ц + *14= 52, *з—*б+4*7+2*9—4*10—4*12—*1з= 1, *4—5*5 + *7 —2*9 + *Ю+3*ц + 8*13 + 2*14 = 36, (26) 0^*1^5, 0^*2^4, 0<*з^8, — К*4^9, 0^*5^2, 0<*6<10, 4<*7<5, —1<*8^4, 1<^*9<4, 2^*ю<4, 4<*ц<6, 0^*i2<l, 1^*13^:5, 1^*и^5, для которой известен начальный опорный план {*, Лоп}, *={4, 2, 4, 0, 1,0,5, -1,2,4,6, 1,3, 1}, Аои=А(/, /оп) = = Е, /0п={1, 2, 3, 4}. Оценка субоптимальности начального опорного плана |3(*, Лоп)=28. Положим е = 9, г\ = 70
= 0,001 и осуществим одну итерацию алгоритма, описанного в пп. 2—4. Всю информацию о задаче, необходимую в ходе вычислений, удобно, как и в табличной реализации симплекс-алгоритма, представлять в виде таблиц. Информация о задаче (26) помещена в табл. 17, где цифры над Табл. 17 1 2 J 4 5 6 7 8 9 10 11 12 1J /4 н г \х 1 2 1 J 4 Л U \хй) 1(2) \х(2) \i& \а№ \t<*> 0 5 и 1 О 0 0 0 4 5 ~7 % -'% '% J8/ /9 О 4 2 О 1 О О 0 -4 1 -J 0 О О О О 8 4 0 О 1 О О -6 5/2 -9/ '2 1 / № |% -/ 9 О 0 О 0 1 О 8 2 12 6 9 9 5 О 2 1 О О О О О 1 О / О 1 -/ О 10 О О О -1 О О О 0 О О О О О 4 5 5 О ш 4 / О О 5 О 5 -1 % -% -1 4 -/ О '^f/ ^ О О О О -1 О -7 О -1 О 1 4 2 ш 5 О ~2 О 0 2 2 % У* щ % 2 4 4 т О -4 / 0 О 4 0 4 О 4 О 4 6 6 т 5 о 7 о О 6 -2 '% -% % -% 0 7 / 2 О -4 О щ ~1 % -% ;/z -?2 ?/з -% 7 5 о 1 0 -7 8 щ -2 % -% 2 -7 % -% l\ 5 1 О 7 о\ 2 щ Л ц Ц ц 2А % Vj A-Q(n=/A; A-/ii=-r> Ав(2)=//з'> Амг1\Ае(3)=г/з'Жмг1 таблицей указывают номера столбцов, т. е. соответствуют индексам множества /; в первых трех строках записаны компоненты векторов d*, d*, х\ в последующих четырех строках записаны компоненты матрицы А (/(, /) = = В {К, /)Л(/, /), /С=/0п, В (К, /)=Л~1. Эту часть таблицы назовем основной (она обведена жирной линией). Слева от нее записаны индексы j^K. В дальнейшем эле- 71
менты js строки, стоящие в столбцах с индексами /е/нб> будем заштриховывать; в седьмой строке таблицы запишем вектор оценок А; в последующих строках — компоненты направлений № и планов x^s\ 5=1, 2, ..., получаемых в процессе корректировок направлений без замены множества К. Справа от № строки удобно записывать шаг 6(s) = 6/ . Js Приступим к вычислениям. Следуя (6), (7), найдем вектор оценок А, направление № и шаг ®W = ®i=l/4. Построим план х&\ для которого получим ^(х^\ Лоп) = = (1 — 1/4)-28 = 21>е. Далее переходим к процедуре корректировок направлений. Полагаем 5=1, ^С={1, 2, 3, 4}, /<°б} = {12, 13, 14}, Д00) = {/ = 5ГТТ}> /э = 0, hL = = — 1, z0(/)=A(/), /=1, 14. (В табл. 17 компоненты А-строки с индексами из /нб} заштрихованы.) Поскольку /i=le{/0}, то имеет место случай 1). Компоненты вектора zs(Kn) (9) легко найти по таблице. Для этого необходимо элементы строки основной части таблицы, соответствующей индексу /s, умножить на \xs. В силу того, что /но* Ф 0» дальнейшие операции осуществляем по правилам случая 16): полагаем /Ho} = {5, 6, 7, 8}, J$={9, 10, 11} и по формулам (7) строим 1{2). Поскольку а (0, s— 1) = d]t — х)[] — /д2)>0 и r]>min{21; 0,001}, то имеет место случай 1б2). Находим шаг в(2) = = в/2 = в2 = 1/3 и новый план х^2\ оценка субоптимальности которого равна р (xS2\ Аоп) = (1 — 1/3) • 21 = 14. Полагаем [х2 = 1, номер s = 1 заменяем на s = 2 и повторяем процесс корректировки. Поскольку /2е?{/0, /i}, 41о)^0, то согласно случаю 16) строим JiV = {5, 6}, JiV = {7, 8} и направление /(3). Для Р) имеем: а(0, 5—1) =0, Y>min {14; 0,001}. Следовательно, дальнейшие вычисления проводим по правилам случая 1б2): находим шаг в(3) = в;-3 = в4= 1/3 и строим план х@\ для которого получается р(х(3), Лоп) =2/3-14 = = 28/3. Полагаем \i3 = — 1, /з = 4, 5 = 2-> 5 = 3 и продолжаем корректировку по правилам 16). Для направления #4) имеем: а(0, 5—1)=—5<0. Следовательно, реализовался случай 1бА). Перейдем к операциям по замене множества К (см. случай 1а)). Подсчитаем числа (10): а(7) =2, а(8)=оо, а(9)=2, а(10) = = оо, а*(11) = 1, в каждой группе упорядочим их по воз- 72
растанию: а(7) = а(/1|2) = 2, а(11) = а(/и) = 1<а(9) = = а(/2)1)=2 и найдем а(0, 2)=—5<0, а(1, 2)=— 5+1 = = -4<0, а(1, 1) =—4+-1 - (6—4) = — 2<0, а (2, 1) = = —2+2(4—1)=4>0. Следовательно, /VjS:I:=/2fl = 9, v = 2, s* = l. Множество /С заменяем на К= (К ЧД) U /2,1 = = {1, 2, 3, 9}. Поскольку s* = l>0, то продолжаем корректировку, используя данные (13) при s* = l, 5 = 3. Этим данным соответствует табл. 18. Чтобы получить табл. 18 Табл. 18 /234- 567 8 9 10 11 12 13 14 / 2 3 9 J(2) f О О . О 26/9 О 1 0 О -7 0 О / О J0/ Ш, */г 0 ;/ц 0 Ш ~5/2 0 \tt_ ч О О -1 О О щ % 4 J/2 !k 0 f 0 О О О О О 1 -!/9 ш #2 -4 -'Уг п Щ % 0 -7/2 <ъ 2 О -4 о и "'3 17 20 Ч -4 9/ 2i] 4| 6 О ч й из табл. 17, надо основную часть таблицы пересчитать по правилу прямоугольника симплекс-алгоритма с ведущим элементом (/s, /v,s*)=— 2. Легко проверить, что при этом строки с индексами /e{/i, ..., /s*-i} меняться не будут. Не изменится и А-строка. Следуя процедуре корректировок и используя данные (13), по формулам (14) строим направление ?(s*+1) = /(2). Для № имеем: а(0, 1 —1) =5—10/3—26/9 = —11/9<0, т. е. реализовался случай 1б±). Переходим к операции по замене множества К. Подсчитаем числа а(12) = 1, а(13)=5/17, а(14)=оо, упорядочим их по возрастанию: or(/lj0) = а(13) = 5/17 < а(/2,о) = а(12) = 1 и найдем а(0, 0)=-11/9<0, а(1, 0) =-11/9+4-17>0. Следовательно, /~ ~ = /i,o =13, v = 1, s* = 0. Множество К заменяем на /оп = (К\ /i) U /1,0 = = {13, 2, 3, 9}. Так как s* = 0, то процедура корректировок заканчивается на опорном плане_ {^Лоп}, х = х&, Лоп = A(I, Jon), для которого р(?, Лоп) = 28/3 — — (11/9) - (5/17) = 8,97 < р(*, Лоп) = 28. Поскольку 73
$(х, Лоп) =8,97<е = 9, то решение задачи (26) прекращаем на е-оптимальном плане хе=х={Ю/Зу 0, 4/3, 9, 1, О, 14/3, -1, 28/9, 4, 44/9, 1/3, 5/3, 11/3}. § 7. ^-адаптивный метод Конечные варианты адаптивного метода, описанные в § 6, основаны на чисто вырожденных сопровождающих копланах и поэтому нацелены прежде всего на теоретические приложения. Для численных расчетов интерес представляют алгоритмы [21, 23], учитывающие конечную разрядность представления чисел на ЭВМ, т. е. вычисления с округлением. В данном параграфе разрабатываются алгоритмы (прямой и двойственный), обладающие упомянутым свойством. При этом построения связываются не с вырожденными, а с почти вырожденными сопровождающими копланами. В конечном счете получаются алгоритмы, работающие на произвольных опорных планах, но по ходу операций приспосабливающиеся к ситуациям, близким к вырождению. Численные эксперименты [21], некоторые результаты которых приведены в конце параграфа, подтверждают эффективность алгоритмов. Определенный интерес для проблемы испытания алгоритмов представляют, на наш взгляд, и два класса задач, использованных в указанных экспериментах. 1. Прямой метод. Рассмотрим задачу с'я-^тах, Ax=b, d*^x^:d*. (1) Коплан б назовем ^-сопровождающим опору /оп(м^0)> если /опси/ц, где /ц={/: |б,-|^ц}. Опорный коплан {б, /0п} называем ^-вырожденным, если 11х[}1цф0, где «/н = «/ \«/0ir При |ы = 0 понятия ^-сопровождающего и (i-вырожден- ного копланов переходят в понятия сопровождающего и вырожденного копланов. Пусть перед началом решения задачи известен некоторый ее опорный план {ху /оп}- Зададим е^О — требуемую точность приближения к оптимуму по целевой функции; iuA^O, гу^О — начальные значения параметров метода. Исходной задаче припишем первый уровень (5 = 1) и положим /1 = /. Шаг 1. Строим О-сопровождающий коплан 6s: * (Лш) = 0, б* (4) = Л' (/, Л) (АопУ с* (/оп) - С (Я), 74
где сг=с, cs = — Ss при s>l. В качестве 8s можно взять предыдущее значение б*. Ш а г 2. Вычисляем оценку субоптимальности: р (*,*) = ^ eJ(*y-d*j)+ 2 б) (*—<). /:5J>0 /:о]<0 Если p(x, б1) ^е, то решение закончено, так как текущий план х является е-оптимальным. В противном случае корректируем направление I улучшения плана х: ( d*j — xjy если fiy > \is, h = j d/ — #y, если 6/ < — \is, j e 4, ( 0, если | S/1< jxJ, /(/on)=-^nil(/f /H)/(4). При Z (Ун) = 0 уменьшаем \is и переходим к шагу 1. (Правила уменьшения \is будут описаны ниже.) Если / (/^) ф о, то вычисляем шаг в0 вдоль I: e° = min{l> в/о}, в/о = гшп{ву, /е/оп}. I ((ff—xfi/lj при /,>(), ву = j {d^ — Xj)/lj при /у<0, [ оо при I] = 0. Вычисляем х = х-\-®Ч. Если р(#, бх)^е, то х — е-опти- мальный план. При p(x, б1)>е проверяем неравенство c'x—c'x^t], где с'(х—х) = — в°//61. Если это неравенство выполнено, то план # заменяем на х, в противном случае х не меняем. В случае в°=1 уменьшаем ill1, полагаем 5 = 1 и осуществляем переход к шагу 1. Ш а г 3. Выбираем /Ое/Оп, ву0<1. Строим направление A6(/s) уменьшения коплана 6s (7S): Дбу0 = —sign ^0, Дб(/оп\/о) = 0, A8'(JsH)=A8'(JOI1)AonA(I, JSH). Ш а г 4. Вычисляем шаг а* вдоль Аб. Для этого вначале находим шаги Gj по каждой компоненте бу, / е= Л: 0, если ]6y|<|i* и Абу^=0, — бу/Дбу, если |бу]>|1* и Абуб-<0, оо в остальных случаях. Далее вычисляем ос0 = — | ^01 (1 — ©io) и Аа^ = 75
= Аб7- (xj+ lj — dj) для / e A, 0j=?oo, где dj = d*j при Лбу > 0, dj = d) при Дб7- < О. Пусть ад < а/§ < ... < а, ф оо и Oj= оо,\/j^J8R\{fl9 р /г» • • • > /р}- Тогда если а0 + У, Аа7- > 0, то а* = а,- , где k=i к q i р q = min {/: а0 + 2 Аа7- > 0}. В случае сс0 + 2 Асе,- < 0 k=i * k=\ k полагаем а* = оо. Если а* = 0, то переход к шагу 6; если а* = оо — к шагу 7. Шаг_5. Коплан 6s заменяем на 6s = 6s+g*A6, опору Jon — на /оп = (Jou\j0) U /> Переход к шагу 2. Ш а г 6. Строим Js+l = {/ <= Л | 6* I < Н'5}- Полагаем 6s+1(^on)=0, 6»+1(^+1)=Аб(/;+1); выбираем |x«+i> 0, если этот параметр не определялся ранее; s увеличиваем на единицу. Переход к шагу 2. Ш а г 7. Вычисляем Д6' (Js~l \JS) = Д6' (/оп) Л"1 А(1, Js~l\Js); s уменьшаем на единицу. Переход к шагу 4. Замечание. Правило уменьшения параметров \xs должно обладать следующим свойством: fxs->-0 при е=0; через конечное число уменьшений (и° = 0. Теорема 1. При любых А, Ь, с, d*, d*y m<oo, /г<оо, е^О, т]^0 для любого начального опорного плана {#, /оп} через конечное число итераций будет построен е-оптимальный план задачи (1). Каждую итерацию задачи начинаем выполнением шагов 1, 2 или 4 и заканчиваем на шагах 2, 5, 6 или 7 переходом к шагу с меньшим номером. Любую итерацию можно отнести к одному из следующих типов: 1) начало итерации — шаг 1, 2 или 4, конец — шаг 5; 2) начало итерации — шаг 1 или 2, конец — шаг 6; 3) начало итерации — шаг 1,2 или 4, конец — шаг 7; 4) начало итерации — шаг 1 или 2, конец — шаг 2 при / (Л) = 0; 5) начало итерации — шаг 1 или 2, конец — шаг 2 прив°=1, Р>е; 6) начало итерации — шаг 1 или 2, конец — останов по |3^е. Доказательству теоремы предпошлем несколько лемм. Лемма 1. Величина 5 при работе метода ограничена. Доказательство. Параметр 5 увеличивается в случае, когда ЗДе/*, ЬЕ^, 1^1 О5, |б/21>^' 76
Это возможно только при | JSH | > 2. С другой стороны, справедливо строгое вложение Js+l={jezJs^ | б^.|<;(я5}с=^. Следовательно, s не может увеличиваться бесконечно, в частности, s <С п — т. Лемма доказана. Лемма 2. Число итераций шестого типа конечно. Доказательство. Очевидно, что итерация шестого типа не может встретиться более одного раза. Лемма доказана. Лемма 3. Число итераций пятого типа конечно. Доказательство. Рассмотрим случай е = 0. Тогда через конечное число итераций пятого типа |ы1=0. При этом если d*^Zx-\-l^d*, то $(х-\-1у б1)=0 и итерации заканчиваются. В случае е>0 при бесконечном числе итераций пятого типа jj^-^O. Значит, через конечное число итераций пятого типа М<1<е/(2 (d' — d*])), что влечет р (х + I, б1) <; е при d% < х + I < d*. Лемма доказана. Лемма 4. Число итераций четвертого типа конечно. Доказательство. Вначале покажем, что число итераций четвертого типа при s>l не может быть бесконечным. Действительно, каждый вектор 6s (Js) является копланом задачи С'*-* max, Л(/, Js)xs(J*)=b — A(I, J\JS) (х (J\JS) + + I (J\J*)), d4 (J*) < x (/*) < d* (/*), (2) где cs определяется по правилам шага 1. Начальные опорные копланы б^ач этих задач являются О-согласованными и обладают свойством б*ач (JSR) Ф 0. Следовательно, и у любого другого 0-согласованного коплана задачи (2) 6j(/h)=^0. Для любых копланов 8S(JS) и 8S(JS) справедливо равенство 8s (Л)—б* (4) = А' (/, Л)(А7п)'Х Х(б5(/0П) — SJ(/on)). Число различных опор задачи (1) конечно, поэтому 3R такое, что из неравенства || 8s (Jou)— — в*(/0п)11<И следует неравенство || &№)—&(&) ||<#,., \/Jon. Число различных 0-согласованных копланов в задаче (2) конечно, следовательно, 3Q>0 такое, что II & (Jh) II > Q Аля любого 0-согласованного опорного коплана {8s, Jon}. Положим 0^\is-<Q/2R. Тогда для любого ^-согласованного опорного коплана {б^, /оп} выполняется неравенство |]б* (JSK) || > |лЛ При бесконечном количестве итераций 77
четвертого типа jxs-^0. Значит, через конечное число итераций четвертого типа будет выполняться неравенство \xs<Q/2R, после чего дальнейшие итерации четвертого типа на этом уровне невозможны до перехода на уровень 5—1. Число 5 ограничено, и число задач вида (2) на каждом уровне конечно, следовательно, число итераций четвертого типа при 5>1 конечно. Рассмотрим случай 5=1. При этом с либо линейно не зависит от строк матрицы А (тогда можно повторить рассуждения для случая 5>1), либо линейно зависит от них. Но тогда после первой же итерации четвертого типа при 5=1 будет выполняться равенство б1(/)=0, а это влечет р(х, 6^=0 Yx и решение задачи на этом закончится. Лемма доказана. Лемма 5. Двойственная целевая функция любой задачи линейного программирования вида (1) ограничена на множестве ее ^-согласованных копланов. Доказательство. Для доказательства несуществен факт совместности ограничений задачи (1). Двойственная к (1) задача имеет вид b'y+ d*'w — d' y->min, A'y + w—v=c, ш>0, t/>0, (3) где y^Rm; w, v^Rn. Совокупность {у, w, v} называется двойственным планом. Будем рассматривать только согласованные двойственные планы, т. е. такие, для которых выполняются условия: Wj = 0, Vj = 8j, если 6j^0; Wj = —8j, Vj = 0, если 6j<0, где 8=A'y—с. При этом Ъ'у + d*'w — d'*v= min {b'y + d*'w — d'*v, A'y + w — v = = c, w > 0, cT> 0}. Тогда целевую функцию задачи (3) можно считать функцией от б и вычислить по формуле ф(6) = Ь'у+ d*'w — d'*v = =с'*+ 2 ej(*j-<**j)+ 2 ели*-*;), б.>0 8у<0 где k^R71 удовлетворяет соотношению Ак = Ь (к — псевдопланы задачи (1)). Пусть б и б — копланы задачи (1). Тогда 1Ф (б) - Ф (6) 1 = | 2 (6; - в,) (х, - dtj) + 2(6; - S,-) + °у>0, Sy<0, "/>0 8у<0 + 2 [в7(х,-?*;>-«, (Xj-d*j)] + 5у>0, о.<0 78
+ 2 [M*r-<W-M*>-<*/)] I- 8;<0, 5y>0 Вектор к не зависит от б, б. Следовательно, для любой задачи (1) существует Г>0 такое, что |Ф(б) — Ф(б)|^ ^Т||б—б||. Множество О-согласованных копланов конечно. Поэтому Ф(б) ограничена на этом множестве. Для любого ^-согласованного коплана справедлива оценка Цб—бЦ^/fy, где б — некоторый О-согласованный коплан. Значит, выполняется неравенство |Ф(б)— Ф(б) | ^TR\i, которое означает ограниченность двойственной целевой функции на множестве ^-согласованных копланов. Лемма доказана. Лемма 6. Число итераций первого типа конечно. Доказательство. Воспользовавшись леммами 3 и 4, без ограничения общности можно допустить, что числа \xs постоянны при работе метода и итерации четвертого и пятого типов не встречаются. Предположим, что число итераций первого типа бесконечно. Величина s ограничена. Следовательно, найдется s0 такое, что число итераций первого типа при s = s0 бесконечно. Будем считать, что So — минимальное среди таких чисел. Тогда на всех дальнейших итерациях, начиная с некоторой, выполняется неравенство s^So. Действительно, в противном случае при s = So выполнялось бы бесконечно много итераций третьего типа. Поскольку | б*-11 > \is~l V/ е ^Js~l\Js, Vs> 1, то за итерацией третьего типа может следовать итерация только третьего или первого типов. Так как случай s = s0 встречается бесконечное число раз, то при s<C.s0 должно происходить бесконечное число итераций первого типа, что противоречит предположению о минимальности числа s0. Таким образом, при s = s0 найдутся задачи вида (2) и последовательность копланов 6s(o}, i = N, N + 1, ... , такие, что &*t) Ф 6J{+1) и все копланы б*° ^«-согласованы с соответствующими им опорами. (Из описания метода следует, что переход от [^-согласованного опорного коплана происходит только к новому [^-согласованному опорному коплану.) Вычислим ф (^+1))-ф («&>)=**( 2 *8> (х, - rf,,) + 79
+ 2 Аб,(х7--ф))+ ^ (8fo+n(xr-<*/)- /е/Ч 8y"(0<0, ;е./Ч Sy°(0>0, Подставим вместо и согласованный с (8(°), Лш(о) и Л5 псевдоплан, т. е. псевдоплан, удовлетворяющий следующим соотношениям: для / е «/*• ( d], если Ь)\1) < — ц,5» или | Ь%) | < ц\ Д8, < О, 1 \ d*j, если 6fto > ns« или 18f{{) | < ц5», Д8, > О, для /e/\/s° Ху = Лj "г" *j» И (Уоп(0) = ^ (Л ^on(i))_I(6 — ^ (Л J\Jon(i)) К (J\Jon(t))). При этом расстояние от и/0 до отрезка [d,/0, d!j равно величине— (а0+ 2 Аа./)- Учитывая> что Дб(Л>п\/о) = О, Дб/0 = + 1, получим Ф (6S(?+1)) - Ф (6S(°0) < oJ{ (Оо + 2 Да, )+ °Г° + ^ дм**;-<***) + 5/°(1-+1)>0' Д8.<0 + 2 MiV*j-d'i)- 2 б/Ь(^-^;) -*н<%)<°- о<ф0<Л - У $h (<**;- di) < oh (а0 + 2 А^). /е/вв(0. ' — p.so<oso <0, 80
где Gj—минимальный ненулевой шаг, полученный при переходе от 8\°() к 6(J+n, а0 + V Да7. = ( */« - d*/o если Д6,„ = 1, аро \ d*Q — хУо, если Д6/о = — 1. Все неопорные компоненты псевдоплана к — критические (лежат на границах). Следовательно, таких псевдопланов конечное число и существует q<C0 такое, что из «о+2 До/ < 0 следует а0 + 2 Д«/ < Q <0> ан ^ а.= 0 а.= 0 >-|ц>| /max! Д6*|. Но различных возможных векторов Д5=?0 ASj- также конечное число, поэтому если jis° > 0, то 3р<0 такое, что Ф (6(s^_d )—Ф (Sfo) <Р>* тогда Ф (6S(°.}) —> —> — оо, что противоречит лемме 5. Если же jjlso=0, то выполняется неравенство Ф(6(°+п)— — Ф(б(5))<а7-/ (а0 + 2Да7')<0 и все копланы 8\°п в рас- сматриваемои последовательности 0-согласованны и, в силу Ф (6(°+i))—Ф(б(?))<0, различны. У любой задачи линейного программирования найдется только конечное число 0-согласованных копланов. Следовательно, последовательность б(?) не может быть бесконечной. Лемма доказана. Лемма 7. Число итераций третьего типа конечно. Доказательство. В силу лемм 3, 4 считаем, что происходят итерации только первого, второго и третьего типов. За каждой итерацией третьего типа может следовать итерация только третьего или первого типов, так как после каждой итерации третьего типа шаг а* на следующей итерации строго положителен. Бесконечная последовательность итераций третьего типа подряд невозможна, поскольку выполнение итерации третьего типа означает несовместность ограничений задачи (2). Но ограничения задачи (2) при 5=1 совместны (у этой задачи предполагается существование начального плана). Значит, за каждой итерацией третьего типа через конечное число итераций этого же типа должна следовать итерация первого типа, т. е. будет выполняться бесконечное число итераций первого типа, что невозможно. Лемма доказана. 81
Лемма 8. Число итераций второго типа конечно. Доказательство. Ранее показано, что число итераций остальных типов конечно. Следовательно, если число итераций второго типа бесконечно, то, начиная с некоторой итерации, все остальные должны принадлежать ко второму типу. При этом 5 должно неограниченно увеличиваться, что противоречит лемме 1. Лемма доказана. Доказательство теоремы 1. С одной стороны, итерации могут закончиться только построением е-оптимального плана задачи (1), с другой — число итераций каждого типа, а значит, и их общее число конечно. Следовательно, через конечное число итераций будет получен е-оптимальный план. Теорема доказана. 2. Двойственный метод. Рассмотрим задачу (1). Решение начинаем с некоторого начального опорного ко- плана {б, /0п}. Задаем е^О и параметр метода j.i^O. Исходной задаче приписываем первый уровень (5=1) и полагаем d\ = d*y d*1 = d*y б1 = б. Шаг 1. Вычисляем неопорные компоненты псевдоплана xj, /е/ы: ld*s при 6s. < — \is, Xj = \dl} при б*>|х*, I произвольно в интервале [d%p d?s] при | 6* j < \xs. Ш а г 2. Вычисляем опорные компоненты псевдоплана к {Jon) = — Aon1 (b — A (/, /н) к (JK)). Если d* (Jou) < <K(J0n)<d*(Jon), то переход к шагу 3, в противном случае — к шагу 4. Шаг 3. Вычисляем (3(х, б1). Если р(х, б1)^, то х—е-оптимальный план и решение заканчивается; если р(х, б1) >е, то переход к шагу 4. Шаг 4. Выбираем /Ое/Оп» */o^№l/e, d/0sl> ™e | dlj при б;. > - [х\ „+s _| d;s при б;. < |х*, *' = \ d;!s при 6«<- \ls, df ~{ d\. при в»>|л*. Если такой индекс /о найдется, то переход к шагу 5. При dl {Jon) < х (Jou) < d*s (yon) уменьшаем fx\ полагаем s = 1 и переходим к шагу 1. Ш а г 5. Вычисляем подходящее направление Дб изменения коплана 6s: 82
1, если x/.<d./e, AS''° = , ^*s -1, если x/o>d/o, Аб (Уоп\/о) = 0, Аб' (/н) = Дб' (/оц) Аоп А (/, /н). Ш а г 6. Находим шаг а* вдоль Аб. Для этого вначале вычисляем Oj для /е/н U jo' о j [fijj, если |6;e|>|i*f Д6/в6}.<0, /о \ оо в остальных случаях, ( О, если |б*|<|х*, ЩфО, °j = \ — б//Абл если I б/1 > Vs* АбА" < °> I оо в остальных случаях. Далее вычисляем _ | х/о — diy0, если х/о < d*/o, 1 d/o — Х/о> еСЛИ d/o < */.. и Aocj для /е/н U /о, ctj=^= оо: Да/о = d*sQ — dsJo, если а/о ф оо, для /е/н [ Аб^(х7- — d^.), если Аб7->0, Аа' = ( Аб,- (и, — d*s), если Аб, < 0. Пусть akl < (*k2 < • • • < % =7^= °° и а, = оо V/ е е(/ни/о)\{*1» ^2, • • • , К)- ТогДа если ао+ 2 Аа^.>0, 1=1 то а* = ok , где g = min {t: а0 + 2 Aafy ^ 0}- В случае 9 t=i ¦ р а0 + 2 Ась* <0 полагаем а* = оо. ?=1 Если а* = 0, переход к шагу 8; если а* = оо — к шагу 9; в случае 0<Ca*<°° переход к шагу 7. Ш а г 7. Коплан 6s заменяем на 6s = 6s+cr*A6, опору (Лш\/о) U V Если А^/о, то производим пересчет матрицы Л"1 по известным рекуррентным формулам. Полагаем | d*s при Дб*. < 0, *ki = \d%ki при Дб*.>0, 83
для Kg. При kq=?jo полагаем I d]sQ при Аб/о = — 1 и l>q, где kx = /0, х Jd;: при дб/о=-1 и /<?, | dljo при Аб/о= 1 и /><7, I di/o при Аб/о = 1 и / < д. Затем переход к шагу 2. Ш а г 8. Если s> 1 и | б* |< \isV/, ds*y<d?s, то уменьшаем \is и осуществляем переход к шагу 1. В противном случае полагаем Ф+1 (/н) = Аб (/н), 6S+* (/оп) = 0, ds+l = = d\, d*s+1 = d*s, увеличиваем s на единицу и переходим к шагу 1. Ш а г 9. Если 5 = 1, то решение заканчивается: задача (1) не имеет допустимых планов. При 5>1 уменьшаем 5 на единицу. Переход к шагу 6. Теорема 2. При любых Л, Ь, с, d*, d*, m<oo, тг<оо, е^О для каждого начального опорного коплана {б, /оп} через конечное число итераций будет или построен е-оптимальный план задачи (1), или установлена несовместность ее ограничений. Любую итерацию метода можно отнести к одному из следующих типов: 1) начало итерации — шаг 1, 2 или 6, конец — шаг 7; 2) начало итерации — шаг 1 или 2, конец — 8 с увеличением S] 3) начало итерации — шаг 1, 2 или 6, конец — шаг 9; 4) начало итерации — шаг 1 или 2, конец — шаг 8 с уменьшением \jls\ 5) начало итерации — шаг 1 или 2, конец — шаг 4 с уменьшением jut1 и переходом к шагу 1 при 5=1; 6) начало итерации — шаг 1 или 2, конец — останов при (З^е на шаге 3; 7) итерация седьмого типа начинается 'на шаге 1, 2 или 6, конец — останов на шаге 9. Очевидно, что итерации шестого и седьмого типов могут выполняться только один раз. Поэтому из дальнейшего рассмотрения их исключаем. Докажем ряд лем'м, необходимых для доказательства теоремы. Лемма 9. Величина 5 при работе метода ограничена. 84
Доказательство. Увеличение s происходит только в случае, когда з/ е J, d%f< d*js, | б* | > |л*. Для таких / выполняется ds+l = d?s+1. Следовательно, s < | J \ = п. Лемма доказана. Лемма 10. При работе метода число итераций четвертого типа конечно. Доказательство. При работе метода на каждом уровне решается задача cs'x -> max, Ах = 6, d% < х < d*s, (4) где с5 (J\j0) = 0, ^о = Аб/о, индекс /0 и число Аб/0 получены непосредственно перед переходом на уровень s. Предположим, что при решении некоторой задачи (4) число итераций четвертого типа на этом уровне (на каждом уровне число различных задач конечно) бесконечно. Компонент / со свойствами б*. Ф 0, d%. = d*.s в опоре быть не может. Поэтому перед уменьшением \is текущий опорный коплан является ^-согласованным. Действительно, начальный опорный коплан в задаче (4) является 0-согла- сованным, а компоненты /, d%. = d*.s в опору входить не могут. Таким образом, в задаче (4) существует опора /оп и последовательность копланов {б^}^ такая, что Ps((,(7onU{/:</<^})||—Т0. В силу замкнутости множества копланов, в задаче (4) существует такой коплан б(0), что || S(o)(^onU{/ :d*/< <dys}) || = 0. Каждый коплан полностью определяется своими опорными компонентами. Следовательно, б(0) совпадает с начальным копланом задачи (4). Но это означает, что при формировании этой задачи выполнялось равенство A3 (^н П {/ : d%j < d*.}) = 0. В этом случае обязательно а*>0 и переход к уровню s невозможен. Полученное противоречие доказывает лемму. Лемма 11. Число итераций пятого типа конечно. Доказательство. Итерация пятого типа выполняется в случае d*^K^d*, (3(х, 61)>е. На каждой итерации выполняется неравенство р (х, б1) <fx1^ (d* — d%j). Правило уменьшения (х1 (см. прямой метод) через конечное число итераций обеспечивает (л1 -> 0 либо (i1 = 0. Следовательно, через конечное число итераций будет вы- 85
полняться неравенство р (х, б1) < jx1 ^ (d* — d#j) < е. Лемма доказана. Лемма 12. Число итераций первого типа конечно. Доказательство. Предположим противное: пусть найдется задача, в процессе решения которой встречается бесконечное число итераций первого типа. Согласно лемме 1 величина 5 ограничена. Следовательно, найдется хотя бы один уровень s, на котором встречается бесконечное число итераций первого типа. Пусть So — минимальный такой уровень. Покажем, что в этом случае, начиная с некоторой итерации, все время выполняется неравенство s^s0. Действительно, в противном случае на уровне s выполнялось бы бесконечное число итераций третьего типа. Воспользовавшись леммами 10 и 11, без ограничения общности предположим, что итераций четвертого и пятого типов не происходит. Тогда за итерацией третьего типа может следовать итерация только третьего или первого типа. Бесконечная последовательность итераций третьего типа невозможна. Значит, за каждой итерацией первого типа на уровне s0 должна следовать итерация первого типа на уровне меньшем чем s0, что противоречит принятому предложению. Таким образом, приходим к выводу о существовании задачи вида (4) и бесконечной последовательности копланов в ней {8(?)}П=ь 6(5) ?= Ф б(°+1) V/. В силу лемм 2 и 3 без ограничения общности считаем, что \is° при работе метода не изменяется. Из описания метода следует, что если 8(°}— ^-согласованный коплан, то и 6(2+1), а значит, и все последующие копланы будут \is° -согласованными. Рассмотрим два случая: 1) все 6(5), /=1, 2, ..., ^-согласованы с соответствующими им опорами, 2) все 8\°i) не [^-согласованны. Случай, когда в последовательности {б(1-)}П=1 имеется конечное число не ^-согласованных копланов, легко сводится к случаю 1). Рассмотрим случай 1). Двойственная целевая функция задачи (4) может быть вычислена по формуле ф (б.) = с'к + ^ 8j (*J - d*,) + 2 67- (х, - d*)9 Sy>0 os.<Q где x — любой псевдоплан задачи. Тогда 86
Ф (б^+1))-Ф (6&) = а#( 2 Ав, (х, - ф) + %}>°. %+1)>° + 2 дед»*/-<*;*))+2 (^+i)K--d;s°) вГ(о<0' 6/<о>0- 5/(.-+1)<0 5/(Vi)<0 _6J{0 (*/-*/)) + 2 (%-n (*;-#/) ~ s8/(0<0- гдй-и>о _ej-(o(x;-d;")). Подставим в качестве х [д>-согласованный с 6s». и Аб псевдоплан, т. е. псевдоплан, удовлетворяющий соотношениям (d*s°, если 8f{[)<—\is° или |6s.»0|<[is% А6^<0, /е/Н(о. *' = Ц0,-, если eft„>|** или |6^0|<[xs% Дб,>0, /е/„<о. X (Уоп(0) = Л"1 (& - А (;> ^(0) И (Л(О))- При этом получим Ф (6s(°i+1,) - Ф (6&) < okl (а0 + 2 Аа;- + + 2 АбД^»-^)+ 2 ДвП*/-^8'))- о<$0<и\ -**<%)<0- 6/(»Ч1)>°- Л5,<° 8/(?+1)<°- д5;>° /е^н(0, 'е/н(0, o<»J'(,)<^ -iiSo<6/0(0<o. < % («о + 2Аа/)' .ro где aft —минимальный ненулевой шаг, построенный при вычислении a*, 6S°.+ 1) = 6S(».} + а*Дб. Кроме того, 87
«. + 2 а% = ("!Г^ при^'- = '', (5) Из описания метода следует, что сс<0. Покажем, что для любой задачи (1) существуют константы Р>0, Q<;0 такие, что если а7->0, то Gj^>P\is, и если а0+2 Аа^О, а-=0 то а0 + 2 Aa7<Q. В самом деле, если 0<а/<;оо, то а.= 0 aj = I б/1/1 Аб7-1 > 1*71 Аб7- ]. Векторы Аб составлены из коэффициентов разложения столбцов матрицы А по текущим опорным векторам. Поскольку число различных опор конечно, то НР>0, 1/|Дб7-|>Р. Следовательно, ej>\isP. В формуле (5) фигурирует компонента псевдоплана, все неопорные компоненты которого принимают граничные значения. Количество таких псевдопланов ограничено. Значит, 3Q < 0 такое, что из а0 + 2 Аа,- < 0 следует Oo + 2Aa^<Q и оценка Ф (6*+1)) — Ф (^X^PQ. В случае [xs° = 0 все копланы &° О-согласованны. Таких копланов конечное число. В то же время Ф (Ф;+1)) — — Ф (6S° ) < О V/, поэтому бесконечная последовательность {6*°}?^ не может существовать. Если же fxs°>0, то Ф (6S«) -—>¦—оо, что противоречит лемме 5. Для случая 1) лемма доказана. Рассмотрим случай 2). Из описания метода следует, что если некоторый индекс / вошел в опору, то |6*°|<[is°. Если же /ЕЕ</оп и 1 ^s-° I ^ Н^0» то ^s-° не изменяется в течение всего времени, пока /е/0п- Обозначим: J±= U Л>п(Оэ с» 1=1 J2 = р| Jon(0. Ясно, что J2?s09 ибо в противном случае, t=i начиная с некоторого /0, все опорные копланы {б*°}, /Оп(о}> i ^> *о» были бы ^-согласованными. Без ограничения общности можно считать, что | б*°.} | < \is° для /е /Оп(0\^2« Кроме того, если / е J* то 6j°(0 = 6*(Jfe) V/, k. Пусть /3 = {/ е /а> 1 б/°(о I > M^V*}. Рассмотрим задачу (4) на s0 уровне с измененным условием: б^.°(1) = О V/e/3, остальные б*°(1) сохраняют прежние значения. В этой задаче по правилам метода можно построить ту же 88
самую последовательность итераций первого типа с единственным отличием: fi*° = 0 Yi. Все копланы в этой по- следовательности будут (^-согласованными. Эта ситуация соответствует случаю 1). Выше было показано, что она невозможна. Следовательно, невозможна и ситуация случая 2). Лемма доказана. Лемма 13. Число итераций третьего типа конечно. Доказательство. Без ограничения общности считаем, что встречаются итерации только первых трех типов. Предположим, что число итераций третьего типа бесконечно. За итерацией третьего типа не может следовать итерация второго типа, так как на следующей итерации обязательно а*>0. Бесконечная последовательность итераций третьего типа подряд невозможна, так как итерации третьего типа происходят только при 5^2. Но тогда в бесконечной последовательности итераций задачи встречается бесконечная последовательность итераций первого типа, что противоречит лемме 12. Лемма доказана. Лемма 14. Число итераций второго типа конечно. Доказательство леммы совпадает с доказательством леммы 8. Доказательствотеоремы 2. С одной стороны решение задачи может закончиться только на итерации шестого или седьмого типа, с другой — число итераций остальных типов конечно. Следовательно, через конечное число итераций будет получен е-оптимальный план задачи (7) или установлена несовместность ее ограничений. Теорема доказана. 3. Численный эксперимент. Для проверки эффективности (^-адаптивного метода был проведен численный эксперимент. Сравнивались прямой (ы-адаптивный, прямой опорный [5] и адаптивный методы (см. § 1). В первой части эксперимента задачи ЛП генерировались следующим образом: векторы d*, d*, начальный план х, а также первые пс столбцов матрицы А и компонент с заполнялись случайными числами, равномерно распределенными на отрезке [—1, 1]. Оставшаяся часть столбцов А н компонент с заполнялась случайными линейными комбинациями уже построенных столбцов А и компонент с. Начальная опора /од полагалась равной {/=1 + + [(^с—1)1 (т— 1 )](г— 1), i=l, т). Вычислялся вектор Ъ = Ах. Результаты эксперимента представлены в 89
Табл. 19 т 10 10 10 10 5 3 10 5 10 п 40 60 80 100 100 100 500 500 200 пс 20 20 20 20 20 20 50 50 50 Среднее время, с я са X 4.76 8.39 13.75 16.80 8.32 4.19 122.77 37.00 32.31 о S к с 4.61 9.71 22.26 30.48 21.06 16.00 600 600 250 с8Д 7Й 4.48 7.89 13.10 15.91 7.77 3.98 106.18 35.32 30.73 Среднее число смен опоры я я н со Я 11.2 13.2 16.2 16.0 11.2 6.8 33.3 12.7 25.0 О 2 к о. с 17.0 26.8 48.8 55.6 70.0 74.8 <а я 11.0 13.4 17.2 17.4 11.0 6.8 34.7 14.7 27.3 7 8 8 8 8 8 8 14 14 14 табл. 19. (Прочерки в таблице означают, что хотя бы одна задача серии данным методом не решена.) Во второй части эксперимента решались задачи линейного программирования, полученные из линейной задачи оптимального управления дискретной системой: *(*i)-wnax, x(t+l)=Ax(t)+bu(t),te=T={0, 1,...,/2-1}, х(0) =0, x(t2) =0, \u(t) | <1, где *(*)€=?*, А = ?+#, Е — единичная матрица, Н — матрица, у которой элементы над главной диагональю равны Л, остальные элементы равны 0, Ь = {0, ..., 0, К). Результаты представлены в табл. 20. Программы реализованы на языке FORTRAN-IV, трансляторы FORTRAN G и FORTRAN Н ОС ЕС. Измерялось процессорное время работы подпрограммы решения задачи ЛП. В каждом сравнении участвовали программы, обработанные одним и тем же транслятором. Вычисления проводились на ЭВМ ЕС-1022. § 8. Блочный метод В этом параграфе строится новый метод решения тХм-задачи линейного программирования c'*->max, Ax = b, d*^x^d*. (1) 90
Табл. 20 п 3 5 8 8 9 8 8 9 8 8 8 8 8 8 8 8 г2 500 500 500 400 400 200 200 200 100 100 100 100 100 100 100 100 h 475 475 475 397 380 199 196 196 11 12 20 95 96 97 98 99 h 0.25 0.25 0.25 0.25 0.25 0.30 0.30 0.30 0.30 0.30 0.30 0.30 0.30 0.30 0.30 0.30 Время решения, с m я h СО я 59.24 271.28 77.54 243.20 163.65 — 177.35 67.24 — 10.30 14.72 22.36 10.30 10.30 12.12 51.72 <2 О s к с 43.14 161.43 — — — — — — 43.10 44.86 46.84 16.90 46.30 53.94 109.67 — 38.16 59.10 70.98 175.47 156.77 84.92 82.16 66.38 18.44 10.30 13.98 14.02 10.30 10.30 11.34 30.06 Число смен опоры 17 113 17 53 38 — 74 32 — 12 15 45 12 12 14 51 О S к а, с 69 198 — — — — — — 94 101 104 69 107 126 259 — Ч 7S =5-Н 11 22 16 37 35 44 61 33 21 12 15 33 12 12 13 40 т 18 12 4 8 4 7 7 8 15 8 14 5 8 8 8 8 Идея метода состоит в следующем. Пусть {х, Лоп}, А0п=Л(1, /on), /one:/,— опорный план задачи (1). По схеме адаптивного метода вычислим новый план х = = x-\-@ol°. Пусть х не является е-оптимальным планом задачи (1) и i0^JOu — индекс, на котором достигался шаг во. С помощью to сформируем производную задачу, решение которой даст направление спуска I1 для опорного плана {х, Аои}- Построим новый план x=x+@il1. Пусть ii^Jon — индекс, на котором реализовался шаг 6i. В результате у опорного плана {ху Лоп} будут две критические опорные компоненты Xi0, Xit. С учетом этих компонент построим для плана х опору Л0п._Новая итерация метода начинается с опорного плана {х, Лоп}. 1. Вспомогательный алгоритм. Предварительно по- 91
строим необходимый для дальнейшего вспомогательный алгоритм решения задачи - а' (К) У (К) -* max, 6, < - у' (К) У (К) < Ь\ Р*<</*<Р?', *€=*, K = {U 2, ..., k). (2) Положим у1 = у1 (К), ( pf, если а, > О, у} = | Р*, если а? < О, ( любое значение из [рь р'], если <xf = О, и вычислим к = —у'(К)у1(К). Если xe[ftt, Ь*], то оптимальный план у0 задачи (2) совпадает с у1 и на этом процесс решения задачи (2) прекращается. В противном случае положим /ц = к—&*, \х=1, если х<&*; ц = Ь*—т), [Jt = — 1, если к>Ь*. Подсчитаем числа ( -°//№, если sign at ф sign \х,уи HYz?=0, w [ оо в остальных случаях, * ЕЕ /(. Если o(i)=oo Y i^Ky то ограничения задачи (2) несовместны. (Забегая вперед, заметим, что ограничения всех задач типа (2), встречающихся в предлагаемом методе, в силу существования опорного плана задачи (1), всегда совместны.) В случае, когда {i^K'.o(i) <°°}=й=0, числа a(i)<°c>, i^K, упорядочим по возрастанию: a(i'i)^ -< о (i2)<C • • • <^ ° (h) и вычислим i\tJ t = I, s: r\t-i + + I'ViJ(-Pi/+^) при |ху*,>0, ^i + \yit\(^-y}t) при |iY^<0, считая r]0 = rj. Если t]s<0, то ограничения задачи (2) несовместны. В противном случае существует такой индекс s#, 1^ ^5*^5, что tjs,_i<;0, T]s*^0. Компоненты оптимального плана задачи (2) У\ = У\, fe{4*+i, . • , i8} U {te#: o(i) = = oo}, I p^, если \iyt < 0, ^' = J pf, если мл>г>0, fe{/i, ... , tSh_i}, ^=^ + T>--i/l*Yi„- На этом заканчивается работа вспомогательного алгоритма. 2. Итерация. Пусть {х, /оп}, ЛшС=/,— начальный опорный план задачи (1). Вычислим вектор оценок А — 92
Ч = А(У): A'(J)=u'(I)A(I, J)-c'(J), u'(I)=c'(Joa)A^, гДе A^ = IA(J, /on)]-1- Если p (*, Jon)=^i (x—d*) + Aj<0 J + 2^7 (Xj — d*.) < e, где e — заданное неотрицательное Ду>0 J число, то х — е-оптимальный план задачи (1). Предположим, что р (х, Jon) > 8. Шаг 1. Построим вектор l° = l°(J): [ d? — */ при Д7- < О, | 0 при А7« = О, I d*7 — xj ПРИ aj > о, / е 4» Найдем максимально допустимый шаг вдоль направления 1° из следующих соотношений: во = тш{1, вг0}, вг0 = ГШП{вг, fe/on}, Г {d;-Xl)/l* при /°>0, 0. = | оо при /о = О, [ (йы—х%)Щ при /°<0, fe/on- Если (1— во)Р(*> /оп)^8, то вектор х = х+@01° является 8-оптимальным планом задачи (1). В противном случае перейдем к шагу 2. Ш а г 2. Описанным в п. 1 алгоритмом решим производную задачу Р* (у) = —Д' (/н) у (/н) -> max, <U — *ь < — X (i0, JK) У (/н) < d* — *,e> d* (/н) —* (/н) <У (/н) < d* (/н) —* (/н), где X(i, /н) =Л_1(1, 1)А(1, /н), fe/on- В результате получим оптимальный план #°(/н), числа is#e/H, о (*«*), jx = *=zfcl. Перейдем к шагу 3. Шаг 3. Построив вектор /1 = /1(/), /Ч-М =#°(-М, (Jon) = —A~n(Jou,I)A(I> ^н)^(^н). вычислим новый план задачи (1):~я = я +в^1, e1 = min{l> 6tl}, в^ = (d;-*,)//{ при Я > О, оо при ZJ = О, [ (d^t — xt)ll} при 1\ <О, /ЕЕ/оп. 93
Если (1—6i)|3*(r/°) =^е, то x — е-оптимальный план*). В противном случае положим jo = io, /i = ii, Kr=Jh, Zo(Kb) =X(io, Ки), Zi(Kh) =X(iiy Ku) и перейдем к шагу 4. Шаг 4. С помощью вспомогательного алгоритма (см. п. 1) решим задачу Р(у)=-А'(Ки)у(К*)-+тах, d,h — xh < — г[ {Кя) У (Кп) < dl — xhy (3) исходя из начальной информации у1(Ки)=х(Кк) -\- + /°(/Сн)=^(7Сн) + (1—в0)/°(^ы). В результате получим оптимальный план у°(Кн), числа iSll, cr(isJ, [x = ±l. При P°(z/°) >е перейдем к шагу 5. Шаг 5. Положим /Сн = (/CH\'s*) LUi и построим новые векторы!1^), г0(Кн), МЯЙ), A(#H): (у* при i{E(KK\h), Ч = dl—хь при i = iu [х = — 1, [d^ — Xi, при t = /ь |x= 1; z"o (Дя\У = *i (KhVi)/Zi (/«J, *i (^hVi) = *o (Дн\У — 2o (is J z"o (KH\h), z~i(k) = — z0('s*)/M's*); A (tfHVi) = A (^hVi) + ^ (tsj *i (ЯнVi), A(t1) = |ia(fsJ. Считая ii = io, i"o = ie*, перейдем кшагу 6. __ Шаг 6. Вычислим х = —zj (Кн) I1 (Кк)- Если d^— — Xix < и < &\ — хь, то перейдем к шагу 7. В противном случае возвращаемся к шагу 4, заменив у1, Д, zx, KR на 0*=7\ А, г^, KR- :,:) Обоснование этого положения следует из того, что число Р*(#°) есть оценка субоптимальности опорного плана {х> Л0п}, Лоп = =A(It /оп), где /оп=(/опА'о) (J ^*- На переходе от плана я к плану х целевая функция задачи (1) увеличивается на величину с'х—с'х=- = 6ip*(#°), поэтому число (1 —©i) р:Н (f/°) —оценка субоптимальности опорного плана {х, /0п}. 94
Ш а_г 7. Строи^ новый опорный план {х, Л0п}, A0Tl= =Л(/, /on), Jon = J/Rn и начинаем новую итерацию метода с {#, Лоп}. При этом оценка субоптимальности опорного плана {х, 70П} равна |3(*, Jon) =|3<>(у0). в качестве направления 1° для следующей итерации целесообразно взять вектор /»_=/«(/): /«(7Н) = Р(7Н), /V7n) = - Л"1 Ой /)Л(/, JK)l0(JH)- Вдоль этого направления максимально допустимый шаг положителен, если среди компонент #?, /Е/оп\{^ *i}> нет критических. 3. О конечности метода. Итерацию {х, А011}-+{х, Лоп} назовем регулярной, если число а (4*), полученное на шаге 2, больше нуля. Очевидно, что описанный метод за конечное число итераций даст е-оптимальный план задачи (1) при условии, что число нерегулярных итераций и число повторений шага 4 в процессе решения задачи (1) конечны. Однако, следуя § 4, 5, нетрудно построить несложную модификацию метода, конечную для любой задачи (1). В основном все шаги конечной модификации метода остаются теми же, что и выше. К ним лишь добавляется следующий шаг, который по мере необходимости выполняется в процессе решения задачи (1). Шаг 2'. (Выполняется, когда число a(tSft), полученное на шаге 2, равно нулю.) С начальной информацией х, к, 1°, ©о приступим к процедуре корректировки, описанной в § 6. Она закончится через конечное число шагов. На последнем шаге корректировки операцию замены опоры не производим. В результате получим новый опорный план {х\ Л*п}, AlOTi = A(I, /*п), /ind/; индекс i^ ее J1 , который соответствует ведущей строке; направление I1 и соответствующий ему максимально допустимый шаг в на последнем шаге процедуры корректировки. Приняв х\ Alon, i*, I1, в за х, Лоп, *0> 1°, в0, повторим шаг 2. При этом обязательно окажется, что a(is#)>0. Для того, чтобы предотвратить возможность бесконечного числа повторений шага 4, введем в рассмотрение число й^1 —параметр метода. Когда число повторений шага 4 станет больше Л, то переходим к шагу 7, пропустив шаги 5 и 6. Замечание. Конечность числа повторений шага 4 можно обеспечить, включив в итерацию метода шаг 4', на котором также выполняется процедура корректировки по схеме § 6. Описание соответ- 95
ствующих процедур оставим читателям в качестве полезного упражнения. 4. Численный эксперимент. Цель эксперимента — сравнить предложенный метод с адаптивным методом § 1. С помощью генератора GER (см. § 9) сформулированы 18 серий задач по четыре задачи в каждой. Все параметры Л, Ь, с, d*, d*, а также начальный опорный план {х, Лоп} построены аналогично § 7. Между числом п переменных и числом т ограничений задачи (1) выбиралось следующее соотношение: n = mXj-\-[m/i]1 где i=l, 3; /=1, 2; /л =10, 12, 14; [а] — целое число, не превосходящее число а. Блочный метод (метод I) и адаптивный (метод II) сравнивались по среднему числу итераций и по среднему времени решения каждой серии задач. Результаты эксперимента приведены в табл. 21. Табл. 21 тХп 10x20 10x15 10X13 10x30 10x25 10x23 12x24 12x18 12x16 Среднее число итераций I 3.75 3.75 1.50 6.00 5.25 4.75 5.00 3.25 2.25 II 6.25 6.25 2.25 11.25 9.25 9.25 9.50 5.50 3.50 1 Среднее время решения, с I 0.885 0.595 0.220 2.400 1.600 1.365 1.640 0.750 0.425 II 1.025 0.810 0.290 2.560 1.820 1.690 2.165 1.035 0.620 тХп 12x36 12x30 12x28 14X28 14X21 14x18 14x42 14x35 14x32 Среднее число итераций I 6.75 5.00 5.00 5.75 4.00 2.25 8.75 7.55 7.75 п 15.00 9.25 9.75 10.75 6.75 3.25 19.50 17.00 15.75 Среднее время решения, с I 3.580 2.095 2.005 2.520 1.220 0.600 6.405 4.325 3.760 II 4.785 2.575 2.545 3.270 1.665 0.760 8.720 6.140 5.295 § 9. Многошаговые методы В этом параграфе строится многошаговый метод решения общей задачи линейного программирования [11, 36—38]. Для того, чтобы лучше понять его сущность, сначала опишем двухшаговый прямой метод. 1. Прямой двухшаговый метод. Рассмотрим тХ^-задачу линейного программирования 96
с'я-^тах, Ax = b, d*^x^d*. (1) Пусть {x, Лоп}, Л0П=Л(/, /on), J on^iJ,— начальный опорный план задачи (1), оценка субоптимальности Р(х, Л0п) которого превышает заданное число е^О. Следуя методу § 1, по опорному плану {х, Лоп} построим подходящее направление l1 = li(J) и вычислим шаг Oi = e(/1)=min{l, 6j0}, вк = тт{@1, /е/оп}, где в; — максимальный шаг вдоль I1, допускаемый /-м опорным прямым ограничением. Процесс решения задачи (1) прекращается на е-оптимальном плане x = x-\-Qil\ если (1—еорс^ЛопХе. При (1—в±)(3(л:, Л0П)>8 по исходной информации х, Лоп и вектору Z1 построим (см. § 1) новую опору Лоп = = Л(/, 70п), 7on = (/0n\/o)U^, и подходящее направление /2 = I2 (J) для опорного плана {х + Q±l\ Лоп}- Новый план х задачи (1) вычислим по формуле x = x(z°), где x(z)=x+Lz, L = {11, I2}, z = (zly г2)—план, z° — решение задачи Y'z-^max, d*—x^Lz^id*—x (y' = c'L). (2) z Задачу (2) решаем методом § 1 с начальных плана 2о={в1, 0} и опорной lXl-матрицы L0I1 = L(1, /о) = = /}0 ^ 0. После первой итерации получается план с z\ = = Q(l1), г* = в(Р), где в(/1), ©(Z2) суть величины шагов на первых двух итерациях метода § 1, примененного к опорному плану {х, Аои}. Таким образом, за один шаг целевая функция возрастает не меньше, чем за два шага метода § 1. Оценка субоптимальности опорного.плана {x(z)y Лоп} равна р (х(г), Лоп) = Р(*, Аоп) —у'г= Р(х, Аоп) +АР(Лоп) — — Yizi — Т2^2 = ©iTi + АР (Аоп) + (1 — в4) р (х, Лоп) — Yi2i — —72^2= (6i—2i)vi+( 1—22)Y2- Процесс решения задачи (2) прекращается, как только будет построен план z задачи (2), для которого выполняется неравенство $(x(z), Л0п)^е. Тогда x(z) —е-оптимальный план задачи (1). Специальная структура задачи (2) позволяет упростить метод § 1. Пусть на k-й итерации известен опорный план {zk, L(jk, 1)}. Для zk строим подходящее направ- 97
ление pk = {р\ = — If /lj , p\ = 1} и вычисляем вдоль него максимально допустимый шаг сэ = (о^ р где jk+i — индекс ограничения, которое первым стало активным при движении вдоль pk. Полагаем zk+l = zk + wpk. Если выполняется одно из условий 1} =0; /у? /I) <//// Jk+l Jk+l Jk+l Jk Y2-Y1/J /// <0, (3) то zh+l — оптимальный план задачи (2). В противном случае плану zft+1 приписываем новую опору L(jk+u 1) и продолжаем решение задачи (2), исходя из опорного плана {zk+^, L(jk+u 1)}. Замечание. Задача (2) имеет |/|=/г основных ограничений. Специфика матрицы L позволяет сократить число основных ограничений задачи (2) до т+2. Действительно, задача (2) эквивалентна задаче y'z ->- max, dtJ — xj < l) гг + /?za < d*. — xj, j e /0nU/*; -E/.<2i<ele (4) Здесь |у# = min gy, j^JB:l] ф0, sign /] =? sign /?, /H = J\J0U9 ( (-d] + xi)lt}, если /)<0, 00, если /| =0, /? =? 0, Еу = (xj — d^/l), если /]>0. Индекс /# определяется следующим образом. Если J^ = {/ ЕЕ е^н : /у ?= °> si?n 'у1 ^ sign 1?}Ф0, то g/# = min gy, / е /н*. При /* = 0 в качестве /# выбирается любой элемент /" ЕЕ /н, для которого Z? =? 0. Эквивалентность задач (2), (4) следует из того, что множества планов этих задач, на которых значения целевой функции y'z не меньше y'zo, совпадают. Последнее нетрудно показать геометрическим путем, замечая при этом, что у>0 и точка z={Oi, 1} удовлетворяет всем ограничениям: d%j — х\ < zxl- + z2L < d- — ху, / ЕЕ ^н* Лемма 1. Если для плана zk+l, й>0, задачи (2) ни одно из условий (3) не выполняется, то jk+i е J*n, при- 98
чем при Xj (zk+l) = d* выполняются неравенства x'*+i>d/*+i' lh+i>0> а При ^+i^+1)=d*^+i-HePa- венства *;Л+1 <d*jA+1, */Л+1<0, гДе С = {/Ее7оп: х, = = xj + e1l] + l^[d*j, d*]}. Доказательство проведем по индукции. Для k = 0 справедливость леммы очевидна. Пусть лемма верна для k = s. Покажем, что она верна и для k = 5+1. Предположим, что это не так. Для определенности пусть *7S+1(zs+1) = dts+i, но *jk+l<d;k+l и пусть xJa{2°)=dtJs. Тогда: z\+4j +&+Ч* =d^ —xj , 1 Js Js s s Bit) +tj <<r, —*#,.,. 1 h+l h+l h+l Js+l Из (5), (6) следует, что г\+Ч] +*+Ч*>в11} +t* 1 h h 's 's 1 h+l 2 's+1 l h+1 h+l (5) (6) (7) В силу того, что 2S+1 не является оптимальным планом задачи (2), решение {ии и2} уравнений иА + u>lh+i = *• Ч + u*lis+i = *» (8) удовлетворяет неравенствам ^i>0, и2^0. Умножив неравенства (7) соответственно на ии и2 и сложив их, с учетом (8) получим ZiYi+Z2Y2>©iYi+Y2- Последнее противоречит тому, что Y/<2:^®iYi+Y2 Для любого плана г задачи (2). Лемма доказана. Из доказанной леммы следует Лемма 2. Решение задачи (2) получается не более чем за | /оп | + 1 итераций. Замечание. Лемму 1 в случае, когда Н/е/н» 1~1% < 0> можно усилить. А именно, если для плана z^+1, &>0, задачи (2) ВЫПОЛНЯЮТСЯ УСЛОВИЯ /?_|_j ЕЕ./н» l). .tf. Ф 0, то x(z + ) — 99
оптимальный план задачи (1). Доказательство этого утверждения нетрудно провести от противного, замечая, что в этом случае Вспомогательную задачу (2) необязательно решать до конца. Если на k-ik итерации решения задачи (2) все условия (3) нарушаются, то для опорного плана {zk+i, L(/ft+i, 1)} выполняется неравенство y'z° — y'zk+i ^ <t|(z*+1, /л+i), где t|(2*+i, j_k+i)=uudim> Uf* = Wjk+l- -^J!^+-lllh^ *L=d.L-**. (*>l) При uu < 0; djm = d* — xji {zk+l) при щ% > 0. При этом В случае P(*(z*+1), Лоп) — т| (г^1, /Л+1)>8*> эффект для задачи (1) от дальнейшего решения задачи (2) из-за плохой опоры Лоп незначителен, поэтому процесс решения задачи (2) можно остановить и перейти к построению новой опоры задачи (1). Предположим, что процесс решения задачи (2) остановлен на опорном плане {2s, L(/s, 1)}, s^l. Новый план задачи (1) строим в виде x = x(zs). По построению, компоненты xj , xJs_{ плана х — критические. Если s= 1, то /оЕ/ош /iEE/оп- Элемент /-,_ выводим из опорного множества по правилам метода § 1. При s > 1 различаем два случая: 1) /вЕЕ/0п» 2) /se/on- В случае 1) при выполнении условий замечания план я оптимален в задаче (1). Если эти условия замечания не выполняются, то элемент js—i выводим из опорного множества по правилам § 1. В случае 2) элементы /s, /s_i выводим из опорного множества по правилам, описанным в п. 3. 2. Численный эксперимент. Цель эксперимента — сравнить двухшаговый (метод I) и адаптивный методы (метод II) решения задачи (1). Для этого было сформировано 9 серий задач (1), по 5 задач в каждой. Параметры задачи (1) генерировались датчиком случайных чисел, равномерно распределенных в интервале [—100, 100]. Датчик реализован в виде следующей FORTRAN-под- программы: SUBROUTINE GER (Y, Z) L = Y*Z *) Вместо е здесь можно взять (Х(е)^О, 100
Y = Y* Z —L Y= 100* SIN (3.1416* Y + 0.5) Z = Z+0.4141 RETURN END Он генерирует последовательность чисел z/, которая используется для заполнения вектора с и матрицы А. Затем этим же датчиком генерировались тройки чисел, меньшее из которых принималось за d*j, среднее — за Xj (компонента начального плана), большее — за d*. По этим данным вычислялся вектор Ь=Ах. Начальные опорные индексы задавались числами {1, 2, ..., т). Каждая сгенерированная задача решалась сначала методом I, затем методом П. Критериями сравнения служили число итераций и время решения задачи (1). Выбор этих критериев определяется тем, что сравнение по числу итераций важно с точки зрения накопления ошибок округления, вызываемых преобразованием опор. Из п. 1 ясно, что число итераций метода I меньше числа итераций метода II, по крайней мере, в 2 раза, однако каждая итерация в методе I сложнее, чем в методе II, поэтому сравнивалось и время решения задачи (1) обоими методами. Результаты эксперимента приведены в табл. 22. Установлено, что среднее число итераций в методе I Табл. 22 тхп 10X30 10x40 10x50 15x30 15x40 15x50 20x30 20X40 20x50 Среднее число итераций I 6.80 11.00 11.80 08.50 11.60 20.00 6.00 11.60 17.40 II 23.80 33.80 39.40 18.20 30.00 47.60 14.80 27.60 46.40 Среднее время решения, с I 4.04 8.184 11.244 6.510 11.668 23.84 6.964 15.852 28.82 II 7.94 14.716 20.828 9.144 19.916 37.68 10.912 25.072 50.164 101
меньше, чем в методе II, в 2—3,5 раза, а среднее время — в 1,5—1,8 раза. 3. Многошаговый метод. В этом пункте обоснован s-шаговый прямой метод решения задачи (1), который при 5 = 2 совпадает с двухшаговым методом п. 1. Пусть {х, Лоп}, А0Т1=А(1, /оп), J ou.^-J,— начальный опорный план, оценка субоптимальности (3(х, Лоп) которого больше заданного числа s^O. Алгоритм s-шагового метода строим индуктивным образом. Следуя § 1, строим для опорного плана {х, Лоп} подходящее направление li=li(J) и найдем максимально допустимый шаг во вдоль направления I1: e0 = min{l, 6j, /ge/оп}, Ud*-Xj)/l}, /1>0, ©/ = I) = О, (d^-xj)/l}9 /)<0. Процесс решения задачи (1) прекращаем на е-опти- мальном плане x = x+@oll, если |3(х, Л0п) = (1 — во) X Хр(.т, Лоп)^е. Пусть |3(#, Л0П)>8 и в0 = в^0. Нетрудно видеть, что совокупность {в0, /!} является оптимальным опорным планом задачи Vi^i-^max, d*—x^ZfiZi^d*—х (yi = c/li). Положим k=l, /<°> = Jon, Y(1>={Yi}, L<»> = (/!}, z(D = = Ы, /(1) = {1}, А^ = А(1, /?>), z^={@0}, Lg)={l}t). Опишем переход от &-го шага алгоритма к (&+1)_мУ шагу. Пусть для натурального числа k известны J{Qk~l), Y(ft)={Yi, Y2, •••> Y*>, Ъ = с'1\ /W = {1, 2,...,fe}, Л^-1), L<*>={/\ Z2, ... , /*} и {z(*>, LW} — оптимальный опорный план задачи y(k) > Z(k) __+ max> d, — x < L(^)z^) < d* — *, (9) причем /Дп* — невырожденная k X ^-подматрица матрицы L(fe), составленная из активных ограничений задачи (9) на плане z^k). Для k = 1 эти данные приведены выше. Направление #*+^ для (&+1)-го шага алгоритма построим следующим образом. Пусть /а — набор индексов активных ограничений задачи (9) на плане z^ и 102
{х*, Л*п}, Л*п = А (I, У*п), — оптимальный опорный план задачи c'x-^max, Ax = b, d*(7) ^x(J) ^d*(J), J = jri)[)Ja,JLk-l) = J\J{<tl)' (Ю) Положим /<*+!> = ** — x — L(*>z(*)f 4?> = Л^п, /w = = J*n, y(A:+1) = {y{k), Ук+i = c'Hk+l)}. На этом заканчивается переход от &-го к (&+1)-му шагу алгоритма. Отметим, что оценка субоптимальности опорного плана {*(*>, AW), где xM=x+LWzik\ задачи (1) р (х<*\ Лоп}) = с'я*— с'х^. Как только получено неравенство Р (я(*\ Лоп)<е, процесс решения задачи (1) можно прервать, не доходя до требуемого s-ro шага алгоритма (тогда x^k) является е-оптимальным планом задачи (1)). Остановимся подробнее на 5-м шаге алгоритма. Известны: векторы /V2, ... , Is; {2(s_1>, L?—l))—оптимальный опорный план задачи (2) при k = s—1, причем 7;(s-i) = ^(s-i) (^s-i)f /<*-!)), где J^-1)—множество индексов активных ограничений задачи (2) на плане J{s-i)y | js-i | = s_ i; 4?-i> = Л (/, /Йг!>). Для упрощения записей индекс s в L<s), 2<s), y(s) и т. д. будем опускать. Новый план задачи (1) построим по формуле х= = x(z°) = x-\-Lz°, где z° — решение задачи Y^-^max, d*—x^Lz^d*—x. (11) 2 Оценка субоптимальности для опорного плана {x(z), А{м1)} задачи (1) удовлетворяет соотношению ^Г") + 2 Y,is_I) -У'г = 2 Y* Й5-1» -z,) + (1-z.) у,- 1=1 t=l Как только будет найден такой план z задачи (11), что $(x(z), Л^п_1))<8, процесс решения задачи (11) прекращается. Полученный план х {г) является е-оптимальным планом задачи (1). Процесс решения задачи (11) начинается с начальных плана z={z^s~i\ 0} и опорной (5— 1) X (s— 1)-матри- 103
цы Lon = Lon l) и сводится к следующим операциям. Вычисляется вектор потенциалов v' = у' (/(s~"1))^~1 и оценка As вектора Is: As = 2 vi^) — Ys» гДе ^аП — множество опорных (активных) индексов задачи (11) на плане z. Для плана z строится подходящее направление р = = {—L^1 ls(Jln)9 1} и вдоль него находится максимально допустимый шаг (d0 = G)/*> гДе /*—индекс ограничения, первым ставшего активным при движении вдоль направления р. Далее вычисляется число а0 = min {os, ау., /e/aon}, где [ —Vj/kuj, если kVjUj<C0, J 0, если Vj = 0, kuj > 0, / е /™, ' ~ О, если у7- = 0, &а7- < 0, / е J°a\> { оо в остальных случаях, / ее </°п; и' = - L (/*, /-1) L-i (/(-i),/»); ft = 1 при L (и, I(s-i))(z + c*0p) = dl-xu; k = -\ при L(/„ /(*-D) х X(z + <o0/?) =dtU—xu; с* = —Ae/fo*>0*>, ГДе ^^-Ц/*, /(-D) L-Ч* (Уоп); /on={/e/on:Xi(z) = Если ao=crs, то план z = z-\-d)Qp является оптимальным в задаче (11). В противном случае плану z приписывается опора Ьоп = Ь(Ли, /(*-!>), где 7°п = (J™[} /J4/V Здесь /0 — такой индекс, что a/0=min{aJ-, /ЕЕ/?П}. Далее дроцесс решения задачи (11) продолжается, исходя из опорного плана {г, LOTI}. Замечание. Процедура решения задачи (9) аналогична описанной для задачи (11). Для получения оптимальной опоры L^ необходимо к опорному множеству /°п добавлять элемент /# — номер ограничения, которое стало активным на последней итерации оелпр- ния задачи (9). Процесс решения задачи (11) можно прервать на любой итерации. Нетрудно показать, что *> Это неравенство следует из того, что As^0, а us>0 при k—\\ us<0 при k = — \. 104
y'z0-y'z^v' (J°an)d(J°au) = r](z), (12) где у Van) = V {J™)—v' (JZu)ls(JZn)L(Ji, Л8-1)) L-^(l(s-i)y Jou)/us = v, (/od) + 0' (Jon) /, (/on) a/ (Jon)/us. 2j = d] - — xj{z) при vj>0; dj = d^ — Xj(z) при ^<0, /^/°n. Справедливость неравенства (12) вытекает из того, что r\(z) является не чем иным, как оценкой субоптимальности опорного плана {z, L(HS), ./°n)U/*} задачи (11) (см. § 1). Когда r\(z) достаточно мало, процесс решения задачи (11) можно остановить и перейти к построению новой опоры для плана х (z). Предположим, что процесс решения задачи (11) остановлен на плане г. Новый план задачи (1) строим в виде x = x(z). Пусть /а — набор индексов активных ограничений на плане z задачи (4). Новую опору Лоп плана х строим следующим образом. Рассмотрим задачу c'x-^max, Ax = b, d*(J)^x(J)^d*{7), (13) где J = /(-n U /а, J<Tl) = JV?r1}- __ Задачу (13) решаем, исходя из опорного плана {х, A{0S~1]}. Пусть {л:*, Л*п}— оптимальный опорный план задачи (13). Плану х приписываем опору Аоп = А*оп. На этом завершается одна итерация s-шагового алгоритма. В качестве подходящего направления I1 для следующей итерации возьмем вектор I1 = х* — х. Вместо задачи (13) можно решать задачу — ^ &]h ~* тах> d„,i — Xi^— 2 XijL^d*—^, iE/*, (14) dt,- x}< /,< d;-xj, j?E /<-ч i* = Ja n J?-l>, x(i, J^)=A~^(i, I) A (I, Ji-»), Aon = A^K 105
Здесь А — вектор оценок, вычисленный по опоре А^~1) задачи (1). Задачу (14) целесообразно решать двойственным методом, исходя из начального двойственного плана у (/*) = 0; wj = — Д7-, vj = 0 при Aj < 0; Wj = 0; vj = А7- при Д7>0, ]EzJ?~l\ и начальных опорных множеств Пусть /*п, /°п — оптимальные опорные множества задачи (J.4). Плану х _припишем новую опору Лоп = Л (/, Л>п)> Лш = (^оп~п и^нП)\^оп- В качестве направления/1 для следующей итерации возьмем вектор Iх = I1 (У), /1 (/(*-П) = Г(/<*-1>) (7 (/(*-!>) _ решение задачи (14)), Оценка_субоптимальностидля опорного плана {#, Л0п} равна р (х, Лоп) = с'я* — с'х = р, где р — оптимальное значение целевой функции задачи (14). При этом имеют место соотношения р (х, Л0ц) = Р (х, А$Г1)) — АР (Лоп) < <; Р (х, Лоп). Число — Др (Лоп) < 0 — приращение двойственной целевой функции при переходе от двойственного плана, сопровождающего опору А?~1) к двойственному плану, сопровождающему опору Лоп. Введем понятие регулярности. Итерация {х, Лоп} -*¦ ->*{*, Лоп} регулярна, если р(Л0П) <Р(Л0П), где р(Л0П) — мера неоптимальности опоры Лоп- По стандартной схеме нетрудно доказать, что справедлива Теорема 1. Для любого числа е^Ои любого начального опорного плана {х, Лоп} описанный алгоритм за конечное число итераций строит е-оптимальный план, если все его итерации, за исключением конечного числа, регулярны. Замечание. Следуя § 6, 7, можно построить и конечные версии описанного алгоритма, в которых никакие свойства регулярности не используются. 4. Двухшаговый двойственный метод. В этом пункте строится двойственный аналог двухшагового прямого метода из п. 1 для решения задачи (1). Двойственной к (1) задачей является b'y — dlv + d*'w -> min, (15) A'y+w—v = c, v^zO, w^O. 106
Вектор 8=А'у—с называется копланом, пара {б, Лоп} из коплана б и опоры Лоп—опорным копланом. Предположим, что условие согласования § 1 выполняется для каждого двойственного плана {у, v, w}. Пусть {б, Лоп}, Л0П=Л(/, /оп}, /one:/,— начальный опорный коплан задачи (1). Построим соответствующий псевдоплан к: [ d* при бу<0, Kj~ 1 d+j при б7->0, j<=JH = J\J0IS; х(/оп)=Л-1(Ь-Л(/,/н)х(/н)), Известно, что при d*(/on) ^х(Лш) ^d*(J0I1) псевдоплан к является (3-оптимальным планом задачи (1), где Р = Р К Лоп): Р (х, Лоп) = ^ 6, (х, - 47.) + ^ бЛ*— <*;)• о->0 Sy<0 Если при этом имеет место неравенство р^е (е — заданное неотрицательное число), то решение задачи (1) прекращается на е-оптимальном плане к. Дальнейшее изложение связано со случаем, когда либо псевдоплан к не является планом задачи (1), либо псевдоплан к — план задачи (1), но р(х1_Лоп) >е. Тогда найдется такой индекс h е Л)п>__ что хд е [d#h, d*J. Здесь^д =Th = d,h при 6д > 0; d.h = d]x = d*h при бд < 0; d*h=d^, Ц=&*и при бд = 0. Положим \хг = 1, если хд <й*д» На = — 1» если хд > d*jt. Направлением изменения опорного коплана {6, ^оп}» ПРИ Движении вдоль которого целевая двойственная функция уменьшается, является вектор Д*б = = A W) : А^. = 0, / е= /on\/i- A% = l*i. Л16' (4) = = А1в/(^с»)ЛГп1^ош 'М(/, 'н)- Вдоль этого направления сделаем длинный двойственный шаг (см. § 1) (т. е. движемся по направлению Л*б до тех пор, пока скорость уменьшения целевой функции задачи (15) не станет больше нуля). При этом возможны случаи: 1) максимально допустимый шаг d вдоль направления А*б равен бесконечности (тогда ограничения задачи (1) несовместны); 2) ai< + oo. Пусть /о — индекс, на котором реализовался этот шаг. Вычислим новый коплан 6 = 6+aiA16. Пусть для опорного коплана {б, Лоп}, где Л0п = Л(/, /оп), hn = = (/on\/i) U /о, соответствующий ему псевдоплан либо не является планом задачи (1), либо является планом задачи (1), но не удовлетворяет условию субоптималь- 107
ности. По описанной выше схеме найдем для {б, Аол} новые направления изменения А2б, числа |ы2, /г. Новый коп- лан задачи (1) строим в виде б~= б + г^Аг8 + г\ А2б, где z° = {z°v 2°} — решение задачи b'y — d$+d*'w-+min, б + 2^6 + 22Д2б—v+w=0, (16) Zi, z2 A'y—6—ZiA^—z2A28 = c, v^0,w^0. Займемся преобразованием задачи (16). Сначала заметим, что значения v, w в задаче (16) однозначно определены по значению б (-г) =6+2iA16+e2A26 в силу условия согласования двойственного плана. Обозначим: у = =у-\-Ау, тогда с учетом А'у—8 = с имеем A'Ay = zl№8-\- + 22Д2б. Отсюда получим by' = z1\x1A~^ (/lf I)+z2\i2A^X Х(/2, /). Задача (16) эквивалентна следующей задаче: Yizi + Y2z2 — d\v — d*'w^ min, z1A18 + z2A28 — v+w = —8, J~>0, w>0, (17) где Yi = M7n(/i. 7)b, Y2 = M7n(/2. /)¦ Задача (17), в свою очередь, является двойственной к задаче —б'я-^тах, А18'х = уи А26'х=у2, d*^x^d*. (18) X Полученные результаты позволяют вычислить значения zj, z°. Для этого необходимо решить задачу (18) каким-нибудь известным методом (например, см. § 1), затем, пользуясь теорией двойственности линейного программирования, из оптимальных планов и опоры задачи (18) извлечь значения zj, z\ как решение двойственной к (18) задачи. Однако нас интересует только коплан "б = б + z\b}8 + z2A26, а не значения z°, z\. Поэтому используем полученные выше результаты для вычисления б и опишем алгоритм вычисления б, который фактически является реализацией двойственного метода (см. § 1), примененного к задаче (18). Положим кк = /н» ч = /oi к = ь; б1 = й zo (Кя) = = М1в(/сн)/^/.=л-1(/о. /М(Л ^н); ?1(^н)=|чА2в(/Гн)= = Л-1 (/2, /) Л (/, /Сн); g0 = iXiYi/^A/o = А-* (/о, /) 6, ft = 108
= [i2y2 = Л"1 (/a, I) b. Процедура построения б состоит из следующих шагов. _ _ __ Шаг 1. Положив d*^ = d* = d*tt, если 6J >0; d*tl = = d* = d*, если 6/t < 0; dHl = dtil, d\x = d', если 6^ - 0, построим вектор l(KH)'- | d) при 6} < 0, h = \d^ при б)>0, /е*н. Шаг 2. Вычислим число а = g± — г[ (Ки)1 (Кн). Если aG[J^, d?J, то процесс построения закончим по формуле б = 8±. Приписав коплану б опору Аоп = А{1, Уоп), Уоп = = /\/Сн, начнем новую итерацию предлагаемого метода. Если <хе= [d^lf d*J, то, положив [х=1, г] = а — d*tl при а < d*it; [х = — 1, *п = — а + d* при а > d?, перейдем к шагу 3. Ш а г 3. Подсчитаем числа ( — 6)/fxzl7- при sign б! ^ sign |iziy> [ оо в остальных случаях, / ее Дн» Мб'| при ^< 0, *х' [ оо в остальных случаях. Если а(/) =оо Y j^Kn U *i, то исходная задача (1) не имеет решения, поскольку ее ограничения несовместны. В противном случае упорядочим числа а(/)<оо по возрастанию: a(/i) ^cr(/2) ^ . .. ^o(jk) и вычислим r\t, t = 1, k: т|*_1 + | zi/^ | (lJt — d*ft)y если [xzi/,> 0, %-i + + I Zi/, | (d* — //,), если jizi/f < 0, считая т|0 = т), zHl = 1. Перейдем к шагу 4. Ш а г 4. Если r\h<0, то исходная задача (1) не имеет решения из-за несовместности ее ограничений. В случае у\и^0 найдем такой индекс s, что rjs^O, %-1<0. Положив КН={КЯU fi)\/e, fi=io. ? = /e. d,T = d#7, dl = d!., _ ii ii построим векторы z0(/CH), ^(/Сн), б1 (У), 1(КН) по формулам 109
«Hi = — Z0jJZlis, *1 (KR\h) = Z0 (Xs\h) — Zojfo (KH\h)\ б"1 (Кя U h) = б1 (/СиU h) + W (/.) zi (tfH U У, * (Ян\{/1. /2, . • • , /s-l}) = / (#H\{/l> /2» « ' ' » /s-l}), __ i d*r если |Л217-<0, ' "" I d*j9 если [лг17->0, /e{/i, /2, ... , /s-i}; _ f d*, если |i<0, H ~~ \ d*t19 если fx > 0, и подсчитаем числа g0 = gx/zi^, g1=g0 — ZoisgQ. Перейдем к шагу 2, заменив при этом z0, ги i0, ily б1, /Сн, /, go. Si на *o> гъ i0, ilf б"1, /Сн, /, go, gi- Таким образом описание процедуры построения ко- плана б закончено. Замечания. 1. Нетрудно видеть, что коплан б1, полученный в результате первой итерации процедуры построения б, является не чем иным, как копланом, полученным за две итерации двойственного метода. _^ 2. Итерацию {б, Лоп} -> {б, Лоп}_назовем регулярной, если значение o(js) в процедуре построения б больше нуля, по крайней мере, один раз. Предлагаемый метод за конечное число итераций дает решение (е-оптимальное) задачи (1), если конечно число нерегулярных итераций. Однако нетрудно построить несложную модификацию предлагаемого метода, которая решает любую задачу (1) за конечное число итераций (см. замечания к блочному методу § 8). 3. Процедуру построения б по желанию можно прервать до выполнения условия a6E[Snv Щ] на шаге 2 (например, когда число | т] | достаточно мало) и начинать новую итерацию с опорного коп- лана {б = бх, А0п = А(1, 70П), /0п = ^\Ян}- § 10. Безопорные методы Следуя [5], безопорными будем называть точные методы, в которых для точного соблюдения на итерациях всех ограничений исходной задачи опоры не привлекаются. В связи с этим существенно изменяется принцип построения итерации. Для определенности поясним его только на двойственном методе. В опорных методах наличие опоры позволяло легко обеспечить выполнение основного ограничения, а прямое ограничение служило или для останова процесса (в случае оптимальности), или для построения подходящего направления. В без- 110
опорных методах в основу итерации берется прямое ограничение. Основное ограничение используется для останова процесса решения (на оптимальном плане) или для построения подходящего направления. Двойственный безопорный метод, изложенный в данном параграфе, отличается от своего аналога из [5] следующими принципиальными моментами. Вспомогательная задача по проверке совместности систем сводится не к задаче первой фазы симплекс-метода с искусственными переменными, а к задаче кусочно-линейного программирования, для которой в [14] разработан специальный конечный алгоритм. Далее, вспомогательная задача, по решению которой делается заключение об оптимальности текущего двойственного плана или строится подходящее направление, решается в общем случае не до конца, а лишь до некоторого момента, позволяющего сделать определенные выводы. Наконец, в новом алгоритме вдоль каждого подходящего направления делается не «короткий» шаг, а «длинный». Аналогичный прием существенно повышает эффективность методов. Сочетание перечисленных приемов с приемами работ [22, 23] (в частности, с е-задачами и с использованием алгоритмов квадратичного программирования) может привести к созданию универсальных эффективных алгоритмов линейных задач планирования и управления. 1. Постановка задачи. Критерий оптимальности. Рассмотрим задачу линейного программирования /(jt)=c'x-*max, Ax = b, d*^x^d*y (1) где А = А{1, /), Ь = Ь(1), d* = d*(7), d* = d*(J), *=*(/), /={1, 2, ..., т}, /={1, 2, ..., ri). Понятие плана, оптимального и субоптимального планов задачи (1) сохраним такими же, как в § 1. Пусть известен план к=(у, v, w) двойственной к (1) задачи <р(Л,)=Ь'#—d*v+d*w-*min, A'y—v+w = c, v^zO, w^O. (2) Копланом задачи (1) назовем вектор Ь=А'у—с, построенный по компоненте у двойственного плана А, задачи (2). Будем считать, что выполняются условия согласования двойственного плана: Vj = 8j, Wj = 0, если 6j^0; ^. = 0, w5 = — aif если 6j<0, /€=/. (3) 111
(В противном случае путем изменения компонент v, w можно уменьшить значение двойственной целевой функции.) Исходя из известного двойственного плана Х = = (у, у, w), построим алгоритм преобразования копланов б с целью получения оптимального плана х° задачи (1). По начальному коплану б построим множества /+= -{/е=/:6,>0}, /_={/е=/:6,-<0}, /<>={/€=/: б, = 0}. Для этого разбиения множества / построим квазиплан % = = X («О с компонентами Xj = ^*j» если / ?= ^+» Xj = ^*, если /е/— Переменным %jy /е/0» припишем произвольные значения d^<xj<d*., /е«/0. На построенном квазиплане *> х вычислим вектор невязок г = Лх — &¦ Теорема 1. При г = 0 начальный двойственный план X оптимален. Соответствующий ему квазиплан х является оптимальным планом задачи (1). Доказательство. Поскольку г=0, т. е. А%=Ь, и, по построению, d^^x^d*, то вектор хявляется планом задачи (1). Используя условия согласования (3) и определение квазиплана, имеем f(%) = с'% = (у'А—б')х = = b'y-S'(J+)x(J+)-8'(J-)x(J-) = b'y-dy + d*'w = =ф(Х). Таким образом, значения прямой и двойственной функций совпадают. Согласно теории двойственности X — оптимальный план задачи (2), х — оптимальный план задачи (1). Теорема доказана. _ 2. Формула приращения. Пусть б — коплан задачи (1), б = б+Аб — другой коплан, построенный по согласованному двойственному плану (у = у+Ау, v = v-\-Av, w = = w-\-Aw)9 г=А%—ЬфО. Вычислим приращение двойственной целевой функции ф(А,) при переходе от коплана б к коплану б: ф (Я) — ф (Я) = Ь'Ау — d' Av + d*' Aw = = (Х'Д' — r')Ay— d[Av + d*' Aw = — r' Ay + х'Дб — — d' Av + d*' Aw. * Используя условия согласования (3), получаем <рф)-ф(й.) = -г'Ду+ 2_ (%.-d^)8j+ Ц (х,- /е/о. 8у>о /<=/<>, s;.<o -d})6y+ 2_ (50-^ в; + s_ (jo-^)s;. (4) /<=/_|_, бу< о /е/_, 5у> о *> Вектор х называется квазипланом задачи (1), если на нем выполняются прямые ограничения &^\ < X/ < d*-, j EiJ • 112
3. Итерация. Пусть на построенном по коплану б квазиплане х вектор невязок не равен нулю: гФО. Введем множество /0 = {fe/:n = 0} (множество /о может быть и пустым множеством). Сформируем задачу /* (X (Jo)) = max | A (t, J0) X (/0) - &i Кmin, A (/o, Jo) 1 (Jo) = b(I0), d* (J0) < % (Jo) < <** («Л>)> (5) где /C = /\/o, b = b-A(I, J+)%(J+)-A(I, J-)x(J-). Задача (5) является задачей условной минимизации максимального уклонения *), для решения которой используем метод, изложенный в [14]. Выбирая начальный план х(/о) и приписывая ему произвольную опору ограничений АОц=А(10у /ооп), строим опору целевой функции F03={A01I, ?>оп}, где /Оц = 0, Kon=io, f*(x(Jo)) = = \A(i0, Jo)%(Jo)—bi0\>Don={l}, если A (i, Jo)%(Jo)—bio> >0; Dou={— 1}, если A(i, Jo)%(Jo)— bio<0. Исходя из начального согласованного опорного плана {%(/о), ^оз}, решаем задачу (5) методом из [14]. _ Пусть получен некоторый план %(/о) задачи (5), для которого выполняется условие /*(х(/о))—Р*>0. (6) Здесь р* — оценка субоптимальности согласованного опорного плана {%(/о), ^оз}. Для проведения дальнейших выкладок потребуется подробная детализация индексных множеств /, /о задачи (5), которую произведем с учетом ситуации, сложившейся на рассматриваемой итерации метода [14]. Пусть К = Коп[)Кк, /Соп = #о+пUКёп, #0+пП Г)Аоп=0» «/о = «'ооп U «'ооц U J он* ^оз==\Аоп, Donfy D0TL = = —А(К, J0) + А (К, /ооп) ^п1 А (/0, /0). Из построения метода [14] следует, что на согласованном опорном плане {%(/о), -Роз} выполняются соотношения *) В классическом безопорном методе (методе одновременного решения прямой и двойственной задач) на этом этапе для проверки совместности системы А%=Ь с помощью искусственных переменных вводится линейная задача, которая решается симплекс-методом. , D(K, J0) = 113
Л (i, J0H (Jo) -_bt = f* (X(J0)), i G= Ktn, A (i, Jo) г (Jo) -bi = -f*(i (Jo)), i e= K^; 2 Щ - 2 u, = 1, a' (/Co„) = [1 : 0(JoJ]'D-1, (7) A'(/0)=^'(/Con)D(/Con, /0), */' (/0) = a'(tfon) ^ (*ош Лоп) ^ (/оош /о). A/>o./s/0„ д/<о./е/он Покажем, что вектор Ау=у*, У* = у*(1)У у*(Коп) = = и(Кол), У*(Ки)=0у y*(h)=y(h), задает направление убывания двойственной целевой функции. Из формулы приращения (4) следует, что начальная скорость изменения двойственной целевой функции вдоль построенного направления ъ = -г'у*+ 2 &-<ид;+ 2 (х^-^)Д/!, /<=/„. д!>о /е/0. а!<о где Л* = Л/у*. Из соотношений (7) вытекает, что А*(/о) = = Д(/0). С учетом (6), (7) получаем Yo = - 2 "if* (X (Л)) + 2 и,Р (X (/о)) + on on ie/CH ie/o /eJ0. A;->o + 2 (х,-^)Д; = -/*(1с(Л)) + Р*<о. /ел, Ay<o В отличие от классической схемы безопорного метода задачу (5) необязательно решать до конца. Улучшение двойственной целевой функции ф(А,) можно начать на таком шаге адаптивного метода решения задачи (5), на котором выполняется неравенство (6). Скорость убывания двойственной целевой функции при движении вдоль Л* не изменяется до тех пор, пока компоненты коплана 6j.0) = 6, + gAJ, / е= J+ U J—> не меняют знаки. Движение вдоль построенного подходящего направления ведет к убыванию двойственной целевой функции (до тех пор, пока скорость отрицательна). Поэтому максимально допустимый шаг а0 при скорости у0 находим по формуле 114
J-6j/AT, если б7./А?< 0,/е/+ U /-, /оч а0 = mm а,, а,- = j J у (8) J у I оо в остальных случаях. v ' Как только хотя бы одна из компонент коплана б(/+ (J /_) изменит знак, скорость убывания двойственной целевой функции уменьшится и станет равной: Yi = Yo + 2 (X — dy*)A/*+ 2 (Xj — d*/)A/. о(0)=о, А?<0 5(0)=о. А?>0 J J J J При Yi^O движение вдоль А* прекращаем. Если а0=°о, то согласно теории двойственности прямая задача (1) не имеет планов. Пусть Yi<0. Тогда вычисляем максимально допустимый шаг (Ti при скорости уи полагая в формулах (8) 6j = 6j.0), и вновь пересчитываем скорость у. Пусть движение вдоль А* возобновлялось несколько раз (при этом неограниченность двойственной целевой функции не обнаружилась) и на очередном этапе происходит со скоростью 7м-<0- Полагая в формулах (8) 8j = 8{y-\ вычисляем максимально возможный шаг Су, и пересчитываем скорость Yn+i = Yi. + 2 (Xj — d/) A/ + 2 (%j — d*j) A/, б(И-) = о, A?<0 o(l1)=0, A?>0 J J J J если шаг g^ конечный. В противном случае двойственная целевая функция не ограничена на множестве допустимых планов. Движение вдоль А* прекращается, как только получена скорость Vv^O, либо обнаружится неограниченность двойственной целевой функции. Поскольку на каждом этапе число элемейтов множества /+ (J /_, по которым может быть вычислен конечный шаг а, уменьшается, то движение вдоль А* прекратится через конечное число этапов. __ Новый коплан пересчитывается по формуле 6 = = 6+ ^ aqA*. Ему соответствует новое разбиение МНОЖе- ства /. Новая итерация начинается с коплана 8. За одну итерацию значение двойственной целевой функции умень- IX—1 шается на величину ^J \yq\(yq. Поскольку А* (/ооп U Л)оц) =0, то /ооп U Лкщ^/о, где 115
/0={/^/:6j = 0}. Кроме того, в множество входит, по крайней мере, один новый индекс /*е/+ (J J-, которого не было в множестве /0. Теорема 2. Пусть для каждого коплана 6 при решении соответствующей задачи (5) субоптимальный план ЗС*(«М, удовлетворяющий неравенству (6), строится за конечное число итераций. Тогда вышеописанный алгоритм строит оптимальный план задачи (1) либо обнаруживает отсутствие планов задачи (1) за конечное число шагов. Доказательство. В условиях теоремы на каждой итерации происходит улучшение двойственной целевой функции Ф(Х)«р(А,). (9) Каждая задача (5) определяется индексным множеством /о, которое, в силу (9) и условий теоремы, не может встретиться дважды. Поскольку число различных подмножеств /0 множества / конечно, то через конечное число итераций будет либо получен оптимальный коплан б (соответствующий ему квазиплан % будет оптимальным планом задачи (1)), либо обнаружится отсутствие планов задачи (1). Теорема доказана. § 11. Приближенные методы В арсенале средств линейного программирования кроме точных должны обязательно присутствовать и приближенные методы. В них на интерациях ограничения могут не выполняться, т. е. итерации ведутся не на планах, а только на их оценках (приближениях) [10, 15]. Целесообразность использования приближенных методов основана на том, что здесь нет необходимости хранить в памяти ЭВМ специальные элементы опорной матрицы, которые должны отвечать за точное соблюдение всех ограничений задачи. Кроме экономии оперативной памяти в приближенных методах появляется возможность упрощения операций. Если еще учесть, что среди приближенных методов существуют и конечные (основное достоинство многих точных методов), то нетрудно указать ситуации, где они предпочтительнее точных. В частности, приближенные методы целесообразно использовать при построении программных оптимальных управлений в тех 116
случаях, когда имеется достаточно времени на решение задачи и не используется режим реального времени. 1. Постановка задачи. Рассмотрим задачу cOc-^max, Ах^:Ь, *e=Q = {*:*;>0, /е=/ = {1,2,..., п}}, (1) и задачу, двойственную к (1): b'y-+min, А'у^с, у^Я = {у:Уг^0, *€=/ = {1,2,..., т}}. (2) Вектор a:gQ (y^R) называется прямым (двойственным) планом, если Ax^b(A'y^c); r(x)=Ax—b (q(y) = = с—Агу)—вектором прямых (двойственных) невязок. Нетрудно проверить, что вектор x^Q (y^R) является прямым (двойственным) планом тогда и только тогда, когда PR r(x) =0(PQq(y) = 0). Здесь PTz — проекция вектора z на множество Т. Как известно, методы решения задачи (1) делятся на точные и приближенные. В точных методах итерации ведутся на 1) прямых планах (прямые методы); 2) двойственных (двойственные методы); 3) парах из прямых и двойственных планов (комбинированные методы). Приближенными [8] (прямыми, двойственными, комбинированными) называются методы, в которых объекты итераций x^Q, y^R — не планы, а только оценки (приближения) планов задач (1), (2). Таким образом, в точных методах вектор PRr(x), или вектор Pqq(y), или оба равны нулю и поэтому цель каждой итерации — оптимизировать целевую функцию соответствующей задачи. В приближенных методах наряду с оптимизацией целевой функции нужно уничтожить ненулевые компоненты вектора PRr(x) (PQq(y)). Эта задача близка к задаче векторной оптимизации. Назовем ее сопровождающей задачу (1). Существует ряд принципов выбора для конкретного решения задач векторной оптимизации. Использование того или иного принципа выбора зависит от дополнительных требований на поведение в ходе итераций функций с'х, r(x), b'y, q(y). В рассматриваемой постановке задачи (1) эта информация отсутствует, что в конечном счете затрудняет объективное сравнение эффективности различных приближенных методов. Специфика сопровождающей задачи состоит в том, что это не векторная задача в традиционном понимании. 117
В ней целевые функции, связанные с невязками, принципиально отличаются от исходной целевой функции. Значение невязок минимизируется, если знак невязки недопустим, и безразлично, если знак невязки допустим. В связи с этим в известные принципы решения задач векторной оптимизации необходимо внести соответствующие коррективы. 2. Идея методов. Опишем приближенные методы решения задачи (1), в основу которых положен известный в теории векторной оптимизации принцип выбора с оптимизацией взвешенных целевых функций сопровождающей задачи. Естественность такого подхода объясняется тем, что, во-первых, используемый принцип выбора является полным (с помощью него можно найти любую эффективную точку), а во-вторых, необходимые для него весовые коэффициенты явно содержатся в теореме Куна — Таккера. Согласно этой теореме существуют такие веса #?^0, fe/ (компоненты оптимального двойственного плана у0), что максимум взвешенных целевых функций с'х—у°'г(х) достигается на оптимальном плане х° задачи (1) и для векторов у0 и г(х°) выполняются условия дополняющей нежесткости, т. е. х° е= Arg max (с'х—у0'г (х)), РЩуу (х°) = 0. (3) x<=Q Здесь R(y) = {А #: А у% ^ 0, если у г = 0, re/}. Справедливо и обратное утверждение: если для x°^Q при некотором у°^Я выполняются соотношения (3), то х° — оптимальный план задачи (1). Аналогично для оптимальности в задаче (2) вектора y°^R необходимо и достаточно существование таких весов #9^0, /е/ (компонент оптимального прямого плана х°), что r/°e=Argmin (b'y+x*q(y))9 PQ^)q(y°)=0. (4) Здесь Q(x) = {Ax:Axj^zO, если Xj = 0, /e/}. В дальнейшем будем пользоваться следующими обозначениями: I+(x) = {ie=I:ri(x)>0}f I-(x) = {i^I:ri(x)<0}, 10(х) = {1е=1:г{(х)=0}; J0(x)={jeeJ, Xj = 0}9 /+(*) = {/е=/:*,->0}; (5) /+(jO = {i€=/:#>0}, I0(y) = {ie=I; *A=0}; 1+(у) = {]е1:д5(у)>0}91-(У)=И^'ЧЛУ)<0}9 118
J о (у) = {j^J:qj(y) =0}; [a]j — /-я компонента вектора а. 3. Прямой метод. Пусть x0^.Q— начальная оценка оптимального плана х°. Из сказанного выше следует, что оценка х — оптимальный план задачи (1) тогда и только тогда, когда существует такой вектор y^R, что выполняются соотношения: a) *^Argmax (с'х—у'г{х))\ б) Рщу)г(х)=0. (6) Для оценки х0 проверим условия а), б). Покажем, что вектор х0 удовлетворяет условию а) только в том случае, если существует такой вектор yo^R> что PQ(x0)q(yo) =0. Действительно, пусть х0 удовлетворяет условию а), т. е. существует такой вектор г/о, что x0<=Argmax(c'x — y'r(x)) = Argmax?' (у)х. m Из определения множества Q(x0) следует, что для любого вектора у справедливы соотношения [Р<э(хоМ(у)]^0, если x0j = 0, /е/, q' (у) Рошй (у) = \\Рснх0)Ч Ъ)\\2- Следовательно, если допустить, что Р<мх0м(Уо)фО, то направление l=PQ(x0)q(yo) оказалось бы подходящим для плана х0 в задаче maxq'(y)x, что противоречит (7). С другой стороны, если существует такой вектор у0у что PQ(x0)q (уо) = 0, то очевидно, что х0^Arg max q' (у0) х. Утверждение доказано. Таким образом, для проверки условия а) следует найти вектор yo^R, минимизирующий невязку HJW7(fOII. (8) Оптимальность плана х0 связана еще и с условием б). Поэтому невязку (8) будем минимизировать не по всем y^R, а только по множеству У(*0) таких векторов у, что \\РЖу)г(хо)\\ =min||P*(,,r(*0)||. В результате проверка оценки х0 на оптимальность свелась к построению вектора Уо = у(х0), где y(x)t=Argmin\\PQix)q{y)\\*; (9) Y(x) ={y:yt = 0, если i<=I-(x); */*>(), если ;g/\L(a;)}. (10) 119
Лемма 1. Для вектора Axo = PQ(Xo)q(y0) верны соотношения с'Ах0 = ||A*o||2f А(*> -0д*о<0, i<=I\I-(x0), Ax0j>0, j(=J0(x0)- (H) Возможны случаи: 1) Ах0Ф0, 2) Длг0 = 0. В случае 1) условие а) не выполняется и, следовательно, оценка х0 не оптимальна. Из (11) видно, что вектор Ах0 задает в точке х0 направление, при движении вдоль которого целевая функция задачи (1) строго возрастает, а компоненты вектора невязок Ряг(х) не возрастают. Поэтому в соответствии со смыслом задачи (1) новую оценку Xi строим по формуле х±=х(@о), где х(@) =x0-\-@AxQ. Шаг ©о положим равным максимальному среди чисел в ее Arg min || PR г (х (в)) ||2. (12) 0>О, х(&)>0 Лемма 2. Шаг во строго положителен. Если в0 = оо, то задача (1) не имеет решений (либо пусто множество планов, либо функция с'х не ограничена сверху на множестве планов). Лемма 3. y0^Y(Xi). Лемма 4. \\PQ(Xi)q(yt) \\<\\Р<цхо)Я(Уо) II, \\РщУ1)Г(х±) ||< ^ \\Рц(у0)Г(хо) ||, где у± = у(х±) ^R — вектор, соответствующий в силу (8) вектору xit Рассмотрим случай 2): Р<э(х0)Ч(Уо) =0, т. е. предположим, что для вектора х0 выполняется условие а). С целью проверки условия б) построим множество Х(у0), соответствующее весам уог, i^I, по правилу: X(y)={x:xj = 0, jt=J-(y)\ *j>0, J?EJ\J-(y)}. (13) Очевидно, что х0^Х(у0). Будем считать, что х0=х(уо), где х (у) ЕЕ Arg min || PR{y) г (х) ||2. (14) В противном случае оценку х0 заменим на х(уо), для которой всегда Рд(х(Уо))? (Уо) = 0> \\Рщуо)Г(х(Уо)) II < < 11^(^(^0)11- Если Рщу0)Г(хо) = 0, то х0, Уо — решения задач (1), (2). При РщУо)г(хо)ФО вектор у о заменим на yi = y(oo), где У {в) =Уо+оАуп, Ауо = Ря(Уо)г(х0), а0 — максимальное среди чисел {o:PQ(Xo)q(y{o)) =0}. Если ао = °°, то решение задачи (1) прекращаем, ибо ее ограничения несовместны. 120
В случае а0<о° положим Xi = x(yi) и продолжим процесс решения. Из леммы 5 следует (см. ниже), что PQ(Xi)q(yi) = 0, yi^Y(Xi). Значит, на следующей итерации опять реализуется случай 2). Поэтому сразу переходим к операциям этого случая. Лемма 5. \\PQ(xi)q(yi)\\ = \\PQ(xo)g(yo)\\=0) \\Рншг(х1)\\<\\РщУо)г(хо)\\. Из леммы 4, 5 следует, что на итерации x0-+Xi векторы Ъ(х) = {\\Р<цх)Я(у(х))\\, \\РщУ(х))г(х)\\} (при Дхо^О), l(y) = {\\PQ(x(y))q(y)\U \\Рщу)Г(х(у))\\} (при Д*0 = 0) лексикографически строго убывают. В терминах задачи (1) оценки х0, х± обладают следующими свойствами: х0 ЕЕ Arg max с'х, хг ее Arg max с[х, Ах<Ь0, x<=Q Ах<Ьи *<=Q П g\ ||c-ClK||c-c0||t \\Ь-Ьг\\<\\Ь-Ь0\\, причем хотя бы одно из этих неравенств строгое. Здесь с0 = с(х0, r/o), ci = c(xi9 г/i), с(х, у) =c—PQ{x)q(y)\ b0 = = b(x0, уо), bi = b(xu yi), b(x, y)=b+PR(y)r(x). Теорема 1. Прямой метод решения задачи (1) конечен. Доказательство. Итерации прямого метода условно можно разбить на два типа: итерации, соответствующие случаю 1), на которых \\Р<хх)Ч(у(х))\\Ф0, и итерации, соответствующие случаю 2), на которых \\PQ(x(y))q(y)\\=0, \\РщУ)Г(х(у))\\Ф0. Покажем, что итераций первого типа может быть только конечное число. Действительно, согласно (9), (10) величина \\Pq(x)<] (у (х) ) || однозначно определяется множествами /_(*) и /0(х), ибо \\PQ(x)q(у(х)) \\* = min\\c - А'у + w\\*y y^Y{x), weeW(x), Y(x) = Y(I-(x)) = {y:yi = 0, i€=/_(x); Уг>0, ie=/\/-(*)}, W(x) = W(J0(x))= {w:wj = G, j^J+(x); Wj^O, j^Jo(x)}. Количество всевозможных наборов {/_, /о} конечно. Из леммы 4 следует, что один и тот же набор не может встретиться дважды. Следовательно, через конечное число итераций либо докажем, что задача (1) не имеет решений, либо придем к случаю 2): Ax=||Pq(X)<7(#(x))II=0, т. е. к итерациям второго типа. После этого итерации первого типа появиться уже не могут. Рассуждая аналогично, покажем, что итераций второ- 121
го типа может быть только конечное число. Действительно, величина \\РщУ)Г(х(у))\\ однозначно определяется множествами 10(у), J-(y). Таких множеств конечное число. В силу леммы 5 один набор дважды встретиться не может. Следовательно, через конечное число итераций либо придем к случаю \\Ря(У)г(х(у))\\=0 (т. е. х(у) — оптимальный план задачи (1)), либо докажем, что исходная задача не имеет решений. Теорема доказана. Основываясь на критерии оптимальности (4) и на рассуждениях, аналогичных приведенным в п. 3, можно построить двойственный метод решения задачи (1). Более подробно с изложением двойственного метода, комбинированного метода и приближенных методов, базирующихся на иных принципах выбора сопровождающей задачи, можно ознакомиться в [10, 15]. § 12. Особенности реализации алгоритмов линейного программирования на ЭВМ Программная реализация алгоритма, кроме его вычислительной схемы, обычно требует много дополнительной информации, связанной с точностью представления чисел в памяти ЭВМ, с возможностями системы, в которой реализуется работа программы, и т. д. Даже для самой простой программной реализации, наиболее близкой к математическому описанию алгоритма, необходимо задавать параметры для учета возможных отклонений от точных значений приближенно вычисляемых на ЭВМ величин, что позволяет избегать нарушений вычислительной схемы алгоритма. Например, операция сравнения с нулем в алгоритме может выполниться неправильно, если вместо нуля не ввести параметр, значение которого должно быть достаточно малым, но в то же время служить как бы оценкой сверху (по модулю) для возможных ошибок округления. При задании этих параметров учитываются как сложность производимых операций, так и размеры решаемой задачи. Например, в программах, по которым были проведены эксперименты в § 1,5, 7—9 и решены прикладные задачи в § 5 гл. 2, оценки Aj, /е/н, полагались равными нулю при |Aj| <10-7. Накопление ошибок округления в алгоритмах в значительной мере зависит от структуры данных задачи. Одной из мер, позволяющей избежать чрезмерно быстрого накопления ошибок округления и, следовательно, непра- 122
вильного выполнения алгоритма, является масштабирование матрицы. Наиболее распространенный способ масштабирования состоит в делении каждой строки матрицы на наибольший по абсолютному значению элемент этой строки. В программных комплексах, предназначенных для решения больших прикладных задач, в настоящее время применяются и более совершенные методы масштабирования. Основной момент, по которому различаются программные реализации,— форма представления числовых данных. Рассмотрим два из часто используемых способов хранения разреженных матриц в памяти ЭВМ. Один — запись ненулевого элемента и номера его строки в две соседние ячейки. Такие пары, соответствующие всем ненулевым элементам столбца, располагаются последовательно в одномерном массиве. В следующую свободную ячейку этого массива записывается первый ненулевой элемент другого столбца, а затем — его индекс и т. д. Номер ячейки (адрес), в которую записывается новый столбец, запоминается в другом массиве (для целых чисел). При таком способе хранения информация о матрице занимает 2t-\-n ячеек, где t — число ненулевых элементов матрицы, п — число столбцов. Второй способ применяется в программах для ЭВМ, ячейки которых состоят из большого числа двоичных разрядов. Например, ячейка БЭСМ-6 состоит из 48 разрядов и поэтому элементы матрицы, как правило, занимают лишь старшие разряды ячейки, а в младших разрядах можно хранить их индексы. В этом случае информация о матрице требует всего t-\-n ячеек. В процессе счета номера строк выделяются из ячеек с помощью процедуры PLA0R1, написанной на автокоде. (На«распаковку» информации, конечно, тратится дополнительное машинное время.) В больших задачах уменьшение объема информации, хранящейся во внешней памяти, ускоряет обмен с оперативной памятью и тем самым компенсирует время, затраченное на распаковку информации. Особенность адаптивного алгоритма заключается в том, что на его итерациях используются не только столбцы, но и строки матрицы условий. При умножении вектора на матрицу слева, например, при вычислении w = =Ах, когда матрица записана только по столбцам, счет удобнее вести по формуле w (/) = Д7 А (/, /)*(/), т. е. 123
массив w заполняется суммой столбцов матрицы Л, умноженной на компоненты х. Но в ряде операций адаптивного алгоритма требуется только одна строка матрицы или только ее опорные строки. Тогда вызов и распаковка всех столбцов для выделения элементов нужных строк значительно усложняет операцию со строкой. Поэтому для ускорения работы адаптивного алгоритма целесообразно иметь матрицу, записанную как по столбцам, так и по строкам. Однако следует отметить, что в задачах с большим числом переменных, но со сравнительно малым числом ненулевых элементов в каждом столбце такой подход может привести к неоправданным затратам памяти. Эффективность алгоритма существенно зависит от формы хранения обратной матрицы в памяти ЭВМ. Наиболее распространенной формой для представления обратной опорной матрицы в программных реализациях симплекс-метода является мультипликативная форма. В § 3 излагается вариант адаптивного алгоритма с мультипликативным представлением обратной матрицы. В других вариантах адаптивного алгоритма предполагается прямое использование квадратной матрицы Л"1. Рассмотрим некоторые способы хранения этой матрицы в памяти ЭВМ. Максимальный размер опоры в задаче с основными ограничениями-неравенствами до ее решения, как правило, неизвестен, поэтому в программе, где матрица Л"1 описана двумерным массивом, границы массива указываются равными т. В памяти ЭВМ этот массив располагается построчно (по столбцам), причем каждая строка (столбец) занимает т ячеек. Когда значение т2 превышает допустимый объем оперативной памяти, часть строк (столбцов) необходимо записывать во внешнюю память. Между тем при плотной записи матрица Л"1 занимает k2 ячеек и при k2^.K, где К — допустимый объем памяти, она полностью может быть размещена в оперативной памяти. Поэтому на практике для хранения Л"1 выделяется одномерный массив, который заполняется с ростом размеров матрицы. Этот массив называется буфером. Если не все строки во время пересчета Л"1 вмещаются на буфер, то он переписывается, например, на диск, а оставшиеся строки вновь записываются на буфер. В этом случае даже при больших т итерации с небольшой опорой выполняются без обмена с 124
внешней памятью. Для сильно разреженных матриц Л"1 запоминаются только ее ненулевые элементы (|а^|> >10-8), что позволяет сократить необходимый объем памяти, а также избежать операций с нулевыми элементами. Поскольку в постановке реальных задач обычно присутствуют только некоторые компоненты векторов с, dhy d*, &*, &*, а значения остальных подразумеваются по смыслу, то и в память ЭВМ целесообразно заносить только заданные значения компонент и их индексы. Значения остальных компонент при работе алгоритма для каждого вектора будут восстанавливаться «по умолчанию». Например, если в списке индексов вектора с не обнаружится индекс /0, то компонента cjo в алгоритме полагается равной 0 и операция с ней исключается. Отсутствующие компоненты векторов d*, d*, fo*, b* полагаются равными 0, оо, —оо и оо соответственно. Для хранения промежуточных результатов, неоднократно применяющихся на итерации алгоритма, описываются рабочие массивы. Однако при использовании большого количества массивов основная часть информации будет храниться во внешней памяти. Поэтому легко вычисляемые вновь векторы не следует описыв-ать массивами, так как время их пересчета может быть меньше времени обмена с внешней памятью. Поскольку требование алгоритма к объему памяти и время решения задачи всегда противоречивы, то построить программу со всеми оптимальными характеристиками для задач произвольной структуры невозможно. На практике учитываются, конечно, оба эти требования к программе, но каждому из них отдается предпочтение в зависимости от размеров и структуры решаемых задач. Перейдем к рассмотрению стартовых процедур, используемых для расширения исходной задачи в случае, когда неизвестен ее начальный план. Пусть задан произвольный вектор х. Если некоторые его компоненты выходят за свои прямые ограничения, то «подтягиваем» их к ближайшей границе. Полученный вектор подставляем в основные ограничения. При их нарушении строим расширенную задачу и план для нее так, чтобы на итерациях алгоритма был найден сначала план, а затем и оптимальный план исходной задачи. Для задач с основными ограничениями-равенствами 125
A (i, n+i)= Aoul (i, i) = (Ax = b) удобен классический способ расширения задачи, предполагающий следующие операции. 1. Если Xj<.d^j, то положим xj = d^; если xj>d*, то — Xj = d*, j Gi. 2. Вычислим вектор невязок w = b—Ах. 3. Положим Xn+i = 1^1, d^n+t = 0, d*n+i = оо, сл+г = = —М, где М — большое число, i= 1, m. 4. Положим Л (г, п + /) = Л^п (*\ /) = 0, f, / = 1, т, — 1, если wt<.0y 1, если Wi^>0, i= 1, га. 5. Положим /0п={л+1, п+2, ..., п-\-т}. Процедура на языке АЛГОЛ-60, реализующая эти операции для простейшего случая, когда матрицам А и ^^п1 соответствуют двумерные массивы, имеет вид 'PROCEDURE' START1; 'BEGIN' 'INTEGER' I, J; 'REAL' R; 'FOR' J: = l 'STEP' 1 'UNTIL' N 'DO' 'BEGIN' 'IF' X[J]<D1 [J] 'THEN' X[J]:=D1[J]; 'IF' X[J]>D2[J] 'THEN' X[J]:=D2[J] 'END'; 'FOR' I: = 1 'STEP' 1 'UNTIL' M 'DO' 'BEGIN' R:=B[I]; JOP[I]:=N+I; C[N+I]:=-107; 'FOR' J:=l 'STEP' 1 'UNTIL' N 'DO' R:=R—A[l, J] *X[J]; X[N+I]:=ABS(R); D1[N+I]:=0; D2[N+I]:=i06; 'FOR' J: = l 'STEP' 1 'UNTIL7 M 'DO' A[I, N+J]:=A[I, J]:=0; A[I, N+I]:=AOP[I, I]:='IF' R<0 'THEN'-l 'ELSE' 1 'END' I; N:=N+M 'END' START1; В программе, где будет применяться эта процедура, параметры задачи Л, с, ху d*y d*, b*, b* описываются следующими массивами: А[1:М, 1:N + M]; С, X, D1, D2[1:N+M]; В[1:М]. Перед выполнением алгоритма, ориентированного на известный план, необходимо обратиться к процедуре START 1. Если в результате решения расширенной задачи все дополнительные переменные хп+и 1=1, т, будут равны нулю, то Xj, /=1, п,— компоненты оптимального плана; в противном случае основные ограничения задачи несовместны. В задачах с интервальными ограничениями (6*^ ^.Ах^Ь*) применяется аналогичная стартовая процедура с той лишь разницей, что опора строится только по 126
нарушенным ограничениям и, следовательно, ее размер k^m. Пусть в качестве начального приближения задан вектор х, относительно которого неизвестно, удовлетворяет ли он ограничениям задачи. Тогда перед обращением к процедуре решения задачи выполним следующие операции. 1. Если Xj<d*j, то положим Xj = d^p если x^>d% то — Xj = d*., /е/. 2. Вычислим вектор w=Ax. Положим k = 0, i=\. 3. Вычислим ( b* — wi9 если wt>b;, R = \ b*i — wh если Wi<b*u I 0 , если &#1<Ш4<6*. 4. Если | R | <C e, то перейдем к п. 8. 5. Положим k = k-\-l, xn+k=\R\, cn+k = —M (большое число), d* n+k = 0, d*n+k = oo. 6. Положим Л"1 (k, k) = A (i, n + k) = sign R; A (/, n + k) = 0, / = 1, m, /^i; Л™ (/, *) = A7n (ft, /) = = 0, /=1, fe-1. 7. Положим /on(ft) =n+ft, /on (ft) =i- 8. Положим i = i+l. Если /^m, то перейдем к п. 3. 9. Положим n = n-\-k. Рассмотрим АЛГОЛ-процедуру, реализующую эти операции в случае, когда ненулевые элементы матрицы А запакованы в ячейки вместе со своими индексами. Адреса массива Л, с которых начинаются столбцы матрицы, хранятся в массиве целых чисел NCA[1 :N+M+1]. 'PROCEDURE' START2; 'BEGIN7 'FOR' J: = 1 'STEP' 1 'UNTIL7 N 'DO' 'BEGIN' 'IF' X[J]<D1[J] 'THEN' X[J]:=D1[J]; 'IF' X[J]>D2[J] 'THEN' X[J]:=D2[J] 'END'; 'FOR' I: = l 'STEP' 1 'UNTIL' M 'DO' W[I]:=0; K:=0; 'FOR' J: = l 'STEP' 1 'UNTIL' N 'DO' 'FOR' I:=NCA[J]+1 'STEP' 1 'UNTIL' NCA[J+1] 'DO' 'BEGIN' PLA0R1 (A [I], II); W [II]: =W [Il]+A [I] * X [J]'END'; 'FOR'I: = l 'STEP' 1 'UNTIL' M 'DO' 'BEGIN'R:=0; 'IF' W[I]>B2[I] 'THEN'R: =B2[I]-W[I]; 'IF'W[I]<B1[I] 'THEN'R: =B1[I]-W[I]; 'IF'ABS (R) >EPS 'THEN' 'BEGIN'K:=K+1; X[N+K]:=ABS(R); AK:=AK+1; A[AK]:=AOP[K, K]:=SIGN(R); PLA031(A[AK], I); 127
NCA[N+1+K]: =NCA[N+K]+1; 'F0R'J: = 1 'STEP' 1 'UNTIL'K-1 'DO' AOP[J, K]:=AOP[K, J]:=0; C[N+K]:=-io7; D2[N+K]: =106; D1[N+K]:=0; JOP[K]:=N+K; IOP[K]: = I 'END' 'END'I; N:=N+K 'END'START2; Здесь PLA031 —процедура запаковки элемента массива и его индекса в одну ячейку; PLA0R1 — процедура выделения индекса из младших разрядов элемента массива; АОР [ 1 : М, 1 : М] — массив для матрицы Л™; А [ 1: АК+ + М] — массив для матрицы А; АК — число ее ненулевых элементов. В массивах X, С, Dl, D2[1:N+M]; В1, В2[1:М] располагаются векторы х, с, d*, d*, ft*, b* и компоненты расширенной задачи. Если при решении расширенной задачи переменная xn+j станет равной нулю, то я+/-й столбец исключается (вместе с cn+j) и размер п задачи понижается на единицу. Рассмотрим более простую стартовую процедуру, расширяющую исходную задачу только на один столбец при введении дополнительной переменной xn+i. Она состоит из следующих операций. 1. При Xj<id*j положим Xj = d*j\ при Xj>d*. положим 2. Вычислим вектор w=Ax. Положим k = 0, i=\. 3. Если wc>bl или wt<ib*ij то положим R = (6* + + б**)/2 — w» иначе R = 0. 4. Если |^| >е, то положим k = k-\-\, A(i, N+1)=R. 5. При i<m положим i = i-\-\ и перейдем к п. 3. 6. Если &>0, то положим сп+\ = — М, xn+i=lt d*n+i = = 0> dn+\ = °°' п = п+1. Приведем реализацию этой процедуры на языке АЛГОЛ-60 при тех же данных, которые применялись в START2. 'PROCEDURE' START3; 'BEGIN' 'FOR'J: = l 'STEP'l 'UNTIL' N 'DO' 'BEGIN' 'IF' X[J]<D1[J] 'THEN' X[J]:=D1[J]; 'IF' X[J]>D2[J] 'THEN' X[J}:=D2[J] 'END'; 'FOR'I: = l 'STEP' 1 'UNTIL' M 'DO' W[I]: =0; K:=0; 'FOR'J: = l 'STEP'l 'UNTIL' N 'DO' 128
'F0R'I:=NCA[J]+1 'STEP'l 'UNTIL7 NCA[J+1] 'DO' 'BEGIN' PLA0R1(A[I], II); W [II]: =W [Il]+A [I] * X [J]'END'; 'FOR'I: = l 'STEP'l 'UNTIL7 M'DO' 'BEGIN' R:=0; 'IF' W[I]>B2[I] 'OR7 W[I]<B1[I]'THEN' R: = (B2[I]+Bl[I])/2-W[I]; 'IF' ABS(R)>EPS 'THEN' 'BEGIN' K:=K+1; I1:=NCA[N+1]+K;; A[I1]:=R; PLA031 (A[I1], I) 'END7 7END'I; 'IF' K>0 'THEN' 'BEGIN' X[N+1]: = 1; C[N+1]:=-107; D1[N+1]:=0; D2[N+1]:=106; NCA[N+2]: =NCA[N+1]+K; N:=N+1 'END'; K:=0 'END' START3; Массивы для этой процедуры следующие: С, X, D1, D2|[1:N+1]; А[1:АК+М], NCA[l:N+2]. Размер опоры после работы START3 остается равным 0; опора будет «накапливаться» на итерациях адаптивного алгоритма. Компоненты расширенного плана в этой процедуре строятся так, чтобы основные ограничения задачи были пассивными, что удобно при выборе подходящего направления на первых итерациях адаптивного алгоритма. Как показала практика, применение процедуры START3 существенно сокращает время решения задачи в сравнении с процедурой START2. Рассмотренные стартовые процедуры обычно вставляются в описание основных процедур, ориентированных на решение задачи с известным начальным планом. Если не известно, является ли заданный вектор х планом задачи, то следует выполнить стартовую процедуру (если х — план, расширения задачи не произойдет). Следовательно, алгоритм решения задачи можно всегда начинать с обращения к стартовой процедуре. В прикладных задачах основная проблема нередко в том и состоит, чтобы найти допустимое решение. Поэтому построение эффективных стартовых процедур, учитывающих специфику задачи и основной алгоритм для ее решения, играет немаловажную роль в создании программных комплексов для решения больших задач линейного программирования. Глаза 2. БОЛЬШИЕ ЗАДАЧИ Размеры прикладных задач, возникающих в различных сферах человеческой деятельности, постоянно опе- 129
режают развитие вычислительной техники, темпы которого по общему признанию поразительны. В связи с этим стало распространенным понятие «большие задачи». Нет особой нужды искать для него строгие определения. В каждом конкретном случае ясно, о чем идет речь. Чаще всего говорят о больших задачах, если на имеющейся ЭВМ невозможно реализовать стандартный алгоритм или алгоритм допускает реализацию, но работает ненадежно. Тогда опять говорят, что задача большая. Задачу относят к большой и в том случае, если она решается с большими затратами ресурсов. В больших задачах можно выделить как общие черты, так и специфические. К общим относят наличие большого числа или переменных, или ограничений. Специфическими чертами являются структура ограничений и структура множества параметров. Вообще говоря, специальных задач со специфическими чертами столько же, сколько вообще задач. В современной теории методов оптимизации идет непрерывный процесс выделения из общих задач достаточно содержательных специальных классрв, относящихся к актуальным приложениям. Параллельно идет развитие методов, учитывающих особенности новых классов. В этом один из наиболее перспективных путей развития методов решения больших задач. Но на любом этапе будут играть известную роль и методы, работающие на нескольких классах задач. В хорошем матобеспечении ЭВМ должна быть представлена многоуровневая иерархия методов — от узкоспециальных до самых общих, учитывающих только общие сведения об экстремальной задаче. Здесь излагаются только общие принципы решения больших задач, детальная структура множества параметров при этом не учитывается. В § 1 приводится метод учета большого числа переменных. Задачи с большим числом переменных типичны в теории управления, а также встречаются и в других приложениях [30]. Далее (§ 2) описывается метод решения задач с большим числом ограничений-неравенств. Среди задач управления к ним относятся задачи с фазовыми ограничениями. Специальный метод, в котором в ходе итераций используются опоры с размерами, не превосходящими заданных ограничений, строится в § 3. В § 4 обоснован метод решения больших интервальных задач. Параграф 5 посвящен алгоритму решения динамической транспортной задачи. j зо
Здесь поясняются принципы перехода от адаптивного алгоритма решения статической задачи к его динамическому аналогу. В § 6 некоторые из разработанных алгоритмов применяются к решению прикладных задач. Глава завершается обсуждением вопросов реализации алгоритмов на ЭВМ. § 1. Задачи с большим числом переменных В современных машинных реализациях симплекс-метода не накладывается ограничений на число переменных в решаемой задаче. В связи с этим сложность задачи часто определяется только количеством основных ограничений. В известной оценке (т-±-2т) числа итераций симплекс-метода также не фигурирует второй размер (число переменных п) задачи. Может сложиться впечатление, что для симплекс-метода безразлично, сколько переменных в задаче. В действительности же это не так. С увеличением числа переменных растет число итераций. Кроме того, при слишком большой разнице между пит («узкие», «длинные» задачи) появляется большое число почти коллинеарных векторов условий, что затрудняет процедуру идентификации знака оценок, играющих решающую роль в симплекс-методе. Не случайно, что в методе декомпозиции Данцига — Вулфа, где появляются задачи с большим числом переменных, характеристики симплекс-метода заметно хуже, чем в «нормальных» задачах. Нетрудно понять, что и в адаптивном методе (см. § 1 гл. 1) число переменных оказывает влияние на ход итераций. В данном параграфе излагаются результаты по развитию адаптивного метода для решения задач с большим числом переменных. Численные эксперименты на ЭВМ показали эффективность предложенных модификаций. 1. Постановка задачи. Рассмотрим каноническую задачу линейного программирования Л-^max, Ax = b, d*^x^.d*t (1) где А=А(1, /), с = с(/), 6 = 6(7), /={1, 2, ..., т}, / = = {1, 2, ..., п}, гапкЛ = т, я»т. Специфика задачи с большим числом переменных (1), важная с точки зрения практической реализации описываемых ниже методов, состоит в следующем. По 131
построению, опорные оценки Aj = 0, /е/оп. При n>m среди неопорных (т+1) -мерных векторов {Cj, а-,}, /е/н, составленных из компонент вектора стоимости с и столбцов матрицы Л, найдутся такие, для которых Aj = 0 или AjttO. Между тем, как и в симплекс-методе, в методах, описанных в гл. 1, знаки оценок Ду играют большую роль. Если учесть, что почти каждая реализация метода на ЭВМ сопровождается ошибками округления и что все современные ЭВМ идентифицируют числа лишь с определенной точностью, то станут понятны те трудности, которые проявляются, например, в адаптивном методе в неправильном выборе подходящего направления из-за ошибок в установлении знака Aj. Серьезные трудности возникают даже в том случае, если вычисления ведутся абсолютно точно. Компоненты /j, /^/н, подходящего направления вычисляются по Xj, d*j, d% но не зависят от |Aj|. Поэтому увеличивается роль компонент Xj с малыми |Aj|, хотя по смыслу такие Xj должны меняться незначительно. Может оказаться, что скорость увеличения целевой функции вдоль подходящего направления велика, но допустимый шаг очень мал и мало приращение целевой функции. Для преодоления этих трудностей были разработаны специальные методы решения задачи (1). 2. Использование части неопорных переменных для увеличения итерационного шага. Основная идея этого метода состоит в том, чтобы неопорные переменные с малыми |Aj| использовать не для увеличения скорости изменения целевой функции вдоль подходящего направления, а направить их в помощь опорным переменным с целью получения максимально допустимого шага. В силу малости |Aj| вариации переменной Xj мало скажутся на скорости изменения целевой функции, но не исключено, что они сильно повлияют на скорость изменения переменных xjy /е/оп, определяющих величину допустимого шага в. Компоненты плана с большими оценками |Д/| целесообразно оставить для формирования подходящего направления по схеме адаптивного метода (см. гл. 1). Из описания идеи метода видно, что в нем удается уменьшить влияние ошибок округления на процесс решения. Выберем число 1^0 — параметр метода и разобьем множества /={1, 2, ..., п}9 /н на подмножества /м = = {/€=/: |Д,-К6}, /нб = {/е/н:|ДЛ>У, /нм = /нП/м- По- 132
строим компоненты допустимого направления, соответствующие большим оценкам: h = d*j — Xj ПРИ Aj>E; lj = d* — xj при А7-< — I, /е/Нб- Компоненты /j, /е/м, допустимого направления / построим так, чтобы шаг в вдоль / был максимальным, т. е. в->- max, (3) где, как известно (см. гл. 1), e = min{e7-, /е/м; 1}, f (d*j — xj)/lj при Z7-<0, ву = | (d]-Xi)llj при /7->0, (4) ( оо при lj = О и переменные lj, /е/м, удовлетворяют условию допустимости направления: Лм/м+Ьб = 0, Ьб=^4нб/нб. (5) При 6 = 1 план х = х-\-1 |3-оптимален, A/>0./S/HM Ay<0,/WHM Если р>е, то число g следует уменьшить и вновь повторить итерацию. При в<1 строим новый план х = = х-\-&1. Ограничения (4) — (5) на шаг в и вектор /м получены из соотношений: d^M — л:м<в/м«<^* — хм, Лм/М+ -)-6б = 0, 0<!в-<1. Если последнее равенство умножить на в и перейти к новым переменным sM = QlM, то получим следующую, эквивалентную задачу для вычисления максимального плана: в->тах, AMsm+b6@ = Oy d#M — *м<sM<<? — хм, o<e<i. (6) В качестве начального опорного плана этой задачи можно взять {в*, s*, Лоп}, где Аоп — опора плана х, s* = = <С С>. С = о. С - - ем-% в* = mm в;, в; = (d„ -Xj)/rr i] < о, в; = (d? - х,)//;, /; > о, в; = = оо, lj = 0, /*п = — А~^Ьб. Задачу (6) решаем с помощью 133
алгоритма с адаптивной нормировкой (см. § 4 гл. 1). На первой итерации оценки всех неопорных векторов условий а\ /е/нм, равны нулю, за исключением оценки Д0 = = — 1 вектора &б- Следовательно, при в<1 на итерации среди неопорных переменных увеличивается только в. Пусть i0 — индекс опорной переменной s»-0, которая при увеличении в на [0, 1] первой вышла на одну из границ прямых ограничений (i0 ищется по стандартным формулам типа (4)). Введем множество У*= {/ е /м\Лт: ^*j— Xj<.Sj<. d*. — — Xj при г?о1-фО; s^d^ — Xj при krioI>0; Sj=?d*—Xj при krioJ < 0}, где ( 1, если Sc0 достигает нижней границы, { —1, если siQ достигает верхней границы, т rioi= S^^ = <^4(/, Л- Если /* = 0, то значение в, на котором остановился процесс увеличения неопорной переменной в, равно максимальному шагу вдоль I (так как после замены в опоре вектора щ0 на 6б будет выполнен критерий оптимальности задачи (6)). Опору Лоп, на которой /* = 0, приписываем в качестве промежуточной опоры плану х = х-\-®1, 1= (/м, /Пб), /м = = 5м/в, /нб вычислено согласно (2), если @Ф0; 1=0, если 0 = 0; {sM, 0} —решение задачи (6). В задаче (1) по опоре Лоп вычисляем оценки Aj неопорных векторов условий и псевдоплан х. Если Xi0<d*i0 при k=l\ KiQ>d*iQ при k = — 1, то вывод вектора аго из Лоп по правилам адаптивного метода ведет к улучшению Лоп (уменьшению оценки субоптимальности опорного плана {х, Лоп}). Построением опорного плана {х, Лоп}, где Лоп=(Лоп\Яг0) VaJo> завершается итерация в задаче (1). 134
Если псевдоплан х, построенный по опоре Лоп, удовлетворяет СООТНОШеНИЯМ Ki0^d*io ПРИ k=\ ИЛИ УЦ0^с1*. при k = — 1,_то промежуточную опору Лоп берем в качестве опоры Лоп плана х. Пусть теперь 1*Ф0. В этом случае в не равно максимальному шагу вдоль /. Поэтому итерации в задаче (6) продолжаем. Вектор щ0 удаляем из опоры. Вектор cij0, вводимый вместо него, находим по правилам адаптивного метода (см. § 1 гл. 1). Двойственный шаг равен нулю (а = 0), и достигается он на векторах условий ajt j^J*, поэтому jo^J*. Среди индексов /* выбираем прежде всего такой /о, для которого d*j0—Xj0<iSj0<cd*.n—Xj0. В противном случае /0 — любой элемент из /*. Ясно, что после замены опоры Aotj*->-Аоп, Доп=(Лоп\аг0) Uajo, т. е. на следующей итерации в задаче (6), оценки всех векторов условий, кроме вектора Ьб, равны нулю. Таким образом, в случае 1*ф0 после итерации возникает та же ситуация, что и была до итерации. 3. Использование части неопорных переменных для увеличения итерационного приращения целевой функции. Согласно адаптивному методу неопорные компоненты допустимого направления выбираются из условия максимального приращения целевой функции в пространстве не всех переменных, а только неопорных. При п^>т истинное приращение целевой функции на итерации может существенно отличаться от его значения, полученного при построении допустимого направления. Это происходит всякий раз, когда оказывается малым шаг 0 вдоль допустимого направления. В п. 2 для увеличения Э была использована часть неопорных переменных. Однако максимизация шага не является основной целью итерации. Главная задача всех одношаговых методов оптимизации состоит в максимальном приращении целевой функции. В данном пункте для решения этой задачи используются компоненты допустимого направления, соответствующие малым оценкам. Из физического смысла вектора оценок А следует, что приращение целевой функции при изменении компонент хя равно — А^ /н = —Д„м /нм — Дн'б /нб. Компоненты /нб построим по (2). Обозначим: РНб = —Ан'б*нб- Максимум по /нм величины—Ад/н достигается одновременно с макси- 135
мумом по 0G[O, 1] и sHM = e/HM выражения — A^mshm + + врнб. Множество допустимых значений для в, sM описано в п. 2. Таким образом, максимизация итерационного приращения целевой функции при заданном /Нб сводится к задаче ®Рнб — Л^нм-^тах, (7) AMsM + b6S = 0, dw — *M<sM<d* — хш, 0<6<1. Эта задача отличается от задачи (6) дополнительным слагаемым в целевой функции, которое характеризует вклад в приращение переменных с малыми оценками. Если Анм = 0, то задача (7) сводится к задаче (6), т. е. в этом случае максимальный шаг обеспечивает максимальное итерационное приращение целевой функции. Задачи (6) и (7) можно решать одним и тем же методом. Приведем алгоритм решения задачи (1), в котором на каждой итерации формируется и решается вспомогательная задача. Алгоритм решения вспомогательной задачи реализует схему адаптивного метода с простым двойственным шагом. Вычислительная схема основного алгоритма основана на адаптивном методе с оптимальной заменой опоры. 4. Алгоритм. 1. Находим оценки Aj = u'ai—Cj, /е/н, где и' = с'0ПА~1; Д, = 0, / е /оп- 2. Проверяем критерий оптимальности и вычисляем Р= 2 AjiXj — d^)— 2 Ajidl—Xj). Ду>о, /е/н Ау-<о, /е/н Если |3<е, то х — е-оптимальный план и переходим в п. 20. 3. Среди оценок |Aj|, /&/н, выбираем максимальную и задаем параметр отсечения на данной итерации: g = = т|Д|тах, где т — константа отсечения, т^(0, 1) (например, т = 0,01). 4. По параметру | строим множества /нм = = {/ е /н : IД* I < ?>> ^б = 4\^нм и для / е ^нб строим компоненты вектора направления I по формулам (2). 5. По формуле (5) строим вектор Ь§. 6. Вычисляем опорные компоненты вектора направления /оп = —^п1&б- 7. Вычисляем максимально допустимый шаг вдоль направления /: 136
(dt, — xj)/lj при lj<0, вj = | (л;—xj)/ij при ij > o, oo при lj = 0, / <= /on. в/0 = min в;, в = min {1; 0/o}. Запоминаем номер /0. 8. Если 0=1, то вычисляем план х = х-{-1 и число При Р^е план ?—е-оптимален; переходим на конец алгоритма — в п. 20. При р>е полагаем ? = т? и переходим в п. 4. 9. Если 6<1 и /нм = 0, то переходим в п. 11. Если 6<1 и /нм=7^0, то вычисляем компоненты начального опорного плана s:s0n=©'on, 5нм = 0 и решаем вспомога- тельную задачу. Получим /(/м), Л"1, 0. 10. Вычисляем вектор оценок А(/н). В случае совпадения знаков оценок Aj и Aj, /е/Нб, где Aj = u'A(/, j)—Cj, и' =с'опА-^, операции 14—19 двойственного шага можно выполнить только для /нб. 11. Вычисляем новый план х=х-\-Ы. 12. Вычисляем псевдоплан *Cj = d*j, если Aj>0; xj = = d?, если Д,<0, /Е/н» иоп = ^"п1 (&_ Лн*н)- 13. Если ху0 > d*/0 при k = 1 или х/о < d?o при &= — 1, то, полагая Л"1 = Л"1, переходим в п. 1. 14. Определяем подходящее направление t для копла- на А: т tj = k%ujogagj = keh Л"1 Л (/, /), /е/н- 15. Находим начальную скорость убывания двойственной функции а = х/0 — d%j0 при & = 1; а = d* — х/0 при k = — 1. 16. Выявляем среди Aj, /е/н, нулевые компоненты и подсчитываем а по формуле (18) § 1 гл. 1. Если среди элементов, по которым вычислены положительные добавки в (18) §1 гл. 1, есть такие, что d^<Xj<d*r /е/н, то полагаем /# = /. Иначе в качестве /# берем любой 137
элемент, по которому вычислена положительная добавка. 17. Если а>0, то преобразуем Л-1 = Л"1 по формуле (22) § 1 гл. 1 и, полагая Гои = (Уоп\/о) U/*> переходим в п. 1. 18. Вычисляем двойственный шаг а = min {—Aj/f;-}, *А-<0, /€=/н. 19. Пересчитываем коплан Aj = Aj+ctfj, /^/н, и переходим в п. 16. 20. Выдача результатов: х, с'х, Ъ—Ах. Решение задачи (7) можно получить с помощью стандартных алгоритмов (см., например, § 4 или § 5 гл. 1). При решении задачи (6) удобно воспользоваться ее спецификой (оценки неопорных векторов условий равны нулю, за исключением оценки А0 = —1 вектора Ьб). Кроме того, итерацию в задаче (6) лучше начинать с преобразования опоры, так как первый шаг в вдоль / выполняется в основном алгоритме, а начальным планом задачи (6) является вектор в/ с опорой Л0п, при которой I было вычислено. Рассмотрим алгоритм для решения задачи (6). 5. Алгоритм решения вспомогательной задачи. Исходной информацией для алгоритма является: начальный план (son = e/on, sHM = 0, ©), обратная матрица Л"1, множество индексов /оп, вектор 6б, индекс /0. 1. Проверим критерий оптимальности и найдем элемент для замены опоры. Если среди элементов /^/Нм найдется такой, для которого d^j — Xj<.Sj<.dj — Xj при г/о/ ф 0, то полагаем ]\ = /; в противном случае в качестве /# берем любой элемент, для которого Sj^d^j— Xj при fer/o/>0 или Sj=?d*:—Xj при &г/о/<0, где k = — 1, если sIo = d*o — xIo; fe = 1, если sfo =d*u — xIo\ rfof = = е. Л"1 A (/, /). Если элемент /* остался неопределенным (ни одно из условий не выполнилось), то максимум в достигнут и, следовательно, переходим в п. 7. 2. Преобразуем опору. По формуле (22) § ]_ гл. 1 пересчитаем элементы новой обратной матрицы Л^ и положим 70п = (/оп\/о) U /*. 3. Неопорные компоненты подходящего направления 7 для плана 5 положим равными нулю (кроме /©=1—6). Опорные компоненты найдем по формуле 1оп=(1— ©) А~^Ьб. 138
4. Найдем максимально допустимый шаг в вдоль направления /: 0 = min{l, вУо}, 0Уо = min 07-, 67- = (<^ — — *j — Sj)Jlj при lj < 0, @j = (d* — xj — sj)/lj при Ij > 0, @j = oo при Ij = 0, j e /0п- При в < 1 запомним индекс /0. 5. Если в = 1, то, положив 0 = 1, sOT1 = sOIL-\-lon, перейдем в п. 7. _ 6. Вычислим новый план Sj = Sj+0/j, /^Лш, 0 = 0+ +0(1—0), и перейдем в п. 1. 7. По найденному плану s вычислим компоненты допустимого направления / в основной задаче (1): lj = = 5j/0» J€=Jm==Joil U Jbm- Табл. 23 X 0.008 0.032 0.05 0.128 Вспомогательная задача I'hmI 0-4 0—3 0—3 0—4 0—2 4—9 4—12 2—8 0—9 1—11 4-12 4—19 1—14 4—12 2—18 2—32 13—40 Число итераций на одном шаге основного алгоритма 1—6 0—4 1—4 1—8 0—4 1—19 6—25 1—20 1—13 0—14 1—23 2—29 1—26 1—22 2—24 0—64 12—76 Число итераций 41 14 19 24 35 67 65 58 86 73 84 196 181 76 112 428 999 Основная задача Число итераций 26 13 21 14 20 12 10 10 18 15 11 25 27 11 14 70 146 Время решения, с 8 4 7 4 7 6 5 5 9 8 7 19 16 6 9 119 326 139
6. Численный эксперимент. Описанный алгоритм реа- ализован на языке АЛГОЛ-ГДР. На ЭВМ БЭСМ-6 проведен эксперимент. Цель эксперимента — при разных значениях константы отсечения т сравнить число итераций вспомогательного и основного алгоритмов с числом итераций стандартных алгоритмов § 4, 5 гл. 1 (см. табл. 8). Результаты эксперимента при т=10, п=100 приведены в табл. 23. Сравнивая эти результаты с приведенными в табл. 8 результатами решения тех же задач, можно заключить, что при малых значениях рассматриваемый алгоритм незначительно уступает адаптивному алгоритму § 1 и существенно превосходит алгоритм с симплексной нормировкой по числу итераций. При этом в алгоритме число итераций всегда меньше, чем в алгоритмах § 4, 5 гл. 1. Применительно к большим задачам изложенный алгоритм можно считать декомпозиционным, поскольку в процессе его работы происходит разбиение множества неопорных компонент на небольшие группы. Для решения задач с небольшим числом переменных можно применить более эффективные стандартные алгоритмы. Как показывает эксперимент, большие значения параметра отсечения т = 0,128 существенно снижают эффективность алгоритма и поэтому не могут быть рекомендованы для практических расчетов. § 2. Задачи с большим числом ограничений Знакомясь с линейным программированием, никто не оставляет без внимания геометрический метод, с помощью которого можно легко решить любую гаХ2-зада- чу с ограничениями-неравенствами. При п^З метод реализовать трудно. Стандартный симплекс-метод, примененный к задачам рассматриваемого типа, не эффективен, ибо он предварительно сводит исходную тХft-зада- чу к тХ (n+m)-задаче, т. е. увеличивает размеры исходной задачи. Специальная структура ограничений давно привлекает внимание специалистов. Известно много подходов, учитывающих специфику ограничений. Предложены разнообразные стратегии перебора среди них активных, но пока не найдено лучшего. Исследования стимулируются тем фактом, что в общем случае для построения оптимального плана достаточно знать только п ограничений. 140
В данном параграфе описывается детализация адаптивного метода, учитывающая специфику ограничений. Из принципа уменьшения оценки субоптимальности получается своеобразная стратегия перебора активных ограничений. 1. Постановка задачи. Рассмотрим интервальную задачу линейного программирования с'х-+-тах, Ь*^.Ах^Ь*, d*^x^.d*, где cf х, d*, d*— /г-векторы, fc*, b* — m-векторы, Л = =Л(/, /) —mX/г-матрица. Специфика задачи в том, что т^>п. Прямые ограничения d^^x^d* включим в основные (в А добавляется п единичных строк) и будем рассматривать задачу crx-*max, Ь*^Ах^.Ь*. (1) Неособую nXtt-матрицу Лоп=Л(/0п, /), ЛшС=/, назовем опорой задачи (1); пару {х, А0и} из плана и опоры — опорным планом, который считается невырожденным, если ЬЛ(1Я)<А(1Ю /)*(/)<6* (/н), /н = /\/оп- Пусть {х, Лоп}— начальный опорный план. Введем обозначения: /#оп = {i: I е /on. A' (U J)x = b*t}, /;п = {i: i е Iow A' (i, J)X = Ь*}, /ln = /on\(/*onUO, *>* (/on) =6# (/on)- — Aonx, со* (/on) = 6* (/on) — Aonx. 2. Формула приращения. Построим /г-вектор потенциалов и' =с'А-^. Формула приращения целевой функции при учете только основных ограничений Ь* < Ах < 6* примет вид (см. § 1 гл. 1): c'Ax = u'z, (2) где z = z(I01I) =Аопкх. Отсюда следует Критерий оптимальности. Соотношения " (О > °> " (7*оп) < о> " Йп) = о (3) достаточны, а в случае невырожденности и необходимы для оптимальности опорного плана {х, Лоп}. Максимум приращения (2) при ограничениях со*(/оп)^^^со*(/оп) равен Р= 2 ЩЩ + 2 и/а>#|. (4) "*>°.'е/оп "*<°.'е/оп Число р — оценка субоптимальности. Если р^е, то я—е- оптимальный план (с'х°—сх^р^е). 141
3. Разложение оценки субоптимальности. Задача, двойственная (1), имеет вид b*'w — b'u-^min, А'у=с, y+v—w=0, w > 0, a>0. (5) По опоре Aon построим двойственный план (у, v, w)\ У(1оп)=и(1оп), у(/н)=0; Wi = yu Vi = 0, если у^О, w{ = 0y Vi = —yi, если Уг<0, fe/, который назовем сопровождающим двойственным планом. Оценку субоптимальности (4) можно представить так: $ = —и'Аопх+ 2 щЬ'с+ 2 щЬы = —с'х + Ь*'х1)- —6^ = с'х°—с'х + b*'w—by—b*'w° + by=Р*+Рош (6) где рх — мера неоптимальности плана х, роп— мера неоптимальности опоры Лоп, v°, w° — компоненты оптимального плана задачи (5). 4. Подходящее направление. Предположим, что критерий оптимальности (3) и критерий субоптимальности не выполнены: р>е. Тогда для плана х построим подходящее направление по решению задачи c'Z-^max, 6*ОП<ЛОП(*+/)<60*П. (7) Пусть со = со(/оп) =Аои1. Тогда задачу (7) можно записать в виде и'со-^тах, со*оп<со<со*п. (8) СО Решением задачи (8) будет вектор со: сог = со*, если щ > 0; coj = Ojf, если щ < 0; сог = 0, если щ = 0, i ее /ош а вектор / = Л"1 со — решение задачи (7). 5. Вычисление шага вдоль /. Максимально допустимый шаг в вдоль / найдем по формулам 6 = min{l, Эг0}; 8t0 = min Эг-, ie/H; Qt=(o*/a'l9 если а//>0; Qt = ®±i/a'l9 если а'/<0; вг = оо, если а[1 = 0. (9) Новый план х = х-\-©1 при в=1 будет оптимальным планом, а при р(1—в)^е— 8-оптимальным. Дальнейшее улучшение оценки субоптимальности р возможно за счет уменьшения компоненты роп в разложении (6). 6. Формула приращения для двойственной задачи. Из (5) получаем 142
b'Aw—* b'Av = (&„ — xH)' Дг/Н + (6* — 6,я)' Дшн + + 2 (Ь*-*„Ой + 2 {b^-bl)m, 0°) У1<о,ус>о, ус>о,ус<о, гдех=Л(х+/), г/=*/+Д*/. Пусть_& = — 1, если Л' (i0f J) х = 6*0; & = 1, если Л' (j0, J)x = b*i0. Тогда в силу (10) начальная скорость изменения двойственной функции (на невырожденном плане) а0 = 6*— к*0> если &= — 1; а0=к1о — &*t-0, если &=1. (11) 7. Замена опорной матрицы. В качестве подходящего направления для двойственного плана возьмем вектор ' И/о„и/и) = *«,Л(/, /)Л-1=а;оЛ-'; _*.}. (12) Если а<0, то при движении вдоль [i двойственная целевая функция уменьшается. Как только изменяется знак У Уи то уменьшается (по модулю) и скорость а. Пусть движению вдоль направления \х соответствует скорость as изменения двойственной функции. После появления у вектора у новых нулевых компонент скорость изменения двойственной целевой функции станет равной as+i=as— 2 (bi—b*i)iii+ 2 (bi— b*i)iii. (13) |^<0, i/(s+1>=0 |if>0. yis+l)=0 Если a5+i>0, то движение вдоль \i следует, очевидно, _ s прекратить. При этом р0п = Роп — ,57 1аг|сГг и, если 1 = 0 S (1— 0)р— J?7 |аг|(7г^е, то х — приближенное решение задачи (1). В противном случае из множества /°= = {i:ie/on. У[5) = 0, |i|>0, щфЩ или #{в> = 0, ^<0, щФЪ*г} возьмем элемент **, для которого Ь^<С <Л' (ц, J)x<.bf , а если такого нет, то любой элемент i*^Io- Из опоры выводим строку Л (ц, «/), а вместо нее ВВОДИМ Л(/0, J) : 7"п= (/onV*) U «о» Д)п=(^оп\^ ('*> -0) U U Л(?0, У). Обратную матрицу при замене строки вычисляем по формуле 143
Aon = Aou1 [E + et, (et, — A (i0, J) Д>п )/o], a = A (/„, J) AZn1 et, = kph. (14) Вектор потенциалов был вычислен в процессе поиска t»: s " (AmVo) = "(S) (AmVo) = И (ArnVo) + 21 a* I ^ (/on\W; s Поэтому новую итерацию можно начать без его вычисления. Прежде чем изложить вычислительную схему описанного метода, заметим, что выделение прямых ограничений незначительно уменьшает трудоемкость итерации, если матрица условий А хранится в компактной форме. Алгоритм метода рассмотрим применительно к задаче (1), предполагая, что опорный план {#, Лоп} задан. 8. Алгоритм. 1. Вычислим вектор потенциалов и' = ~~ Соп Лоп • 2. Найдем вектор w=Ax. 3. Вычислим оценку субоптимальности Р= 2 ut(bt—wt)+ 2 Ui(bti — wt). "i>°.te=/on и,«ые/оп Если p^8, то переходим в п. 14. 4. Построим вектор со (/0Т1): wf = Ь\ — wu если щ > О, Щ = b*t — Wu если Ui<.0; cof = 0, если щ = 0, iEzIou> и вычислим подходящее направление / = Л^1 со (/оп). 5. Найдем согласно (9) максимально допустимый шаг в вдоль /: 6 = min {1, 0го}, Qi0 = min&u ie/H; в* = = (b;—wt)/A'(i, J) U если A'(U J)l>0\ 8? = (&*,— — Wt)/A' (i, J) U если A' (i, J) I < 0; в* = oo, если A' (/, /) I = 0. Заметим, что в этом пункте есть смысл различать основные и прямые ограничения, так как вместо компонент векторов &*, 6*, w, Al будут компоненты векторов d*, d*, ху I, когда номер строки i соответствует прямым ограничениям. 6. Вычислим новый план х = х-\-01. При (1— 0)р^е перейдем в п. 14. 7. Найдем, следуя (12), подходящее направление [а(Лш) для двойственного плана: положив k = — 1, если А' (*о, J) х = &*0; k = 1, если А' (*"0, J) х = &+?о, вычислим ц(/оп) = Ы'(»0, J)A~K 144
8. По формуле (11) вычислим начальную скорость убывания двойственной функции а; положим а=0, 6 = = (1-в)Р, х(/оп) =А(/оп, /) (х+1). 9. Среди индексов множества 1° = {i: fe/0m Щ = О, H<i>0, КгФЪ\ или и; = 0, Ич<0, щфЬ^ фиксируем индекс /#, для которого &Л < Л' (/*, J)x<b*t. При отсутствии такого в качестве /* берем любой элемент /°. 10. Изменим согласно (13) скорость убывания двойственной функции а = а— 2 (bt — b*i)\ii+ 2 (бГ —Ми*- w.=0,ix.<0 W.=0>li.>0 Если а^О, то перейдем в п. 13. 11. Вычислим двойственный шаг as = min {—щ1\л,и 12. Пересчитаем вектор потенциалов и (70П) = и (10й) -f- +crs|x(/on), P = |3+aas, (7=a+as. При p^e перейдем в п. 14, иначе — в п. 9. 13. Положим щ^ = — ka, /оп = (/0п\'*) U h и по формуле (14) пересчитаем обратную матрицу Л^1. Перейдем в п. 2. 14. Выдача результатов. Замечание. Данный алгоритм можно рассматривать как частный случай алгоритма § 1 гл. 1, когда /оп=/ и размерность опоры фиксирована: |/0п| = |Лш|=я. 9. Численные эксперименты. Алгоритм реализован на языке АЛГОЛ-ГДР. На БЭСМ-6 проведен ряд экспериментальных расчетов. Задачи генерировались так же, как в эксперименте 1 § 1 гл. 1 (с помощью процедуры GENER1). Каждая из задач, начиная с плана х=0, решалась тремя алгоритмами: симплекс-методом, алгоритмом § 1 гл. 1 и данным алгоритмом. Симплекс-метод применялся к задаче с'лг-^тах, Ax=z, d*^x^.d*, й*^: ^2^6*, и поэтому размер его базисной матрицы был тХт (на первой итерации она состояла из единичной матрицы при z). Для алгоритма данного параграфа начальная опора была также единичной, но имела размер пХп. Она состояла из дополнительных строк матрицы, соответствующих прямым ограничениям. Векторы &* и Ь* дополнялись векторами d* и d* : ft* = (&*, d*), &* = (6*, d*). Поскольку d*^0, Ь*<!0, d*^0, 6*^=0, то х=0 — план задачи. Алгоритм § 1 гл. 1 начинал работу с нулевой опоры. Максимальные значения целевой функции, полу- 145
Табл. 24 пхт 10X100 10x140 10x160 10x250 Номер задачи 1 2 3 4 5 6 1 2 3 4 5 6 1 2 3 4 5 6 1 2 3 4 5 6 Число итераций симплекс 27 29 45 22 36 32 19 21 20 22 25 27 17 21 30 21 19 36 — — — — — — § 1 гл. 1 25 18 22 20 18 27 16 19 18 16 24 26 17 16 27 20 12 23 18 25 24 26 27 26 § 2 гл. 2 20 19 23 16 17 21 12 17 15 10 21 24 17 15 26 20 10 22 18 19 24 19 25 21 Время решения, с симплекс 49 48 88 48 63 60 21 39 31 19 41 49 51 49 68 57 40 71 — — — — -— — §1i гл. 1 4 2 3 4 2 4 4 4 2 2 4 2 4 4 7 5 3 6 6 9 8 8 8 9 § 2 гл. 2 4 4 4 3 3 4 2 4 3 2 4 5 5 4 7 6 3 7 9 10 6 9 11 10 ченные всеми алгоритмами, практически совпадали во всех задачах. Результаты экспериментов приведены в табл. 24 и 25. Прочерк в таблицах означает, что задача не решалась данным методом из-за большого расхода времени. Табл. 24 иллюстрирует работу алгоритмов с ростом т при фиксированном п. В табл. 25 приведены результаты экспериментов при разных значениях п. За- 146
Табл. 25 пХт 20X100 30x100 40хЮ0 Номер задачи 1 2 3 4 5 6 1 2 3 4 5 6 1 2 3 4 5 6 Число итераций симплекс — — — — — — 95 74 91 63 83 60 — — — — — — гл. 1 38 41 27 34 53 44 53 49 59 50 57 38 71 83 73 80 79 90 § 2 гл. 2 34 37 21 29 43 39 51 48 56 48 54 32 70 78 63 75 71 83 Время решения, с симплекс — — — — — — 312 291 344 321 363 211 — — — — — — § 1 гл. 1 23 25 15 17 32 28 30 27 31 27 31 22 41 49 42 40 45 71 § 2 гл. 2 27 31 19 23 41 35 32 30 35 32 38 30 43 54 47 49 51 80 метим, что алгоритм § 1 гл. 1 для больших значений п имеет преимущество перед алгоритмом § 2 гл. 2, так как в нем размерность опоры меняется от 0 до п и, следовательно, требует меньше времени для пересчета Л-1. § 3. Декомпозиция опоры канонической задачи Одним из возможных общих методов учета большого числа основных ограничений-равенств является расчленение соответствующей матрицы условий на блоки с малым количеством строк. Вводя для каждого блока свою опорную матрицу, можно операции адаптивного метода с опорной матрицей всей задачи заменить на операции с 147
малыми опорными матрицами блоков. При этом экономится оперативная память ЭВМ для хранения опорных матриц. 1. Мультиопорный план. Рассмотрим линейную задачу с основными ограничениями-равенствами с'я-^max, Ax=b, d*^x^d*, (1) где Л = Л(/, /), /={1, 2, ..., т}, /={1, 2, ...,я}. Пусть число т строк матрицы А таково, что применение алгоритмов с полным хранением обратной матрицы невозможно из-за недостатка оперативной памяти. Для таких задач одним из возможных методов решения является модификация адаптивного алгоритма, связанная с декомпозицией опоры. Из т± строк матрицы А = =Л(/, /) составим матрицу Л1=Л(/ь /), из остальных т2 строк — матрицу Л2=Л2(/2, /). Предположим, что гапкЛ1 = т1, rank Л2 = т2, mi+m2=m. Множество опорных индексов /0п всей матрицы Л разобьем на два подмножества: /on=/lon U ^2оп, /ion П /2оп = 0, |/lon| =Ши |/2оп| = т2. СОВОКУПНОСТЬ Qon = {Qiom Q2011}, Qlon = = {h, /ion}, Q2on={/2, /гоп}, назовем мультиопорой задачи (1), если deti4(/i, /юп)=^0, det Л (/2, /2Оп)?=0, где Л (/2, J) = А (/„ /) - Л (/„ /1оп) Л-' (/1о„, /i) Av (2) Замечание. Матрица A(h, J) получается после подстановки в уравнение A2.x=b(h) вектора #(/юп), найденного из уравнения Aix=b(Ii). На каждом шаге излагаемого ниже алгоритма при фиксированной опоре Qion и при #(/ion) =Л-1(/юп, h)[b(h) — — A(Ilt Лн) * (Ah)L Jih = J\Jwil решается задача (1). Полученное решение используется затем для построения подходящего направ ления в точке плана x(J). Пусть известны обратные матрицы Л"1 = Л""1 (/1оп, 1г), Л-1 (/2оп, /2). Тогда для опорной матрицы ^оп — А (/, /0п) — А{1Ъ /юп) А(1Ъ /20п) L Л (72, /юп) А (/2, /2оп) обратная вычисляется по формуле Лц Л12 Л21 Л22J L —А~2 А21А^Х Л^~2 \ 148
где A22 = A2ou=A(I2l /2оп). Пару {х, Qon}, в которой х — план задачи (1), будем называть мультиопорным планом. Опишем операцию вычисления оценок Д7- = с' (Jou) х X Л'1 А (/, J) — Cj в случае, когда в памяти ЭВМ хранятся только матрицы Л"^ и Л"^. Сначала, учитывая формулу (3), вычислим вектор потенциалов и' = (и' (1^, «'(/.)) = ("' (Лоп). c'(J2on))A^ = (c[, C2)^n=(Cl'(V + + Л^ Л12 Л^~2 Л2i Л^ ) с А~2~2 Л2i Л^ , с j AYy А-^А^ -\- + с2 ^Гг1)* Далее заметим, что А' = и'А — с' = с[ (Л"1 + + Л"^ Л12 Л^~2 Л21Лj j ) Лх с2 Л^"2 Л21Л^ Лх Cj Л^ Л12 X X Л^ А% -\- ?2 Л22 Лг С = Cj Л^ Л1 Cj Л^ Л12Л22 (Л2— — Л2Х Л-1 Лг) + с'2 А~22 (^2 — Л21 Л"1 Л1) — с'. Если обозначить и[ = с; Л"1, Aj = н[ Лх — с', и'2 = —А' (J20u) Л-^, то для вектора оценок получим формулу д' = д; + «;л2. (4) Зная вектор оценок Д, вычислим оценку субоптимальности Р = - S A; (d*j - *;) - 2 A,- (rf; - Xj). (5) Ар 0 Ау<0, у Из § 1 гл. 1 следуют Критерий оптимальности. Соотношения Aj ^ 0 при Xj = dtfi Д,<0 при xj = d\\ Д7- = 0 при d:,j<xj<d*r j ЕЕ </н» достаточны, а в случае невырожденности и необходимы для оптимальности мультиопорного плана {х, Qon}. Критерий субоптимальности. Если Р^е, (6) то мультиопорный план {х, Qon} является е-оптималь- ным: с'хР—с'х^е, где х° — оптимальный план. Для каждого е-оптимального плана хе найдется мультиопора Qon такая, что для {хе, Qou} выполняется неравенство (6). 2. Подходящее направление. Пусть мультиопорный план {#, Qon} не удовлетворяет критерию (6). Подходящее направление для улучшения плана х найдем из решения следующей задачи: 149
— А; (Лн) х (Лн) -> max, Л (72, /1н) х (/1н) = = 6(/2), ^lH<xlH<d;H, (7) где Ъ (72) = Ъ (72) — Л (72, /1оп) А^п Ь (h), d*lu = d* (71н), *ih = х (Лн)» ^*н = ^* (^1н)- Смысл этой задачи состоит в максимизации целевой функции с'х по переменным х (Ан) ПРИ фиксированной опоре Qlon, т. е. при х (Jlou) = = Л"1 ф (7Х) — Л (7Ь /ih)^ih)- В отличие от адаптивного метода, в котором подходящее направление вычисляется из условия максимума приращения целевой функции только по неопорным переменным и определяется однозначно, в данном случае для решения задачи (7) приме- няется алгоритм § 4 гл. 1. Предположим, что для решения задачи (7) выполнено k итераций при k^\ и найдены невырожденный р^-оптимальный опорный план {xk(Jln)9 Л^}п}, Л^п = = Л (72, «/^оп)' и А(А° (Лн)—соответствующий ему вектор оценок. Заметим, что вектор оценок в задаче (7) вычисляется по формуле (4), поэтому имеем A (JlH) = А(0) (Лн). Подходящим направлением для плана x(J) будет вектор /* (Лн) = xk (Лн) -X (/1н), /* (/J = = -^ГоН(7ь /ih)/*(/ih)- (8) 3. Итерация. При решении задачи (7) были учтены все основные ограничения задачи (1) и прямые ограничения на переменные Xj, /e/щ. Поэтому максимально допустимый шаг вдоль /*(/iH) равен 1. Для переменных *(/юп) этот шаг может оказаться недопустимым. Шаг вдоль /(/юп) найдем по формулам ej0 = min {@j, /е/юп}, вj = (d* — xj)/l*, если I* > 0; Qj = oo, если Z? = 0; ©7- = = (d*j — Xj)/l*j, если /?<0, /^/юп- Итак, максимально допустимый шаг вдоль Z* (J) e0 = min{lf G/o}. (9) Если во=1, то план х=х+1* будет ^-оптимальным планом задачи (1) и при pft^e ее решение прекращается. В противном случае, начиная с плана {xk(JlB), Л^п}, продолжается решение задачи (7). 150
Если во = 6#<1, то строим новый план х=х-\-@01*. Для него оценка субоптимальности Р= Ifi)(xj-d;)+ S Ц(х§-(1)). A*>o./e/1H А^о./6/и При переходе от плана я к плану х оценка субоптимальности уменьшается на величину Ap = Apa;+APon, где Дрх= = -—Э0А/(/н)/*(/н)^0, —ДРоп^0 — приращение двойственной целевой функции. Если р^е, то х=х+®01* — е-оптимальный план задачи (1). В противном случае решение задачи (1) продолжается. 4. Преобразование мультиопоры. Индекс /0 критической переменной Xj0> препятствующей движению вдоль /*, выводится из /юн- Вместо него вводится некоторый элемент из /^ по следующим правилам. Вычислим вектор /?' = р' (/&>п) = ejoA^aA (/lf Л?>п). Рассмотрим два случая. 1) Существует элемент рифОу /*е/?*},. Тогда в множествах Jlou и J$n поменяем местами элементы /0 и /'*: Лоп = (Лоп\/о) U /*, 4ш = №V/*) U /о- В результате ПОЛуЧИМ_ НОВУЮ МуЛЬТИОПОру Qon=(Qlon» <?2опЬ Qlon = = [h> ЛопЬ Сгоп^^г, ЛопЬ Обратные матрицы ЛГ^п = = A~l(how h) и Л^д =-4-1 (Лош 7г) можно найти по формулам (10) где fl/. = Л^ Л (/ь /*); аЫш — 10-й элемент вектора a/V 2) р(/гоп) =0. Найдем отличный от нуля элемент xjoi0 в /0-й строке матрицы Л~!п и элемент я^ ^=0в матрице Л (72, J^). Неособенность матриц Л1оп и Л20п гарантирует существование таких элементов. Строим новую мультиопору Von ~ (Qlon» Q2011)» _?Де Qion — И1» АопЬ Q2011 = и 2» «^2опЬ Л. = (AVo) U **, /2 = (VV*) U to, Лоп =J^ion\/o) U/*, Лоп = (Лоп\/*) U /о- Обратные матрицы Люп = Л"1 (/1оп, 7^), Л"1 = Л-"1 (/2оп» ^г) можно найти с помощью старых обратных матриц, выполняя последовательно операции 151
исключения и добавления строки и столбца в каждой из них. Пересчет выполняется по формулам, приведенным в гл. 1. Для новых опорных множеств вновь формулируем задачу (7). Начальный опорный план (x(/iH), Л20п} этой задачи является вырожденным, поскольку опорная переменная Xj0, /о^/гоп, критическая. Приведем алгоритм решения задачи (7), в котором на первой итерации начальный план строго улучшается. 1. Положим Xj = Xj, /e/щ; it=0 — число итераций. 2. Положим Wi = 09 f=l, m2; р = 0. Вычислим и' = = с' (Лоп) ^7оп* Пункты 3—6 выполним для /е/н- 3. Вычислим р = А (72, /) = А (72, /) — А (72, /1оп) X 4. Найдем A,j = u'p—Cj. 5. Построим lj = d*. — xjy если Д7- < 0; lj = d^j — xjy если A] > 0; lj = 0, если A7- = 0; P = P — A//. 6. В вектор w добавим слагаемое: w = w-\-plj. 7. Проверим критерий субоптимальности: р^е. При выполнении этого неравенства переходим в п. 25. 8. Вычислим вектор / (J20u) — ^<Ton^- 9. Если xIo = d^0 и 11о < 0 или xio = d?o и 11о > 0, то перейдем в п. 12. 10. Вычислим e0 = min {1, 6j0}, Gjo = min0j, /е/20п, Qj = оо при 1} = 0; в; = (d* — x^/lj при lj > 0; в7- = = (d^j — x^/lj при /j<0. 11. Построим новый план x(JtH) = х(Лн)+во/(/1н). Положим Й = й+1. При условии (1— во)Р^е перейдем в п. 25. 12. Положим k = — 1, если */0 = d*0; k = 1, если XjQ=d*jQ. Двойственный шаг а и число y = — Л^Л^Х ХЛ(/2, Jh)I(Jii) найдем, выполнив пп. 13—18 для j^J* (полагая а = оо, 7 = 0)- 13. Как и в п. 3, вычислим вектор р=А(12, /) по формуле (2). 152
14. Найдем zs = kejoAj*np. 15. Вычислим lj = d*. — xj при Д7- < 0; lj = d%j — xj при A7- > 0; lj = 0 при A7- = 0. 16. Положим y=7—Zjlj. 17. Если Ay = 0 и zj(xj — d*)>0 или A7 = 0 и Zj (Xj — d%j) > 0, то положим a = 0. 18. При AjZj<0 вычислим r\ = —Aj/Zj. Если r)<a, то положим о = г\. Для /е/н выполним операции 19—22 (чтобы найти индекс /*). 19. Вычислим Aj = Aj-\-aZj. 20. Если Д7 = 0 и dtj<.xj<.d*1 то, полагая /* =/, перейдем в п. 24. 21. Если Aj = 0 и y = 0, то, полагая /* = /, перейдем в п. 24. 22. Если Д7 = 0 и у < 0, то при z7- > 0 и xj = d* либо при 2/<0 и Xj = d*j полагаем /* = / и переходим в п. 24. 23. Если Aj = 0h y>0, то /* = /. 24. Изменив опору /20п = (ЛопХ/о) U/*i пересчитаем обратную матрицу А~1п = [Е — (а,, — е/о) е\\ А~1пУ где fl/. =^оН(/2» U)lelA7ouA\!* /*)— неединичный столбец левого мультипликатора. Переходим в п. 2. 25. Выход из алгоритма решения задачи (7). Замечание. Вектор и и оценки Aj необходимо строить только на первой итерации, а в дальнейшем они будут пересчитаны в п. 13. Операции их вычисления в пп. 2, 4 следует опустить. В этом случае нужно положить Ajo = Ajo+&cr, так как на новой итерации /ое/н. Рассмотрим теперь алгоритм решения задачи (1) для случая, когда задан мультиопорный план {х, Q0n}, т. е. когда имеются план этой задачи х, матрицы Л^п, Aj*n и множества 1Ъ /2, /1011, /2оп. 5. Алгоритм. 1. Сформируем задачу (7): сг = и'А(1и Лн) — С (/1н), и' = с' (/1оп) Л-^, х (У1н) = х (/iH). Столбцы матрицы Л (72, Лн) по меРе необходимости будут генерироваться по формуле (2). 153
2. Выполним заданное число итераций в задаче (7). Получим р-оптимальный план x(/m), вектор A(/m) и матрицу Aj*n(I29 Лоп)- 3. По формулам (8) построим подходящее направление /. 4. Максимально допустимый шаг 0О найдем по формулам (9). 5. Если 9о=1 и p>s, то перейдем в п. 2 для продолжения решения задачи (7). 6. Построим новый план х = х-\-@01. Если 0О = 1 и р^е, то план х — е-оптимальный план. Перейдем в п. 12. 7. Найдем оценку субоптимальности для плана х (при 6о<1): А;>0, А;<0, Если р^е, то переходим в п. 12. 8. Вычислим вектор р' (У2оп) = ejoA^nA(Il9 /2оп) и найдем pj* = max \pj\. Если /?7+ = 0, то перейдем в п. 10. 9. По формулам (10) пересчитаем матрицы А~^п и Л~^ и, полагая 71оп - (Лоп\/о) U /*, Лоп = (Л<ш\/*) U /о» перейдем в п. 1. 10. В /0-й строке матрицы Л~^ найдем максимальный по модулю элемент xjQiQ. В матрице Л~^ найдем ненулевой элемент х^#. 11. Положим 7L= (/i\f0) U *'*, /2 = (/2V*) U io, J'юп = = (Лоп\/о)и/*, Лоп=^2оп\/*)и/о- Пересчитаем каждую из матриц Л~^ и Л-Jj по формулам гл. 1 и перейдем в п. 1. 12. Выдача результатов. 6. Численные эксперименты. Алгоритм написан на языке АЛГОЛ-ГДР. Для него проведено несколько экспериментальных расчетов. Задачи генерировались процедурой с равномерным размещением ненулевых элементов по столбцу матрицы (GENER2 из § 1 гл. 1). Эксперимент 1. Цель — проверить работу алгоритма для различных начальных приближений. Допустимое ре- 154
шение задавалось так: выбирался х1: х\ е= [d*7-, d*], / = = 1, п, и вычислялся вектор правых частей Ь=АхК При работе алгоритма mi итераций выполнялись с нулевым шагом — пока не закончится замена искусственных столбцов в опоре Люп- Затем шел процесс улучшения плана. В случае недопустимого начального приближения (Ах1 = = Ь) применялась стартовая процедура для расширения задачи и первые итерации алгоритма выполнялись с положительным шагом, чтобы сделать невязки (Ь— Ах1) равными нулю. В эксперименте 20х50-матрица А имела по три ненулевых элемента в столбце, размещенных равномерно, но со сдвигом на одну строку (чтобы не было ненулевых строк в матрице). Векторы се[-100, 100], d*^[—100, 0] и d*e[0, 100] генерировались полностью (все п элементов) с помощью процедуры VEK (см. § 1 гл. 1). Результаты эксперимента приведены в табл. 26. Эксперимент 2. Цель — найти оптимальное с точки зрения скорости решения задачи значение параметра декомпозиции при заданном объеме памяти. Генерирование задач выполнялось, как и в первом эксперименте. Вектор Ъ и начальное приближение х1 задавались так, чтобы Ах1 = Ь. Результаты эксперимента для 20X40- задачи, решенной с разным числом внутренних итераций и для различных значений параметра декомпозиции гаь приведены в табл. 27. Из таблицы видно, что время решения задачи существенно увеличивается с ростом ть Пусть объем допустимой памяти (для Л"1) равен К- Тогда оптимальное значение параметра гп1 найдется из равенства m* + (m-m1)* = K, (12) где mi и (m—mi)=m2 — размеры Aion и Лгоп. Наименьший объем памяти, необходимый для запоминания А~01п и Л~^, очевидно, равен гп2/2. Следовательно, при наличии свободной памяти, когда m2/2<cK<Cm2, имеет смысл вычислять оптимальное значение параметра т4, при котором для решения задачи потребуется наименьшее время. При К^гп2 следует применять адаптивный алгоритм без декомпозиции (см. § 4 гл. 1). 7. Двухшаговый метод с декомпозицией опоры. Построим метод решения задачи (1), в котором сочетается идея двухшагового метода с методом декомпозиции опо- 155
Табл. 26 Начальное приближение т± Число внутренних итераций Число внешних итераций Время решения задачи, с x1=d.Ml Ь=о, Ах^фЪ 5 1 2 24 22 141 147 х1— (d* + +d*)/2, Ь=0, Ах^фЪ 5 1 2 10 15 125 141 x*=(d*+d*)/2, b=A(d*+d*)/2, Ax*=b 5 12 3 4 10 10 15 13 100 95 127 116 10 12 3 4 18 18 15 15 168 125 125 128 Примечание: В таблице указано только задаваемое число внутренних итераций, но при 0=1 и 0 > б внутренние итерации повторялись вновь т. е. их было больше. Табл. 27, т± Число внутренних итераций Число внешних итераций Время решения задачи, с 5 12 3 4 5 6 7 11 9 12 9 11 8 8 78 48 70 59 76 51 66 10 12 3 4 5 6 7 16 14 22 17 16 14 14 109 93 136 124 139 127 158 15 12 3 4 5 6 7 29 23 23 25 28 24 24 184 95 138 169 255 234 225 ры. Разобьем матрицу А на блоки Аи i=l, k. Для упрощения дальнейшего изложения будем, как и в п. 1, считать, что k = 2, т. е. пусть матрица имеет вид ( А (1Ъ J) ) A = A(I, J) = { л|/2 ^ J, / = /iU/2, /1 П Л=0- Понятие мультиопоры определяется, как и в п. 1. Однако в процессе решения задачи (1) описанным в указанном пункте методом множества h и /2 не меняются (см. также [17] *)), поэтому для обозначения мультиопоры бу- *) В [17] это достигается тем, что в случае р(/гоп)=0 элемент /ое/юп сразу выводится из множества /н по правилам адаптивного метода. Множества /i, /2 при этом не меняются. 156
дем вместо Q0n={Qion, Q2011} использовать символ /0п = = {/Юп, J2on/ • Пусть задан начальный мультиопорный план {х, /оп}. Вычислим векторы и\ = с' (/юп) -Aion, Ai =и[А (1Ъ J) — с\ и'2 = — А[ (/20п) A~0ln, А' =и'2А (7а, /) + А[. В п. 1 показано, что вычисленный таким образом вектор А совпадает с вектором оценок, найденным по адаптивному методу для опорного плана {х, Л(/, /0п)}. Это позволяет легко вывести критерий оптимальности (субоптимальности) для мультиопорного плана {х, /оп}. Рассмотрим случай, когда мультиопорный план {*, Jon} нужно улучшить. Чтобы найти подходящее направление для {#, /оп}, прямым методом при начальном опорном плане {0, А20и} решим задачу - А; (/1н) / (Лн) -> max, А (72, /1н) /1н = 0, (10) Я+1н — Я1н "^ *1н -^ "1н — #1н» где /1н = J\Jlow /ih = / (Ан) и т. д. Эту задачу необязательно решать до конца. Пусть на k-й итерации получены опорный план {Z* (/lH), Jlon} и соответствующее ему подходящее направление lk(JlB). Тогда подходящим направлением для {х, /1оп U Jlou} будет вектор _Ъ = 1г (J): 1г (/1н) - /* (/1н) + /* (/1н), к (Лоп) = = —-4ion^4(/i, 71н) /i (7iH)« Процесс решения задачи (1) прекращается на е-опти- мальном плане x = x-\-&iU, если для него выполняется критерий субоптимальности, где ei = min {1, 6j0}, 0jo = = min {в7-, / e /юп U /2оп}, в; — максимальный шаг, допускаемый /-м прямым ограничением задачи (1). В противном случае для плана х+ ©i'i строим [17] новую мульти- опору /оп = {/1ош /2оп}- По аналогии с вышеизложенным найдем новое подходящее направление /2, соответствующее {х, Jou}. В результате получим и новое множество /*п = = ^ion U ^2on = ^ion U_/;on. Новый план задачи (1) вычислим по формуле x = x(z°), где x(z)=x+Lz, L — = {1ь k}> z =-" {гъ z*) — план, z° — решение задачи у'г-^тах, d*—x^Lz^d*—х, L={lu 4}. (11) 157
Займемся решением задачи (11). Если hjo = 0, то процесс решения задачи (11) аналогичен соответствующему из § 2. Пусть кзоФО. Найдем для 12 максимально допустимый шаг в2 = min {1, вУ1}, в71 = min {в7-, / е /*п}. Здесь Sj вычисляется традиционным образом. При в2 = 1 план х+12 является оптимальным в задаче (1). Пусть 62<1 и для плана х + ©2/2 критерий субоптимальности не выполняется. Задачу (11) решаем, начиная с опорного плана {z, L (г, Д)} = {в!, в2, /2/l}. Различаются два случая: а) Yi—T2/ij1/4j1 = 0, причем {6i, ©2}—оптимальный план задачи (11); б) yi—y2tijJkjl?=0. Пусть (л = sign(vi—Y2iiii/bii)- Положим Я=1, 21={©i, ©2}. Опишем h-ю итерацию решения задачи (11). Известен опорный план {zh, L(2, jh)}. Построим для zh подходящее направление ph = {р\ = \i, р\ = —V^hjjhjj} и найдем новый план zh+l = zh-\- со/?\ где со = ©уЛ х, /л+1 — индекс ограничения задачи (11), первым ставшего активным при движении вдоль ph. План zh+l является оптимальным в задаче (11), если выполняется одно из условий: (12) H(Yi — Y2'i/fc+i/'2/A+1)<0. Если ни одно из условий не выполняется, то, приписав плану 2h+1 опору L(2, /л+i), продолжим решение задачи (11). Пусть J* = {/ е Jon : и/ = X} + вх/и + /27- е [d*j, d]\). Имеет место утверждение: если zh+l не является оптимальным планом задачи (11) (что означает нарушение всех условий (12)), то /Л+1 е/*. Более того, при xjh+l (zh+l) = = d/A+1 выполняются неравенства H/A+1>d/A+i> *2/А+1>0, а при хУл+1(2л+1)=^/л+1— неравенства к/А+1 <d,/A+1, Ч+1<о- Следствие. Оптимальный план задачи (11) найдется не более чем за |/*|+1 итерацию. Доказательство утверждения аналогично соответствующему из § 9 гл. 1. Отметим также, что все замечания, 158
относящиеся к п. 1 § 9 гл. 1, имеют место и в этом случае. Пусть процесс решения задачи (11) остановлен на плане гн+г. Компоненты xiK> Xjh+l нового плана х = x(zh+l) критические. Согласно утверждению имеем /Ае/0*п. Для /а+1 возможны случаи: /л+iG/on. /a+iE/оп, причем последний возможен лишь тогда, когда zh+1 является оптимальным планом задачи (11). Но каждый раз I* = J*n [\ П {/a» jh+i}?=0- Новая мультиопора строится следующим образом*^. При |/*[=1 новая мультиопора получается аналогично [17]. Пусть [/*| = 2. 1) /* П ^2оп = /*. Рассмотрим задачу _Д* (7^(7*) +max, d*i—Xi<—% XijpjKd* — хь fG/*, (13) dJ — XJ < Pj < di — xh j^Jn = J\ /on' где X(J*2on, 7*) = A-^A (/2> 7*), А*—вектор оценок, пересчитанный по формулам (4) для мультиопоры /*п (он получается в процессе нахождения направления 12). Пусть /оп с /*, 7ноПс:/н — оптимальные опорные множества задачи (13). ПОЛОЖИМ 71оп = /ion> 720п = (/2оп\7оп) [} 7ноп. Новая итерация метода начинается с мультиопорного плана {*» /0п} = {*» /юп U /год}- При этом справедливы соотношения -^lon == -^lon» ^2оп (У ноп» ^2/ == А («/ноп» ¦« onj -^2оп (-«оп» *2/» ^2оп («'гоп \ «'ноп» * 2/ ~ ^2оп (Угон \ •'ноп» -«2/ (1^) A (j2оп \ ^ноп» «'ноп) <^2on («^НОП» '2/в *> В дальнейшем с целью упрощения записей для обозначения матриц [Л(Л, 7^)]-', М(/„ 72*оп)-Л(/2)71оп)[.4(/1, Л*оп)Г^(/1, использовать символы Л1од и i42on. 159
2) '* П Л*оп = /Ое{/Л, M+i}. Тогда /*\/0eJ;M. Эле- мент /0 выводим из /*оп по правилам [17]. Далее поступаем так, как в случае 1), при этом вместо /* в задаче (13) рассматриваем множество /* fl Jlon- (Пересечение этих множеств берется после того, как индекс /0 уже выбыл из Jlow) 3) I* П Jmlou = /*¦ Обозначим: Х(Г1оп, J) = AT^(Il9 J). Различаются подслучаи: За) Матрица X(I*f /Jon) содержит неособую подматрицу х(/*, </*), J*cr20Jl, |/*| = |/*|. пусть в=х-1 (j*b /*). В множествах У*оп и /*оп поменяем местами /* и /*, т. е. 7?оп = (^оп\'*) U /*, 7п2оп = 0*2оа\1*) U /•• Воз- вращаемся к случаю 1). Имеют место соотношения A7k(J*> ii) = BAToln(i*, /i), АТк 0lm \ J*> h) = AToln Йоп \ '*• /l) - -X(J40B\J*, J*)BAT*a{I*, h); (14') ^n(75on\/*, /,)=Л7опЙ>п\/*. /,), -*(/•, ^оп\/*)Л-1п(^оп\/*. /.). (15) гДе %й = И (А, Лол)]-1, Л7~ = [Л (/„ 7^оп) - Л (/„ 36) Матрица Х(/*, Jgon) нУлевая- Рассмотрим задачу -А* (?н)'1 (У;) + max, 160
d* й) - x й) < / (7:) < d* (7:) - x й). (i6) Пусть 7onCi/*, «/ноп <= Jh — оптимальные опорные множества задачи (16). Положим 71оп = (</ion\7on) U ^ноп, Лоп = ^2оп- Матрицу Л (/а,_/) в этом случае не меняем. Новую обратную матрицу АТоп пересчитаем по формулам, аналогичным (14). Новую итерацию метода начинаем с мультиопорного плана {х, Jlou [] J20Ii}- Зв) Неособая подматрица Х(/*, J*), У* с У*оп, не су- шествует, но матрица X (/*, /*оп) не является нулевой. Пусть X(i0, /о) =т^ 0, *0е/*, /oe/gon- Поменяем в множествах «/*оп и /*0п местами элементы i0 и /j, т. е. поло- жим 7?on = (/Ion\WU/o, ^оп = Лоп\/о)и^ Соответствующие новые обратные матрицы А~~, Л~~ (смысл обозначений объяснен выше) пересчитаем по формулам, аналогичным (14'), (15). Вернемся к случаю 2). Замечание. Все операции, связанные с построением новой мультиопоры 7оп, описаны выше при умолчании, что среди компонент xj, /6Е./*П\/*, нет критических. Однако, следуя п. 1, нетрудно показать, что и в противном случае можно добиться строгого улучшения плана х на следующей итерации. § 4. Адаптивный метод с декомпозицией опоры Для интервальных задач линейного программирования, в которых основные ограничения записываются с помощью двухсторонних неравенств, метод декомпозиции опоры (см. § 3) в сочетании с адаптивным методом (см. § 1 гл. 1) приводит к новому методу с «плавающими» опорами, размеры которых в процессе итераций изменяются, но не превосходят заданных пределов. Это позволяет экономить оперативную память, предназначенную для хранения информации об обратной опорной матрице. 161
1. Постановка задачи. Рассмотрим линейную задачу с основными ограничениями-неравенствами с'я-^тах, b*^Ax^b*, d*^x^d*y (1) где с, х} d*, d* — n-векторы; Ь*, b* — m-векторы; А — mXft-матрица. В гл. 1 изложены различные варианты адаптивного алгоритма решения задачи (1). Здесь, как и в § 3, будем рассматривать случай, когда размеры опорной матрицы Лоп превышают заданные пределы, обусловленные объемом оперативной памяти ЭВМ. Пусть mL — заданный предел для размера одной опоры. С момента достижения опорой размера mi дальнейшее накопление опоры на итерациях адаптивного алгоритма будем вести с помощью двух рабочих матриц Аюп и Л2оп, связанных соотношением (2) § 3. Размеры матрицы Л20п при работе алгоритма могут увеличиваться или уменьшаться до нуля, а размеры матрицы Aion при этом могут только уменьшаться. Приведем вычислительную схему адаптивного алгоритма для задачи (1), в котором обратная опорная матрица представлена через рабочие матрицы по формуле (3) § 3. Стандартные операции адаптивного алгоритма без декомпозиции (см. § 1 гл. 1) являются фрагментами данного алгоритма. Поэтому в вычислительной схеме предусматривается выполнение первых итераций (при |/0п| ^яц) с отключением некоторых блоков. После достижения опорой размеров т^ подключаются все блоки алгоритма. Столбцы и строки матрицы Л(/2, /) генерируются по мере необходимости с помощью формулы (2) § 3 и матриц Л (/, /), Ау01п. 2. Алгоритм. Пусть задан начальный опорный план {Х, Л10п}, А юп = А (7юп| /ion), /ion CI /, J юп CZ /, I/юп I = = |/юп| =r^rrii. Если задан только план х, а опора Лоп неизвестна, то полагаем /юп=0, /юп = 0, it = r=0. В случае отсутствия плана предварительно применяется стартовая процедура, изложенная в § 6 гл. 1. 1. Вычислим и' (/1оп) = с' (/1оп) ЛГоп. Если г^щ, то перейдем к п. 6, иначе — к п. 2. 2. Построим вектор //(/гоп) =с/(^2оп)— u'(Ji0n)A(/юп, /гоп) • 3. Вычислим и' (/20п) = р* (/2оп) Л"1,,. 162
4. Найдем р'(/10П) =^/(/2оп)Л (/20п, /юп). 5. Вычислим и' (/1оп) = и' (/1оп) — р' (71оп) ЛГоп. 6. Положим р = 0; а (7) =w(I) =0. Следующие пп. 7, 8 выполним для /е/. 7. Положим о; (7) = ш (7) +Л (/, /) *,-. 8. ЕСЛИ /&/н, ТО ВЫЧИСЛИМ &j = u'(Itm)A(Ion, /) —Cj, /_/ = (d/ — л:7-) при Aj < 0, /j = (d/, — #,-) при А ¦ > 0, lj = = 0 при А7- = 0, положим р = р — Д7-^ и у (/) = У (/) + + Л(7, i)lj. 9. Вычислим Р = р + Wi/?i, /?i = 6* — о;* при щ > О, #i = h* — ауг при щ<0, i?! = 0 при и2 = 0, iE70п. 10. Проверим неравенство р^е. Да-*-п. 66, нет->- -*п. 11. 11. Вычислим I (71оп) = АТоп [со (/юп) — v (71оп)], причем компоненты со* вычисляются, как и число Ri в п. 9 без запоминания. Если г^ть то перейдем к п. 16, иначе — к п. 12. 12. ВЫЧИСЛИМ V (720п) = У (72оп) +Л (72on, Jion)l(Jlon)- 13. Вычислим / (72оп) = — Л^ [у (/20п) — © (/л>п)Ь где вместо вектора © в вычислении участвуют лишь его компоненты, определяемые аналогично числу R± в п. 9. 14. Вычислим v(I)=v (7) +Л (/, 72оп) /(/гоп) • 15. Вектор / (71оп) = ЛГоп [со (71оп) — у (71оп) J строится так же, как и в п. 11. 16. Вычислим v (7Н) = v (7Н) +А (7Н, /юп)/(7юп). 17. Найдем | (d* — Xj)/lj при /;->0, 0/о = min 0;, 0j = | (d*/ — */)/// при l} < 0, /eJon ( +oo при lj = 0. 18. Найдем (b* — Wi)/Vi при ^>0, (b*i — wt)/Vi при vt < 0, + oo при vt = 0. 19. Найдем 0 = min {1, 0io, 0*o}. 20. Если 0 = 0jo, то при /j0>0 полагаем & = —-1, иначе— k = \. Если 0 = 0,io, то при Vio<c0 полагаем & = —1, иначе — k=\. 21. Если 0 = 0io, то перейдем к п. 46. Если r^mu то перейдем к п. 40. Если /ое720п, то перейдем к п. 25. 163 0;о = min Sh @t te/u
22. При /0е/юп вычислим р(/аоп) = Люп (/о. 'юпМСош /2оп) и найдем \ри \ = max |/?7-|. Если \pjt \ = 0, то перей- J^J20Ti дем к п. 40. 23. Вычислим v' (/Яоп) = — р' (/2оп) Л-^. 24. ПОЛОЖИМ Л-1^/*, /zonH^on), Лоп=(Лоп\/о)и U /*, /Яоп= (Лоп\/*) U /о- Матрицу Л-!п пересчитаем по формуле (10) § 3. Меняем местами компоненты //о и Z/, в векторе l(Jon). Выполним операции пп. 25 — 30 для /е/яоп U /юп U 4, полагая а- + оо. 25. Если / е /юп. то полагаем /? (/2оп) = Л (/аоп, Лоп) АТоп (Лоп. /)-_Если /е/н. то —р(/аоп)=Л(/аош /)— ^ ('2ош Аоп) ^1опЛ (iion> /)• 26. Если /e/20n» то полагаем /?х = *^>п(/о> /)» иначе полагаем R± = kA~ln (jQt /аоп) р (/аоп). Если j(=Ilow то полагаем i?i = — /?i- 27. Положим * = и7, если /е/0п; t=u/(I0U)A(/оп, /)—¦?/> если /е/н. 28. Пусть ? = 0. Если / е /0ш то ПРИ #i > 0 и ^ ^ &/ или при ^<0 и Wj^b*j полагаем a=kR1, о = 0, **=/. Если /Е=/н, то при i?i>0 и Xj^d^j или при ^<0 и я7- ^ d/ полагаем а = kRly а = 0, /# = /. 29. Пусть tRi<.0. Если — tjRi<ia, то полагаем сг = = —t/Ru /* = / при /е/н или *"* = / при /<=/0п, a = kRi. 30. Если / е= /ш то полагаем / = d/ — #7- при t < 0, / = d*y — я7 при t > 0, / = 0 при ? = 0. Вычислим #/ = = *7 + 0/. 31. Вычислим опорные компоненты плана я(/0п) = = ^(/оп)+в/(/ОП). 32. Проверим неравенство (1—в)(3^е. Да->-к п. 66, нет -> к п. 33. 33. Пусть о = Oj*. Вычислим р (7гоп) = Л (70П, /*) — — Л (/аоп, ЛопМГоп Л Лол. /*)'. »(Лоп) = ^jX/aon). Пересчитаем матрицу Ajoln^[E+(eJ0 — v(J2ou))efJv(j0)]A-ln и, полагая /2011 = (ЛопМо) U /*> it = it + 1, перейдем к п. 1. 34. Если а=0г*, 1к^/2оп1 перейдем к п. 38. 164
35. ^сли a = aimf ** e Лош вычислим /? (/2on) = A (72on, Лоп) Люп (У1оп, Q. Найдем /?х = | pCx \ = max \pt\. 36. Вычислим v (/20п) = — ^2опР (Лоп) и заменим стол- беЦ В fen : fen (Лош У = » (Лоп)- 37. Вычислим p(Ilou) = A(i*> ЛопМГот пересчитаем матрицу ЛГоп : АТои = [? — eiAP(Iion) —*иУ/Р (**)]• Положим Аоп — (Аоп\ **) U *х» Лоп ^ (Лоп\ *х) U **• 38. Пересчитаем матрицу A-lu=Aj0ln(J20n\jdt /aonV*)— —Л2оп(Лоп\/о» **) ^2оп(/о» ЛопХ^/^сшОо»^). 39. ПОЛОЖИМ /20п = Лоп\'*> Лоп = Лоп\/э, Г=Г— 1, tf = tf+l и перейдем к п. 1. Операции пп. 41, 42 выполним для /е/н U Лот вектор z(Jn U Лоп) вычислим по формуле (15) § 1 гл. 1. 40. Вычислим и' (/1оп) = с' (/1оп) ЛГоп- Положим а = 41. Если /G/юш то полагаем t = uh Rx = kATon (/о, /)> если / G /н, то полагаем * = и' (/1оп) Л (/1оп, /) — cjt R± = = &ЛГоп(/0> hon)A(I10Uy /). 42. Выполним пп. 28—30 данного алгоритма. 43. Выполним пп. 31, 32. 44. Если о = а^у то пересчитаем матрицу ЛГоп = = Л1оп (Аоп\ /о> Лоп\ **) Л1оп (Лоп \ /о» **) Л1оп С/ог Лоп\**)№п(/о. '*) ^ ПОЛОЖИВ Лоп=Лоп\/о, Лоп = = ЛоП\**» tf = tf+l, r=r— 1, перейдем к п. 1. 45. Если а^ог/^ то пересчитаем матрицу ЛГоп = = [Е+ (е}о — р (/1оп)) e/e/p(/o)]^i№raep(/lon)=4roU (Лош /*), и, полагая ЛоП=(Лоп\/о) U /*, it = it+ 1, перейдем к п. 1. 46. Пусть в = вг-0. Следуя пп. 53—55, вычислим z (Л U Лоп U Лоп) = # {А (*о> Л) — ^ (*0> Лоп) ^2оп^ (Лош Л)» — <<4 (Г0, /юп) "Г Л (*0, «/гоп) ^2оп^ (Лоп» Лоп)» ^ (*0» Лоп)^Гоп}- При г^шг вектор г' (Ун (J /оп) строится по формуле (14) § 1 гл. 1. Полагаем а= + оо. 165
47. Пусть г^т^ Вычислим р (/1оп) = А (*0, /1оп)Люп. Для / ее /юп U /н выполним пп. 48, 49. 48. Если /е/юп, то полагаем t = tij, Ri = —kpf, если /е/н, то полагаем t = u'(IiolI)A(IiojI, j)—ch Ri = A(i0i j) — —Р(/юп)Л(/10п, /). 49. Выполним пп. 28—30 (с каждым /^/юп11/н). 50. Выполним пп. 31, 32. 51. Если а = а/„, то вычислим а(/юп) = ЛГопЛ (/1оп, /*) и пересчитаем матрицу ,-1 _ f АТоп + V (Jlon) Р' (U/«. - О (Лоп)/« 1 10П~1 -Р'(/юп)/«, I/O I (а запоминается при вычислении а в пп. 28, 29). 52. Положим r = r+l, iY = tY+l, /юп=/юп U/*» /юп= = /юп U h и перейдем к п. 1. 53. Пусть г > mim Вычислим у(/20п) = [A(io, /гоп) — — Л(?0, Лоп) ^ГоИ (7юш ЛопЛАроп- Пункты 54 — 56 выполним ДЛЯ / е /2оп U /ion U /Н- 54. Если /е/гоп, то полагаем tf = Mj, RiL = —kvj; если /е/юп, то полагаем * = и,, /?i = &[t/(/2onM (/20п, /юп) — — Л (/0, «/юп)] ^lon («/юп» /)• 55. Если / е /н, то ? = ^'(/юп)Л(71оп, j)—Cj, Ri = = * И (*о. /) — ^ (^ Лоп) ^ГопЛ (/юп, /) — V (720п) (Л (/20п, /) — Л (/20п, /10п) Люп Л (/10п, /))]. 56. Выполним пп. 28—30. 57. Выполним пп. 31, 32. 58. Пусть o=Gj^ Вычислим p{J2o^=^L[A{I2i0a, /#) — — Л(/20п, Лоп)]^ГопЛ(/юш /*)] и пересчитаем матрицу ~ _ | A-ln + Р (Лоп) О' (/2оп)М — Р (Лоп)/« 1 20П "1 -^(/2оп)М 1/а I 59. Положим /2(Ш = /гоп U /*, /гоп =/гоп U *<ъ г=г+1, i7 = iY+l и перейдем к п. 1. 60. Если а = с>г* и г^ть то перейдем к п. 65. 61. Пусть а=(?г*, r>rrii. Если i*e/2on, то пересчитаем матрицу 2-^Л-и^ — ^И/20п)— *0'М**)] и, полагая /20П = (/20П\ **) U h, it = it+l, перейдем к п. 1. 62. Выполним п. 35. Если 7?i = 0, то перейдем к п. 65, иначе — к п. 63. 63. Выполним пп. 36, 37. 166
64. Вычислим v(/2(Ш) = И(*о> J2ou)—A(i0, Jiou)AiouA(Jlon, ^оЛ^Гоп и пересчитаем Л-!п = А?п [Е — eim (v (/2оп) — — **.)'/» (**)]¦ Положим I2on= (720nV'*) U i0, it = it + 1 и перейдем к п. 1. 65. Вычислим р (/1оп) = A (t0, /1оп) Лй)п и пересчитаем матрицу ЛГоп = ЛГоп [? — *;* (/> (Аоп) — «О'IP (**)]¦ Положим /1оп = (/юп\**) U Чу it = it+ 1 и перейдем к п. 1. 66. Выдача результатов. Настоящий алгоритм реализован на языке АЛГОЛ- ГДР (МС «ДУБНА»). Стандартные операции алгоритма, например, формулы пересчета матриц А^п и Л^п, реализованы в виде процедур с параметрами, значения которых настраивают процедуру на пересчет заданной матрицы. Аналогично оформлены и другие мало различающиеся фрагменты алгоритма (всего 23 процедуры). Данные задачи (1) хранятся в компактной форме, без нулевых элементов. Программа не использует дополнительных n-мерных векторов (их компоненты при необходимости вычисляются вновь). Вводятся только пять m-мерных массивов, участвующих и в описании алгоритма. В сравнении с вариантом адаптивного алгоритма без декомпозиции опоры машинная программа, реализующая данный алгоритм, занимает дополнительно около 1200 слов. Эти затраты окупаются экономией памяти для обратной опорной матрицы. Например, если размер опоры при решении задачи достигает 200, то для полной матрицы потребуется 40 000 слов, а для матрицы с декомпозицией — 20 000. Поэтому в изложенном алгоритме исключается обмен с внешней памятью при решении задач средних размеров. 3. Численные эксперименты. Для сравнения скорости работы двух алгоритмов — без декомпозиции и с декомпозицией — были проведены расчеты серии задач разных размеров. Задачи, как и в эксперименте 3 § 1 гл. 1, генерировались с помощью процедур GENER и VEK. Каждая из сгенерированных задач вначале была решена при mi = m, и, следовательно, блоки программы, выполняющие счет с помощью двух рабочих матриц AyJn и Л~!п, были отключены, а работал вариант адаптивного алгоритма, описанный в § 2 гл. 1. Затем вновь генерирова- 167
лись эти же задачи и каждая решалась изложенным здесь алгоритмом при ти значение которого задавалось равным примерно половине максимального размера опоры. При отсутствии обмена с внешней памятью время решения задачи по алгоритму с декомпозицией опоры было несколько больше. При наличии обмена, который для задач небольших размеров был организован условно, алгоритм с декомпозицией опоры работал значительно быстрее, причем этот эффект растет с увеличением размеров задачи. Результаты эксперимента приведены в табл. 28, где номера задач 1, 2, 3, 4, 5 совпадают с числом ненулевых элементов в каждом столбце матрицы. Табл. 28 тХп 20x30 30x45 70x100 100x150 /tt! 6 10 23 33 Число итераций 13 11 16 19 18 17 21 34 36 34 43 58 65 67 84 62 86 97 116 132 Максимальный размер опоры 12 11 12 12 13 17 19 21 21 17 43 42 46 45 45 59 71 65 67 63 \_ Время решения, с без декомпозиции 4.0 3.5 5.8 6.7 7.7 9.4 14.6 29.8 30.5 27.1 144 226 282 284 415 491 825 1282 1626 1821 с декомпозицией 3.6 3.2 5.4 6.2 7.1 8.2 13.1 24.9 26.2 23.9 124 185 245 247 365 470 750 942 1216 1371 168
§ 5. Прикладные задачи Для иллюстрации адаптивного метода приведем решение двух небольших реальных задач прикладного характера. В процессе решения специфика задач не учитывалась, т. е. матрицы условий их математических моделей рассматривались как общие. 1. Задача о выборе способа добычи угля. В Кузнецком угольном бассейне работает несколько угледобывающих предприятий, каждое из которых может вести добычу угля различными способами. Множество способов добычи i го предприятия обозначим через Кг. Введем переменные Kik, принимающие значения либо 1, если на i-м предприятии используется k-и способ, либо 0, если этот способ не используется. Количество угля марки s, добываемого i-м предприятием по k-uy способу, обозначим через а]. Пусть zs — количество угля марки s, которое добывается во всем бассейне. Будем считать, что модель добычи угля описывается следующими соотношениями баланса: 2 hk=h i=l, 2, ..., 33 ^^ . 33; U Kt=K, IК |=56 — число переменных А* ; 2*%\~ 1 1, k —Zi=0 (рядовой уголь); ^afkhk—z2=0 (сортовой уголь); i,k Za ut^tf. — гз = 0 (отсев); гъ — z4 = 0 (пылевое сжигание); i, k z2 — z5 = 0 (слоевое сжигание); 2а4Чь—Z(i=® (общая до- быча). Кроме того, учитываются потребности угля: <г4^85 (для пылевого сжигания); г5,^33 (для слоевого сжигания). Задача выбора каждым i-м предприятием А-го способа добычи угля, при котором минимальны суммарные приведенные затраты, сводится к минимизации функции 2j ciMk -* ™п ПРИ выполнении перечисленных условий. i, к Балансовые соотношения объединим в матрицу А> в которой 41 строка, но лишь в строках с номерами 34—36, 39 находятся элементы ац, отличные от 1. Переменные объединим в вектор х = {xj = А* , /= 1,56, Xj = 169
= 2j_56, / = 57,62}. Полученная матрица условий имеет специальную структуру, но рассматривалась как общая редкозаполненная матрица. Для применения процедуры, реализующей адаптивный алгоритм в интервальной задаче, векторы &*, &*, d%, d* задавались следующими: b*t = 1 — Ю-4, 6* = = 1 + Ю-4, i = Т^З, b.t = — Ю-4, bt = Ю-4, i = 34ДГ, 6,40 = 85, 6*4i=33, 640 = 641 = Ю8; d*} = 0, d] = 108, /-1,62. Первое приближение: х = 0. С помощью стартовой процедуры строилась расширенная задача, в которой дополнительные коэффициенты целевой функции полагались равными —107 (у остальных коэффициентов менялись знаки, так как процедура выполняет максимизацию). Критерий оптимальности в расширенной задаче был выполнен за 46 итераций, на что потребовалось 35 с. Решение этой задачи симплекс-методом было получено за 50 итераций (36 с). На полученном решении не все балансовые соотношения выполняются, что объясняется дефицитом угля некоторых марок. Первые 33 условия на Xik выполнены. Исходные данные и результаты вычислений приведены в табл. 29. 2. Задача оптимизации генерирующей структуры объединенной электроэнергетической системы (ОЭЭС). В математической модели ОЭЭС учитывались следующие ограничения: баланс мощности и энергии по зоне — 2 2 ®g*Xk >ygn> 8=h 2, ..., 6, /i=l, 2, ..., N\ балансы мощности и энергии по энергоузлу — 2 2 ®1*Хк + 2 (bixPi — xw) > У и p<=Ln, l<=Ln, n= 1, 2, ..., AT; 2 2 °°гЛ + 2 (aPixPi — *ip) >Уг> p<=Ln, l^Ln, n= 1, 2, . .., N\ связь потоков мощности и энергии по внутрисистемным ЛЭП с пропускной способностью этих ЛЭП — 170
Табл. 29 П 1 | 1 ; 1 2.97; 35 2.44; 36 6 ; 39 cj: 0 ХГ l /: 7 l ; 7 0.21; 35 0.51; 36 0.8 ; 39 cj: 0 *? = 1 /: 13 1 ; 13 0.71; 34 0.4 ; 35 0.67; 36 0.21; 39 с,: 0 xj: 1 /: 19 1 ; 16 4.1; 34 4.6; 39 cf: 25.9 *9: 0 2 l ; 1.96; 5.6 ; 4.64; 14.2 ; 0 1 2 34 35 36 39 8 1 ; 2.72 3.1 ( 8 34 39 ) L 14 1 1 5.4 2 22 1 . И ; 35 ; 36 ; 39 .5 20 1 0.43 0.72 1.4 20 ; 17 ; 35 ; 36 ; 39 ).6 1 3 1 ; 3.76; 2.19; 8 ; 3 35 36 39 0 1 9 l ; 9 1.21; 34 0.47; 35 0.83; 36 2.9 ; 39 0 1 15 1 1 0.38 2 ; и ; 35 ; 36 ; 39 18.6 0 21 l ; 18 1.68; 35 1.7 ; 36 3.64; 39 49.4 0 4 l ; 4 0.77; 34 2.13; 35 1.83; 36 5.5 ; 39 0 1 10 1 ; 10 0.99; 34 1.3 ; 39 0 1 16 1 ¦ 0.8 0.88 2 15 35 36 39 15.4 1 22 1 2.8 2.78 6 , 18 , 35 ; 36 ; 39 69.4 1 5 l ; 5 1 0.57; 34 0.7 ; 39 0 1 11 l ; и 1.67; 34 1.73; 35 4.06; 36 8.85; 39 0 1 17 1 ; 15 0.64; 35 | 0.7 ; 36 1.6 ; 39 11.7 0 23 l ; 18 2.22; 34 1.14; 35 1.22; 36 4.7 ; 39 37.7 0 6 1 ; 0.35; 0.57; 0.87; 2 ; 6 34 35 36 39 0 1 12 1 ; 12 1.3 ; 35 2.62; 36 4.75; 39 0 1 18 1 ; 16 3.65 2.33 7 ; 35 ; 36 ; 39 61.5 1 24 l ; 19 1.54 1.01 2.8 ; 35 ; 36 ; 39 29.7 1 171
Продолжение табл. 29 j: 25 1 ; 19 0.29; 34 1.14; 35 0.98; 36 2.55; 39 cf 24.5 *9: 0 /: 31 1 ; 22 0.22; 35 2.21; 36 3.6 ; 39 cf 46.8 х°: 1 j: 37 1; 26 0.38; 34 0.4 ; 39 cf 2.8 ХЬ ° /: 43 1 ; 29 1.3; 35 1.4; 36 4 ; 39 cf 54.4 *?: 1 26 1 ; 20 2.38; 35 0.34; 36 0.8 ; 39 18.7 0 32 1 ; 22 . 0.67; 35 2.04; 36 3.6 ; 39 46.6 0 38 1 ; 26 1.41; 34 1.5 ; 39 12.9 1 44 1 ; 30 1.37; 34 2 ; 39 26.9 0 27 1 ; 20 0.62; 35 0.55; 36 1.3 ; 39 25.4 1 33 1 ; 23 0.18; 35 0.33; 36 0.51; 39 10.5 1 39 1 ; 27 1.95; 34 2.2 ; 39 15.1 1 45 1 0.65 0.75 2 30 35 36 39 29.3 1 28 1 ; 21 1.09; 35 1.42; 36 2.95; 39 69.2 1 34 1 ; 24 1.36; 35 3.65; 36 6 ; 39 38.1 1 40 1 ; 28 1.75; 34 2.5 ; 39 30.5 0 46 1 ; 31 5.09; 34 6 ; 39 97.3 0 29 1 ; 21 0.54; 35 0.55; 36 1.3 ; 39 25.9 0 35 1 ; 25 0.26; 35 0.52; 36 0.9 ; 39 6.5 0 41 1 ; 28 0.82; 35 0.98; 36 0.25; 39 33.7 1 47 1 2.54 2.47 6 31 35 36 39 108.4 | 1 30 1 ; 21 1.09; 35 1.42; 36 2.95; 39 54.3 0 36 1 ; 25 0.46; 35 0.93; 36 1.6 ; 39 14.1 1 42 1 ; 29 2.62; 34 4 ; 39 49.2 0 48 1 ; 32 3.35; 34 4 ; 39 67.7 0
Продолжение табл. 29 j: 49 1 1.86 1.43 4 cj: *?• 32 35 36 39 Г4.3 1 j: 55 1; 32 cj: 0 *°: 0 50 1 ; 33 0.16; 35 0.37; 36 0.6 ; 39 12.2 1 56 1; 33 0 0 51 l; 28 0 0 57 —1; 34 1; 37 0 19.89 58 -1; 35 1; 38 0 28.89 52 1; 29 0 0 59 —l; 36 1; 37 0 32.09 53 1; 30 0 0 60 —1; 37 1; 40 0 51.98 54 1; 31 0 0 61 -1; 38 1; 41 0 28.88 62 -1; 39 0 92.76 Примечание. В каждой клетке без имени помещены два числа: первое — значение элемента а. •, второе — номер строки i. Остальные элементы матрицы А равны нулю, / — номер столбца, с- — коэффициенты целевой функции, х9 — компоненты оптимального плана. "=1,2 N; Xp\-\-Xip ilpiZpi^ ftplHph P^Ln, lEE-Lni n=l,2,...,N; балансы топлива и дефицитного оборудования — 2 2 Ь\Ч = ytn\t=l,2,...,T,n = \,2,...,N; # = 2*С' t=l,2,...,T,n=l,2,...,N; m баланс топлива по месторождениям и ограничения на их производительность, пропускную способность транспорта — 173
Утп < &тГ1, (m, П, t) e K\ ограничения на мощность и режимы работы электростанций — 2 *л<#в. *bS^, ?E6n, я = 1, 2, ..., N. Целевая функция имеет вид 2****+2 2 2^^+222ol+ /г п P&Ln l&Ln t т п + 22 с\х\ ~*min» t f где ск = ск + ^с*п1Ь*к. t Исходные данные и результаты вычислений приведены в табл. 30. Порядок расположения элементов такой же, как и в табл. 29. Кроме того, учитывались следующие ограничения. Нижние границы плана: d*8=0,31; d*5Q = = 0,06; d*82=17,8; d*83=10,3; d*85=H,l; d*86 = 3,2; d*87 = = 7,8; d*88 = 2,4; остальные компоненты d* равны 0. Верхние границы плана: d* = 1,58; d* = 1,58; d*5 = 0,29; d*6 = = 0,29; d*82 = 19,8; d8*3 = 12,3; d*4 = 0,8; d*5 = 12,7; d*6 = = 4,8; d*87 = 9,4; d*8 = 4; d*9 = 0,8; d*0 = 0,8; остальные компоненты d* равны oo (106). Векторы ограничений ft* = = {5,89; 2,9; 22,45; 88,27; 9,31; 17,36; 68,56; 10,4; 44,49; 9,88; 43,29; 1,8—10~4; 2—10-4;1,2—10-4;0,6—10~4; 1,2—10~4; 0,92—Ю-4; — 105; ...; — 105}; 6* = {105; 105; ...; 105; b\2= 1,8+ 10-4; 2+ 10-4; 1,2+ 10~4; 0,6+ 10~4; 1,2 + + 10-4; 0,92 + 10-4; b*l8 = 0, ..., b*so = 0}. Первое приближение: x=d*. С помощью стартовой процедуры сформулирована расширенная задача, в процессе решения которой вначале был найден план задачи, а затем — оптимальный план. Задача решалась двумя методами: опорным с симплексной нормировкой и методом § 1. Оптимальный план в первом случае получен за 86 итераций (52 с), во втором — за 66 итераций (40 с). § 6. Адаптивный метод решения динамической транспортной задачи Одним из современных направлений связанных с обобщением классических задач линейного программи- 174
Табл. 30 /: 1 0.9 2.3 0.1 1 3 1 1.02 3 4 5 6 7 12 22 cj: 0 *°: 0 /: 7 l; l i; 6 cj: 0 xf. 1.58 /: 13 0.9 ; 3 2.3 ; 4 0.1 ; 5 l ; 6 3 ; 7 1.42; 22 1 ; 27 cj: 19 *y°: 0 2 0.9 ; 3 3.3 ; 4 0.1 ; 5 1 ; 6 4 ; 7 1 ; 12 1.33; 22 0 1.8 8 1 ; 2 l ; 7 0.45; 23 0 1.58 14 0.9 ; 3 3.3 ; 4 0.1 ; 5 l ; 6 4 ; 7 1.87; 22 1 ; 27 19 0 3 0.7 2.9 0.3 1 5 1 1.6 . з , 4 ; 5 ; 6 ; 7 , 12 , 22 0 0 9 1 0.2 1 0.2 0.1; 1 ¦ 1 2 6 7 22 24 16.15 0.702 15 0.9 ; 3 2.3 ; 4 0.1 ; 5 l ; 6 3 ; 7 1.46; 23 1 ; 28 22.9 1.256 4 0.3 1.1 0.7 1 6 1 1.69 ; з ; 4 ; 5 ; 6 ; 7 ; 12 ; 22 0 0 10 1 ; 1 ; 1 ; 1 ; 0.5; 1 ; 1 2 6 7 22 24 16.15 0 16 0.9 3.3 0.1 1 4 1.93 1 ; з ; 4 ; 5 ; 6 ; 7 ' 23 p 28 22.9 0 5 0.85 1.95 0.15 1 3 1 1.1 3 4 5 6 7 13 23 0 0 11 1 0.2 1 6.71 —1 1 —0.09 1 ; 1 ; 2 ; з ; 4 ; 5 ; 6 ; 7 ; 26 28.56 3.035 17 0.6 ; 2.7 ; 0.4 ; 1 ; 5.5 ; 1.72; 1 ; 3 4 5 6 7 22 29 27.15 0 6 0.7 2.9 0.3 l 5 1 1.72 ; 3 ; 4 ; 5 ; 6 ; 7 ; 13 ; 23 0 0 12 1 1 1 5.6 —1 1 —0.4 1 ; , l ; 2 , 3 , 4 5 6 7 26 28.56 0.282 18 0.3 ; 1.7 ; 0.7 ; 1 ; 6.6 ; 2.04; 1 ; 3 4 5 6 7 22 29 27.15 0 175
Продолжение табл. 30 /: 19 1 1 7 2.16 1 5 6 7 22 29 cj: 27.15 *у°: 0 /: 25 1; 5 1; 6 7; 7 1; 25 cj: 55.6 *9: 0 /: 31 0.7; 3 2.9; 4 0.3; 5 1 ; 8 5 ; 9 1 ; 15 1.7; 22 Cj: 2.55 х°: 0 1 20 0.6 ; 3 2.7 ; 4 0.4 ; 5 1 ; 6 5.5 ; 7 1.76; 23 1 ; 30 32.19 0 26 0.9 ; 3 2.3 ; 4 0.1 ; 5 l ; 8 3 ; 9 1 1 ; 14 1.02; 22 1.53 0 32 1 l ; l 0.2; 2 1 ; 8 0.2; 9 0.1; 22 1 ; 24 16.3 0 21 0.2 1 0.8 1 6.6 2.11 1 ; з ; 4 ; 5 ; 6 ; 7 ; 23 ; 30 32.19 0 27 0.9 3.3 0.1 1 4 1 1.33 ; з ; 4 ; 5 ; 8 ; 9 ; и ; 22 2 0 33 1 ; 1 ; 1 ; 1 ; 0.5; 1 ; 1 2 8 9 22 24 16.9 0 1 22 1 7 2.24 1 ; 6 ; 7 ; 23 ; 30 32.19 0 28 0.7; 3 2.9; 4 0.3; 5 l ; 8 5 ; 9 1 ; 14 1.6; 22 2.4 1.2 34 1 0.2 1 6.71 —1 1 —0.09 1 ¦ ' l\ 2 3 4 5 8 9 26 28.56 1 0 1 23 0.3; 0.6; 0.7; 1 ; 5.5; 1 ; 3 4 5 6 7 25 53.2 0 29 0.3 1.1 0.7 1 6 1 1.89 ; з ; 4 ; 5 ; 8 ; 9 ; 14 ; 22 0 35 1 1 1 5.6 —1 1 —0.4 1 28.1 0 ; 1 ; 2 ' 3 4 5 8 9 26 56 24 0.2; 1.3; 0.8; 1 ; 6.9; 1 ; 3 4 5 6 7 25 55.37 6.704 30 0.9 ; 3 2.3 ; 4 0.1 ; 5 l ; 8 3 ; 9 1 ; 15 1.07; 22 1.61 0.6 36 0.9 2.3 0.1 1 3 1.42 1 ; з ; 4 ; 5 ; 8 ; 9 ; 22 ; 27 21.13 0.94 176
Продолжение табл. 30 /: 37 0.9 3.3 0.1 1 4 1.87 1 ; з ; 4 ; 5 ; 8 ; 9 ; 22 , 27 у: 21.81 *°: 0 /: 43 0.6 2.7 0.4 1 5.5 1.76 1 3 4 5 8 9 23 30 cf 33.95 *у°: 0 /: 49 0.9 ¦ 2.3 ; 0.1 1 ¦ 3 1 1.02- 3 4 5 10 11 16 22 с/: 1.02 *?: 0.852 38 0.9 2.3 0.1 1 3 1.46 1 ; з ; 4 ; 5 ; 8 ; 9 ; 23 ; 28 24.36 0 44 0.2 1 0.8 1 6.6 2.11 1 3 4 5 8 9 23 30 34.3 0 50 0.9 ¦ 3.3 0.1 1 4 1 1.33 3 4 5 10 11 16 22 1.33 0 39 0.9 3.3 0.1 1 4 1.93 1 3 4 5 8 9 23 28 24.83 0 45 1 1 7 2.24 1 , 5 8 9 23 30 34.43 0 51 0.7; 3 2.9; 4 0.3; 5 1 ; 10 5 ; 11 1 ; 16 1.6; 22 1.6 0.348 40 0.6 2.6 0.4 1 5.5 1.72 1 ; 3 ; 4 ; 5 ; 8 ; 9 ; 22 ; 29 29.73 0 46 0.3; 0.6; 0.7; 1 ; 5.5; 1 ; 3 4 5 8 9 25 53.2 0 52 0.3 1.1 0.7 1 6 1 1.89 ; 3 ; 4 ; 5 ; Ю ; И ; 16 ; 22 1.89 0 41 0.3 1.7 0.7 1 6.6 2.04 1 ; з \ 4 ; 5 ; 8 ; 9 ; 22 ; 29 30.21 0 47 0.2; 1.3; 0.8; 1 ; 6.9; 1 ; 3 4 5 8 9 25 55.37 0.171 53 0.85 1.95 0.15 1 3 1 1.1 ; з ; 4 ; 5 ; ю ; и ; 17 ; 23 0 0 42 1 1 7 2.16 1 ; 5 ; 8 ; 9 ; 22 ; 29 30.39 0 48 1; 1; 7; 1; 5 8 9 25 55.6 0 54 0.7 2.9 0.3 1 5 1 1.72 ; з ; 4 ; 5 ; 10 ; и ; 17 ; 23 0 0.92 177
Продолжение табл. 30 j: 55 l; l 1; 10 cj: 0 *9: 0.29 /: 61 0.9 2.3 0.1 1 3 1.46 1 ; 3 ; 4 ; 5 ; 10 , H ; 23 , 28 су. 22.9 xf: 0.067 /: 67 0.2 1 0.8 1 6.6 2.11 1 3 4 5 10 11 23 30 cj: 32.19 *?: 0.202 56 1 1 i 0.45 ; 2 ; и ; 23 0 0.29 62 0.9 3.3 0.1 1 4 1.93 1 3 4 5 10 11 23 28 22.9 1.077 68 1 1 7 2.24 1 5 10 11 23 30 32.19 0 57 1 ; 0.2; 1 ; 0.2; 0.1; 1 ; 1 2 10 11 22 24 16.25 0 63 0.6 2.7 0.4 1 5.5 1.72 1. ; 3 ; 4 ; 5 ; io ; И ; 22 ; 29 28.87 0 69 0.3; 0.6; 0.7; 1 ; 5.5; 1 ; 3 4 5 10 11 25 53.2 0 58 1 ; 1 ; 1 ; 1 ; 0.5; 1 ; 1 2 10 11 22 24 16.65 0 64 0.3 1.7 0.7 1 6.6 2.04 1 ; з ; 4 ; 5 ; io ; и ; 22 ; 29 29.19 0 70 0.2; 1.3; 0.8; 1 ; 6.9; 1 ; 3 4 5 10 11 25 55.37 5.211 59 0.9 2.3 0.1 1 3 1.42 1 3 4 5 10 11 22 27 20.42 0 65 1 1 7 2.16 1 5 10 11 22 29 29.31 0 71 l; 5 1; 10 7; 11 1; 25 55.6 0 60 0.9 3.3 0.1 1 4 1.87 1 , 3 4 ; 5 , 10 , и ; 22 , 27 20.87 0 66 0.6 2.7 0.4 1 5.5 1.76 1 3 4 5 10 11 23 30 32.19 0 72 —l ; 6 0.935; 8 1 ; 18 0.01 0 178
Продолжение табл. 30 /: 73 0.935; 6 —1 ; 8 1 ; 18 cj: 0.01 *°: 0 /: 79 —1 ; 9 0.95; 11 1 ; 21 су: 0.01 *°: 0 /: 85 —1; 25 с/: 11.76 *?: 12.086 74 —1 ; 7 0.935; 9 1 ; 19 0.01 0 80 0.95; 9 —1 ; 11 1 ; 21 0.01 7.692 86 —1; 26 0 3.318 75 0.935; 7 —1 ; 9 1 ; 19 0.01 0 81 —1; 20 —8; 21 2.5 0.961 87 -1; 27 0 9.4 76 —1; 18 —8; 19 3.9 0 82 —1; 22 22.72 19.8 88 —1; 28 0 2.4 77 —1 ; 8 0.95; 10 1 ; 20 0.01 0.961 83 —1; 23 19.2 10.3 89 —1; 29 0 0 78 0.95; 8 —1 ; 10 1 ; 20 0.01 0 84 —1; 24 6.29 0.702 90 —1; 30 0 0.202 рования, является переход к динамическим постановкам. Многоэтапность, свойственная реальным ситуациям выбора решений, существенно усложняет математические модели задач. «Наивное» перенесение на новый круг задач методов решения статических задач бесперспективно. В связи с этим возникает проблема реализации классических принципов с максимальным учетом динамичности ограничений. Эта задача в данном параграфе решается для оптимизации транспортных потоков. 1. Постановка задачи. На нестационарной сети S(t) = = {/, U(t)}, изменяющей свои параметры в дискретные моменты времени /еГ={0, 1, 2, ,.., U— 1}, рассмотрим следующую динамическую транспортную задачу: 2 (2 си (t) хи (t) + ^ ct (t + 1) xt (t + 1)) ->minf 179
xt (t+l) = xt (t) - 2*y (0 +^xn (t) + at (0, /e/t+(t/(0) /e/f «/(*)) (1) 0<^(/+1)^Л(/+1),^(0)=0,/е/; 0<^-(0<^(0. (i,j)zEU(t),te=T. Здесь Хг(0 —запас некоторого продукта в узле i в момент /; ai(t) —интенсивность узла i в момент t(cii(t) — объем производства, если аг(/)>0, аг(/)—объем по- требления, если а*(0<0); wc(t)= — ^хи (t) + ^хп-(f)— i&fmt)) i<==i~r{U(t)) объем перемещенного продукта в узел i (w%{t) —объем завезенного продукта, если Wi(t)>0, Wi(t) —объем вывезенного продукта, если шг(^)<0); Xij(t) —объем перевозки из узла i в узел /; Cij(t)— стоимость перевозки единицы продукта из i в /; Ci(t) —стоимость хранения единицы продукта в узле i\ dij(t) — пропускная способность коммуникации !->•/; di(t)—объем склада в узле i; It(U) = {jZEl:(i, })е=Ц}, /r(t/) = {/e/:(/, i)<=U}. Динамическую транспортную задачу (1) представим в виде задачи оптимального управления J(u) = 2ic'u(t)u(t)+c'x(t+l)x(t+\)-+mm, x(i+l)=x(t)-B(t)u(t)+a(t), (2) *(0) = 0, u(t)e=V(t) = {и : 0^u^du(t)}y 00(<+1)<йх(<+1),<еГ, где B{t) = {b4(t)y (i, j) €=?/(*)} есть |/| X | U(t) I-матрица, задаваемая сетью S(t) = {I> U(t)}; b^(t) —1/|-вектор с компонентами b^(t) = 0t если кф1, кф\, bV (t) = 1, by (t) = — 1; x (t) = {xt (t), i e= /} — вектор состояния системы, и (t) = {Uij (t)y (i, j) Gf/ (t)} — вектор управления dx(t) = {di(0, *e/>, ca(t) = {cu(t), (i, /)el/(0b cx{t) = {ct{t), «E/}, da(t) = {dt,(t), (i, /)e?/(0>- Управление и(-) = {и(0, ^^} называется допустимым, если вдоль него выполняются все ограничения задачи (2). Управление иг{-) назовем е-оптимальным, если J (и)— J (и0) ^е, где и°(-) —оптимальное управление. 2. Опора. Критерий опорности. Совокупность множеств Q(m={{Ioii(t+l)9 Uon(t)}, t^T} назовем опорой задачи (2), если система 180
x(t+l) = x(t)—B(t)u(t),x(0) =0, xt{t+l) = 0, iEN(('+l), (3) MO =0, (*, /)ef/(0\f/*(0, *e=7\ при /.U+l)=/on(*+l), ?/.(*) =Ц>п(0. ^Г, (4) имеет только тривиальное решение i/ij(?)=0, (i, j)^ s?/On(0» *еГ, но имеет нетривиальное решение и^(?)=?0, МО =/on(0i ' = Ui, *=^*о, /.(^о) =/on(fo) U to, U*(t)=Uon(t),t€=T9 & где ioe/on(?o), ^o — любой момент из {1, . .., ti}. Приведем алгоритмический критерий опорности. Пусть Qon={{/on(^+l), Uon(t)}, t^T} — опора задачи (2). Для ^=0 положим ?/оп(0) = ?/оп(0). Из определения опоры следует, что сеть 5ОП(0) = {/, С/оп(0)} не содержит циклов, так как в противном случае система (3), (4) имела бы нетривиальное решение. Пусть SJn(0) = {/*(0), t/*n(0)}f *= 1, /7(0),-компоненты связности сети Son(0). Покажем, что /*(0) [\10п(1)ф Ф0, k= 1, /? (0). Действительно, предположение об обратном ведет к существованию такого узла гое/Ло(0), /*°(0) П^оп(1) = 0» что система (3), (5) при t0= 1 имеет только тривиальное решение, что противоречит определению опоры. Следовательно, при каждом k, k= 1, р(0), в множестве Ik (0) найдется хотя бы один узел из /оп (1). В множестве Ik(0) выделим любой узел i"a(1), принадлежащий /оп (1), и обозначим itn (1) = {tft (1К й = = ТГрЩЬ По построению, пара Q5i(0) = {/+ (1), Uou(0)} обладает свойством: [ сеть Son (t) = {/, Uou(t)} не содержит циклов; в каждой компоненте связности этой сети имеется ровно по одному узлу из множества /+п(^+1) ' ' ( при t = 0. Назовем такую пару Q?n (0) рабочей опорой в момент t= 0. Пусть построены рабочие опоры Q*n (t) = {/+ (f + 1), ?/оп(0} в моменты ? = 0, 1, ... , s(s<^—1), для кото-
рых выполняются свойства (6) в указанные моменты t. Построим рабочую опору для момента t = s + 1 • По построению, I+(s+l) = {ik(s+l),k=l, p(s)}, где ik(s+l)— любой узел из множества /* (s) fl 10п (s + 1), 5^п (s) = = {/ft(s), U^n(s)}—k-я компонента связности сети Sou(s), k = 1, p(s). Каждому узлу / e Ik (s) fl I^n (s + 1), где /on (s + 1) = /on (s + 1) \/on (s + 1), поставим в соответствие дугу (ik (s+ 1), /), k= 1, p(s). Объединение множества дуг Uou(s+l) с множеством U* (s+l) = {(lk(s+l)9 /), /e/*(s) f|/~ (s+ 1), й=1, p(s)} обозначим через Uou(s+ 1). Из определения опоры Qon следует, что в сети SQn(s + 1) = {/, f/on(s+l)} нет циклов ив каждой ее компоненте связности Son (s+ 1) = {Ik (s+ 1), f/*n (s+1)}, k = 1, /7 (s+ 1), имеются узлы из /on(s+2). В множестве /* (s + 1) выделим узел ik (s + 2) g /оп (s + 2) и обозначим /от (s + 2) = {^ (s + 2), & = 1, /?(s-f 1)}. Построенная опора Q* (s + 1) = {/+ (s + 2), *У0П (s + 1)} обладает свойством (6) при t = s + 1, т. е. является рабочей опорой в момент t = s + 1. Для рабочей опоры Q*n (f2 - 1) = {/+ ft), Uou (t, - 1)} в момент tx — 1 выполняется равенство /оП (^i) =/оп &)> ибо в противном случае система (3), (4) имела бы нетривиальное решение. Таким образом, по опоре Qon задачи (2) алгоритмически построены рабочие опоры Qon (0» t^T, Uon(0) = = */оп(0)» /obn(<i) = /0n(^i)- Верно и обратное утверждение: если для совокупности множеств {/оп(*+ 1)» ^оп(0}» t^T, (Iou(t+ l)cz/, U011(t)ciU (t)) описанный алгоритм строит рабочие опоры Qon(t) = {/on (t + 1), Uon(t)}J^ T f/on(0) = f/on(0)» /от (*i) = /on (*i) со свойствами (6), TO рассматриваемая совокупность является опорой задачи (2). Следовательно, справедлива Теорема 1 (первый критерий опорности). Совокупность множеств Qon = {{/оп(* + 1), U0Tl(t)}, t ^ Т} (/оп(^+1)с=/, Uou(t)c:U(t)) является опорой задачи (2) тогда и только тогда, когда описанный выше алгоритм выделяет из нее рабочие опоры Q§n(t)y t^T. При этом *7оп(0) = ?/оп(<>), /OT(/i) = /on(«- 182
Замечания. 1. Пусть имеются такие множества дуг U*(t) и узлов I*(t+\), что U*(t) не содержит циклов и в каждой компоненте сети {/, U-(t)} есть хотя бы один узел из I*(t-\-\). Пару {U(t), 7(* + i)}f7/(0<=tf*w. /7' +i)c/*c+1). \u(t)\+\7(t+i)i=\i\, удовлетворяющую свойствам (6), можно построить за счет удаления, во-первых, «лишних» узлов из /*(/+1): U(l)=U*(t), I(t+l)cz cz/*(/+l), во-вторых, «лишних» дуг из U*(t) : U(t)czU*(t), I(t+1) = =/*(7+1)> и, в-третьих, как «лишних» узлов из /*(f+l), так и «лишних» дуг из U*(t) : U(t)czU*(t), I(t+\)czI*(t+\). В основу описанного алгоритма построения рабочих опор положен первый способ. Аналогичные алгоритмы можно построить, использовав два других способа. 2. Критерий опорности в задаче (1)((2)) можно сформулировать в другом виде. Нетрудно проверить, что динамическая транспортная задача (1) на нестационарной сети 5(/) = {/, U(t)}, te7\ эквивалент- V V V на классической транспортной задаче на стационарной сети 5={/, U}, где /={/(0, *=/, t=T}[}s, U={(i(t), j(t))9 (i, j)^U(t), t<=T}\J U {('('). i(t+l)), ies/, t=\, ti-l} (J {(i(ti), s), is/}. Тогда из критерия опорности в классической транспортной задаче следует, что (второй критерий опорности) Qon{{/on(^+l), Uoa(t)}t t^T} является опорой нестационарной сети S(t), t^T, тогда и только тогда, когда множество Цщ ={(*(*), /(0), (', j)*=U0*(t), te=T} [) {(i(t), i(t+\)), /е=/оп(0> t=l, fa—1] (J {(i(t±), 5), te/on(^i)} является деревом ce- V ти 5. Сравним первый и второй критерии опорности. Очевидно, что формулировка у второго критерия проще. Однако при достаточно большом t± его проверка с помощью ЭВМ может оказаться неосуществимой, в то время как проверка первого критерия легко реализуема. Действительно, для проверки второго критерия в опера- v тивную память ЭВМ надо записать всю сеть 5(fi|/| + l v узлов, J[J |C/(0l+'iUI ДУГ) и все множество Uon(tt\I\ дуг). При проверке же первого критерия в каждый момент времени t в оперативной памяти достаточно иметь сеть S(0(|/| узлов, \U(t)' {/оп(Н-1),?/оп(0} (|/оп(Н-1)" Множество рабочих опор Q*n = {Q?n (t), t(=T} назовем динамической опорой задачи (2). Пару {и(-), Qon} из допустимого управления и опоры назовем опорным управлением. Опорное управление счи- 183 дуг) и пару множеств + |J7an(0|^2|/|-l).
Таётся невырожденным, если 0<.Uij(t)<.dij(t)t (i, /)е et/on(f); 0<*<(*+1)<А(*+1), te/on^+1), fc=7\ 3. Принцип s-максимума. Пусть в задаче оптимального управления (2) известно начальное опорное управление {«(•)> Qon}. Запишем сопряженную систему из теории оптимального управления Ф(*-1)=*(0+М*Ж(*). Ф№)=0' ter> (?) где l{t) = {li(t), fe/}, ?=1, tf,— функция скачков. Ясно, что решение ty(t), t^T\ сопряженной системы однозначно определяется функцией скачков, которая играет роль управления в сопряженной системе. Построим функцию скачков g(f), t^T, соответствующую опоре Qon, и назовем ее опорной функцией скачков. Положим li(t)=09 i4=/on(0, f=l7Ti. (8) Остальные &(*)> i^I\Ion(t), t=l, tl9 однозначно найдутся из условий ^(t)b^(t)=Cij(t), (i, j)^U0JI(t), *e=2\ (9) (Методы построения опорной функции скачков (8), (9) и соответствующего ей решения сопряженной системы (7) описаны ниже.) Опору Qon назовем согласованной с управлением и(-), если для траектории x(t)9 t=l, tiy соответствующей управлению и(-), и опорных скачков ?,(t), t=l, U, выполняются соотношения li(t) ^0 при Xi{t) =di(t), li(t) ^0 при Xi(t) = 0, b(t)=0 при ()<*<(*) «*<(*)> ie/, t=\Ji. (10) Опорное управление {u(-), Qon} считается согласованным, ^сли опора Qon согласована с управлением и(-). Можно показать, что для опорного управления {и(л)> Qon} справедливо неравенство 2 (c'x(t+l)x(t+l)+c'u(t)u(t))-2l(c'x{t+l)x°(t+l) + t<=T t(=T + c'tt(t)u\t))K2l(Eu(t)+Bx(t+l))9 (И) где ви (t)= max W(t)B (t)-c'u{t)) u-W(t)B(t)-c'u(t))u(t)\ Bx(t) = maxl'(t)x — l'(t)x(t); x(t), t=l, tl9— траекто- 0<x<dx(t) 184
рия системы (2), соответствующая управлению и{-)\ и°(-) — оптимальное управление; я|)(?), t^T,—решение сопряженной системы (7), соответствующее опорным скачкам. Ясно, что sx(t) = 0, t=l, tt, в том и только том случае, когда опора Qon согласована с управлением и(-). Величину Р = Р(м(-), Qou)= JE (eu(t)+ex(t+l)) на- зовем оценкой субоптимальности опорного управления {и(")> Qon}. Из неравенства (11) следует Теорема 2 (принцип е-максимума). Для е-оптималь- ности управления ие(-) и соответствующей ему траектории хе(t), t=l, tu в задаче (2) необходимо и достаточно существование такой опоры Qon, что выполняются условия квазимаксимума по управлению и траектории: (я|/ (/) В (0 — си (0) и« (0 - max (г|/ (f) B(t)—cu (t)) и, t^T, us=V{t) l'(t)r{t)= max Г(0*-е,('М=Г?, eu(*)>0, в*(Н-1)>0,*е=7\ 2?(е«(0+е«('+1))<в, fer где ?(/), t=l, tt,— функция скачков, построенная по опоре Qon; ty(t), t^T,— соответствующее ей решение сопряженной системы (7). Теорема 3 (принцип максимума). Для оптимальности опорного управления {и(-)> Qon} в задаче (2) достаточно, а в случае невырожденности и необходимо, чтобы оно было согласованным и выполнялось условие максимума: W(t)B(t)-cu(t))u»(t) = = max (г|/ (t) В (t) — с'и (t)) u,t?ET, (12) weV(0 где i|)(f), t^T,— решение системы (7), в которой векторы %(t)9t=l,tu построены по опоре Qon. Из теоремы 3 следует, что условия согласования (10) являются необходимыми для оптимальности опорного управления. Поэтому в дальнейшем будем рассматривать только согласованные опорные управления MO.Qon}. Опишем алгоритм построения опорных скачков g(r), fel, tu и соответствующего им решения сопряженной си- 185
стемы (7), т. е. векторов i|>(0, g(f+l)> t<=T, удовлетворяющих соотношениям (7) — (9). Согласно алгоритму п. 2 построим динамическую опору Qon и вычислим коэффициенты cult), (i, j)^Uon(t) = = t/on(0Ut/*(a 'ег: uj (0=^(0» (i\/)€=?/Оп(0; М0=-М0+*;(')+я(1, /, 0On(*-l)), (13) (M)e?/*(*M = 0,l,-..,*i--l. Здесь я(г, /, U0ji(t—1))_—длина пути из узла i в узел / по дугам множества U0JI(t—l), длины которых равны си (*—1). Положим ifo fa— l) = ct fa), i e /™(*i) = /on (<l)- Поскольку множество Uonfa—1) не содержит циклов я в каждой компоненте связности сети Sonfa—1) есть узел из Ion fa), то числа ^(^—1), ie/\/Jn('i), легко найдутся из условий b(ti-l)-^j(tl-l)=cij(ti-l), (*, /)e=0On(*i-l), (14) по правилам классического метода потенциалов. Для t = ti—2, ti—3, ..., 0 векторы ty(t) строятся аналогично из условий b(t) = b(t+i)+ct(t+i), *е=/0+п(*+1); b(t)-yj(t)=cij(t),faj)^u(m(t). ( ' Зная гр(^), /еГ, легко построить |(f) =ty(t— 1)— г|)(/) — —с*(0> t=l, t±. Нетрудно проверить, что построенные векторы г|э(?), g(?+l), fe7\ удовлетворяют условиям (7)-(9). 4. Итерация. Пусть для начального согласованного опорного управления *) {#(•)> Q0n} принципы максимума и е-максимума не выполняются, т. е. Р(м(-)> Qon)>e, где е — заданная точность приближения к оптимальному управлению по значению целевой функции. Построим новое согласованное опорное управление {?(•)» Qon}, для которого Р(й(-), Qon)^P(^(-)> Qon). В основу итерации положим принципы, аналогичные приведенным в § 1 гл. 1. Начнем с построения нового управления й{-) = = м(-)+Ди(-)> 'гДе приращение имеет вид Ди(-) = *) Если начальная опора не известна, то в качестве начальной можно взять опору Qon{{Iou(t+l)=Iy UOn(t)=0}, t^T}, которая согласована с любым допустимым управлением. 186
= @v(-), в^О. При построении ku(-) =®v(-) будем исходить из условия максимума (12). Введем обозначения: Д' (t) = г|/ (t) В (t) — си (t) = = {Д*И0 = Фа0-Ы0-М0. (hj)^U(t)}. Компоненты Vij(t) вектора v(t), для которых Д0- (t) ФО, <еГ, однозначно найдутся из условия (12): l/t-j (t) = rfij (0 — Uij (t) При Д^ (f) > О, f*j(0=-"<j(0 ПРИ Д«(0<0, (16) (i,/)e=iy(/),fc=;r. Значения остальных компонент Vij(t), (i, /)eC/°(f) = = {(i, j)^U(t): hij(t) =0}, ? = 0, fi—1, не влияют на условия максимума (12). Заметим, что, по построению, Uon(t)czU°(t)9 te=T. Компоненты Vij(t), (i, /)е[/о(/), tel1, найдем следующим образом. Для определенности положим vi, (О = о, (i, /) е= t/o (0\t/on (0. 'е= г (17) (можно положить Vij(t)=aa, где а^-е[-u>ij(t), dij(t) — —Uij(t)]). Опорные компоненты Vij(t), t^U01l(t), t^T, найдем из системы l(t + l) = l(t)-B(t)v(t), h(t+l) = 0, »е/н(< + 1) = /\/оп(< + 1). 'ег, /(0) = о. (18) Опишем один из способов решения системы (16) — (18). Построим векторы b(t) = {bi(t), te/}, t<=T, по правилу: bi(0)=-Bis(0)vs(0),i<=I, — Яш (0 »н (0. если i ё/+ (*), - BtH (0 он (0 + 2 М' — 1). если bt(t) т* i = ik{t)<=lta(t), is/, *=1, 2, .... fx —1, где oH(0={ot7(0, (I, l)&UK(t\=U(t)\Uon(t)}, BtR{t)-l.* строка подматрицы BB(t) = {btJ (t), (i, j)^Ua(t)}. При t=t±—l рассмотрим сеть S*on (t) = {I U S, f/oH (0 U (i, s), «e lin (t + l)} (19> с интенсивностями узлов *) *) Поскольку /on(<i) = 0, то из (20) следует, что be(tt — 1)= = h{h — l), <е/, m*i—i) = o. 187
мо = bt(t), если i^I\I-(t+ 1), bi (t) -h(t+ 1), если ie/- (* + 1), 2 h(t+l), если / = s, (20) и найдем на ней псевдопоток х* (t) = {«• (0, (*, i)<=UoJf)} U {(/, s), ie= /+ (* + 1)}. (21) В силу того, что сеть 5*п (t) является деревом, псевдопоток к* (t) найдется однозначно по правилам двойственного опорного метода решения классической транспортной задачи. Положим М0 = и--(0, V, /)е?/оп(0, h(t + \) = **s(t), >e/+(HD, (22) ^ (0 = «у (0, / е {/: (*, /) е и* (t)} = /- (О- Повторим операции (19) — (22) для t = ti—2i ti—3, . .., 0. Можно проверить, что построенные при этом числа (22) вместе с (16), (17) удовлетворяют системе (18). Ясно, что приращение Ах(-) траектории х(-), соответствующее приращению Au(-)=@v(-) управления и(-), равно Ах(-)=@1(-),тле l(-) найдено согласно (18). Найдем максимальный шаг во^О, при котором управление й (¦) = и (•) -\-Аи (•) будет допустимым: 80 = min {1, Ог0;0(М, ©**('*)}, (23) где e*0jo(*o)=mineii(f), (i\ /)еС/оп(*Ь t(^T> <М0 = = (d»i(0 — u>ij(t)) fvij(t) при и»;-(0 > 0; 6t-j(0 = = —uij(t)fvij(t) при Uij(0<0'; вгд(0=с» при ^(0=0; et,(M = mine*(o, 1'€=/0П(*Ь *=1> Ь; e<(f) = (*(')- —Xi(t))/li{t) при /*(0>0; вг(0= —Xi{t)IU{t) при /г(0<0; вг(0=о° ПРИ /i(0=0. Оценка субоптимальности опорного управления {й(-). Qon} с u(.)=u(')+e0v(_.) равна р(й(-)> Qon) = = (1—©о)Р("(-)> Qon). Если р(и(«), Qon)^e, то процесс решения задачи (2) прекращаем на е-оптимальном управлении й(-). В противном случае переходим к операциям по замене опоры Qou. Пусть Р(й(-), Qon)>e. Возможны случаи: а) В0 = = ei0jo('o)<l;6) О0 = вгЛ^)<1. 1,88
Рассмотрим случай а). Положим Ci(t)=0, i^Ion(t), t=TTui Ciojo(to)=signviojo(t0), Cij(t)=0, (i, j)?=(io, /o), t?=U, (i, /)eC/On(0» t^T, и согласно (13) найдем коэффициенты Cij(t), (i, /)еС/оп(0» ^г- Подсчитаем векторы jj,(0 = {\n(t), fe/}, fe7\ из следующих рекуррентных соотношений: ft (t) = ft it + 1) + ct (t + l), ie /o+n (* + l); ft (0 - ft- (0 = cu (t), (i, j) e= fTon (0. (24) t = t1—l, t± — 2, ... , 0; |A(fi) = 0. Для того, чтобы найти элемент, вводимый в опору, вычислим а0 - min {аг# (7*), аГо/-о (70)}, (25) где аГл (7j = min at (t), i e /H (0. ' = 1. *i\ arQjQ <M = = minc7y(0, (i\ /)Gl/H(0» 'GT, f - Al7 (0/Yo- (0, если Д,7- (0 Yy (0 < 0, g (t) = ' °' 6СЛИ AlJ" ^ = °' ytj ® >0, "" О =^dtf(0 или Ay(0 = 0,Y«W<0,««(0^0, I oo в остальных случаях; ( - It (t)\yt (0. если & (t) yt (t) < 0, a /1) = ' °' если ^ О = °' Yt' О > °' Xi W ^ dt* W или I oo в остальных случаях; Yy (0 = ft (0 — ft V), Yt (0 = ft (* — 1) — ft (0- Если a0= = ат- (^), то новую опору Qon строим следующим образом: из множества Uon(t0) удаляем дугу (t0, /0), к множеству /оп(**) Добавляем узел г#. Если а0 = а^ (*0), то при построении новой опоры Qon из множества Uou(t0) удаляем дугу (t0, /0), в множество Uou(t0) вводим дугу (г0, /0). Легко проверить, что новое_ опорное управление МО. Qon) бУДет согласованным и р (й(-), Qon) = (l— в0)Х ХР ("(•). Qon) -^ol^o/o Со) |<Р ("(•). Qon)- Рассмотрим случай б): во = 0*Л**)<1- Положим йЛ**) =sign tujt*), Ci(t)=0, гфи, t=?t*, fe/on(0> ' = = 1, ^; Ctj(0=0i (*, j)^Uon(t), t^T, и по правилам (13) 189
найдем коэффициенты dij(t), (i, j)^U0JI(t), t^T. Используя найденные коэффициенты, построим векторы \i(t), t^T, и число Go. При а0 = ог (t^) новая опора Qon получается из старой удалением узла ^ из множества /оп(^*) и добавлением узла Lj. к множеству /0п(^*)- Если а0 = о^у (?0), то для построения новой опоры Qon—H3 Лш(**) удаляем узел i# и в Uon(t0) добавляем дугу (i0, /0). Как и в предыдущем случае, можно показать, что новое опорное управление {"(•)» Qon} будет согласованным и р (и (•), Qon) = (1 —60) X ХР(и(.), Qon)-MM'*)l«P("(0. Qon)- Новую итерацию начинаем с согласованного опорного управления {?(•)> Qon}. Итерацию {#(•)» Q} -> "^ {"(•)» Qon} назовем регулярной, если во+ао^О. Описанный алгоритм будет конечным, если в процессе решения не встречаются нерегулярные итерации. Можно, следуя § 6 гл. 1, построить конечную модификацию метода. 5. Пример. Рассмотрим динамическую сеть, изображенную на рис. 3, где каждому моменту ?еГ={0, 1, 2 = = ?i—1} соответствует своя сеть. На рисунке приняты следующие обозначения: прямые светлые стрелки в узлах означают интенсивности узлов (положительным интен- сивностям соответствуют стрелки, входящие в узел, отрицательным— стрелки, выходящие из узла; если стрелка отсутствует, то интенсивность равна нулю); волнистые стрелки соответствуют компонентам состояния системы x(t-\-l) = {Xi(t-\-l), te/}. Вся информация, связанная с состоянием x(t+l), записывается около стрелок, причем в верхней строке первое число — #г(Н-1), второе — di(t-\-\), третье — с*(/+1); информация, связанная с управлением u(t) = {uij(t)> (i, /)e?/(f)}, записывается над дугами (i, j)^U(t) сети S(t) = {/, U(t)}: первое число — uij (t), второе — dij (t), третье — c^ (t). Пусть известно начальное опорное управление {#(•), Qon(')}, Qon(') = {Qon(0. t€=T}, Qon(t)={U(t+l), Uon(t)}. На сети S(t) дуги (i, /)е[/оп(0 обозначены сплошной жирной линией, узлы te/on(f+l) —двойным кружком. Проверим, является ли данное управление оптимальным. Для того, чтобы найти решение ф(0» t^T, сопряженной системы (7), построим согласно алгоритму из п. 3 и формулам (13) динамическую опору Qon(') = = {Q«n (<МеП. 190
OS, (0 = Wn (t + l), u0]L(t)}, uon (t) = uou (t) и и* (О, и найдем коэффициенты cy(f), (*\ /)€=?/* (О- Рассмотрим сеть S(0) (рис. 3, а). Сеть 5ОП(0) = = {/, ?/Оп(0)} состоит из одной компоненты связности и /оп(1) = {Ь 5}. В качестве узла h(l) возьмем узел i"i(l) = = 1. Следовательно, /+п(1) = {1}, 1^(1) = {5}- Узел 1 помечаем знаком « + », узел 5—знаком «—». Тогда U* (1) = {(1, 5)}, с15= 6. Переходим к рассмотрению сети S(l) (рис. 3, б). 191
К опорным дугам ?/оп(1) сети S(l) добавим дуги U* (1), которые на рисунке обозначены штриховой линией*). В результате получим множество Г70П(1) = = ?/0п(1) U U*(t). Сеть 50П(1) = {/, Uon(l)} состоит из одной компоненты связности; /оп(2) = {2, 6}. В качестве узла 1г (2) возьмем узел 6. Следовательно, 1+ (2) = {6}, /~ (2) = {2}. Узел 6 помечаем знаком « + », узел 2—знаком «—». Строим множество дуг U* (2) = {(6, 2)} и находим для них с62 (2) = 2. Переходим к рассмотрению сети S(2) (рис. 3, в). К дугам Uon (2) добавим дуги С/* (2), обозначенные на рисунке штриховой линией. Сеть Son (2) = {/, ?70п(2) = = ^оп(2) U U* (2)} состоит из двух компонент связности; Лш(3) = {6, 3}, причем узлы 6, 3 принадлежат разным компонентам связности. Следовательно, f1(3)=6, ^(3) — = 3, /+ (3) = /0п(3)- Построение динамических опор закончено. Теперь, последовательно просматривая сети S(t) в обратном порядке и используя построенные динамические опоры Q§n(t), легко найти числа tfo(f), t'E/, (еТ, по формулам (14), (15). Числа ih(f), t'E/, записываем в узлах сети S(f), /е=7\ и обводим кружком. Для всех ^ЕТ подсчитаем числа AtJ- (f) = ifo (f) — ify (t) — с^ (О, О*, /)g=?/h(0. Б* (*+l) = ** (')-Ф* 0+1)-** (* + 1). 1Е=/Н('+ 1), и запишем их под числами Cy(f)» (i, /) е= ЕЕ ?/н (Oi ?* (* + 1)» tE/H('+l), соответственно. Нетрудно проверить, что начальное опорное управление является согласованным. Оценка субоптимальности равна р(м(-), Qon(-))=31- Поскольку р(н(«), Q0n(-))> >0, то ясно, что условия максимума (12) не выполняются. Переходим к операциям по улучшению управления Найдем числа Vij(t), (i, j)^UK(t), t^T, согласно (16), (17) и запишем их под числами Uij(t). Далее построим векторы b(t), t^T, и по правилам (19) — (22) найдем решение Vij(t), (i, /)е?/Оп(0» ^(^+1), fe/, fe7\ системы (18). Числа i>ij(f) запишем на дугах (i, /)е е?/оп(/) под числами Uij(t), числа /<(Н-1), *еД—около волнистых стрелок под числами **(?+1)- По формулам (23) найдем шаг e0 = min {1, 634(1) = *) Числа cn(t) записываются над дугами (t, j)^U*(t). 192
= 1/2, в3(1) = 1/2}. Пусть во = в34(1), т. е. (*<,, /о) = (3, 4), to=l. Построим новое управление и(-) =^(-)+0оу(-)> которое приведено на рис. 4. Переходим к правилам замены опоры. Имеет место случай а) (см. п. 4): во = = 62oj0(^o)<l. Положим с34(1)= — 1, остальные Cij(t)9 (i, /)eJ7on(0. МН-1). teIon(t+l), t<=T, равны нулю. Найдем числа \n(t)=l, гфЪ, t^l, i = I, t^T, fx3(1) =0. Тогда шаг а0 равен а0 = а- (*#) = а3 (1). Следовательно, новая опора Qon получается из старой удалением из 193
Uon(l) дуги (3, 4) и добавлением к_/оп(1) узла 3. Для нового опорного управления Р(и(-)» Qon(*))= 19/2. Если 19/2 <; е, то заканчиваем вычисления. В противном случае переходим к следующей итерации, исходя из нового опорного управления. § 7. Вычислительная технология решения больших задач оптимизации Изложенные варианты адаптивного алгоритма различаются своими основными характеристиками — требованиями к объему памяти и к расходу машинного времени. Ускорение работы программной реализации алгоритма, как правило, достигается ценой увеличения необходимого объема памяти. Несовместимость этих двух требований выдвигает проблему создания программного комплекса, объединяющего несколько различных вариантов реализации метода, каждый из которых применяется в наиболее подходящей для него ситуации. Возможность выбора наиболее экономной программы часто обеспечивает успешное решение и сложных задач оптимизации, например, задач нелинейного программирования и оптимального управления. Многие итерационные методы решения этих задач используют алгоритмы линейного программирования при построении подходящего направления или при поиске оптимального управления в линеаризованной системе. Размеры задач при этом меняются на итерациях в зависимости от числа активных ограничений или от шага дискретизации непрерывной системы и, следовательно, их эффективное решение возможно при наличии нескольких алгоритмов с различными требованиями к объему памяти. Итерационный процесс решения большой задачи линейного программирования можно разбить на несколько этапов (например, по размерам накапливаемой опоры) и на каждом этапе применить наиболее подходящий вариант реализации алгоритма. Так, в § 4 гл. 2 изложена вычислительная схема, объединяющая два алгоритма, один из которых работает на первом этапе, когда размер опоры не превышает заданный объем, а другой — с декомпозицией опоры — включается на втором этапе. Аналогично можно построить вычислительную схему с тремя алгоритмами: на первом этапе работает алгоритм с оптимальной заменой опоры (см. § 1 гл. 1)» на втором — 194
алгоритм с пересчетом оценок (см. § 2 гл. 1), на третьем— алгоритм с декомпозицией опоры (см. § 4 гл. 2). Для задач больших размеров на следующих этапах можно предусмотреть применение алгоритмов, использующих внешнюю память, которые также могут различаться, например, по форме хранения информации. Следовательно, для эффективного решения большой задачи потребуется несколько различных вариантов алгоритма, каждый из которых в сравнении с другими обладает максимальной эффективностью на данном этапе. Таким образом, успешное решение сложных задач возможно только на основе программного комплекса, включающего в себя несколько вариантов алгоритма с разными вычислительными характеристиками. Программный комплекс самой простой структуры состоит из нескольких процедур, реализующих разные варианты алгоритма, и управляющей программы. В зависимости от структуры ограничений и размеров задачи управляющая программа вызывает наиболее подходящую процедуру, а в процессе решения на новом этапе меняет ее на другую. Одним из недостатков такого подхода является отсутствие гибкости при построении вычислительной схемы — невозможность использовать фрагменты разных процедур при построении комбинированной схемы. Другой недостаток заключается в том, что мало различающиеся программы хранятся в виде автономных процедур, в результате чего их библиотека занимает большой объем памяти. Программный комплекс более сложной структуры предполагает наличие библиотеки модулей, монитора и сервисных программ, обеспечивающих хранение информации и выдачу результата в удобной форме. В этом случае все операции, входящие в состав разных алгоритмов, оформляются отдельными модулями, каждый из которых может зависеть от входных параметров, определяющих, например, форму хранения информации, режим счета и т. д. Модульный принцип исключает повторение одинаковых частей программы в разных процедурах библиотеки и открывает возможности для построения вычислительных схем, более гибко учитывающих особенности решаемой задачи. Выбор и построение вычислительной схемы, а также изменение схемы в процессе решения задачи в программном комплексе осуществляет монитор. На на- 195
чальном этапе выбор алгоритма происходит по параметрам задачи и по заданному объему памяти. Затем в зависимости от объема накопившейся информации монитор может заменить некоторые модули или их входные параметры, а также изменить связи между отдельными модулями, перейдя к новой схеме счета. Пусть, например, на начальном этапе для решения задачи был выбран алгоритм § 1 гл. 1 с оптимальной заменой опоры, в котором двойственный шаг вычисляется с помощью я-векторов А, х, г. При решении задач малого размера эти векторы можно описать м-мерными массивами и выполнить схему, описанную в алгоритме § 1 гл. 1. В задачах несколько больших размеров вычисление двойственного шага можно реализовать без применения массива для х, перейдя к схеме с восстановлением его компонент по формулам Kj=d*i при А7-<0, к$=й^ при A7->0f Kj = Xj при Aj = 0 (векторы А, х, d*, d* хранятся в памяти в виде массивов). Даже многократный пересчет компонент xj по этим формулам почти не изменит скорости счета программы и, следовательно, нет необходимости в описании этого вектора массивом. Аналогично можно перейти к покомпонентному вычислению вектора г. Но поскольку этот вектор вычисляется значительно сложнее, то его многократный пересчет при поиске оптимального шага по трудоемкости будет равен нескольким итерациям алгоритма. Поэтому при необходимости сократить объем временно запоминаемой информации лучше перейти к алгоритму с простым выполнением двойственного шага (как в двойственном симплекс-методе), в котором компоненты вектора z применяются один раз и, следовательно, могут не запоминаться. Дальнейшего сокращения, требуемого для работы программы объема памяти, можно достигнуть за счет исключения массива для вектора оценок Д. Вместо рекуррентной формулы A(k+1) = AW+crz, по которой пересчи- тываются на итерациях элементы /г-мерного массива, соответствующего этому вектору, следует применить формулу, восстанавливающую его компоненты по исходным данным задачи: Д;- = и'А(1011, /) — Cj, / = 1, п; иг = = c/(Jou)A~^. Очевидно, трудоемкость вычисления А по этой формуле значительно выше, особенно при решении задач больших размеров, когда матрицы А и Л"1 списываются с внешней памяти. Кроме того, поскольку вектор Д 496
на итерации адаптивного алгоритма применяется как на прямом, так и на двойственном шаге, то необходим двойной пересчет его компонент. Как видно из экспериментов § 2 гл. 1, такой вариант алгоритма требует в 3 раза больше машинного времени для решения задачи, чем алгоритм с запоминанием этого вектора, и поэтому его применение может быть оправдано только при очень больших п. Уменьшения используемого объема оперативной памяти можно добиться и переходом к алгоритму с декомпозицией опоры, требующему в 2 раза меньший объем памяти для матрицы Л"1. Но при этом нужно учитывать, что в силу сложности его вычислительной схемы потребуется дополнительный объем памяти для самой программы. Пусть, например, допустимый для Л~! объем памяти равен 22-103 ячеек; опора достигла размера, равного 100; /п=150, п=Ю3. При дальнейшем решении задачи опора может достигнуть максимального размера, равного 150, что потребует 22.5-103 ячеек. Недостающий объем памяти можно получить посредством отказа от запоминания вектора Д. Но в этом случае оставшиеся итерации будут выполняться в 3 раза медленнее. Переход к алгоритму с докомпозицией опоры потребует дополнительно 1200 ячеек для программы, но максимальный объем памяти, необходимый для Л"1, будет равен 100X100+50X50= 12,5ХЮ3. Время решения задачи при этом увеличится не более чем в 1,5 раза. В этой ситуации, конечно, предпочтительнее вычислительная схема с декомпозицией опоры. Этот пример показывает, что выбор и построение схемы решения задачи осуществляется на основе простых расчетов, которые могут выполняться управляющей программой или монитором. Принципы, заложенные в монитор для выбора вычислительной схемы, определяются в основном соотношением между скоростью выполнения операций в оперативной памяти ЭВМ и ее скоростью обмена с внешними носителями информации. Поэтому в программных комплексах, ориентированных на разные типы ЭВМ, принципы выбора вычислительной схемы могут быть существенно различными. КОММЕНТАРИИ К ГЛАВЕ 1 § 1. Академиком Л. В. Канторовичем [27] было замечено, что на современных предприятиях повышения эффективности производства 197
можно добиться не только улучшением качества сырья, совершенствованием способов его обработки, но и рациональной организацией производства. Он же показал, что при математическом моделировании подобные задачи во многих случаях сводятся к линейным задачам с ограничениями-неравенствами. Классическая техника исследования на экстремум для новых задач оказалась неэффективной. Л. В. Канторович разработал оригинальный подход к решению линейных задач, который впоследствии лег в основу теории линейного программирования. Интенсивное развитие линейного программирования началось после создания Дж. Данцигом симплекс-метода [26] — основного численного метода линейного программирования. Задачи линейного программирования в аналитическом отношении являются простейшими среди задач математического программирования. Но аналитическая природа элементов экстремальной задачи является не единственной (и даже не самой важной) характеристикой сложности. В связи с необходимостью фактического решения современных прикладных задач, что, как правило, невозможно без использования ЭВМ, в последние годы на передний план выдвигается такая характеристика сложности, как размер задачи, под которым понимается совокупность из числа переменных и количества ограничений. Как ни велики поражающие воображение рядового человека возможности симплекс-метода и ЭВМ, в приложениях все чаще появляются задачи, решение которых не под силу самым совершенным версиям симплекс-метода, даже если их реализовать на самых мощных ЭВМ. В разных странах начались исследования по разработке новых методов решения больших задач. С одной стороны, старались найти методы, основанные на принципах, отличных от тех, на которых основан симплекс-метод. С другой стороны, шел поиск схем декомпозиции больших задач, в которых в качестве модуля использовался симплекс- метод. Исследования, начатые в 70-е годы в Минске, были направлены прежде всего на совершенствование принципов, заложенных в сам симплекс-метод [4]. Этапы развития этих исследований отражены и в данной монографии. Основные идеи нового подхода реализованы в адаптивном методе [7, 9, 18, 20, 41—44], который подробно излагается в § 1. Остальная часть монографии так или иначе базируется на адаптивном методе. § 2. В основном варианте (§ 1) адаптивного метода для построения итерации используются и запоминаются векторы, число компонент которых равно числу переменных задачи. Такая реализация неудобна (требует большого объема оперативной памяти), если в задаче много переменных. С точки зрения экономии памяти в данной ситуации целесообразно упомянутые векторы генерировать в процессе итераций. При этом, конечно, увеличивается время решения, но часто это допустимо. Разработке версии адаптивного метода, обладающей указанным свойством, посвящен данный параграф. § 3. Излагается еще одна версия адаптивного метода, построенная по аналогии с мультипликативной версией симплекс-метода. Достоинства подобных версий подробно обсуждаются в [1, 30, 32]. § 4. Каноническая задача является частным случаем интервальной задачи, но рассматривается здесь отдельно с целью упрощения элементов адаптивного метода. Именно для этой задачи в [16] впервые описан адаптивный метод. § 5. Метод данного параграфа был первым из разработанных в Минске на пути обобщения симплекс-метода. В приложении к транс- 198
портной задаче он опубликован [3] в 1975 г., хотя разработан был значительно раньше. Симплексная нормировка является одной из многих возможных. В [8] указан класс задач, для которых она естественна. Как показывают эксперименты в § 4, по эффективности метод данного параграфа близок к модификации симплекс-метода, предложенный Чарнсом [40]. § 6. Проблема конечности алгоритма (или, другими словами, проблема избежания зацикливания) долгое время многими исследователями относилась к теоретическим проблемам, не заслуживающим внимания практиков. Но постепенно (это особенно заметно в последние годы, см., например, [2, 34]) стали понимать, что ситуации, близкие к вырождению, могут явиться причиной замедления процесса решения линейных задач. Интерес к проблеме значительно вырос. Она была одной из центральных с самого начала наших исследований. Первые результаты, полученные в Минске, содержатся в [5]. В данном параграфе излагается новая версия конечного метода. Она впервые опубликована в [12, 13]. § 7. Данный параграф посвящен обобщению метода предыдущего параграфа, направленному на учет квазивырожденных ситуаций. Результаты экспериментов говорят о работоспособности метода в самых жестких условиях, в которых другие версии адаптивного метода терпят неудачу. § 8. После создания и испытания основного варианта адаптивного метода (§ 1) возник вопрос о дальнейших путях повышения его эффективности. Здесь разработана версия адаптивного метода с блочной заменой опоры. Численные эксперименты показали перспективность метода. Заметим, что аналогичные вопросы исследуются и в теории симплекс-метода В. А. Булавским [1]. § 9. Второй путь, по которому была сделана попытка увеличить эффективность адаптивного метода, был связан с идеей многошаговых методов. В линейной алгебре такие методы известны [35], но нам не удалось найти их аналогов в линейном программировании. Приведенные в параграфе результаты численных экспериментов указывают на эффективность и этого пути обобщения адаптивного метода. § 10. Адаптивный метод, по терминологии [5], относится к опорным методам линейного программирования. Другой класс составляют безопорные методы. Целью данного параграфа является изложение общего взгляда на построение безопорных методов. В новой схеме имеется ряд элементов, которые позволяют говорить о существенном развитии подхода [5]. Следует отметить, что в схему безопорных методов укладывается очень много известных методов (см. например, [31]). По-видимому, в классе безопорных методов в недалеком будущем будут созданы весьма эффективные методы решения задач оптимального планирования и управления. §11. Материал данного параграфа основан на работах [10, 15]. Однако приближенные методы здесь излагаются более подробно. Несмотря на значительный интерес, который в последние годы проявляется к приближенным методам [25], обстоятельных численных экспериментов пока не опубликовано. К сожалению, это слабое место всех разделов математического программирования. КОММЕНТАРИИ К ГЛАВЕ 2 § 1. Как уже указывалось, размер линейной задачи определяется двумя параметрами: числом переменных п и числом основных огра- 199
ничений т, т. е. размерами матрицы условий задачи. В симплекс- методе оперативная память расходуется в основном на хранение базисной матрицы, которая в канонических задачах имеет размер тХт. Поскольку на итерации небазисные столбцы матрицы условий обрабатываются независимо друг от друга, то число переменных, на первый взгляд, не влияет на возможность решения линейной задачи симплекс-методом. В связи с этим иногда сложность (размер) задачи определяют только числом основных ограничений. В действительности же и для симплекс-метода не безразлично, сколько переменных в задаче. При постоянном т число симплексных итераций, как правило, растет с увеличением п. Кроме того, в задачах с /г>/тг возникают дополнительные сложности из-за большого количества почти коллинеар- ных векторов условий. Обсуждаемые задачи для нас представляют особый интерес, так как они типичны в оптимальном управлении, а решение задач оптимального управления — цель данной монографии. Идея метода, изложенного в § 1, достаточно прозрачна и основана на физическом смысле оценок. Однако ее реализация использует особенности, свойственные именно адаптивному методу. Попытка реализовать эту идею в рамках симплекс-метода встречает серьезные трудности. Изложение материала следует в основном работам [8, 17]. § 2. Ограничения-неравенства в некотором отношении существенно отличаются от ограничений-равенств. В связи с тем, что они типичны в задачах оптимального управления с фазовыми ограничениями, в данной главе ограничения-неравенства рассматриваются отдельно. Для простоты исследуется только случай m»n. Изложен метод, который впервые был предложен в [17]. (Там же обсуждается его связь с другими методами.) Здесь впервые приведены результаты численного эксперимента. § 3. Из всех известных методов декомпозиции в данной монографии рассматривается только один [19]. Проблема выбора конкретного метода до сих пор не разработана достаточно полно. В литературе часто упоминается о медленной сходимости метода декомпозиции Данцига — Вулфа [30]. Наши численные эксперименты по методу распределения ресурсов (известного еще под названием метода Карнаи — Липтака) также не дали обнадеживающих результатов. К сожалению, во многих работах ограничиваются словесным описанием методов, не указывая области их эффективной работы. На наш взгляд, на современном этапе развития теории оптимизации такой подход к делу уже недопустим. Идея метода данного параграфа проста и известна давно. Однако ее реализация зависит от метода, которым решаются подзадачи. В этом отношении адаптивный метод представляет значительно больше возможностей, чем симплекс-метод. § 4. Цель параграфа — развить адаптивный метод на большие задачи, для которых опоры больших размеров невозможно реализовать. Конструкции с «плавающими» опорами, на наш взгляд, весьма перспективны. Есть надежда на этом пути построить метод решения весьма больших задач при скромных требованиях к объему оперативной памяти. § 6. В этом параграфе статическая транспортная задача осложнена динамическим эффектом, в результате чего резко возросли размеры задачи. Детальная разработка адекватных методов для нового класса задач требует отдельного изучения. Здесь изложена только одна модификация адаптивного метода. В связи с рассматриваемой задачей см. работу [28].
ПРИЛОЖЕНИЕ § 1. Программа адаптивного метода с оптимальной заменой элементов опоры Алгоритм § 1 гл. 1 написан на языке АЛГОЛ-60 (МС «Дубна») в виде процедуры PLAV(A, С, Dl, D2, Bl, В2, X, М, N, EPS, EPS2, EMI, ЕМА), параметры которой имеют следующий смысл: А[1 : М, 1 : N+1] — массив, в котором задается полная матрица А и дополнительный (N+l)-fi столбец с нулевыми элементами; С[1 : N+1]—коэффициенты целевой функции; Dl[l :N+1] — ограничения снизу для компонент плана; D2[l :N+1]—ограничения сверху для компонент плана; В1[1:М] — левый вектор основных ограничений; В2[1:М] — правый вектор основных ограничений; X[1:N + 1] — массив, в котором при обращении к процедуре PLAV задается первое приближение, удовлетворяющее прямым ограничениям (di^x^idz), а в результате решения задачи в нем будет получен е-оптимальный план (при X[N+1]>EMI система основных условий несовместна); М — число основных ограничений; N — число переменных задачи; EPS — параметр, значением которого задается точность решения задачи; при p^EPS решение задачи прекращается и выдается е-оптимальный план; EPS2 — параметр, по которому прекращается поиск элемента для замены опоры (а^—EPS2, EPS2»10~5); EMI — параметр, применяемый в процедуре вместо 0(ЕМ1»10~9); ЕМА — большое число (вместо оо), ЕМА^Ю9. При обращении к процедуре PLAV в массивах, описанных до N+1, нужно задать только N компонент, а (М+1)-я компонента вы- числится при расширении задачи (в процедуре START). Основным операциям алгоритма соответствуют блоки программы, оформленные в виде следующих процедур: OBR(Pl)—для пересчета обратной опорной матрицы Л~ . (По значению параметра Р1 выбирается метка в списке переключателя и выполняется пересчет матрицы по схеме, реализованной после этой метки.); SHAG — для вычисления шага в. В ней же определяются индексы /0 и to (в программе 10, 100), вычисляются опорные компоненты коплана и новые компоненты плана; KROP — для проверки плана х на оптимальность и субоптимальность. При очень малых значениях EPS условие субоптимальности может не выполняться из-за накопившихся ошибок округления. Тогда отсутствие подходящего направления (условие оптимальности плана х) является признаком окончания решения задачи; CIG — для вычисле- S—1 ния двойственного шага (a— JyJ Gk) и одновременного определения индексов /*, /* (в программе JO, JJ0) для замены элементов опоры; START — для проверки выполнения основных ограничений задачи и построения расширенной задачи. Если в качестве начального прибли- 201
жения берется план задачи, обращение к этой процедуре можно исключить, а фактические параметры процедуры следует описывать до N. Для реализации алгоритма, кроме исходных данных задачи, в теле процедуры PLAV используются следующие массивы: U[l : М, 1:М], в котором хранится матрица Л~п* (при M>N описание этого массива следует заменить на U[1:N, 1:N]); DT[1:N+1] — коплан Л; XP[1:N+1] —псевдоплан и; TH[1:N+1], в котором при выполнении прямого шага хранится вектор /(/), а при выполнении двойственного шага — вектор z(J)\ Q[1:M]—вектор потенциалов u(I)\ Y, Y1[1:M] — векторы со* и со*; Р, Y2[1:M] — рабочие массивы; BS[1 :N] — индексные множества /оп (первые к компонент) и /н (остальные п—k компонент); BS1[1:M] — индексные множества /оп (первые k компонент) и /н (остальные т—к компонент). При работе процедуры на каждой итерации печатаются: номер итерации, значения прямой и двойственной целевых функций. По окончании решения задачи печатаются: число итераций, значение целевой функции, полученный план и размерность опоры. § 2. Программа опорного метода Алгоритм опорного метода (§ 5 гл. 1), ориентированный на решение задач ЛП вида: с'*-*-max, Ax=b, d^^x^d*, написан на языке АЛГОЛ-60 (МС «ДУБНА») в виде процедуры ОПОРНМ (М, N, А, В, С, Dl, D2, X, S, Е). Здесь М —число уравнений; N — число переменных; А[1:М, 1:N+M] — первые N столбцов матрицы условий, остальные потребуются при расширении задачи (в процедуре START); В[1 :М] — вектор правых частей; C[l :N] — коэффициенты целевой функции; D1[1:N] —прямые ограничения на план снизу (вектор d*)\ D2[1:N] — прямые ограничения на план сверху (вектор d*)\ X[1:N+M] — первые п компонент — начальное приближение (di^i ^.x^d2), остальные используются в процедуре START для дополнительных переменных; на выходе из процедуры X — решение задачи); S — большое число (например, 106), которому равны ограничения сверху на дополнительные переменные и соответствующие им коэффициенты целевой функции; Е— параметр, по которому проверяется критерий оптимальности: при maxAj<? решение задачи прекращается и выдаются результаты. В процедуре ОПОРНМ в качестве рабочих массивов используются: АВ [1 : М, 1 : М] (для Л"1), L[1:M] (для /оп), U[1:M] (для потенциалов), BS([1 : М] (для Jou). При решении задачи на итерациях печатаются номер итерации и значение целевой функции, при выполнении критерия оптимальности— невязка (b—Лх), значение целевой функции (с'х) и оптимальный план (х). Следует отметить, что здесь приводится простейший вариант программы с полным хранением матриц Л и Л"1. Для решения больших прикладных задач применяется программная реализация опорного метода с мультипликативным представлением обратной опорной матрицы Л"1 и с компактным хранением матрицы условий Л, вычислительная схема которого значительно сложнее. 202
§ 3. Программа адаптивного метода с декомпозицией опоры Алгоритм, описанный в § 4 гл. 2, реализован в виде АЛГОЛ-про- цедуры DPLAV(A, С, Dl, D2, Bl, В2, X, NCA, М, N, АК, СК, D1K, D2I\, В1К, В2К, МО, BUF, EPS). Параметры этой процедуры имеют следующий смысл: М — число основных ограничений; АК — число ненулевых элементов в матрице А; N — число переменных; СК — число ненулевых коэффициентов в целевой функции; В1К — число заданных основных ограничений слева; В2К — число заданных основных ограничений справа; D1K — число заданных (отличных от нуля) прямых ограничений слева; D2K — число заданных (#оо) прямых ограничений справа; А[1:АК] — массив ненулевых элементов матрицы Л (с каждым элементом упакован его индекс), выписанный по столбцам; C[l :СК], Dl[l :D1K], D2[l :D2K] — массивы ненулевых элементов, упакованных вместе со своими индексами, векторов с, d*, d*\ В1[1:В1К], В2[1:В2К] — массивы заданных основных ограничений (слева и справа), вместе с элементами упакованы номера их строк; NCA[1:N+1] — адреса последних элементов столбцов матрицы в массиве A (NCA[1}=0, NCA[2] = K1, если в первом столбце К1 ненулевых элементов, ..., NCA[N+1]=AK); X[1:NJ—вектор, в котором задается первое приближение (D1^X^D2), а в результате решения задачи получается оптимальный план; МО — размер опоры, при достижении которого в работу включается алгоритм с декомпозицией опоры (при М0=М, BUF=M+1 задача будет решена с помощью обычного алгоритма (§ 2 гл. 1) без декомпозиции опоры); BUF(M0< <CBUF^M)—максимальный размер опоры, который будет достигнут при решении задачи. Если оценка сверху на размер опоры неизвестна, то следует задать BUF=M (при М0=М BUF=M+1, иначе верхняя граница массива для Ajon будет меньше нижней); EPS — параметр, с которым сравнивается оценка субоптимальности. При Р^е решение задачи прекращается, выдаются результаты. В случае, когда неизвестно, является ли первое приближение планом задачи, указанные массивы следует описать «с запасом» для расширения задачи (в процедуре START): А[1:АК+М], NCA[1:N±2], D2[1:D2K+1], С[1:СК+1], X[1:N+1J. Отсутствующие в заданных массивах компоненты векторов при решении задачи будут принимать следующие значения («по умолчанию»): с/ = 0, d*/ = 0, dj = 106, b#i = — 106, b\ = 106. Для массивов, описанных в теле процедуры DPLAV, требуется 5 * BUF + 2 * М + МО * * 2 + (BUF — МО) * * 2 ячеек (/г-мерных массивов нет). На каждой итерации печатаются: номер итерации, значение целевой функции, оценка субоптимальности и размер опоры. Эти же величины выдаются на печать вместе с е-оптимальным планом задачи, когда решение задачи будет найдено. В силу двойного пересчета на каждой итерации компонент ко- плана А данная процедура работает медленнее, чем процедура PLAV. Применение процедуры DPLAV целесообразно в случае сильно разреженных векторов и матрицы задачи, а также в случае, когда число переменных столь велико, что описание я-мерных массивов недопустимо. 203
§1 *PR0CEDUREfPLAV(A,C,Dl,D2,Bl,82,X,M,N(EP$<EPS2,EMl,EMA>; IARRAY'A,C,D1,D2,B1,B2,X; 'INTEGER'M#N;'REAL'EPS,EPS2,EMI/EMA; »eEGIN"INTEaER'bJ.K,lT,I0,JO.JJ,K.1,I00fJJO,L#n,Ji; 'BOOLEANreL1,BL;'REAL'R1,R2,&Y.TT,XI0.TlOiALiCX,GZ; 'ARRAY'DT,XP,TH[1 :N3 ,P,Q,Y/Y1 Л2И :N3 ,UM :Ni VNi; 'INTEGER''ARRAY'BSCI:N3/BS1И:Mli »PROCED»URErOBRCPi; ; ' I NTE,G ER' pi ; ' BEG I N ' 'SWITCH' PER:=M1 ,f\2,M3, M4 ; ' GOTO' PERCPH ;' M1:'FQR'l:=1'STEPM'UNTIL'K'DO''BEGIN'Y2Cl3:=o; ' FOR' J :=1 'STEP'1 'UNTIL'1С' D0'Y2CI1 :=Y2Cl3+U[I , J3 *AC6S1 N 3 , J 0Д #END' ,'R1 : rY2tI03; ' FOR'J :=1 'STEP'1 'UNTIL'K'DO' 'BEGIN'U[10,J3 :-UClO,J3/R1/' 'FOR'I:*1'STE:PM'UNTIL'IO-1,IoM'STEPM'UK!TIl.'K'DO' U[I,J3:=UtI,J3-UtIO,Jl*Y2EI3'END';'GOTO'M5J M2: < FOR' I : =1 ' STEPM 'UNTIL'К'DO' 'BEGIN'R1:=UCI0,I3;UCI0,13:=U[K/I3;U[K,I3:=R1'ENP'; #FOR'I:=1'STEPM'UNTIL'K'DO' 'BEGIN'R1:=UCl,jJ03;uCI,JJO]:=UCbk3;ULr,K3:=R1'END'; 'f0r'i:=vstepm,until'k-1'd0''&e6in'r1:-uci/k1/uck/k3; 'for'j:=1'step'1'until'k-1'do' Uci,j::=u[I/J3-uck,j3*ri'ENd'; R1 :=BS1 С J J 0 3 ; BS1 [J J 03 :=BS1 С к 1; & s 1 ck3 : rRi ; R1:=bslio3;bscio3:=bsck3/bsck3:=ri;k:=k-i;'goto'Ms; M3 :R1 : -АПОО , J03 ; 'F0R'I:=1'5TEPM'UNTIL'К'DO''BEG1N'Y2LI3:=o/ 'F0R'J:=1'STEP")'UNTIL'K'D0/ 42CI3:=Y2ci]-uci.ji*acbsicji#jo:;ri :-Rl+Y2LI3*A?lOO , Bscm 'END.'," FORM :=1 'STEP'1 'UNTIL'K'PO' ,BEGIM''FOR'J:=l'STEPM'UNTTL'K'DO'UtI.J3:=UtI,J3+ Y2Cl3*PCJ3/Ri;UCI/K + l3:=Y2Cn/Ri;uCK + 1,I3:rpCl3/R1 «end'i; K:=x + i ;uik»K3 :=i/ki ; bsi с и з :-bsuk3 ;bsi [кз; = ioo; bscji3:=bsU3;bsck3:=jo;'goto'M5; m*:r1:=-pcjj03 ; ffor'j:=1'step'1'until'k'do' 'BEGIN'AL:=U[j , J J 03 : = ULJ/JJ03/R1; ' F0R'I;=1 'STEP'1 'UNTIL'JJO-1 ,JJ0 + 1 'STEPM'UNTU'K'pO' utJ ,13 :=U[J, n+AL*Pcn ' end' ; 'gotcm5; M5: 'END'O&R/ 'PROCEDURE'SHAG; >BEGIN'TT:=1;'FOR'I:-1'STEP'1'UNTIL'X'DO' 'BEGIN'L:=BS[I3;R1:=Ema;AL:-THtL3; mf(abs(al>>emi'then' 'begin' 'if'Al>o'then'ri:=(D2cl3-xll3)/al; 'if^al<0'then'r1:=cd1cl3-xll3)/al; ' IF'RKTT'THEN" BEGIN'TT: = Ra; 10: =1 ' EWO' ' FNO"END' i; 100: -O; loo: =o; 'FOR'KI :=K + 1 'STEPM 'UNTIL'M' DO' ' BEGIN' I :=BS1 U1 3 ; R1:=o;'FOR'J:=1'STEP'1'UNTIL'N'DO'RI:=R1+ACIiJ3*THtJ3; GZ:=EMA; ' IF'R1>EMI 'THEN' 'BEGIN'GZ :=YCI 3/R1; L: =-1/" CX:=Y[I3-R1'END' ;'IF'R1<-EMI 'THEN' 'BEGIN' CX:=R1-Y1 CI3 ; l:=1 ; GZ:=Y1 CI3/R1 'END' ,' lIF'GZ<TT'THEN,'BEGIN'TT;=GZ;iOO:=i;AL:=CX;TlO;-L;n:=k1 ' E N D ' ; E I : ' E N D ' I ; 'FOR'i: = 1'STEPM'UNTlL/X'DO''BEGIN'l:=BSCn7XP[L3:=o; 'FOR'J:=1'STEP'1'UNTIL'N'DO' XP[L3:=XP[L3+ACBS1LI3,J3*(X[J3+TH[J3)'E|MD'; MF'IOO=0'THEN'XIO:=X[BS[I033+TH[BS[I033; lFOR'J;=1'STEPM'UNTIL'N'DO'X[J3:=X[J3+TTATH[J3'END' SHAG;,' fpROCEDURE'KROP,'.'BEGIN'BY :=o; 'F0R'I:=1'STEP'1 'UNTIL'K'DO' 'BEGIN'DT[B5H33 : =-Q СП <" P П 3 : = UF'QtI3>EMl'THEN'-Y[BSi С I 3 3 'ELSE'O; 'XF'QLI3<-EMl'THEN,P[ni=-Y>l[aS1[:i3]'END'; BL; = 'true-' ; 'FOR'JJ :=K+>I 'STEPM'UNTIL» N'DO "BEGIN* J I^BSCvIJi; R1 :-o;xp[j: :=XCJ3 ; *IF'DTCJ3>EMI/THEN''BEGIN'Rl:=D1CJ3-XCJ3;XPCJ3:=D1CJ3/ mf'abscri;'ge'emi'then'&l:='false'; by:^by-dt[j3*r1 'end' ; ' if'dt[j3 <-emi'then' 'begin'r1:=d2[j3-x[j3;xpcj3:-d2lj3; mf'abscri; »ge'emi'then'bl: = 'false'/* by:=by-dtcj3*ri'End';th[J3:=ri; 'for' i :=1 'stepm 'until'к ' do ' p [ i 3 : =p l и + а с &s1 с i 3 , j3 *r1 j к j 5 'END'j;'FO«'I:=i'STEPM'UNTIL'K'DO''BEGIN'R'1:=o; ^0R,L:-1'STEP"l'UNTlL'K'P0'Rn:=R1+UCliL3*PCL3; 204
cx:=ycbsi tmjGZr-YtCBSi спз; MF'Q CI3>C'THEN' &Y : =BY+QCI3+CXJ ' IF'QC I3<0'THEN'BY: =BY + QCI3*6Z; 'IF'ABS(CX)<;EMI'AND'Q[I3<-EM I'THEN'BL:*'FALSE'," 'IF'ABS(GZ)<EMI'AND'QCI3>EMI'THEN'BL:=fFALSE'; 'IF'ABSCCX)>EMI'AND'ABS<GZ)>EMI'AND'ABS<QCl3)>EMl'THEN* BL: = ' FALSE' ,'TH CBS U33 :=-R1 ' END' 'END'KROP; 'PROCEDURE'CIG/'BEGIN''BOOLEAN'BL1;»KEAL'RL,RP/ gz :=etaa;r2:=o;tt:-o; ' GOTO'MC; *М:ТТ:=ю17; ' FOR'J :=1 ' STEP'1 'UNTIL'N'DO "BEG IN' 'IF'A BSCTHCJ3XEMI'THEN' 'GOTO'JXK ; 'IF'0TCJ]*THCJ3<-EMI'THEN,,BEGIN'R1:=-0TCJ3/THCJ]; MF' RKTT'THEN' 'BEGIN'TT:=R1 ; J0:=J 'END' ' END'/'JKK; 'END'J; mc:bl:-'truE';jjo:=o;r2:=R2+tt; bl:=*true';Jjo:=o;r2:=r2+tt; 'FOR'J J:=1 'STEP'1 'UNTIL'N'DO' 'BEGIN'J:=BSCJJ3; DTCJ J : = DTCJ3+TT*THU3 ; ' IF' ABS CDTCJ]) <EMI 'THEN' 'BEGINS 'IF'JJ>K'THEN' <3EGIM'GZ:=D1[J];CX:=D2CJ];RL!=D2[J3-XCJ3; RP:=X[J3-D1CJ3;BL1:=/TRUE»'END'1ELSE' 'BEGIN'BLl : = ' FALSE' ,'GZ:=&1 CBSi [J J33 ; CX:=B2CBS1 UJ33,' RL: =YCBS1 [ J J3 3 ; Rp: = -Y1 CBS1 I J J]3 i END' /' Rt :=0;'IF'THCJ3<-EMI'THEN'R1:=THCJ3*(XPCJ3-CX> ; 'IF'thcj3>emi'then'ri:=thi:j3*(xpcj3-gz);al:=al+ri; 'if'r1>0'then''begin''if'rl>emi'and'rp>enl'then''begin' mf<&l1'then"be6in'j1:=jj?j0:=j'end' 'else' jjo: = jjj &!_: = ' false' 'end' ; mf f bl'then''begin' 'if'bli 'then' 'begin'ji:=jj;jo;=j'end' 'else'jjo:=jj'end,'end/'end''end'j; 'if'al<-eps2'then''goto'mm; Kc:fFOR'I:=1'STEP/1/UNTIL'X'DO'OCl3:=-DTLE.SLl33'END'CIG/ 'FOR'I:=1'STEP'1 'UNTIL'M'DO'&SI С 13 :-I ; it:=<:=o;'for'j:= 1'stepm'until'N'do» »BEGIN'&S[J]j=J;DTLJ3:=-C[J3'END'; 'FOR'i:=i'stepm'Until'M'do''begin,ri:=o; 'f0r'j:=1'step'1'until'n'd0'r1:=r1+a[i,j]*xcj3; Y1 [I] :=B1 [I3-.R1 ; YCI3 :rB2Hl3-Ri 'END' ; nc:krop;'if'Bl'then''goto'kon;shag;cx:=o; 'FOR'J:=1'STEP'1'UNTIL'N'D0'CX:=CX+CCJ3*XCJ3; PRINTCNEWLINE,''ИТЕРлиИЯ'' ,IT, ( f CX-' ' , CX); R1 :=0; ' FOR' I:=-l'STEPM'UNTiL'K'DO''IF/QCn<0 'THEN'R/\:=Rl+B1CBSlCI33*QCl3'ELSE'R1i=R'i + B2CBSir:n3*QCl3; / FOR' J-.-Л 'STEPM'UNTIL'N'DO''BEGIN' 'FOR'I:=1'STEP'1'UNTIL'K'DO'>IF'J=BS[I3'THEN''GOTO'KKK/ 'IF'DTEJ3<0'THEN'R>I: = R/I-DTCJ]*D2[J3'ELSE' *M :=ri-dtcj3*diCJ3;kick: 'END'j; PRINTO ' BY' ' ,R1, NEWLINE) ] MF'C1-TT)*BY'LE'EPS'THEN" GOTO' KON/ I т: = i т + 1 ; 'FOR'l:=1'STEP'1'UNTiL'M'DO''&EGIN-'R1:-o; ' FOR' J : =1'STEP'1'UNTIL'N'DO'Rl: =R1 + А СI , J ] * X С J 3 ,r Y1 CI3 :=B1 LI3-R1; YCI3 :=B2CI]-RV END' ,' 'IF' 10 =0.5'7HEN''G0T0'C&; L:-BSC10 3; 'IF'XI0<D1CL3+EMI'THEN',BEGIN'TIQ:*1; AL:-XIO-D1CL3'END''ELSE"BEGIN'TIO;=-1; AL:=D2CL3-XI0'END'; 'FOR' I:=1 'STEP'1 'UNTIL'K'DO' 'BEGIN' ptl3:=U[IOfI3*TTO;THCBSCI33:=-.pCI3'END'; 'FOR'JJ:=K+1'STEP'1'UNTIL'N'DO''BEG1N'J:=&SCJJ3/ R1:=0;,FOR'I:=1'STEP"1'UNTIL'K'DO' R1:=R1+PLI3*ACBS1CI3,J3 |THC,J3:-R1'END'J/ CIG;'IF'JJ0<0t5'THEN' 'BEGIN'DTCBSCIO]] : =TI 0 *R2 ,' 0 &R (1 ) \ BSCJ13 := & S СI 0 3;&SCIO]:=JO'END' v ^ t tm t ELSE''BEGIN'DTtBSC1033:=T10+R2;0[J J 03i-QEКЗ/0BRC2)'END'; 'GQTO'Nc; CB:'FOR'l:=1'STEPM,UNTIL'K'DO''BEGlN'R/l:^0/ 'FOR*Lt-1'STEP'1'UNTIL'K'DO' R1 :=Rl-ACIOO,BSCL33*UCLrI3;PLl3:=R1JTHCBSCI33 tsRi*TIO'EWD'; ^FOR'JJ:=K + 1'STEPM 'UNTIL'N'DO' 'BEGIN'J:~BSCJJ3; ri:=A[ioo,j3;'for'i:=i'Stepm'UNTil'K#do' r1 :=r1 + pci3 *-albsl ci3 , j3 /'thcj3 :--r1 *ti0 'emd'j ; CIG/'IF'JJ0-0'THEN''BEGIN'0BRC3 3;QEK3:=-TI0*R2'END''ELSE' 'begin'obrU) ;bs-i с из: =bsi с J J 03/ bsi ujo3 :-ю ; ocjj03:=-tio*r2'end'; •'goto'nc; 205
KON:CX: =o?'FOR'i:=l'STEP'-|'UNTlL'N'D0'CX:=cX+ccn*x[l3? PRINTCNEULINE, ''ЧИСЛО ИТЕрАИИй' ' , I T,NEWLINE)/ PRINT С 'ЗНАЧЕНИЕ <t>yHKUMH'',CX,NEWLINE>; PRINT С "ОПТИМАЛЬНЫЙ nnAH'',NEU/LINE,X,NEWLINE); PRINTCNEULlNE, ' ' РАЗМЕРНОСТЬ ОПОРЫ' ' , К) '. К. К : г END' PLAV; $ 2 'PROCEDURE'OnoPHK(M,N,A,B,C,D1,D2,X,S,E); ' INTEGER'M,N; ' ARRAY'A,В,С,D1 ,D2,X; 'REAL'S,E»' ' BEGIN» ' INTEGER' I , J , 10 , JO , IT; ' BOO L E AN ' BI , В L,' 'REAL'R,DJG/ 'INTEGER' ' ARRAY ' BSM :ИЗ; 'ARRAY' ABCl:M,1:M3,L,Ulli:H3;'PROCEOUREfSTART; 'BEGIN» ' INTEGER' I , J ; ' RE A L ' R ,* IT : =0 ; 'FOR'I:=1'STEP'1'UNTIL'M'DO"BEGIN'R:=BCI3; 'F0R'J:=1'STEP'1'UNTIL'N'D0'R:=R-ACI,J3*XCJ3; 'FOR'J:=1 ' STEP M 'UNTIL'M'D0"BEGIN'ABCI,J3 : -0,- AC I ,N+J J : sO • ENt>' ; ABCI , 13 :='IF'R<0'THEN'-1 ' ELSE '1 ,* а с i ,N + i::rABci ,i3 ; xln+i3:=abs(r;;bsci3:=n+i;'end'; ' end' start,'fprocedure'kropt;'begin''real'r1,r2, от; ' for' i ; =1 ' stepm 'unti l'm' do'uc 13 :=o; ' FOR' I:=1'STEPM'UNTiL'M'00"BEGIN'J:=BStI3; R:='IF'J>N'THEN'-S'ELSE'CU3,"F0R'J:=1 'STEP'1'UNTIL'M'D0'UCJ3:=UCJ3+R*AB[I,J3'END'I; DJO:=0; 'FOR'J:=1 'STEP'1 'UNTIL'N+M'DO' 'BEGIN' 'FOR'I:=1'STEP'1'UNTIL'M'DO'' IF'J = BSLI3 'THEN"GOTO'KJ;'IF'J>N'THEN''BEGIN'R2:=S; ri;=o;dt:=ucj-n3+s;' end''else»' begin.'ri:=piсJ3; R2:=D2CJ3;DT:=-cCJ3; F FOR' I : =1 'STEP'1'UNTIL' fl'DO'DT}=DT + UCI3*AlI,J3'END'i'IF-'ABS(XCJ3 *R1)<E'THEN"BEGIN''IF'DT<-ABSCDJ0)'THEN' 'GOTO'MJ?'GOTO'KJ; 'END' ;'1F'ABSCX[J3-R2XE *THEN"BEGIN''lF'DT>ABSCDJO) 'THEN' • GOTO'M J ; 'GOTO'КJ;'END';'lF'ABSCDT)<ABSCDJO)'THEN' 'goto'kj;mj:djo : =DT;jo:=j;kj:'end'j; uf/abscdj0><e'then"goto'kkk,"end'kropt; 'procedure'Teta;'begin''real'tt,ljo,ri; ljo:=-signcdjo);^for'i:=1'stepm'until'm 'do"begin'r:=0/'for'j:=1'stepm?untll'k'do' R:=R+ABtI,J J*AC J,J03;ULIlS=R?tCl]:=-R*LJO'END'X; BL:='TRUE';fIF'JO>N'THEN"BEGIN'TT:='IF'LJO>0 'THEN'S'ELSE'XCJ03'END/fELSE'TT:r/lF'LJO>0 'THEN'D2EJ03*XU03 'ELSE'XCJ03-D1 CJ03; ' FOR' I J =1 'STEP'1 'UNTIL'M'DO' 'BEGIN'J:=BS CI3;R:=LCI3; R1:=S,"IF'R>E/AND'J''LE'N'THEN'R>I:-(D2CJ3- XCJ3)/R;'IF'R<-EfTHEN"BEGIN'R1;='IF'J'LE'N /THEN' CD1 CJ3-XCJJ)/R'ELSE'-XCJ1/R'END' ; 'IF' RKTT'THEN' 'BEGIN'TTI^RI ? IO: = i;BL: = ' FALSE' ; 'END',* 'END'I/ 'F0R'I:=1-'STEPM'UNTIL'M'D0' 'BEGIN* J:-BSCI3;XCJ3:=XLJ3+TT*LCI3 ' END' ;x L J 03 : =XC J03 4- TT*LJ0?IT:=IT41MIF'BL'THEN' ' GOTO'NN,* rend'teta;' procedure'opora;»begin'&s[io3;=jo; 'FOR'J:*1'STEP'Л'UNTIL'M*DOf ABCIO, J3 J^ABCIO,J3/UCI01;'FOR'l:=1'STEPM 'UNTIL' 10-1,10+1 iSTEPMfUMTIU'M'00'/FOR'J:=1'STEPM *UNTIl'M'D0'ABCI,J3 :=ABCI ,J3- ABCIO, J3*UC 13 ," END'OPORA; .'PROCEDURE ' fin; 'BEGIN'CX:=0;'FOR'l:=1'STEPM'UNTlL?M'DO'LCnt=:BCl3; 'FOR'j:=1'STepm"JNTil/N'do''begin»cx: = cx-i-c[J3*xcji; 'FOR'I:51'STEPM'UNTIL'tt'DO'LCM:=LCI3-ACX/J 3*XCJ 3'END'J PR I NT С NEW LINE, "НЕВЯЗКА" , L> ; PRINTcnewline, "cx=" , ex); PRINT(NEWLINE,«'ОПТИМАЛЬНЫЙПЛАН'',X>; 'END'; start;nn;kropt;teta; CX:«q;'FOR'I:=1'STEPM'UNTIL'N + M'DO'CX:= 'lFri'LE'W'THEN'CX+CCn*XCI3'ELSE'CX-S^XCI37 PRINT (NEW LI'NE, " I Та " , IT . ' ' CX= " , CX) J opora;'gqto'nnikkK:FXn;'END'OnopHM; 206
§ з ( PROCEDURE'DP LAV С А, С, D1 .D2,B1.B2,X,NCA.M,N,AK,.CK,D1K,D2K.BilK, B2K,M0,BUFi EPS) ; 'ARRAY'A, CD1 ,D2,B1 ,B2,X; ' INTEGER' 'ARRAY'NCA; ' XNTEGER'M,N,AK,CK.D1K/D2K,81K.B2K,M0,BUF; ' REAL' EPS ; 'BEGIN"INTEGERJIiJ,I1,J1.I2,j2fIIlJJlrJ#JIfNC,N01lND2lI0fJ0, lOO.JOCIX.JX.lT.ROPl.ROPE.K.-'REAL'T^TjR^R^CRiALrLH.El^BR, OT,-'REAL'SIG.BT;'INTEGER'K1,NO/DN1,DN2; 'ARRAY'A1El :ЦО,1:МОЗ,А2П rBUF-MO.I.'BUF-MOJ^A.p^LOPClzBUF], V,WC1:H1;'INTEGER''ARRAY'BS,BS1C1:BUF];'BOOLEAN'BL; 'REAL''PROCEDURE'KB(NiY,PN,PK,B);'VALUE'Bin;'INTEGER'N.PN, PKi* 'REAL'S.' 'ARRAY'Y; 'BEGIN' 'REAL'R; ' INTEGER' I. Л ,*R: =B; iFOR'I:=PN'STEP'1'UNT1L'PK'DO''BEGIN'PLAOR1CYCI],J1); *if'ji>n'then''goto.'eicb;'if'ji = n'then'«begin'pn: = i + i; r:«y гх]; 'goto'б kb'end,'eno,i;ekb:kb:=r'end/kb; ' real' 'procedure'rwcj),*'yalue'j,*' tnteger'j ; 'be gin' 'real'r ; ' integer» i;i: = bsicj3;r:=o;ndi:=nd2: = i;'if'ucj]>ei'then' R:=ICBCIrB2»ND2,B2IClBR}-WCIJ;'lF'UCj3<-E1'THENl R: =KBCI , B1 , N01 , B1K, -BR)-WCI3 ,' RW:=R» END1 RW,' 'PROCEDURE' КАОРТ; 'BEGIN' 'FOR' l:=1'STEP'1'UNTIL'R0Pl'D0' UCr]:=o;'FOR'l:=1'STEP'1'UNTU'ROpi'DO''BEGIN,I1:=BSCl3; «C:=i;CR:=KBU1,C,NC,CK.Oj;'lF,CR=0'THEN''GOTO'Ki; ' FOR'Jral'STEP'l'UNTIL*ROP1* DO'UCJ3:=UEJ3 + CR*AUI.J3? KI: 'END' I,* ' IF'ROP 2 = 0'THEN' 'GOTO'KU; ' FOR' I :=1 'STEP'1 'UNTIL' R0P2'D0''BEGIN'11:=BSCR0P1+I3;NC:=1; PCn:=KBCl1(C,NC,C)C.O);J1:=NCACI1-H3-NCACI13; JJ:=0; 'F0R'J;=1'STEP'1'UNTIL'J1'D0' 'BEGIN'12:=NCAC113+j; PLA0R1CACr23,J2>;'F0R'II:=1 'STEP'1'UN TIL'R0P1'DO "lF'BSltIl3 -J2'THEN''BEGIN'PCI3:=PCI3-ACI23*U?II3;JJ:=JJ+1;'IF'JJ=R0P1 'THEN' 'GOTO'ZJ'ELSE' 'GOTO'KJ'END' ;KJ : ' END ' J .'Z J : ' END ' I; 'FOR'J:=1'STEP'1'UNTIL'ROP2'DO''BEGIN'r:=ROP1+j;uCl3:=o; «F0R'n:=1'STEP'1'UNTlL'R0P2 ' D0'UCI3:=UCIJ+PCII3*A2CI I,J3 * END' ; 'F0R'I:=1'STEP'1'UNTIL'R0P1'D0' 'BEGIN'11:=BS[I3;J J:-0;PCI3:=o; Л :=NCAEI1 + 13-NCACI13; 'F0R'J:=1'STEPM'UNTU'J1'D0' 'BEGIN' I2:=NCALI13+J;PLA0R1CA[I23,J2); 'F0R'Ii:*1,STEP'1'UNTlL'R0P2,D0"lF'BSUR0P1+rn=J2'THEN' *begim'Pci3:»pci3+ucropi + ii3*ai:i23;jj:sjj + i; 'rf'jj=r0p2'then''got0'zj1'else''g0t0'kj1'end';kj1:'end'j; 2Jl:'END'r;'F0R'l:=1'STEP'1'UNTIL'R0P1'D0' 'F0R'J:=1#STEP'1'UNTIL'ROP1'DO'UCl3:=UCI3-PCJ3*A1CjfI3; KU:BT:so;ndi:=Nd2:*NC:»i;'Fort;=1'STeP'1 'UNTlL'M'DO'vm : =WCI3 : =0,¦ 'F0RIJ:=1'STEP'1'UNTIL'N'D0''BEGIN'BL:='FAL5E'; 'FOR'r:=1'STEP'1'UNTIL'K'D0''IF*BSCIJ=J'THEN''BEGIN' В L: *' TRUE' /' 'GOTO'KDI 'END';DTr=-KBCJ,C,NC,CKfO);KD1: J1;=NCACJ+13-NCACJ3;jj;=0;'FOR,r:s1/5TEP'1'UNTIL'J1,DO» 'BEGIN' r2:=NCAU3 + i; PLA0R1(ACI23/J2);WCJ23:=WCJ23+ACI23*XCJ3; 'IF'BL'OR'JJ=K'THEN''GOTO'KIi; 'FOR' II:=1 'STEP'1 'UNTIL'K'DO» 'IF'BS1CII3 = J2'THEN' 'BEGIN'DT: = DT + A С I 2 3 *U С 11 3 ,* J J : = J J +1 ' END ' ,' KII:'END'i;'IF'BL'THEN''GDTO'KBJ;lH:=o;'IF'DT<-E1'THEN' UH:=KBCJ,D2,ND2,D2K,BR)-XCJ3;'IF'DT>E1'THEN' LH:=KB<J,D1 ,ND1 ,D1K,0)-XLJ3;BT:=BT-DT*LH; 'FOR'I:=1'STEP'1'UNTIL'J1'DO,'BEGlN'l2:=NCAi:j3+i; PLA0R1 CALI23 , J 2) ; VCJ23 : = V [ J 23 ^A С I 23 *LH ' END ' ;KBJ; 'END'," 'F0R'I:=1'STEP,1,UNTIL/K'D0'BT:=BT*UCI3*RWCI); #rF'BT<EPS'THEN''G0T0'KON'END'KR0P; 'procedure'blop; 'begin' 'f0r'ij=1'step'1'untll'r0p1 'do' ' begin'cr:=0; ' for'j :-1 'step m 'untll'ropi 'do' cR:=cr+aici,j3*(RW(j)-vubs1?J33);lopci3;=cr'end'; IF'R0P2-0'THfcN*'GOTO'MN; 'F0R'I:=1'STEP'1'UNTiL'R0P1'D0''BEGrN'l1:=BSCl3;JJ:=0; Л :=NC А С 11+ 13-NCA СИЗ," ' FOR'Л=1 ' STEP'1 'UNTIL'Л 'DO' 'BEGIN' I2:=NCACH3 + J;PLA0R1CACI23,J2); 'FOR'II:=R0P1+1»STEP'1'UNTIL'K'DO' •'IF' BS1 CII3=J2' THEN' 'BEGIN'VCJ23:=V[J23+ACI23*L0P[I3;J J:=jj + 1; *IF'JJ=R0P2'THEN''GOTO'tf2'ELSE''GOTO'MI'END'i tf1 : ' END ' J ,'M2 . 'END' r; f FOR'I:«1 'STEP'1 'UNTIL'ROP2'D0' 'BEGIN'PR:=0; 'FOR'Л=1'STEP'1'UNTIL'R0P2'D0' PR;aPR-A2CI,J3*CVCBS1CROP1+J33 *RW(R0P1 +j>);lopi:ropi + i3:=pr'end'; 'FOR'J:=R0P1+1'STEP'1'UNTIL'K'DO' 'BEGIN'Ц:=BSCJ3;Л:=NCACI1+13-NCACI13; 207
TF0R*r:*1 'STEPM 'UNTIL'Л 'DO' J BEGIN*12:=NCА С If3+i;pLAOR1 CAQ2 3,J2>; V[J23:=VCJ23+ACl23*LOPtJJ 'END'I'END'j; 'FOR'I:=1'STEPM >UNTIL'ROP1'DO " ВEGI N'PR:=0? > FOR 'J : =1 ' STEPM 'UNTIL'ROPVDO' PR:sPR-A1CI,J3*<VCBS1CJ33-RW(j;); LO PEIJ : = PR'E ND ' I ,'MN :'FORM : = 1'STEPM 'UNTTL'ROPI'DO''BEGIN' I1:=BSCJJ;J1:rNCACH + l3-NCACI13; JFORM:=1'STEPM'UNTIL'J1'DO' 'BEGIN' I2:=NCACH3 + i; PLAOR1 (AC I 23. J2) JVC J 23 ;=VU 23+A С I 23 ПОР С J 3 «'ENDM'END'J'END'BLOP; 'PROCEDURE'SHAG;'BEGIN'TT:=1/ *F0R'I:=1'STEPM'UNTIL'K'D0' 'BE&IN'J:=BSCI3;CR:=L0PCI3; ' IF ' ABS (CRXE1 'THEN" GOTO'MT,' NC:=1;'IF'CR>E1'THEN'R;=KBU,D2,NC,D2K,BR);'IF'CR<-E1'THEN' R:=kB<j,Di/MC/DiK, );r:=cr-xcj3)/cr;'if'r<ttmhen' ^beginmt:=r;jo:=i'end';mt:'end'i;io;=o;nc;=ndi;=i; » for' i : = 1' stepm * until' m'do' yBEGIN''FOR'J:=1'STEPM'UNTlL'K'DO' *IF'BS1CJ3 = I'THEN"GOTO'KS; CR:-VCI3 ; ' IF'ABSCCRXE1 'THEN" GOTO' K$7 'IF'CR>E1'THEN'R:=KB(I,B2,NC,B2K,BR);MF'CR<-E1'THEN' Rj=KB(1,B1»MD1,B1K,-BR);R:=(R-WCI])/CR;'IF'R<TT'THEN"BEGIN' tt:=r;io; = i'end';ks:'endm;mfmo=o'then"begin' kl;-mf'lopcjoa<0'thenm'else'-1'end' 'else" begin' k1:='if'vci03> 'thenm'else'-1 'end" end's hag; 9PROCEDURE'SlGJo;'BEGlNySIG:= 18; BL:='FALSE';i0O:=O;JI:=JO-ROPi; 'FORM:=ROP1 + 1'STEPM'UNTIL'K'DO"BEGlN'R:=A2tJ I/I-R0PU*K1; mincig;'if,bl/then"goto'jccend'i; XC: ' FORM J :=1 ' STEPM ' UNTIL' ROP1 ' DO' 'BEGIN,J:=BSCIJ3;R:=0;JJ:=0;J1:=NCACJ+13-NCACJ3; *F0RM:=1'STEPM'UNTIL'J1'D0» 'BEGIN112t =NCACJ3+17PLAOR1(А СI 23 ,J2) ; »FOR'II: = ROP1+1'STEPM'UNTIL'K'DO"IF'8S1CII3 = J2'THEN"BEGIN' R:=R-A2CJI,II-ROP13+ACI2J:JJ:=JJ+1;'IF'JJ = R0P2'THEN"G0T0'MJ2 'ELSE''GOTO'MJI'END'JMJ1:'END'I;MJ2:PC]J]:=R'END'IJ; ' FORM 1^1'STEPM 'UNTIL'ROP1'DO" BEGIN'R:=0 ; 'FORU:-1'STEPM'UNTIL'ROP1'DO'R: = R+PCJ3*A1CJ,I3;VCI3:=R; R:~R*K1 ; 'IF"N0T'BL'THEN'MINCIG'END' I; ^<D1:-lNP2:s;NC:r1;Joo; = o;'FOR'J: = l'STEPM'UNTIL'N'DO, *BEGIN"FOR'I:=1 'STEPM ' UNTI L ' К ' DO " I F ' J = В S С П ' TH EN " GOTO ' KE J ; DT:=*KBCj/c,NC,cKr );r:=o;jj:so;ji:sncacj+i3-ncacj3; 'F0R'I:=1'STEPM'UNTIL'J1'D0' *BEGIN'I2:-NCACJ3+i;PLAOR1(ACT23,J2); *FORMI:=1'STEPM'UNTlL'K'DO''IF'BS/l[Il3 = J2'THEN"BEGINf ?R: = 'IFMl>ROP1'THEN'A2CJI/rl-ROP13*ACI23'ELSE'VClr3*ACl23; R:sR + PR;DT:=DT + UCII3+AtI23;jJ:=JJ+i;MF,JJ = K'THEN"GOTO'Pl6 *ELSE"GOTO'M5'ENDMl;M5:'END'i;M6:OPTDT;HXJ;KEJ:'ENDrj; 'FOR'I:-1'STEPM'UNTIL'K'DO'XEBSCi33:=XCB2[l33+TT*LOP?l3; *IF'(1-TT)*BT<EPS'THEN"GOTO'KON'END'SIGJO; *PROCEDURE'MlNCIG;/BE&lN'DT:=uCl3;MF'ABSCDT)<E1/rHEN"8EGlN» NM:=ND2;=1; T:=o;il:=BS1cn;'IF'R>E'1'THEN'T:=KB(I1,B2,ND2,B2K,BR;-WCli:; »IF.'R<-E1-'THEN'T:-K3CI1/B1,ND1/B1K,-BR;-WCI13; •IF'ABSCT)>E1'THEN' 'BEGIN'BL:='TRUEl;AL:=K1*R;srG:=o;ioo:=I'END"FND'; 'IF' DT+R<-E1 'THEN"BEGlN'PR:=-DTlR;'IF'PR<SIG'THEN"BEGrN' Ioo:=i;sig-:=pr;al:-K1*R/E"ND"eND"END'MINC1g; 'PROCEDURE'OPTDT;'BEGlN/R: = M+R;'IF'A8S<DT)<E1'THEN"BEGIN' DN1:=ndi;dN2:=nd2; T:=o;'IF'R<-E1'THEN'Tj = KBCJ,D2,ND2/D2I<iBR)-X[:J3;'IF,R>E1'THEN' T;-KB<J/01/N01,D1K, )-XCJ3/'IF'ABSCT) = E1'THEN"BEGlN' SIG:=o;al:=K1*R;JOo:=j;BL:='TrUE''END';nd1:=DN1;ND2:=DN2'EN0'; ^if'dt*r<-ei'the^"begin'pr:=-dtir;mf'Pr<sig'then"begiK' jO0:=j;SIG:=PR;ALr=K1*R'END"END';KJK:'END'OPTDT; 'PROCEDURE'HXj; 'BEGIN' LH:=0," IF'DT=E1 'THEN' LH:=KBU,D1,ND1,D1K, )-XtJ3;'IF'DT<-E1'THEN' LHi=KB(J #D2,ND2, D2K,BR)-XCJ3 UCJ3 : =X С J 1 +TT*LH ' END'HXj; 'PROCEDURE'RCTOL(J00iP;;'VALUE'J00;'INTEGER'JOO; MRR ay 'p; 'BEGIN' JJ:=o; 'F0R'I:=1'STEPM'UNTIL'R0P1'D0'PCI3:=0; J1:=NCACJOO+13-NCACJ003; 'F0RMi=1'STEPM'UNTIL'JV DO'/BEGlNM2:=NCACJO03 + i; PLAOR1(AC123 , J2) ; 'F0R'II;^1'STEPM'UNTlt'ROP1'D0"jF'J2 = BSlCin 208
'THEN' РП13 : 'GOTO' 'PROCE 'VALUE 'ARRAY 'BEG-IN R: =PtJ 'BEGIN AQPCJQ ' FORfI AOPCI. PPROCE 'INTEG 'FOR'I ' FOR'J 'BEGIN ' FOR'I 'BEGIN ' IF'J2 Rl=ACI 1DO'PL 'END'; С I: f E H IN'R: =ACI23 ,"'FOR'I1r=1'STEP'1'UNTIL'ROPI'DO' 13+R*A1CH,II3;JJ:=JJ + 1;'IF'JJ = R0P1'THEN' LSE' 'GOTO'MI 'END' /Ml : ' END' I/'M2: ' end'rctol; 'MCTOLCJO,JOOrAOP;N,K)," joo,n;'INTEGER'jo,joo<n,к ; 'procedur 'VALUE'10 'ARRAY'AO r:=pcioo3 'DO'•BEGI AOPCJ,100 ' FOR'I:=1 AOPCJ,13: 'PROCEDUR tVALUE'1С 'ARRAY'АО RCTOLCJOO 'ELSE''BE Г FOR'I: = 1 AOPCII,13 AOPCI,J3* 'PflOCEDUR 'ARRAY'AO ' FOR» l:=1 f В E GI N ' R : H1 : ' IF'JO R:=AOPLJO M2:PR:=1/ R: =AOPCI, AOPCI,J3: fPROCEDUR 'ARRAY'P; • F 0 R ' J : = 1 J1 : = N С А СI 'FOR'I:=1 'BEGIN'12 ' IF ' J2=I0 'FOR'II:= R : = R + P С 11 J2'GE'10' 'FOR'I:=1 'FOR'J:= 1 PCI3 :=R' E 'PROCEDUR 'ARRAf'P; ' FOR' I:=1 'FOR» J:=1 HON:J1:-U tFOR' I : =1 fBEGIN'12 'FOR'II:= Г В E G I N ' V С 'GOTO'M2' fgoto» zj; 'GOTO'^ON 'BEGIW'R: ft}=R+A2LI 'N FOR = A0 :=PR 'STE = A'OP E'RC Ю," ' STE 'STE :=BS ' STE :=Nc 'THE ' FOR :=PC ' J2' 'END E'MC 0» 10 р; «в ;' fo N'PR 3 :=P 'STE = AOP E1 DO , JOO p; 'в ,W) ' GIN' ' STE : =-P R*PC E'YD о; 'B 'STE = AOP = K'T ,n; AOPt K3*P = AOP E'RI ' BEG ' STE 1+1] 'STE :=NC 'THE 1 ' ST 3*AC THEN 'STE ' STE ND' ' E'RA ' BEG ' STE 'STE CALI 'STE :=NC 1 'ST 113 : ELSE ' IF' 'END = o;' 1 ' THEN'RC TO L(JOO,P)'ELSE'RA2J0U00,P); J :=1 'STEPM 'UNTlL'K'DOf P С J 0 , J 3 1 R ; P'1 f CI,J TPCI ARRA P' 1 ' P' 1 ' cj] ; P'1' ACI1 N' 'B 'II: 113 + GE' I ' RCT UNTI 3-PR 0,P) Y'p; UNTI UNTI J1 : = UNTI з + i; EGIN = 1 'S R*A1 О 'TH p; L'JO-1,J 0+1'STEPM ' UNTIL'K'DO' * p с i 3'end''end'mstol; ;'value'io; ' BEGIN' L'ROPI'D0'PCI3:=0; L'R0P1 '00 ' NCACI1+13-NCACI13; L'Л'DO' PLA0R1 CALI23 , J2) ; i ТЕР'1'UNTIL'R0P1 CJ, 113 EK''GOTO'CI'END'i; tpcioo,io,aop,n,k) ; ,N; ' INTEGER' 100, Ю, N EGIN''IF'N=1'THEN'RC R ' J : =1 'STEP'1'UNTIL' :=AOPCJ,1003/r; r; P ' 1 'UNTI CJ , I3-PR B<10,JOO ,n;'INTE EGIN' ' IF END' RIOAaCIO P'1'UNTI CI3+AL; ' J 3 ' E N D ' I AL(IOO, J EGIN' ' IF P'1'UNTI с i, i о о 3; HEN' ' GOT AOPCJO , I к,кз;'fo r;'FOR' J CI,J3-A0 0А2СЮ , P IN'RCTP* P'1 'UNTI -NCACI13 P'1'UNTI А с 11з + i; N'PR:=AC EP'1'UNT I 2 3 ; J J : = ''GOTO'M P'1'UNTI P'1'UNTI END'A2; 2JOCJ0,P IN'RCTOL P'1'UNTI P'1 'UNTI 1+13-NCA P'1'UNTI А С I 1 3 + I ; EP'1 'UNT =VCII3-R GOTO'M J = R0P1 'T' ' ' E N D ' J ; FOR'J:=1 v с j з; p z i L' 100-1 ,100 + :*PCI3 'END'J' ,AOP,N,K); GER'10, J00,N 'N=1 'THEN' 'B ,P);RA2J0CJO L'K'DO ' 'BEGI FOR'J:=1 'ST E i ;aopcii , 113 : = 0,AOP,K);'VA ' I00 = K'THEN' L'K'DO' AOPC 1 , 1003 : = , 0 'M2," FOR' I :: 3 :=AOPCK, n;, R' I :=1 'STEP' : =1 ' STEP' 1 'Ui PCK,J3+R'END );'value'io; i о, p ) ; L'R0P2'DO' ' В ; J J: = о; R: = P R L'Л'DO' PLA0R1(ACI23 123; IL'ROPI 'DO' ' jj + 1;'goto ' м 12' END' i;M2:V L'R0P2'DO''В L'R0P2'DO'R ! ; >;'VALUE'jo; < J о , p ) ; L'R0P2'DO'VC L'ROPI 'DO ' 'B , с 113; j j : s о; L'J1'DO' PLA0R1(ACI23 I L' R0P2 'DO" ,*ACI23 ; J J :=J, '1 ' END' Ii;M1 : HEN''BEGIN'I ZJ:'FOR'i:=1 'STEP'1'UNTI 3 :=R'END' I 'El TP(I0,P)'ELSE'RIOA2(I0,P)f' К 1'STEP'1'UNTIL'K'DO' END^MCTp; ,к; EGIN' RCTPCIO , Р) ," 0,6) » END' ;AL:=1/AL;I I:=K + 1; N'r:=wci3*al;aopci, из:=-r; P'1'UNTIL'K'DO'AOPCI,J3:= =AL'END'DOB; LUE'IOO^OJ'INTEGER'IOO^O^,' ' G о т о ' h 1 ; AOPCI,КЗ;AOPCI,КЗ:=R'END'; = 1'STEP'1'UNTIL'K'D0" BEGIN' A0PCK,l3:rR'END'; 1'UNTIL'K-1'DO "BEGIN' NTIL'K-1'DO' ' ' END'ydal; 'INTEGER'IO; E GI N ' 11 : = В S С R 0 P1 +'J 3 ,* : =o; ,32); I F ' J 2 = В S1 С 113 ' T H Е N ' 'BEGIN', 1 'END' #M1 : ' If J J = R0P1 'AND' CJ3 :=PR-R'END'J,' E GI N ' R : = 0 ; = R+VCJ3*A2CJ , 13 ; ' INTEGER'JO,' I3:=o;bl:='false'; e g IN' R: = P С J 3; И : = 3 S С J 3 ; , J2); IF'J2=BS1CR0P1+II3'THEN' J+1 /"IF' J J = R0P2 ' THEN' ' END' I;M2: ' IF'BL'THEN' 1 :=J0;R:=-1;BL: = 'TRUE' ; 'STEP'1'UNTIL'R0P2'DO' L'R0P2'DO' N D ' R A 2 J 0 ; 209
'PR0СЕDURE'MAXIX ,' 'BEGIN' 'UNTIL' ROP2'DO'VCI3 :=0,# 'FOR'J:=1'STEP'1'UNTIL'ROPI' J1 :=NCACI1+UrNCACH3 ;JJ:=0; *FOR'I:=1'STEP'1'UNTIL'J1,DO''BEGlN' I2:=NCACI13 + I;PLA0R1 (А С I 23 ,J2>J 'FOR'IIJs-i 'STEPM 'UNTIL'R0P2'D0' FOR'lt = 1'STEPM DO''BEGIN'И:= В S Г J 3 7 ?IF'J2*BS1 CROP1+II3?THEN' /BEGIN'VCII3:=VCII3+ACI23 gj:?JJ+i;'IF'JJ=R0P2'THEN iki: ?endt;kjj: 'end'j;r: = 'IF'ABS<VtI3)>R' THEN' 'BEG R;»ABS(VCU)'END"END'MAX JPROCEDURE'MENIX;'BEGIN'' ?BEGIN'R:=o;'FOR?J:=1'STE 'DO'R:rR-A2tl,J3*VU3 ; pcj3:=r?end';'for'i:=1 'st ncj=bsilropi+ix3;mctpcioo bsi CRopi + iX3t=Bsinoo3 ;bs 'procedure'ujoajсii,b;;'i IJ?=ropi; OT:=r:=o;jj:=o;Л:=NCACI1 «F0R'I:=1'STEP'1'UNTIL'J1 'BEGIN'I2:=NCACI13+i;PLA0 'FOR?Il:=1'STEP'1'UNTIL' I 'IF'J2=BS1CII3'THEN''BEGI R:=R4A1CJ0/II3*ACI2lfJJ:s fIF'B'THEN'DT:5DT + UCH3*A 'IF' J J = I J 'THEN' /GOTO'G2.'E G1 : 'END'i;G2: 'END'UJOAJ; 'PROCEDURE'SlGlo;'BEGIN'I SIG:= 18/BL: = 'FALSE' ; ' IF ' /BEGIN'RCTP(IO,P>; »FOR'i:=1'STEP'1'UNTIL'K' vcn :=-pci3; 'IF"NOT'BLfTHEN'MlNCrG'E IGOTOfNI?EN0''ELSE'RIOA2( &L.: = 'FALSE'/ .' FOR' I:=ROP1+ rDO''BEGIN'R:=-PCI-ROPl3; УСП :=r;r:=ki*r; ? IF' 'not? ' FOR'J :»1 'STEPM 'UNTIL' RO BL: = *FALSE';ji:=NCAi:ii+n 'FOR'l:=1'STEP'1'UNTIL'J1 'BEGIN'I2:=NCACI13+I;PLA0 *IF'J2»I0'THEN'Ri=R-ACl23 *F0R'II:=R0P1+1'STEP'1'UN 'IF'BS1CIl3-J2'THEN"BEGl R:=R-vrii3*At:i23; J J: =J J+1 YA:'IF'JJ=ROP2'AND'J2'GE' 'THEN''GOTO?AY'END'I;AY: P tFOR'I:=1'STEPi1'UNTIL'RO *BEGIN'R:=Oi'FOR'J:=1'STE 'D0'R:-R+PCJ3*A1 CJ, I3/VCI R: = K1+R/?IF'«NOT'BL'THEN' NI:ND1:=ND2:rNC:=i;JO0:=O 'FOR'J:=1 'STEPM 'UNTIL' N' 'BEGIN?'FOR'I: = 1'STEP'1'U 'IF'J = BS[l3'THEN"GOTO'KE J1 :=NCACJ + 13-NCACJ3 ;'FOR' I2:=NCACJ3+I;PLA0R1(ALI23 * FOR'II1=1?STEP?1'UNTIL'K RJ=R+VCII3*ACI23;DT:=DT+U 'GOTO'M5/END' Ii; M5:TF'JJ = K'AND'J2'GE'I0' 'END?i;M6:0PTDT;HXj;KEJ:' 'FOR'l:=1'STEPM ?UNTIL'K' +A1сj, ioo3; ?'GOTO'KJJ'ELSE''GOTO? o; ' FOR? I: = 1 'STEPM 'UNT i n ' i x i -1; ix; F0R'i:=1'STEP?1'UNTIL'ROP2'DO' PM ?UNTIL'R0P2 EPM 'UNTUf R0P2'DO» A2C 1,1X3 1-РСП; ,NC,A1 ,1 ,ropd; 1CI003:=NC;IO0:aROP1+I> NTEGER'11/fBOOLEAN'B/ " IKI'END'; H'R0P2'D0» tX'END'MEMX; 'BEGIN' +13-NCACI13; ?D0? R1 (ACI23 , J2) ; J 'DO' N"lF"N0T'BLf AKD'II'LE?R0P1'THEN' jj+1 ; С I 23 / LSE? 'GOTO'GI ' END' ? о о: = о; R0P2=0'THEN' po' 'iBEGiN'R;=-KT+p[n; MOM; io,p) ; 1 'STEP'1'UNTIL'K BL'THEN'MlNCIG'END'I/ pi ? do "begin' и ; = bscj3;r:=c; jjjso; -NCAri13 ; ' DO» R1 (ACI23,J2); f IL'K'DO' N' ;'goto'Ya'end'; io cj3:sr'end' j; pv do' PM 'UNTIL' R0P1 3: = r; mincig'end' i; DO? NTIL'K'DO' j; d т:=- к в с j,с,n с,с к, );ri=0;j j:=0; I :=V STEPM 'UNTIL'J1 'DO' 'BEGIN' ,J2)/'IF'J2 = I0'THEN» R:=R+ACI23; 'DO''IF'BS1Г.IIЗ=Jг'THEN''BE&IN' CII3*ACI23?JJ:*JJ+1; THEN' 'G0T0'M6/ END'j; DO'XCBSCi33:=XCBSCl33+TT*LOPCl3/ UF' (1-TT)+BT<EPS'THEN? 'GOTO'KON'END'SIGIO; 'PROcedure'start; fBEGrN''FOR?I:=1'STEPM'UNTlL'M'DO'WLl3:=0; fBEGiN'PLAORi<Aci3,ii);wtii3:=wcii3+Aci3*xcJ3'END';n: =o; 'F0R'j!=1'STEPM,UNTIL'N'D0''F0R'i:=NCACJ3+1 'STEP'1'UNTIL'NCACJ+13'DO' ND1i=ND2;=1?'FOR'l:=1'STEPM'UNTIL'M?DO''BEGIN' CR«sKB(I,Bl,ND1,B1Kf-BR);PR:=KB<I,B2,ND2,B2K,BR);R:sO; 'IF?WCI3>PR?OR'WCIJ<CRfTHEN'R:=CCR+PR>/2-WCI3; »IF'ABS(R)>E1'THEN''BEGIN'11:=11+1; л :=ncacn+13 + h;acji3 = r; 210
P LA 0 31 (АС)Л J , I> ' ENP' ' Ef. D' I,' ' IF'I1>0'THEN» / begin' xcn + п :=i; ск: = ск + 1 ; с с скз : = -br; PLA0 31 с с сскз , n-m ) ; D2K:=D2<ri;D2CD2K3 : =1 ; PLA0 31 ( DZC D2K.3 ,N + 1) ,' mcacn + 23: = ncaln*i] + ii;n:=n+i'end''en'd' start; 3T: = k: = ROP1 : = ROP2 : =o; E1 : =«-5 J BR: =поб; MFrEPS<0'THEN''BEGIN'START;EPS:=-EPS'ENO'; hit:kropt;blop;shag;'if'io=o'then''goto'mi о; <if'rop2=0'then' ?gotq'ik;'IF'jo>ropi/then''gotouob2;pr:=o;bl:='false'; ''FORM :=1/5TEP'1 'UNTIL'R0P2'P0''BEGIN' 11: =BSCR0P1+J] ; UJOAJ (11 , ' FALSE' ) ;PCJ] :=R," 'IF'ABSCR)>PR'THEN''BEGIN'PR;=ABS(R)J JX;=J'END''END'j;'IF/ABS<PR)<E1'THEN',G,OTO'ZK; Я J =LOP [JO] ; LOP С JO] :=L0PCR0P1+JXD ;LOPCROP1 + JX3 :-R; 'FOR' I ; =1 'STEPM'UNTIL'ROP2'DO' <&E&IN'R:=0; fFOR'J:=1'STEp'1'UNTIL'ROP2'DO' R:=R-PCJJ*A2[J , 13 »' V С 13 :=R' END' ) ^FOR'I:=1'STEP'1'UNTlL'ROP2'DO' azcjx,и;=vci3;nc r=BscRopi+jx:; ttCTOLCJO,NC,A1,1 ,ROP1)I ВS[RQP1+J X]: = BSUo3; ascj о:;=nc;jo:=ropi + jx; «JCB2:SIGJ0;'IF'J00>O'TrlEN' 'BEGIN'MCTOLUO-ROPl.JOOfAZ/OfROPa); ? S [ J Q J :=J00; 'GOTO'KZ'END' 'ELSE''BEGIN''IF'IO0=ROP1'THEN' 'BEGIN'YDAL(IOO-ROP1,JO-ROP>I,A2/ROP2); R0P2:=ROP2-A;bscjo]:=BSCK3; вs 1 moo] :=BS1 [К] ;k:=k-i ; ' g о т о ' к z ' end' ; MAXIX;MENIX;YDAL(IOO-ROP1,JO-ROP1,A2,ROP2);ROP2:=ROP2-i; bscjo]:sbsck];bsilloo]:=bsiскз;k:=k-i;'goto'kz'End'; т.к.: sig: = ^i б; ioo:=Joo:=o;bl: = 'false' ;nc;=npi :=no2: = i ; 'FOR'I:=1 'STEPM 'UNTIL'ROPI 'DO' ислз: =o;'for'i:=i'step'1'until'Rcpi'do''Begin'h:=bsci]; NC :=1; cr:=kbcii , с , мс , ск, о) ; / LF' cr = o ' THEN' 'gotcki; /FOR'J:=1'STEPM'UNTIL'ROP1 'DO' и с j з: = и [ J ] + с r* ai с i * J:; к l: ' enо ' i ; NC:=1; ' FOR' J : =M /STEP'1 'UNTIL'N'DO' 'BEGIN''FOR'I:=l'STEPM'UNTlL'K'DO' ' IF ' J=BSLI3 'THEN' 'GOTO'UJJ UJOAJ (J , 'TRUE') ,' DT:=DT-KBCJiC,NC»CK,0),' mf''noT'bl'then'OPtdt;hxj;uj;'ENd'J/ «FOR'l:=1'STEP'1'UNTlL/K'DO'XCBSCl]]:=XCBSCI]]+TT*-LOPCn; 'IF'(1-TT)*BT<EPS'THEN''GOTO/^ON;'IF'BL'THEN''GOTO'UA; 'FOR'i:=1'STEPM'UNTIL'ROP1'DO//BEGIN'R:-k1*AlCJO/I]; mincig;'if,bl'Then/'goto'ua'Enom; ua:' if' ioo>0'then' 'begin'ydal(ioo,jo,a1»flop1>; bs с jo]:=bscropii; esiсiood : = bsiCRopi]; 'F0R'I:=RDP1'STEPM'UNTIL'K-1'D0''BEGIN' BSC 13 :=BS[I+13;BS1 СП :=SS1 CI+1 3 * END' ; ropi:=ropi-i;k:=k-i'End''else' /begin'mctol(jo,joo,a1,1 ,r0p1) ;bs[j03 :=j0o'end' ,* 'goto' kz," miolsiqio; 'if'jooo'then' 'begin' 'if'k<wo'then' 'begin' dobcio,joo,a1 ,1 , ю ;r0p1 : -r0p1 -m 'end' 'else' 'begin' dou(io,joo,A2,o,rop2);rop2:=rop2 + i'End';k:=k + i;&s[K]:=:joo; bsiскз:=io;'goto'Kz'end'; MF'ROP2=O'THEN''60T0'MA/'IF'l00>R0P1/THEN' 'BEGIN'HCTPCI00-ROP1, 10,A2,0,R0P2>; bsiсiо о з:=iо;'goto'kl'end';maxix; 'IF'ABS(R)>E1'THEN''BEGIN'MENIX; MCTPCI00-ROP1 ,IO,A2,0,ROP2);BS1CIOO]; = IO; 'GOTO'KZ'END' ; MA:MCTPCIOO,IO,A1i1,R0P1>; BS1 СЮ0 3 : = io ; kz : IT: =it+i ; R : =0 ; nc : =1 ; 'IF'ABSCC[CK]+BRXE1 'THEN' 'BEGIN' 'IF'AB5(XCN3)<E1 'THEN'N:=N-1'END' ; 'FOR' I:=1 'STEP'1 'UNTIL'N 'DO'R:=R+KB(I,C,NC,CK,0)*XCI3;;PRINT (NEWllNE,''IT=",ITf''CX-",R,' 'BETA=' ',BT,' 'ОПОРА' ' ,K>; 'goto'hit; Kon:R: = o;nC:=i ; ' FOR' I :=1 'STEPM ' UNTIL'N' DO'R; =R+KB(I ,C,NC, C|C, 0) *X II 3 ,' PRINTCNEWLINE, ' 'IT= ' ' ,IT, ' 'CX='',R,''BETA='',BT,''QnOPA='',K); PR1NT(NEWLINE.'? ОПТИМАЛЬНЫЙ ПЛАН''),' 'print' ' ' c1qcf11 ,6,x); " t ' for' i : =1 'stepm'unt1l'n'do'xli 3; 'end'pplav;
ЛИТЕРАТУРА 1. Булавский В. Л., Звягина Р. Л., Яковлева М. А. Численные методы линейного программирования.— М., 1977.—368 с. 2. Габасов Р., Кириллова Ф. М. Методы оптимизации.— 2-е изд., перераб. и доп.— Минск, 1981.—350 с. 3. Габасов Р., Кириллова Ф. М. Построение субоптимальных планов транспортной задачи.— Изв. АН СССР. Техн. кибернетика, 1975, № 6, с. 38—42. 4. Габасов Р., Кириллова Ф. М. Прямой и двойственный опорные методы решения общей задачи линейного программирования.— Автоматика и телемеханика, 1977, № 6, с. 85—96. 5. Габасов Р., Кириллова Ф. М. Методы линейного программирования. Минск, 1977. Ч. 1. Общие задачи.—176 с. 6. Габасов Р., Кириллова Ф. М. Методы линейного программирования. Минск, 1978. Ч. 2. Транспортные задачи.—239 с. 7. Габасов Р., Кириллова Ф. М., Костюкова О. И. Метод решения общей задачи линейного программирования.— ДАН БССР, 1979, т. 23, № 3, с. 197—200. 8. Габасов Р., Кириллова Ф. М. Методы линейного программирования: Ч. 3. Специальные задачи.— Минск, 1980.—368 с. 9. Габасов Р., Кириллова Ф. М., Костюкова О. И. К построению алгоритма первого порядка для решения задач оптимального управления.—ДАН СССР, 1980, т. 254, № 3, с. 562—566. 10. Габасов Р., Кириллова Ф. М., Костюкова О. И. Приближенные методы решения общей задачи линейного программирования.— ДАН БССР, 1980, т. 24, № 8, с. 680—683. 11. Габасов Р., Кириллова Ф. М., Костюкова О. И. Двухшаговый метод решения общей задачи ЛП — ДАН БССР, 1980, т. 24, № 10, с. 873—876. 12. Габасов Р., Кириллова Ф. М., Костюкова О. И. Конечный прямой точный алгоритм линейного программирования.— ДАН БССР, 1981, т. 25, № 4, с. 301—304. 13. Габасов Р., Кириллова Ф. М., Костюкова О. И. Конечный двойственный точный алгоритм линейного программирования.— ДАН БССР, 1981, т. 25, № 7, с. 586—589. 14. Габасов Р., Шилкина Е. И. Прямой точный метод решения одного класса минимаксных задач.— ДАН БССР, 1981, т. 25, № 11, с. 971—973. 15. Габасов Р., Кириллова Ф. М., Костюкова О. И. К теории приближенных методов решения общей задачи линейного программирования.—Весщ АН БССР. Сер. <}пз.-мат. навук. 1981. № 3, с. 5—10. 212
16. Габасов Р., Кириллова Ф. М., Костюкова О. И. К методам решения общей задачи линейного программирования.— Минск, 1977. Препринт / Ин-т математики АН БССР; № 14(30), с. 22. 17. Габасов Р., Кириллова Ф. М., Костюкова О. И. Опорные методы решения больших задач линейного программирования.— Минск, 1978. Препринт / Ин-т математики АН БССР; № 11(43), с. 32. 18. Габасов Р., Кириллова Ф. М., Костюкова О. И. Метод решения общей задачи линейного программирования.— ДАН БССР, 1979, т. 23, № 3, с. 197—200. 19. Габасов Р., Кириллова Ф. М., Костюкова О. И. Некоторые модификации метода декомпозиции Данцига — Вулфа.— Минск, 1979. Препринт / Ин-т математики АН БССР; № 13(69), с. 20. 20. Габасов Р., Кириллова Ф. М., Костюкова О. И. Исследование задач линейного программирования с обобщенными ограничениями — Минск, 1979. Препринт/ Ин-т математики АН БССР; № 19(75), 24 с. 21. Габасов Р., Глушенков В. С. Метод решения общей задачи линейного программирования.— ДАН БССР, 1982, т. 26, № 10, с. 589—592. 22. Глушенков В. С. Численный эксперимент по решению бесконечномерных задач линейного программирования.— В кн.: Проблемы оптимального управления. Минск, 1981, с. 365—369. 23. Глушенков В. С. Построение алгоритмов линейного программирования с использованием двойственной квазивырожденности.— Деп. в ВИНИТИ, 1 июля 1981 г., № 3225-81. 24. Глушенков В. С, Гневко С. В., Костюкова О. И. Численный эксперимент по методам решения общей задачи линейного программирования.— Вестн. БГУ им. В. И. Ленина. Сер. 1, 1982, №2, с. 33—35. 25. Гольштейн Е. Г., Юдин Д. Б. Новые направления в линейном программировании.— М., 1966.—524 с. 26. Данциг Дж. Линейное программирование, его обобщения и применения.— М., 1966.— 600 с. 27. Канторович Л. В. Математические методы организации и планирования производства.— Л., 1939.—с. 67. 28. Костюкова О. И., Тонев П. Т. Прямой и двойственный методы решения динамической транспортной задачи.— В кн.: Проблемы оптимального управления. Минск, 1981, с. 285—305. 29. Костюкова О. И., Тятюшкин А. И. Численный эксперимент по одному методу решения общей задачи линейного программирования.—Вестн. БГУ им. В. И. Ленина. Сер. 1, 1982, № 2, с. 35—38. 30. Лэсдон Л. С. Оптимизация больших систем.— М., 1975.—432 с. 31. Поляк Б. Т., Третьяков Н. В. Об одном итерационном методе линейного программирования и его экономической интерпретации.— Экономика и мат. методы, 1972, т. 8, вып. 5, с. 740—751. 32. Романовский И. В. Алгоритмы решения экстремальных задач.—М., 1977.—352 с. 33. Сенько А. А. Алгоритмы решения интервальной задачи линейного программирования.— Весщ АН БССР. Сер. ф1з.-мат. навук, 1982. № 5, с. 21—26. 34. Федоренко Р. П. Приближенное решение задач оптимального управления.— М., 1978.—488 с. 35. Фаддеев Д. К., Фаддеева В. Н. Вычислительные методы линейной алгебры.— М., I960.— 734 с. 36. Фам Тхе Лонг. Двухшаговый метод с декомпозицией опоры 213
для решения больших задач линейного программирования.— Весщ АН БССР. Сер. ф13.-мат. навук, 1981, № 4, с. 45—49. 37. Фам Тхе Лонг. К многошаговым методам линейного программирования.—ДАН БССР, 1981, т. 25, № 9, с. 784—787. 38. Фам Тхе Лонг. Численный эксперимент по сравнению методов решения общей задачи линейного программирования.— Вестн. БГУ им. В. И. Ленина. Сер. 1, 1982, № 2, с. 67—68. 39. Химмельблау Д. Прикладное нелинейное программирование.—М., 1975.—536 с. 40. Charms A., Gratiot D., Granot G. A primal algorithm for the interval linear programming problems.— Linear Algebra and its Applications, 1977, v. 17, N 1. 41. Gabasov R., Kirillova F. M. New methods of linear programming and their application to optimal control.— Proc. IFAC Workshop on Appl. Nonlinear Program., Pergamon Press, 1979. 42. Gabasov R.f Kirillova F. M. Constructive Methods of Solving Extremal Problems.— Proc. Ill Polish-English Seminar on real time processes control., Poland, 1980. 43. Gabasov R., Kirillova F. M. Constructive Methods of Parametric and Functional Optimization.—Preprints of IFAC, 8th Triennial World Congress, 1981, August 24—28, Kyoto, Japan, v. 4, sessions 17—20, p. 111—116. 44. Kirillova F. M., Kostjukova 0. I. and Gabasov R. Adaptive methods for solving large pxoblems of linear programming: Symposium Optimization Methods (applied aspects).— Preprints of IFAC-IFOPS, 1979, X, p. 15—19, Varna, Bulgaria.
Рафаил Габасов Фаина Михайловна Кириллова Александр Иванович Тятюшкин КОНСТРУКТИВНЫЕ МЕТОДЫ ОПТИМИЗАЦИИ Ч. 1. Линейные задачи Зав редакцией Б. С. Мельников Редактор Т. А. Акулович Мл. редактор М. Г. Хаютина Оформление Е. Ф. Ясногородского Худож. редактор С. В. Валенок Техн. редактор В. П. Безбородова Корректор Л. В. Лебедева ИБ № 666 Сдано в набор 14.12.82. Подписано в печать 05.12.83. AT 08751. Формат 84Х108Уз2. Бумага тип. № 1. Гарнитура литературная. Высокая печать. Усл. печ. л. 11,34. Усл. кр.-отт. 11,34. Уч.-изд. л. 11,92. Тираж 1950 экз. Заказ 1330. Цена 2 р. 10 к. Издательство «Университетское» Госкомиздата БССР. 220048. Минск, проспект Машерова, 11. Ордена Трудового Красного Знамени типография издательства ЦК КПБ. 220041. Минск, Ленинский пр. 79.
В 1984 году издательство «Университетское» выпустит: Габасов Р., Кириллова Ф. М. Конструктивные методы оптимизации: В 5-ти частях. Ч. 2. Задачи управления.— 12 л.— Рус. яз.— 2 р. (ориентировочно). В книге рассматриваются линейные задачи оптимального управления в двух классах допустимых управлений: импульсных4 и кусочно-непрерывных. Для каждого случая развивается подход, обоснованный в ч. 1 (1983 г.). Последовательно изучаются задачи терминального управления, со смешанными и фазовыми ограничениями, алгоритмы оптимизации нестационарных и сингулярно возмущенных систем. Приведены результаты численного эксперимента. Рассчитана на научных работников, инженеров, занятых прикладными задачами оптимизации.