[go: up one dir, main page]

Academia.eduAcademia.edu
ALGORITMOS DE PROGRAMAÇÃO LINEAR Programação Linear Concreta Paulo Feofiloff Professor do Departamento de Ciência da Computação do Instituto de Matemática e Estatística da Universidade de São Paulo novembro de 1997 revisto em 27.7.1999 reformatado em 11.9.2005 Prefácio O problema básico de programação linear1 consiste no seguinte: dada uma matriz A e vetores b e c, encontrar um vetor x tal que x ≥ 0, Ax = b e cx é mínimo . O livro discute este problema, suas variantes e generalizações, e a correspondente teoria da dualidade. O que. Nosso ponto de partida é o algoritmo de Gauss-Jordan e o algoritmo Simplex. Toda a teoria da programação linear é deduzida desses dois algoritmos. Do ponto de vista do Simplex, o problema básico tem a seguinte forma: transformar uma matriz dada (a matriz resulta da justaposição de A, b e c) em outra equivalente que contenha um certo “padrão” ou “desenho”. Examinaremos também um representante da família de algoritmos polinomiais de programação linear que surgiu em meados da década –. O algoritmo que discutiremos — uma variante do célebre algoritmo do elipsóide — não é uma alternativa prática para o Simplex,2 mas tem profundas implicações teóricas. O livro não trata dos aspectos mais práticos da programação linear. Assim, por exemplo, o livro não se ocupa das implementações aproximadas do Simplex, que representam números racionais em notação ponto flutuante; em particular, o livro não trata das heurísticas que procuram reduzir os erros de arredondamento de tais implementações. O livro também não trata das dificuldades práticas associadas com a manipulação de matrizes muito grandes, nem de algoritmos especiais para matrizes esparsas.3 Finalmente, o livro não trata de modelagem, que é a arte de reduzir certos problemas de otimização a problemas de programação linear. Todos esses tópicos são muito importantes na prática, mas estão além dos objetivos do livro (e da competência do autor). Como. A atitude do livro é mais matemática e conceitual que tecnológica. Em outra dimensão, a atitude é mais algébrica que geométrica. O enfoque é 1 Neste contexto, o termo programação significa planejamento. Não se trata de uma referência à programação de computadores. 2 Outros algoritmos da família, entretanto, competem com o Simplex. 3 O leitor interessado nesses tópicos deve consultar os livros de Chvátal [Chv83] e Golub e Van Loan [GL96]. i Feofiloff algorítmico: toda a teoria é derivada dos algoritmos, particularmente do Simplex. Os algoritmos são descritos de maneira precisa, em linguagem razoavelmente informal. Para tornar isso possível, é necessário introduzir definições limpas para os conceitos de matriz e vetor e uma notação suficientemente poderosa para descrever partes desses objetos. O livro procura dizer com precisão o que cada algoritmo faz e não apenas como faz o que faz. O comportamento dos algoritmos é descrito por meio de invariantes, e o seu desempenho de pior caso é analisado. O universo natural da programação linear é o dos números racionais. O livro supõe, portanto, que dispomos de um agente computacional capaz de executar aritmética racional. Uma das versões do Simplex (capítulo 12 manipula em separado os numeradores e denominadores dos números racionais e portanto só usa aritmética inteira. Segue daí uma versão do Teorema da Dualidade que especifica delimitações superiores para o número de dígitos das soluções do problema de programação linear. O livro evita o uso indiscriminado de ferramentas da álgebra linear, porque tais ferramentas são, em geral, mais sofisticadas que as situações concretas que é preciso enfrentar. O livro evita também as “hipóteses simplificadoras” (por exemplo, a hipótese de que nossas matrizes têm posto pleno e a hipótese de que dispomos de uma “solução viável” ao iniciar a execução do Simplex) tão comuns em outros textos sobre o assunto. Tais hipóteses pouco contribuiriam para simplificar a discussão. Para quem. Este livro é dirigido a qualquer pessoa que queira compreender as interconexões lógicas entre as várias peças desse quebra-cabeças que é a programação linear. Em particular, o texto se destina a estudantes de graduação e pós-graduação em matemática aplicada, computação e engenharia. O livro não tem pré-requisitos formais, mas exige uma certa maturidade matemática. Versões preliminares do livro foram usadas em vários oferecimentos da disciplina Programação Linear nos cursos de graduação e pós-graduação em Ciência da Computação no Instituto de Matemática e Estatística da Universidade de São Paulo. O subtítulo do livro —Programação Linear Concreta —é uma alusão ao Concrete Mathematics [GKP94] de Graham, Knuth e Patashnik Para explicar o título, o prefácio daquele livro diz: The course title “Concrete Mathematics” was originally intended as an antidote to “Abstract Mathematics” [. . . ]. Abstract mathematics is a wonderful subject, [. . . ] But [. . . ] The goal of generalization had become so fashionable that a generation of mathematicians has become unable to relish beauty in the particular, to enjoy the challenge of solving quantitative problems, or to appreciate the value of technique. Dados técnicos. A elaboração do livro contou com o apoio dos projetos Aspectos Estruturais e Algorítmicos de Objetos Combinatórios (FAPESP 96/045052) e Complexity of Discrete Structures (ProNEx 107/97). O livro foi escrito em ii Feofiloff iii LATEX nas instalações do Instituto de Matemática e Estatística da Universidade de São Paulo. Informações atualizadas sobre o texto poderão ser encontradas no endereço http://www.ime.usp.br/~pf/prog-lin/ da teia WWW. São Paulo, 1999–2005 P. F. Sumário Prefácio 1 i Vetores e Matrizes 1.1 Vetores . . . . . . . . 1.2 Matrizes . . . . . . . 1.3 Produtos . . . . . . . 1.4 Matrizes inversíveis . 1.5 Transposição . . . . . 1.6 Matrizes de bijeção . 1.7 Matrizes diagonais . 1.8 Matrizes elementares 1.9 Combinações lineares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1 2 4 5 6 7 8 8 10 I Algoritmos Básicos 12 2 . . . . . . . . 13 13 14 16 18 20 21 22 23 . . . . 26 26 28 34 36 3 Algoritmo de Gauss-Jordan 2.1 Matrizes escalonadas . . . . . . . 2.2 Esboço do algoritmo . . . . . . . 2.3 Algoritmo . . . . . . . . . . . . . 2.4 Análise do algoritmo: invariantes 2.5 Mais invariantes . . . . . . . . . . 2.6 Número de operações aritméticas 2.7 Conclusão . . . . . . . . . . . . . 2.8 Aplicação: Sistemas de equações Introdução ao Simplex 3.1 Matrizes simples . 3.2 Esboço do Simplex 3.3 Análise . . . . . . . 3.4 Convergência . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . iv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Feofiloff 4 5 6 Heurística Simplex 4.1 Introdução . . . . . . . . . . 4.2 A heurística . . . . . . . . . 4.3 Análise: invariantes . . . . . 4.4 Mais três invariantes . . . . 4.5 Convergência . . . . . . . . 4.6 Conclusão . . . . . . . . . . 4.7 Apêndice: Simplex Revisto SUMÁRIO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Algoritmo Simplex 5.1 Ordem lexicográfica . . . . . . . . . 5.2 Regra lexicográfica . . . . . . . . . . 5.3 Algoritmo . . . . . . . . . . . . . . . 5.4 Análise . . . . . . . . . . . . . . . . . 5.5 Convergência . . . . . . . . . . . . . 5.6 Número de operações aritméticas . . 5.7 Conclusão . . . . . . . . . . . . . . . 5.8 Apêndice: Segunda fase do Simplex 5.9 Apêndice: Regra de Bland . . . . . . Forma tradicional do Simplex 6.1 Sistemas matriz-vetor-vetor 6.2 Sistemas simples . . . . . . 6.3 Algoritmo Simplex . . . . . 6.4 Invariantes . . . . . . . . . . 6.5 Conclusão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . v . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 39 40 43 44 45 47 47 . . . . . . . . . 50 50 51 51 53 56 60 61 61 62 . . . . . 64 64 65 65 66 67 II Programação Linear 68 7 . . . . . 69 69 71 73 74 75 Problema canônico dual 8.1 Definição do problema . . . . . . . . . . . . . . . . . . . . . . . . . 8.2 Lema da dualidade . . . . . . . . . . . . . . . . . . . . . . . . . . . 8.3 Vetores de inviabilidade . . . . . . . . . . . . . . . . . . . . . . . . 77 77 78 80 8 Problema canônico primal 7.1 Definição do problema . . . . 7.2 Problemas simples . . . . . . 7.3 O Simplex resolve o problema 7.4 Conclusão . . . . . . . . . . . 7.5 Exemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Feofiloff 8.4 8.5 8.6 8.7 8.8 9 III SUMÁRIO Algoritmo baseado no Simplex . . . . . . Teorema da dualidade . . . . . . . . . . . Conclusão . . . . . . . . . . . . . . . . . . Apêndice: Uma interpretação do Simplex Apêndice: Problema do vetor viável . . . Problema geral 9.1 Definição do problema . . . . . . . . . 9.2 Dualidade . . . . . . . . . . . . . . . . 9.3 Lema da dualidade . . . . . . . . . . . 9.4 Construção do dual . . . . . . . . . . . 9.5 Teorema da dualidade . . . . . . . . . 9.6 Redução ao problema canônico primal 9.7 Conclusão . . . . . . . . . . . . . . . . 9.8 Apêndice: Uma interpretação do dual . . . . . . . . . . . . . . . . vi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 83 84 84 85 . . . . . . . . 87 87 88 88 90 92 93 95 96 Algoritmos para Dados Inteiros 99 10 Determinantes 10.1 Sinal de uma matriz de permutação . 10.2 Determinante de matriz quadrada . . 10.3 Três propriedades básicas . . . . . . . 10.4 Determinante do produto de matrizes 10.5 Delimitação do determinante . . . . . 10.6 Conclusão . . . . . . . . . . . . . . . . . . . . . . 100 100 102 104 105 108 109 . . . . . . 111 111 112 116 119 120 122 . . . . 124 124 126 126 128 11 Algoritmo de Gauss-Jordan-Chio 11.1 Algoritmo . . . . . . . . . . . . . . 11.2 Análise: preliminares . . . . . . . . 11.3 Análise: invariante principal . . . . 11.4 Delimitação dos números gerados 11.5 Aplicação a matrizes inteiras . . . 11.6 Conclusão . . . . . . . . . . . . . . 12 Algoritmo Simplex-Chio 12.1 Algoritmo . . . . . . . . . . . 12.2 Análise . . . . . . . . . . . . . 12.3 Aplicação a matrizes inteiras 12.4 Conclusão . . . . . . . . . . . 13 Problemas com dados inteiros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 Feofiloff SUMÁRIO vii 13.1 Sistemas de equações . . . . . . . . . . . . . . . . . . . . . . . . . . 129 13.2 Problemas canônicos . . . . . . . . . . . . . . . . . . . . . . . . . . 130 13.3 Conclusão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 IV Algoritmos Polinomiais 132 14 Introdução aos algoritmos polinomiais 14.1 Problemas CD, PV, V e PI . . . . . 14.2 Redução do CD ao PV . . . . . . . 14.3 Redução do PV ao V . . . . . . . . 14.4 Redução do V ao PI . . . . . . . . 14.5 Conclusão . . . . . . . . . . . . . . . . . . . 15 Algoritmo de Yamnitsky-Levin 15.1 Definições básicas . . . . . . . . . . . 15.2 Tetraedros e seus volumes . . . . . . 15.3 Teorema do tetraedro interior . . . . 15.4 Algoritmo . . . . . . . . . . . . . . . 15.5 Invariantes . . . . . . . . . . . . . . . 15.6 O algoritmo está bem definido . . . 15.7 Última iteração . . . . . . . . . . . . 15.8 Demonstração dos invariantes . . . . 15.9 Número de iterações . . . . . . . . . 15.10 Número de operações aritméticas . 15.11 Conclusão . . . . . . . . . . . . . . . 15.12 Apêndice: Matriz com uma só linha . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133 134 135 136 138 140 . . . . . . . . . . . . 141 141 142 144 148 150 150 151 152 154 156 157 157 V Apêndices 160 A Simplex Dual A.1 Matrizes simples no sentido dual A.2 Esboço do Simplex Dual . . . . . A.3 Heurística Simplex Dual . . . . . A.4 Algoritmo Simplex Dual . . . . . A.5 Problema canônico dual . . . . . 161 161 162 164 166 166 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B Análise de sensibilidade 169 B.1 Variação de um só componente . . . . . . . . . . . . . . . . . . . . 169 B.2 Exemplo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172 B.3 Valor ótimo como função de b e c . . . . . . . . . . . . . . . . . . . 174 Feofiloff SUMÁRIO viii B.4 Conclusão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176 C Poliedro canônico primal C.1 Dependência linear . . . . . . . . . . . C.2 Combinações convexas . . . . . . . . . C.3 Vértices . . . . . . . . . . . . . . . . . . C.4 Soluções do problema canônico primal C.5 Poliedros limitados . . . . . . . . . . . D Poliedro canônico dual D.1 Conjuntos geradores . . . . . . . . . D.2 Combinações convexas . . . . . . . . D.3 Vetores básicos e faces minimais . . D.4 Soluções do problema canônico dual D.5 Poliedros limitados . . . . . . . . . . E Exercícios resolvidos E.1 Solução do exercício 2.5 E.2 Solução do exercício 2.11 E.3 Solução do exercício 2.13 E.4 Solução do exercício 4.2 E.5 Solução do exercício 4.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 178 179 180 182 182 . . . . . 185 185 186 187 188 189 . . . . . 192 192 192 194 196 197 Referências Bibliográficas 199 Índice Remissivo 202 Capítulo 1 Vetores e Matrizes “Vetor? É uma espécie de linha reta com uma flecha na ponta.” “Matriz? Acho que é onde fica a sede da empresa.” Este capítulo faz um resumo de conceitos elementares de álgebra linear e introduz as convenções de notação que usaremos nos capítulos subseqüentes. O conteúdo do capítulo é muito simples, mas algumas das definições e convenções de notação merecem atenção pois são pouco usuais. 1.1 Vetores Um vetor é uma função que leva um conjunto finito arbitrário — o conjunto de índices — no conjunto dos números reais (mas não há mal em restringir a atenção aos números racionais). Convém não presumir qualquer relação de ordem sobre o conjunto de índices. Se o conjunto de índices de um vetor x é N , diremos que x está definido sobre N . Se x é um vetor sobre um conjunto N e n é um elemento de N então x [n] denota o componente n de x, isto é, o valor da função x em n. Se Q é uma parte de N então x [Q] denota a restrição de x a Q, ou seja, o vetor cujo componente q é x [q] para cada q em Q. Note a distinção entre x [n] e x [{n}] : o primeiro é um número, enquanto o segundo é um vetor (com um só componente). Um vetor x sobre N é nulo se x [n] = 0 para todo n em N . O vetor nulo será denotado por o, qualquer que seja o seu conjunto de índices. Se x é um vetor e λ é um número então λx é o vetor que se obtém mediante multiplicação de cada componente de x por λ. Analogamente, x/λ é o vetor que se obtém dividindo por λ cada componente de x. Se x e y são vetores sobre um mesmo conjunto de índices e x [n] ≥ y [n] para cada n, dizemos que x ≥ y. Analogamente, dizemos que 1 x [n] vetor nulo o x≥y Feofiloff cap. 1 Vetores e Matrizes 2 x>y se x [n] > y [n] para todo n. As relações ≤ e < são definidas de modo análogo. 4 3 1 2 13 22 11 14 11 14 22 13 Figura 1.1: Duas representações de um vetor sobre 1, 2, 3, 4. Na segunda, fica subentendido que os índices são 1, 2, 3 e 4 da esquerda para a direita. 1 2 4 3 11 14 22 13 11 14 13 22 Figura 1.2: Mais duas representações do mesmo vetor. Na segunda, fica subentendido que os índices são 1, 2, 3 e 4 de cima para baixo. 1.2 Matrizes Uma matriz é uma função que leva o produto cartesiano de dois conjuntos finitos no conjunto dos números reais (poderíamos restingir a definição ao conjunto dos racionais). Convém não presumir qualquer relação de ordem sobre os conjuntos de índices. Se uma matriz A tem domínio M × N , dizemos que M é o conjunto de índices de linhas e N é o conjunto de índices de colunas de A. Dizemos também que A é uma matriz definida sobre M × N . Se m e n são elementos de M e N respectivamente então A [m, n] denota o componente m, n de A, ou seja, o valor de A em m, n. Se P e Q são partes de M e N respectivamente então A [P, Q] é a restrição de A a P × Q. Usaremos a abreviatura A [P, ] (leia “A P tudo”) para A [P, N ] e a abreviatura A [ , Q] para A [M, Q] . Se m é um elemento de M então A [m, n] A [P, ] A [ , Q] A [m, Q] é o vetor sobre Q cujo componente q é A [m, q] para todo q em Q. Usaremos a abreviatura A [m, ] para A [m, N ] e diremos que esse vetor é a linha m de A. Analogamente, para qualquer parte P de M e qualquer elemento n de N , a expressão A [P, n] denota o vetor cujo componente p é A [p, n] para cada p em P . A [m, ] linha A [P, n] Feofiloff cap. 1 Vetores e Matrizes 3 1 2 3 4 5 6 4 2 5 3 1 6 2 4 5 3 1 6 7 1 0 0 1 2 3 8 0 1 0 4 5 6 9 0 0 1 7 8 9 7 1 0 2 0 1 3 9 7 0 8 1 0 9 8 4 1 5 0 0 6 7 1 0 2 0 1 3 9 7 0 8 1 0 9 8 4 1 5 0 0 6 Figura 1.3: Representação de três matrizes sobre os mesmos conjuntos de índices. Os índices de linhas são 7, 8 e 9. Os índices de colunas são 1, 2, 3, 4, 5 e 6. As duas primeiras figuras representam a mesma matriz; a terceira representa uma matriz diferente. 99 −4 12 13 77 98 14 19 −7 88 32 11 22 9 −6 Figura 1.4: Quando os índices de uma matriz não estão indica- dos explicitamente, fica subentendido que os índices das linhas são 1, 2, 3, . . . de cima para baixo e que os índices das colunas são 1, 2, 3, . . . da esquerda para a direita. a b c d e f g f 3 1 9 0 0 4 9 g 4 0 8 1 0 5 9 h 5 0 7 0 1 6 9 b d e f 1 0 0 g 0 1 0 h 0 0 1 Figura 1.5: A primeira figura representa uma matriz A. A segunda representa a matriz A [ , Q] , onde Q é o conjunto composto pelos índices b, d, e. Usaremos a abreviatura A [ , n] para A [M, n] e diremos que este vetor é a coluna n de A. Convém não confundir as expressões A [P, n] e A [P, {n}] : a primeira denota um vetor, enquanto a segunda denota uma matriz (com uma só coluna). Alguns livros mais antigos fazem essa confusão conscientemente, e usam a expressão “vetor coluna” para designar qualquer matriz dotada de uma única coluna e a expressão “vetor linha” para uma matriz com uma única linha. Uma matriz A é nula se A [m, n] = 0 para todo par m, n. A matriz nula será denotada por O, quaisquer que sejam os seus conjuntos de índices. Se A é uma matriz e λ é um número então λA é a matriz que se obtém quando cada componente de A é multiplicado por λ. Analogamente, A/λ é o vetor que se obtém dividindo por λ cada componente de A. A [ , n] coluna matriz nula O λA A/λ Feofiloff 1.3 cap. 1 Vetores e Matrizes 4 Produtos Matrizes e vetores podem ser multiplicados entre si. A versão mais básica dessa operação de multiplicação envolve dois vetores. Produto vetor-por-vetor. Para quaisquer vetores x e y sobre um mesmo conjunto N , o produto de x por y é o número X x [n] y [n] , n∈N que denotaremos por x · y. É óbvio que x · y = y · x. Ademais, para qualquer parte Q de N , x · y = x [Q] · y [Q] + x [N −Q] · y [N −Q] . a b c d e e 11 22 33 44 55 b d c x·y a 35 41 37 39 43 Figura 1.6: Se x e y são os vetores definidos pela figura então x · y = 11 · 43 + 22 · 41 + 33 · 39 + 44 · 37 + 55 · 35 = 6215. Imagine que a, b, c, d, e são os modelos de um produto fabricado por certa empresa e que y [n] é o lucro sobre cada unidade do modelo n. Se foram fabricadas x [n] unidades do modelo n então x · y é o lucro total. Produtos matriz-por-vetor e vetor-por-matriz. Para qualquer matriz A sobre M × N e qualquer vetor x sobre N , o produto de A por x é o vetor A · x definido pela expressão (A · x) [m] = A [m, ] · x produto matriz por vetor A·x para cada m em M . É claro que A · x é um vetor sobre M . Analogamente, para qualquer vetor y sobre M , o produto de y por A é o vetor y · A definido pela expressão (y · A) [n] = y · A [ , n] produto vetor por matriz para cada n em N . É fácil verificar que, para qualquer parte P de M e qualquer parte Q de N , (A · x) [P ] = A [P, ] · x e (y · A) [Q] = y · A [ , Q] . É menos fácil verificar a propriedade associativa y · (A · x) = (y · A) · x . y·A Feofiloff cap. 1 Vetores e Matrizes Produto matriz-por-matriz. Para qualquer matriz A sobre L × M e qualquer matriz B sobre M × N , o produto de A por B é a matriz A · B sobre L × N definida pela expressão 5 A·B (A · B) [l, n] = A [l, ] · B [ , n] para cada l em L e cada n em N . É fácil verificar que, para qualquer parte P de L e qualquer parte Q de N , (A · B) [P, Q] = A [P, ] · B [ , Q] . É menos fácil verificar a propriedade associativa propriedade associativa (A · B) · C = A · (B · C) , válida para quaisquer matrizes A, B e C cujos conjuntos de índices permitam definir os produtos A · B e B · C . Analogamente, A · (B · x) = (A · B) · x e (y · A) · B = y · (A · B) para quaisquer vetores x e y, desde que cada um dos produtos faça sentido. Notação. Vamos apelar, muitas vezes, ao “princípio universal da preguiça” e escrever xy, Ax, yA e AB no lugar de x · y, A · x, y · A e A · B respectivamente. O operador de indexação [ , ] tem precedência sobre o operador de multiplicação. Assim, expressões da forma BA [P, Q] e yA [P, Q] devem ser entendidas como B · (A [P, Q] ) e y · (A [P, Q] ) respectivamente. Em certas condições, os dois operadores comutam: se os produtos BA e yA fazem sentido então (BA) [ , Q] = B · (A [ , Q] ) e 1.4 xy Ax yA AB BA [P, Q] (yA) [ , Q] = y · (A [ , Q] ) . Matrizes inversíveis O problema mais básico da álgebra linear é o da inversão das operações de multiplicação que definimos acima: dada uma matriz A e um vetor b, encontrar um vetor x tal que Ax = b . Analogamente, dado um vetor c, encontrar um vetor y tal que yA = c. Ou ainda, dadas matrizes A e B, encontrar uma matriz X tal que AX = B; analogamente, dadas matrizes A e C , encontrar uma matriz Y tal que Y A = C . Estes problemas levam naturalmente aos seguintes conceitos. Uma matriz I sobre M × N é a identidade se M = N e, para cada par i, j de elementos de M , identidade I [i, j] = se i = j então 1 senão 0 . Toda matriz identidade será denotada por I , quaisquer que sejam seus conjuntos de índices. I Feofiloff cap. 1 a b c d Vetores e Matrizes a b d c 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 6 Figura 1.7: Esta matriz não é a identidade. Uma inversa esquerda de uma matriz A é uma matriz E tal que EA = I . Uma matriz A é inversível pela esquerda se possui uma inversa esquerda. A inversa direita de uma matriz A é uma matriz D tal que AD = I . Uma matriz A é inversível pela direita se possui uma inversa direita. Se uma matriz tem uma inversa esquerda e uma inversa direita então as duas inversas são iguais. De fato, se AD = I e EA = I então inversa esquerda inversa direita E = E(AD) = (EA)D = D . Ademais, as inversas são únicas. De fato, para qualquer matriz D′ tal que AD′ = I tem-se D′ = (EA)D′ = E(AD′ ) = E = D. Analogamente, para qualquer E ′ tal que E ′ A = I tem-se E ′ = E . A propósito, eis um fato fundamental mas não-trivial: uma matriz que tenha o mesmo número de linhas e colunas tem inversa direita se e só se tem inversa esquerda. Este fato será demonstrado, implicitamente, no próximo capítulo. Os problemas que mencionamos no início da seção podem ser imediatamente resolvidos se tivermos uma matriz inversa apropriada. Por exemplo, se A tem uma inversa esquerda e direita E , então o vetor x = Eb satisfaz a equação Ax = b. 1 0 0 0 2 2 1 1 0 2 1 −1 0 0 0 1 0 0 0 0 1 −2 0 0 1 −1/2 0 0 1/2 0 −1 1 1 2 3 0 0 0 1 4 Figura 1.8: A primeira matriz é uma inversa esquerda da segunda (e a segunda é uma inversa direita da primeira). 1.5 Transposição e definida pelas equações A transposta de uma matriz A sobre M ×N é a matriz A e[n, m] = A [m, n] A transposta e A Feofiloff cap. 1 1/2 0 0 0 0 0 0 0 Vetores e Matrizes 0 0 5 0 7 0 0 0 2 Figura 1.9: Uma matriz não-inversível. e é uma matriz sobre N × M . É claro que a para cada par m, n. Portanto, A e transposta de A é A. É fácil verificar que e Ax = xA para todo vetor x tal que o produto de A por x esteja definido. Também é fácil verificar que g=B eA e AB para toda matriz B tal que o produto de A por B esteja definido. 1.6 Matrizes de bijeção A seguinte generalização do conceito de matriz identidade é muito útil. Uma matriz J sobre M × N é de bijeção1 se existe uma função bijetora ϕ de M em N tal que J [m, n] = se ϕ(m) = n então 1 senão 0 . Portanto, uma matriz com componentes 0 e 1 é de bijeção se cada uma de suas colunas tem exatamente um 1 e cada uma de suas linhas tem exatamente um 1. É óbvio que |M | = |N | se existe uma matriz de bijeção sobre M × N . A transposta de uma matriz de bijeção sobre M × N é uma matriz de bijeção sobre N × M . Essa segunda matriz é inversa da primeira, como mostraremos a seguir. Fato Se J é uma matriz de bijeção então J Je = I e Je J = I . D EMONSTRAÇÃO : Para qualquer par i, j de índices de linhas de J , o componente i, j de J Je é o produto de duas linhas de J : e [i, j] = J [i, ] Je[ , j] = J [i, ] J [ j, ] . (J J) Como J é matriz de bijeção, J [i, ] J [ j, ] é igual a 1 ou 0 conforme i = j ou i 6= j . Isso mostra que J Je = I . O mesmo raciocínio, com Je no papel de J , mostra que e = I. ✷ JJ 1 Generaliza o conceito de matriz de permutação; uma matriz de permutação é uma matriz de bijeção cujo conjunto de índices de linhas é idêntico ao conjunto de índices de colunas. matriz de bijeção Feofiloff cap. 1 Vetores e Matrizes 8 Qual o resultado da multiplicação de uma matriz arbitrária por uma matriz de bijeção? Suponha que J é uma matriz de bijeção sobre M × N . Digamos que J [m, n] = 1 para algum m em M e algum n em N . Então, para qualquer matriz A cujo conjunto de índices de linhas seja N , a linha m de JA é idêntica à linha n de A: (JA) [m, ] = A [n, ] . Analogamente, para qualquer matriz B que tenha colunas indexadas por M , a coluna n de BJ é idêntica à coluna m de B. Em suma, a pré-multiplicação de A por J apenas redefine os nomes das linhas de A, e a pós-multiplicação de B por J apenas redefine os nomes das colunas de B. 0 1 0 0 0 0 0 1 1 0 0 0 0 0 1 0 Figura 1.10: Uma matriz de bijeção. 1.7 Matrizes diagonais Uma matriz D sobre M × N é diagonal se M = N e D [m, n] = 0 sempre que m 6= n. Em particular, toda matriz identidade é diagonal. Se D é uma matriz diagonal tal que D [m, m] 6= 0 para todo m então a matriz diagonal E definida pelas equações diagonal E [m, m] = 1/D [m, m] é uma inversa esquerda e também uma inversa direita de D. Portanto, E é a única inversa de D. Por outro lado, se D é uma matriz diagonal e D [m, m] = 0 para algum m então é fácil verificar que D não tem inversa. 1.8 Matrizes elementares Uma matriz-coluna coincide com a identidade em todas as colunas, exceto talvez uma. Em outras palavras, uma matriz F sobre M × M é uma matriz-coluna se existe k em M tal que matrizcoluna F [M, M −k] = I [M, M −k] , onde M − k é uma abreviatura de M − {k}. Diremos que k é a coluna saliente da matriz. M −k coluna saliente Feofiloff cap. 1 Vetores e Matrizes 9 Fato Para qualquer matriz-coluna F com coluna saliente k, se F [k, k] não é nulo então a matriz-coluna G com coluna saliente k definida pelas equações 1 −F [m, k] G [k, k] = e G [m, k] = F [k, k] F [k, k] para cada m em M − k é uma inversa esquerda e também uma inversa direita de F . D EMONSTRAÇÃO : Mostremos inicialmente que GF = I . Na coluna k temos (GF ) [k, k] = G [k, ] F [ , k] = G [k, k] F [k, k] = F [k, k] /F [k, k] = 1; ademais, (GF )[m, k] = G[m, ]F [ , k] = G[m, m] F [m, k] + G[m, k] F [k, k] = F [m, k] − F [k, k] F [m, k]/F [k, k] = 0 para cada m em M − k. Portanto, a coluna k de GF é igual à coluna k da matriz identidade. Para concluir, considere as colunas distintas de k: (GF ) [ , M −k] = GF [ , M −k] = GI [ , M −k] = G [ , M −k] = I [ , M −k] . Portanto, GF = I . Para mostrar que F G = I , basta observar que as mesmas regras que definem G a partir de F também geram F a partir de G. ✷ Nas condições da proposição acima, G é a única inversa (esquerda e direita) de F . Também é fácil verificar que se F [k, k] = 0 para algum k então F não tem inversa. 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 4 5 6 7 8 0 0 0 0 1 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 −4/7 −5/7 −6/7 1/7 −8/7 0 0 0 0 1 Figura 1.11: Matrizes-coluna com coluna saliente 4. Uma é inversa da outra. Uma matriz F sobre M × M é uma matriz-linha se existe h em M tal que F [M −h, M ] = I [M −h, M ] . Diremos que h é a linha saliente de F . Uma observação análoga à que demonstramos acima vale para matrizes-linha: se F é uma matriz-linha com linha saliente h e F [h, h] 6= 0 então a matriz-linha G com linha saliente h definida pelas equações G [h, h] = 1/F [h, h] e G [h, n] = −F [h, n] /F [h, h] matrizlinha Feofiloff cap. 1 Vetores e Matrizes para cada n em M −h é a única inversa esquerda de F e também a única inversa direita de F . Diremos que uma matriz é elementar se for uma matriz-coluna ou uma matriz-linha. Note que os conjuntos de índices de linhas e colunas de uma matriz elementar são idênticos. Matrizes elementares e suas inversas terão um papel de destaque nos capítulos subseqüentes. 1.9 Combinações lineares Suponha que a1 , . . , ak são vetores sobre um mesmo conjunto de índices. Uma combinação linear desses vetores é qualquer vetor da forma λ1 a1 + · · · + λk ak , onde λ1 , . . , λk são números. Esses números são os coeficientes da combinação linear. Suponha que A é uma matriz sobre M × N . Para todo vetor x sobre N , o vetor Ax é uma combinação linear das colunas de A com coeficientes x [j] , isto é, P Ax = j∈N A [ , j] x [j] . Analogamente, para todo vetor y sobre M , o vetor yA é uma combinação linear das linhas de A, isto é, P yA = i∈M y [i] A [i, ] . Se A e B são matrizes tais que o produto AB faz sentido então cada coluna de AB é uma combinação linear das colunas de A e cada linha de AB é uma combinação linear das linhas de B: (AB) [ , j] = A B [ , j] e (AB) [i, ] = A [i, ] B . Exercícios 1.1 Demonstre a propriedade associativa do produto de matrizes: se cada um dos produtos faz sentido, então A(BC) = (AB)C . 1.2 Mostre que o produto de matrizes não é comutativo: AB é, em geral, diferente de BA (mesmo que os dois produtos estejam definidos). 1.3 Suponha que x e y são vetores e que A e B são matrizes. Quantas operações de multiplicação são necessárias para calcular xy? para calcular Ax? yA? AB? 1.4 Suponha que AB = I e BC = I . Mostre que B é inversa direita de C . 10 matriz elementar Feofiloff 1.5 cap. 1 Seja A a primeira das matrizes abaixo. Encontre uma matriz de bijeção J tal que AJ seja a segunda das matrizes. Encontre uma matriz de bijeção J tal que JA seja a terceira matriz. a b c d e f 11 12 13 14 15 g 21 22 23 24 25 k 31 32 33 34 35 1.6 1.7 Vetores e Matrizes b c a f h f 11 12 13 14 15 g 21 22 23 24 25 k 31 32 33 34 35 a b c d e g 11 12 13 14 15 k 21 22 23 24 25 i 31 32 33 34 35 Sejam F e G matrizes sobre M ×M e D uma matriz sobre M ×N . Suponha e = I. que F G = I e que a matriz E = GD é de bijeção. Verifique que DEG Suponha que A é uma matriz de bijeção sobre M × N e b é um vetor arbitrário sobre M . Verifique que existe um e um só vetor x tal que Ax = b. 11 Parte I Algoritmos Básicos 12 Capítulo 2 Algoritmo de Gauss-Jordan Encontre números x1 , x2 , x3 e x4 que satisfaçam as equações d11 x1 + d12 x2 + d13 x3 + d14 x4 = b1 d21 x1 + d22 x2 + d23 x3 + d24 x4 = b2 d31 x1 + d32 x2 + d33 x3 + d34 x4 = b3 O algoritmo de Gauss-Jordan1 é a ferramenta básica da álgebra linear. O algoritmo transforma qualquer matriz em uma matriz equivalente dotada de um certo “desenho” ou “padrão”, que descreveremos na seção 2.1. Ao estudar qualquer algoritmo, é preciso enfrentar duas perguntas: o que o algoritmo faz? como faz o que faz? No caso do algoritmo de Gauss-Jordan, ao contrário do que ocorre com outros algoritmos célebres, é mais fácil tratar da segunda pergunta. Assim, começaremos com um esboço de como o algoritmo funciona. 2.1 Matrizes escalonadas Uma matriz E sobre M × N é escalonada se existem uma parte P de M e uma parte Q de N tais que E [P, Q] é uma matriz de bijeção e E [M −P, N ] = O . Os conjuntos P e Q são as bases da matriz; o conjunto Q é a base de colunas e P é a base de linhas. É óbvio que toda matriz escalonada tem uma única base de linhas, mas pode ter várias bases de colunas distintas. (Convém lembrar que não estamos fazendo quaisquer restrições sobre os valores relativos de |M | e |N |. Também não estamos presumindo qualquer relação de ordem em M ou N .) 1 Referências ao célebre Carl Friedrich Gauss (–) e ao (menos célebre) Wilhelm Jordan (–), que popularizou o algoritmo [Jor20]. 13 matriz escalonada bases Feofiloff cap. 2 Algoritmo de Gauss-Jordan 14 Q 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 P Figura 2.1: Matriz escalonada. 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 −2 1 33 0 0 0 0 0 1 44 66 0 55 77 0 0 0 0 1 0 0 Figura 2.2: Exemplos de matrizes escalonadas. A primeira tem bases ∅ e ∅. A segunda tem base de linhas 1, 2, 3, 4 e base de colunas 1, 2, 3, 4. Na última, a base de linhas é {2, 3} e há duas bases de colunas distintas: {1, 3} e {1, 6}. 2.2 Esboço do algoritmo O algoritmo de Gauss-Jordan recebe uma matriz D sobre M × N e transforma D numa matriz escalonada. Cada iteração do algoritmo começa com uma parte P de M e uma matriz E . A primeira iteração começa com P = ∅ e E = D. Cada iteração consiste no seguinte: C ASO 1: E [M −P, ] 6= O . Escolha h em M − P e k em N de modo que E [h, k] 6= 0. Seja E ′ a matriz definida pelas equações E ′ [h, ] = E [h, ] /E [h, k] e E ′ [i, ] = E [i, ] − E [i, k] E [h, ] /E [h, k] para cada i em M − h. Comece nova iteração com P + h e E ′ nos papéis de P e E . C ASO 2: E [M −P, ] = O . Devolva E e pare. ✷ A expressão P + h é uma abreviatura de P ∪ {h}. É claro que se P = M no início de uma iteração então aplica-se o caso 2. No início de cada iteração existe uma parte Q de N tal que E [P, Q] é uma matriz de bijeção e E [M −P, Q] é nula. A demonstração desta propriedade será feita mais adiante, depois que o algoritmo for reescrito de modo mais completo. Se a propriedade vale no início da última iteração então é óbvio que a matriz E é escalonada. D M ×N P E Feofiloff cap. 2 Algoritmo de Gauss-Jordan 1 2 2 −1 1 1 2 1 0 1 0 0 2 5 4 −3 15 0 −1 0 1 1/2 −1/2 1/2 1/2 5/2 −1/2 1 −1 1 3/2 −1/2 1/2 0 1 0 0 1 0 0 0 −1 3 0 1 1 −1 0 −1 0 1 0 0 1 0 0 0 0 0 0 1 0 2 0 −1 Figura 2.3: Aplicação do esboço do algoritmo de Gauss- Jordan. A figura descreve a matriz E no início de sucessivas iterações. A última matriz é escalonada. 1 1 1 2 2 2 1 −1 0 2 0 5 1 4 0 −3 −1 1 8 −5 −2 0 −3 2 0 1 0 −3 1 0 0 1 1 2 2 −1 1 2 0 1 5 −1 2 4 0 1 −3 1 Figura 2.4: A figura define matrizes F , G e D. Verifique que F G é a identidade e que GD é escalonada. 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 6 9 0 1 7 8 2 4 8 7 3 5 9 6 4 6 0 5 1 0 0 0 0 1 0 0 2 4 0 0 3 5 0 0 4 6 0 0 Figura 2.5: A figura define matrizes G e D e exibe GD. Observe que GD é escalonada mas não existe F tal que F G = I . Feofiloff 2.3 cap. 2 Algoritmo de Gauss-Jordan 16 Algoritmo Para dizer, exatamente, o que o algoritmo faz é preciso especificar a relação entre as matrizes E e D. A matriz E é equivalente à matriz D no seguinte sentido: existe uma matriz inversível G tal que E = GD . O esboço da seção anterior não devolve G, o que impede o usuário de conferir a equivalência entre E e D. A versão do algoritmo que descreveremos abaixo devolve G e sua inversa F ; o usuário pode então, ao preço de duas multiplicações de matrizes, verificar que G é inversível e que GD é escalonada. Algoritmo de Gauss-Jordan Recebe uma matriz D sobre M × N e devolve matrizes F e G sobre M × M tais que F G = I e GD é escalonada. Cada iteração começa com matrizes F , G e E e uma parte P de M . No início da primeira iteração, F = G = I , E = D e P = ∅. Cada iteração consiste no seguinte: C ASO 1: E [h, ] 6= o para algum h em M − P . Escolha k em N tal que E [h, k] 6= 0. Seja F ′ , G′ , E ′ o resultado da pivotação de F, G, E em torno de h, k. Comece nova iteração com F ′ , G′ , E ′ e P + h nos papéis de F , G, E e P . F G h k C ASO 2: E [M −P, ] = O . Devolva F , G e pare. ✷ 2 A operação de pivotação a que se refere o texto do algoritmo é definida da seguinte maneira: dados elementos h de M e k de N , o resultado da pivotação de F, G, E em torno de h, k é o terno F ′ , G′ , E ′ de matrizes definido pelas equações F ′ [ , h] = D[ , k] , ′ G [h, ] = αh G[h, ] , E ′ [h, ] = αh E [h, ] , F ′ [ , i] = F [ , i] G′ [i, ] = G[i, ] + αi G[h, E ′ [i, ] = E [i, ] + αi E [h, pivotação , ], ], para cada i em M − h, onde αh = 1 / E [h, k] e αi = −E [i, k] / E [h, k] . Número de iterações. É claro que o algoritmo de Gauss-Jordan converge — ou seja, sua execução pára depois de um número finito de iterações — pois P aumenta a cada ocorrência do caso 1. O número total de iterações é, no máximo, |M |. 2 Veja exercício 2.5. converge Feofiloff cap. 2 1 0 0 0 Algoritmo de Gauss-Jordan 1 1 2 1 2 5 4 −3 17 0 1 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 1 2 2 −1 0 −1 0 1 1 1 0 2 0 2 0 −1 0 0 1 0 0 0 0 1 1 −1/2 0 1/2 0 −1 0 1/2 0 0 1 0 0 0 0 1 0 1 0 0 1 1 1 2 2 2 1 −1 0 0 1 0 0 0 0 1 2 −1 −2 −3 −1 1 0 2 0 0 1 0 0 0 0 1 0 1 0 0 1 0 0 0 −1 3 0 1 1 −1 0 −1 1 1 1 2 2 2 1 −1 0 2 0 5 1 4 0 −3 −1 8 −2 −3 1 −5 0 2 0 0 1 0 1 −3 0 1 0 1 0 0 1 0 0 0 0 0 0 1 0 2 0 −1 1/2 −1/2 1/2 1/2 5/2 −1/2 1 −1 1 3/2 −1/2 1/2 Figura 2.6: Exemplo de aplicação do algoritmo de Gauss-Jordan. A figura registra os valores de F , G e E no início de sucessivas iterações. 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 1/2 −1/2 −1 1/2 0 1 0 0 0 0 1 0 1 −1 −1 0 −1 2 0 1 1/2 −1 1/2 −1 1 1 1 −1 2 1 0 1 4 2 5 −2 0 1 −1 1 1 3 4 3 0 0 0 1 1 1/2 0 1/2 0 0 0 −1/2 1 0 −2 2 2 0 1 0 0 1 −1 1 1/2 5/2 3 7/2 0 0 1 0 0 0 0 1 1 0 0 0 0 1 0 0 1 0 −2 2 2 0 1 0 −1 2 −1 2 −2 5 3 6 −1 1/2 2 0 0 −1/2 1 1 0 0 0 1 1 0 0 0 0 1 0 0 0 5/2 −3/2 −1/2 0 0 2 5 1 −1/2 1/2 −3/2 0 1 1 9 −2 −5/2 0 0 0 1/2 1 1 1 0 0 0 0 1 0 0 0 0 1 0 3 −7/2 −1 2 0 1/2 −1 1 2 1 2 −1 0 0 0 1 −4 2 1 1 −23 5 3 9 Figura 2.7: Exemplo de aplicação do algoritmo de Gauss-Jordan. A figura registra os valores de G e E no início de sucessivas iterações (F foi omitida por falta de espaço). Observe como a matriz identidade que estava inicialmente em G move-se para a direita, invadindo E . Feofiloff 2.4 cap. 2 Algoritmo de Gauss-Jordan 18 Análise do algoritmo A chave para entender como e por que o algoritmo funciona está na seguinte lista de propriedades. As propriedades valem no início de cada iteração e são, por isso mesmo, chamadas invariantes. Invariantes No início de cada iteração do algoritmo, (i1) E [P, Q] é uma matriz de bijeção e E [M −P, Q] = O , (i2) F G = I e (i3) GD = E , onde Q é uma parte de N (que poderíamos chamar base de colunas da iteração). Q P 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 Figura 2.8: Matriz E no início de uma iteração do algoritmo de Gauss-Jordan. Essas propriedades valem, em particular, no início da última iteração, quando ocorre o caso 2. Nesse caso, E é escalonada em virtude de (i1) e da definição do caso 2; além disso, F G = I em virtude de (i2). Portanto, ao devolver F e G o algoritmo estará se comportanto como prometeu. D EMONSTRAÇÃO DOS INVARIANTES : É evidente que as propriedades valem no início da primeira iteração (com P e Q vazios). Suponha agora que as propriedades valem no início de uma iteração qualquer que não a última. Então ocorre o caso 1 (com k em N − Q) e as propriedades passam a valer com F ′ , G′ , E ′ , P + h e Q + k nos papéis de F , G, E , P e Q. Para demonstrar esta afirmação basta verificar que no fim do caso 1 tem-se E ′ [ , Q] = E [ , Q] , ′ E [ , k] = I [ , h] , F ′ G′ = I , E ′ ′ = G D. (2.a) (2.b) (2.c) (2.d) Feofiloff cap. 2 Q P h 0 0 1 0 0 0 0 1 0 0 0 0 Algoritmo de Gauss-Jordan 19 k 1 0 0 0 0 0 0 0 0 0 1 0 Figura 2.9: Matriz E ′ no fim do caso 1 do algoritmo de Gauss-Jordan. A demonstração de (2.a) é elementar. Por definição da operação de pivotação, temos E ′ [h, ] = αh E [h, ] e E ′ [i, ] = E [i, ] + αi E [h, ] para cada i em M − h. Como o vetor E [h, Q] é nulo em virtude de (i1), temos E ′ [ , Q] = E [ , Q] . Antes de empreender as demonstrações de (2.b) a (2.d), é conveniente dar uma representação matricial à operação de pivotação. Seja F̌ a matriz elementar (veja seção 1.8) sobre M × M cuja coluna saliente, h, é igual a E [ , k] , isto é, e F̌ [ , h] = E [ , k] F̌ [ , M −h] = I [ , M −h] . Seja Ǧ a inversa de F̌ , isto é, a matriz elementar com coluna saliente h definida pelas equações Ǧ [h, h] = 1/E [h, k] e Ǧ [i, h] = −E [i, k] /E [h, k] para cada i em M − h. Observe que F̌ Ǧ = ǦF̌ = I . Observe também que F ′ = F F̌ , F̌ G′ = ǦG e E ′ = ǦE . As duas últimas identidades são óbvias. A primeira merece uma verificação mais cuidadosa: na coluna h temos F ′ [ , h] = D [ , k] = F G · D [ , k] = F · E [ , k] = F · F̌ [ , h] e nas demais colunas temos F ′ [ , M −h] = F [ , M −h] = F · I [ , M −h] = F · F̌ [ , M −h] . Portanto, o resultado da pivotação de F, G, E em torno de h, k é o terno de matrizes F F̌ , ǦG, ǦE . Agora podemos cuidar das demonstrações de (2.b) a (2.d). A demonstração de (2.b) decorre das igualdades ǦF̌ = I e E ′ = ǦE : para cada i em M , E ′ [i, k] = Ǧ[i, ]E [ , k] = Ǧ[i, ]F̌ [ , h] = (ǦF̌ )[i, h] = I [i, h] . Ǧ Feofiloff cap. 2 Algoritmo de Gauss-Jordan 20 A demonstração de (2.c) é fácil: F ′ G′ = (F F̌ )(ǦG) = F (F̌ Ǧ)G = F G = I . A prova de (2.d) é igualmente fácil: E ′ = ǦE = Ǧ(GD) = (ǦG)D = G′ D. ✷ 2.5 Mais invariantes O algoritmo de Gauss-Jordan tem mais quatro invariantes, além dos que discutimos na seção anterior. Não é necessário ter consciência desses invariantes adicionais para compreender o funcionamento do algoritmo; mas eles são um prenúncio de invariantes fundamentais do Simplex, cujo estudo empreenderemos a partir do próximo capítulo. Invariantes No início de cada iteração do algoritmo, (i4) G [ , M −P ] = I [ , M −P ] , (i5) F [ , M −P ] = I [ , M −P ] e F [ , P ] = D [ , Q] Je , onde Je é a transposta da matriz de bijeção E [P, Q] . P M −P 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 Q 0 0 1 0 0 0 0 1 0 0 0 0 N −Q 1 0 0 0 0 0 P M −P Figura 2.10: Matrizes G e E no início de uma iteração do algoritmo de Gauss-Jordan. A justaposição de G e E contém uma matriz de bijeção que ocupa todas as linhas. D EMONSTRAÇÃO : É óbvio que (i4) vale no início da primeira iteração. Para demonstrar que o invariante permanece válido no início das demais iterações, basta provar que no fim de cada ocorrência do caso 1 temos G′ [ , M −P −h] = G [ , M −P −h] , onde M −P −h é uma abreviatura de (M −P )−{h}. A demonstração é análoga à de (2.a). Por definição, G′ [h, ] = αh G [h, ] e G′ [i, ] = G [i, ] + αi G [h, ] Feofiloff cap. 2 Algoritmo de Gauss-Jordan para cada i em M − h. Mas G [h, M −P −h] é nulo em virtude de (i4). Logo, G′ [ , M −P −h] = G [ , M −P −h] . O invariante (i5) segue imediatamente da maneira como F ′ é definida a partir de F em cada iteração. A multiplicação por Je apenas troca os nomes das colunas que estão em Q de modo que E [P, Q] Je seja a matriz identidade sobre P × P . O invariante mostra que a variável F não precisa ser atualizada a cada iteração: ela pode muito bem ser calculada no caso 2, imediatamente antes do fim da execução do algoritmo. ✷ Invariantes No início de cada iteração do algoritmo, (i6) D [M −P, Q] = −G [M −P, P ] D [P, Q] e (i7) D [P, Q] Je G [P, P ] = I , onde Je é a transposta da matriz de bijeção E [P, Q] . D EMONSTRAÇÃO : Seja i um elemento de M − P . Em virtude de (i4), para cada i em M − P , G[i, P ]D[P, Q] + D[i, Q] = G[i, P ]D[P, Q] + G[i, M −P ]D[M −P, Q] = G[i, M ]D[M, Q] = (GD)[i, Q] = E [i, Q] = o, onde as duas últimas igualdades são conseqüência de (i3) e (i1) respectivamente. Logo, G [i, P ] D [P, Q] = −D [i, Q] . Isto demonstra (i6). Agora considere (i7). Em virtude da segunda parte de (i5), D [P, Q] Je G [P, P ] = F [P, P ] G [P, P ] . Mas F [P, P ] G [P, P ] = I por força de (i2), (i4) e da primeira parte de (i5). ✷ O invariante (i6) mostra que, para cada i em M − P , o vetor D [i, Q] é uma combinação linear das linhas da matriz D [P, Q] . O invariante (i7) mostra que Je G [P, P ] é uma inversa direita de D [P, Q] . A propósito, os invariantes (i3) e (i4) mostram que Je G [P, P ] é uma inversa esquerda de D [P, Q] . 2.6 Número de operações aritméticas Não é difícil estimar, em termos dos parâmetros m = |M | e n = |N |, o número de operações aritméticas que o algoritmo executa. É possível implementar o algoritmo (veja exercício 2.6, página 24) de modo que cada pivotação exija apenas mn multiplicações e divisões e menos que mn adições e subtrações. Como o 21 Feofiloff cap. 2 Algoritmo de Gauss-Jordan 22 algoritmo executa no máximo m tais pivotações, o número total de operações aritméticas é menor que 2m2 n . (A título de comparação, observe que a multiplicação de G por D requer m2 n multiplicações e outras tantas adições.) O consumo total de tempo do algoritmo depende não só do número de operações aritméticas mas também do tempo dispendido em cada operação. Antes de estimar esse tempo, é preciso entender que tipo de números o algoritmo manipula. É razoável restringir nosso universo aos números racionais: como o algoritmo envolve apenas as operações de soma, subtração, multiplicação e divisão, ele transforma números racionais em outros números racionais. Assim, se os componentes da matriz dada D são racionais então os componentes das matrizes F , G e E serão sempre racionais. Cada número racional tem a forma α/δ, onde α é um inteiro e δ um inteiro não-nulo. O número α/δ é representado pelo par ordenado hα, δi; o primeiro elemento do par é o numerador e o segundo é o denominador da representação. O custo de uma operação aritmética sobre números racionais depende da magnitude dos numeradores e denominadores dos números envolvidos. Será necessário, portanto, obter uma delimitação superior para os valores absolutos dos numeradores e denominadores gerados pelo algoritmo. Faremos isto no capítulo 11. Podemos adiantar que esses números são, em geral, muito maiores que os numeradores e denominadores dos componentes da matriz dada D. 2.7 Conclusão O algoritmo de Gauss-Jordan transforma qualquer matriz dada em uma matriz escalonada equivalente. O algoritmo, juntamente com sua análise, constitui prova do seguinte teorema: Para toda matriz D, existem matrizes F e G tais que F G = I e GD é escalonada. Vale também o seguinte adendo: se os componentes de D são números racionais então existem matrizes racionais F e G com as propriedades citadas. O algoritmo de Gauss-Jordan é muitas vezes executado de modo apenas aproximado: os números são representados “em ponto flutuante”, com um número fixo de dígitos, e as operações aritméticas são executadas com erro de arredondamento. Os erros podem mascarar completamente os resultados; números que deveriam ser nulos, por exemplo, podem se apresentar como diferentes de zero, e o algoritmo pode deixar de reconhecer o caso 2. Há uma grande coleção de truques que visam controlar, em alguma medida, tais erros de arredondamento [Chv83]. números racionais numerador denominador Feofiloff 3 4 5 1 32 8 9 2 3 6 5 6 7 8 cap. 2 Algoritmo de Gauss-Jordan 1 2 3 4 5 6 7 5 6 7 5 9 10 3 4 5 4 7 8 9 11 6 7 9 10 10 5 2 7 8 8 9 9 2 1 8 9 10 6 2 3 4 9 73 1 2 7 4 5 23 10 1 2 3 4 5 8 −629/246 39615/16892 −6827/25338 1687/12669 298/12669 955/50676 −1970/12669 173/246 −11887/16892 10079/25338 −2704/12669 −748/12669 −5203/50676 2309/12669 2/41 −531/8446 3/4223 −72/4223 155/4223 −113/8446 24/4223 130/123 −7651/8446 −1445/12669 896/12669 −52/12669 937/25338 1109/12669 −22/123 1281/4223 −115/12669 −1463/12669 −311/12669 1462/12669 −920/12669 67/82 −20105/16892 −125/8446 1500/4223 290/4223 1893/16892 −500/4223 −73/82 20509/16892 75/8446 −900/4223 −174/4223 −2825/16892 300/4223 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 −14885/8446 7482125/50676 −309364/12669 0 19365/8446 −2279561/50676 91123/12669 0 −907/4223 −33379/8446 2114/4223 0 165/4223 −1419745/25338 133228/12669 0 2205/4223 256175/12669 −24730/12669 0 −18515/8446 −1326005/16892 33380/4223 1 19555/8446 1344593/16892 −36920/4223 Figura 2.11: Ao receber a primeira matriz da figura, digamos D, o algoritmo de GaussJordan poderá devolver a segunda matriz no papel de G. A terceira matriz é GD. 2.8 Aplicação: Sistemas de equações Considere o seguinte problema: Dada uma matriz A sobre M × N e um vetor b sobre M , encontrar um vetor x tal que Ax = b. Para resolver o problema, comece por submeter A ao algoritmo de Gauss-Jordan. O algoritmo devolverá matrizes F e G tais que F G = I e GA é escalonada. Digamos que as bases de GA são P e Q e suponha inicialmente que o vetor (Gb) [M −P ] é nulo. Seja x o único vetor que satisfaz as equações x [N −Q] = o e (GA) [P, Q] x [Q] = (Gb) [P ] . Este é o vetor básico associado à base Q. É claro que (GA)x = Gb, donde F (GA)x = F (Gb) e portanto Ax = b.3 Suponha agora que (Gb) [h] não é nulo para algum h em M − P . É claro que nesse caso não existe x tal que (GA)x = Gb. Nosso problema original também não tem solução, como passamos a demonstrar. Seja g o vetor G [h, ] e observe 3 Esse método de cálculo de x não é o mais eficiente. É possível obter x com apenas um terço do número de multiplicações se o algoritmo de Gauss-Jordan for modificado de modo a produzir uma matriz triangular no lugar da matriz de bijeção (GA) [P, Q] . Essa variante do algoritmo é conhecida como método de eliminação de Gauss [Chv83, cap.6] [CLRS01, cap.31]. vetor básico Feofiloff cap. 2 Algoritmo de Gauss-Jordan que gA = (GA) [h, ] = 0 enquanto gb = (Gb) [h] 6= 0 . Se existisse um vetor x tal que Ax = b teríamos a contradição 0 = (gA)x = g(Ax) = gb 6= 0. O vetor g constitui, portanto, um “certificado” facilmente verificável de que a equação Ax = b não tem solução. Exercícios 2.1 Escreva um algoritmo que decide se uma dada matriz é escalonada e em caso afirmativo devolve o seu par de bases. 2.2 Mostre que GF = I no início de cada iteração do algoritmo de GaussJordan. 2.3 O algoritmo descrito no texto devolve apenas as matrizes F e G. Escreva uma versão que devolva também a matriz escalonada E e suas bases P e Q. 2.4 Escreva uma versão do algoritmo de Gauss-Jordan em que a matriz F seja calculada somente na última iteração. 2.5 Escreva o algoritmo de Gauss-Jordan em uma linguagem mais formal, mais próxima de PASCAL ou C. (Veja solução parcial E.1 no apêndice E.) Programe o algoritmo em um computador. 2.6 Escreva uma versão um pouco mais eficiente do algoritmo de GaussJordan: execute apenas implicitamente a parte da operação de pivotação que afeta a base de colunas Q e a coluna k. 2.7 Suponha que a execução do algoritmo de Gauss-Jordan é interrompida no início de uma iteração e que uma pivotação é executada em torno de um elemento h de P (e não de M − P , como é usual) e um elemento k de N − Q. É claro que isso só faz sentido se E [h, k] 6= 0. Qual o efeito de tal pivotação? A execução do algoritmo pode ser retomada depois da pivotação excepcional? 2.8 Suponha que A e B são matrizes sobre M × M e que P é uma parte de M . Suponha ainda que AB = I e A [ , M −P ] = B [ , M −P ] = I [ , M −P ] . Mostre que A [P, P ] B [P, P ] = I . 2.9 Mostre que no início de cada iteração do algoritmo de Gauss-Jordan a matriz G [M −P, P ] é completamente determinada pelas matrizes D [M −P, Q] , E [P, Q] e G [P, P ] . 2.10 Sejam Ġ, Ṗ e Q̇ os valores das variáveis G, P e Q no início de uma iteração. Sejam G̈, P̈ e Q̈ os valores das variáveis G, P e Q no início de outra iteração. Mostre que se Ṗ = P̈ e Q̇ = Q̈ então Ġ [M −Ṗ , ] = G̈ [M −P̈ , ] . 24 Feofiloff cap. 2 Algoritmo de Gauss-Jordan 2.11 Suponha que G1 e G2 são matrizes inversíveis tais que G1 D e G2 D são escalonadas. Mostre que quaisquer bases de colunas, digamos Q1 e Q2 , das duas matrizes escalonadas têm a mesma cardinalidade. Essa cardinalidade comum é o posto da matriz D. A propósito, diz-se que D tem posto pleno se seu posto é igual ao número de linhas da matriz. (Solução no apêndice E, página 192.) 2.12 Encontre números x1 , . . , x4 que satisfaçam as equações abaixo. x1 + x2 + x3 + 3x4 = 6 3x1 + 4x2 + x3 + 8x4 = 18 −x1 + x2 − 4x3 − 4x4 = −5 2.13 Resolva o seguinte problema: dada uma matriz A sobre M × N , um vetor b sobre M e um vetor c sobre N , encontrar x tal que Ax = b e cx é mínimo. O problema sempre tem solução? (Veja apêndice E, página 192.) 25 Capítulo 3 Introdução ao Simplex Encontre números não-negativos x1 , x2 , x3 e x4 que satisfaçam as equações d11 x1 + d12 x2 + d13 x3 + d14 x4 = d15 d21 x1 + d22 x2 + d23 x3 + d24 x4 = d25 d31 x1 + d32 x2 + d33 x3 + d34 x4 = d35 e minimizem a soma d41 x1 + d42 x2 + d43 x3 + d44 x4 O algoritmo Simplex é a ferramenta básica da programação linear. O objetivo do algoritmo é transformar uma matriz dada em outra equivalente que contenha um certo “desenho” ou “padrão”, que descreveremos na seção 3.1. Este capítulo faz um esboço do Simplex, destacando seu parentesco com o algoritmo de Gauss-Jordan discutido no capítulo anterior. Nosso esboço contém todos os elementos básicos do Simplex, mas não chega a ser um algoritmo pois em geral não converge. Os dois próximos capítulos mostrarão como refinar o esboço para transformá-lo num algoritmo. Como no estudo de qualquer algoritmo, é preciso enfrentar duas perguntas: o que faz o Simplex? como faz o que faz? Este capítulo trata principalmente da segunda pergunta. A primeira será respondida no próximo capítulo. Uma terceira pergunta — para que serve o Simplex? — será adiada até o capítulo 7, ainda que isso possa tornar um tanto árida e indigesta a tarefa de entender o conceito de matriz simples. 3.1 Matrizes simples Os dados do Simplex são uma matriz sobre M × N , um elemento n de N e um elemento m de M . Diremos que n é a coluna especial e que m é a linha especial da matriz. Nas figuras, a coluna especial será sempre a que estiver mais à direita e a linha especial será sempre a última. A propósito, não estamos fazendo quaisquer restrições sobre os valores relativos de |M | e |N | e não estamos presumindo qualquer relação de ordem em M ou N . 26 n m coluna especial linha especial Feofiloff cap. 3 Introdução ao Simplex Nosso estudo começa com uma descrição das características da matriz que o Simplex calcula. Diremos que uma matriz E é simples com relação ao par n, m de índices se for de um dos três tipos definidos abaixo: simples solúvel, simples inviável ou simples ilimitada. Não vamos nos preocupar, por enquanto, com as conotações das palavras “solúvel”, “inviável” e “ilimitada”; elas serão justificadas no capítulo 7. As definições poderão parecer indigestas, mas deverão ficar mais naturais depois que fizermos um esboço do Simplex. 27 matriz simples Matriz simples solúvel. Dada uma matriz E sobre M × N e elementos n e m de N e M respectivamente, diremos que E é simples solúvel com relação ao par n, m se existem partes P de M − m e Q de N − n tais que E [P, Q] é de bijeção , E [P, n] ≥ o , E [M −m−P, N ] = O , E [m, N −n−Q] ≥ o , E [m, Q] = o . A expressão M − m − P é uma abreviatura de (M − {m}) − P ; analogamente, N −n−Q é uma abreviatura de (N −{n})−Q. É óbvio que a matriz E [M −m, N −n] é escalonada. O conjunto P é a base de linhas e o conjunto Q é uma base de colunas da matriz. É fácil verificar que a base de linhas é única, mas podem existir várias bases de colunas. Há uma certa simetria entre E [m, N −n] e E [M −m, n] na definição de matriz simples solúvel: a condição E [P, n] ≥ o corresponde à condição E [m, Q] = o; e a condição E [M −m−P, n] = o corresponde à condição E [m, N −n−Q] ≥ o. Matriz simples inviável. Uma matriz E sobre M × N é simples inviável com relação à coluna n e linha m se existe h em M − m tal que E [h, N −n] ≤ o e E [h, n] > 0 E [h, N −n] ≥ o e E [h, n] < 0 . ou M −m−P N −n−Q bases linha de inviabilidade O elemento h de M − m é o índice de uma linha de inviabilidade. Matriz simples ilimitada. Uma matriz E sobre M ×N é simples ilimitada com relação à coluna n e linha m se existe uma parte P de M − m, uma parte Q de N − n e um elemento k de N − n − Q tais que E [P, k] ≤ o , E [P, Q] é de bijeção , E [P, n] ≥ o , E [M −m−P, k] = o , E [M −m−P, Q] = O , E [M −m−P, n] = o , E [m, k] < 0 , E [m, Q] = o . Os conjuntos P e Q são as bases da matriz e k é o índice de uma coluna de ilimitação. Há uma certa simetria entre a definição de matriz simples inviável e a de matriz simples ilimitada: a condição “E [h, N −n] ≤ o e E [h, n] > 0 ou E [h, N −n] ≥ o e E [h, n] < 0” da primeira corresponde à condição “E [M −m, k] ≤ o e E [m, k] < 0” da segunda. coluna de ilimitação Feofiloff cap. 3 Introdução ao Simplex P 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 m ≥ ≥ ≥ ≥ ≥ ≥ ≥ ≥ ≥ ≥ ≥ 0 0 1 0 0 0 0 Q n 0 1 0 0 0 0 0 1 ≥ 0 ≥ 0 ≥ 28 0 0 0 0 0 0 0 Figura 3.1: Matriz simples solúvel. n ≤ ≤ ≤ ≤ ≤ ≤ ≤ ≤ ≤ ≤ ≤ ≤ ≤ ≤ > h m Figura 3.2: Matriz simples inviável. k P Q 0 0 1 0 0 0 0 ≤ ≤ ≤ 0 0 0 m < 0 1 0 0 0 0 0 n 1 0 0 0 0 0 0 ≥ ≥ ≥ 0 0 0 Figura 3.3: Matriz simples ilimitada. Matriz simples. Uma matriz E é simples com relação aos índices n e m se for de um dos três tipos descritos acima. As três definições são mutuamente exclusivas: uma matriz não pode ser, ao mesmo tempo, simples solúvel e inviável, nem simples solúvel e ilimitada, nem simples inviável e ilimitada. 3.2 Esboço do Simplex Suponha dada uma matriz D sobre M × N e elementos n e m de N e M respectivamente. O objetivo do Simplex é transformar D, por meio de sucessivas D Feofiloff cap. 3 1 99 0 99 0 0 0 1/2 0 −99 0 77 0 0 0 0 1 0 Introdução ao Simplex 0 99 0 99 0 0 0 1/2 1 −99 0 77 0 0 0 1 0 0 0 99 88 1 99 88 0 0 0 0 1/2 0 0 −99 88 0 77 −66 Figura 3.4: Esta matriz é simples solúvel com re- lação à coluna 9 e linha 6. A base de linhas é composta de 1, 2, 4, 5. Há duas bases de colunas: uma contém 1, 3, 6, 7 e outra contém 1, 4, 6, 7. 1 99 0 −99 0 0 0 1/2 0 0 −99 99 0 99 99 0 −99 −99 0 99 0 0 1/2 1/2 0 0 0 0 −99 99 0 0 99 88 0 −99 −99 88 0 0 0 0 1 0 1/2 0 0 0 0 −1 0 0 99 −66 Figura 3.5: Matriz simples inviável (coluna espe- cial 9 e linha especial 6). Há duas linhas de inviabilidade: 2 e 5. 1 99 0 −99 0 0 0 1/2 0 99 0 77 0 0 99 0 −99 −99 0 0 0 0 −1/2 1/2 1 −99 99 0 −77 77 0 0 0 1 0 0 0 99 88 1 99 88 0 0 0 0 1/2 0 0 99 88 0 77 −66 Figura 3.6: Matriz simples ilimitada. A coluna de ilimitação é 4. 29 Feofiloff cap. 3 Introdução ao Simplex operações de pivotação, numa matriz que seja simples em relação a n e m. Cada iteração do Simplex começa com uma matriz E e uma parte P de M − m tais que 30 E P f [P ] ≥ o , E [P, Q] é uma matriz de bijeção e E [M −P, Q] = O , onde f denota o vetor E [ , n] e Q é uma parte de N −n. As operações executadas durante uma iteração modificam E e P de modo a preservar essas propriedades. A primeira iteração começa com E = D e P = ∅. Cada iteração consiste no seguinte: C ASO 1: E [h, k] > 0 e f [h] ≥ 0 ou E [h, k] < 0 e f [h] ≤ 0 para algum h em M − m − P e algum k em N − n . Seja P ∗ o conjunto de todos os p em P para os quais E [p, k] > 0. C ASO 1A: f [h] /E [h, k] ≤ f [p] /E [p, k] para todo p em P ∗ . Seja E ′ o resultado da pivotação de E em torno de h, k. Comece nova iteração com P + h e E ′ nos papéis de P e E . C ASO 1B: f [h] /E [h, k] > f [p] /E [p, k] para algum p em P ∗ . Escolha p em P ∗ de modo que f [p] /E [p, k] seja mínimo. Seja E ′ o resultado da pivotação de E em torno de p, k. Comece nova iteração com E ′ no papel de E (sem alterar P ). f Q h k P∗ p C ASO 2: E [h, N −n] ≤ o e f [h] > 0 ou E [h, N −n] ≥ o e f [h] < 0 para algum h em M − m − P . Devolva E e pare (a matriz E é simples inviável). h C ASO 3: E [M −m−P, N ] = O, f [M −m−P ] = o e E [m, k] < 0 paraalgum k em N − n . Seja P ∗ o conjunto de todos os p em P para os quais E [p, k] > 0. k P∗ C ASO 3A: P ∗ é vazio . Devolva E e pare (a matriz E é simples ilimitada). C ASO 3B: P ∗ não é vazio . Escolha p em P ∗ de modo que f [p] /E [p, k] seja mínimo. Seja E ′ o resultado da pivotação de E em torno de p, k. Comece nova iteração com E ′ no papel de E (sem alterar P ). p C ASO 4: E [M −m−P, N ] = O, f [M −m−P ] = o e E [m, N −n] ≥ o . Devolva E e pare (a matriz E é simples solúvel). ✷ A operação de pivotação a que se referem os casos 1A, 1B e 3B é definida como no algoritmo de Gauss-Jordan (seção 2.3): dados elementos h de M − m e k de N − n (as pivotações jamais ocorrem na linha m e jamais na coluna n), o resultado da pivotação de E em torno de h, k é a matriz E ′ definida pelas pivotação Feofiloff cap. 3 Introdução ao Simplex equações E ′ [h, ] = 1 E [h, k] E [h, ] e E ′ [i, ] = E [i, ] − E [i, k] E [h, ] E [h, k] para cada i em M − h. É claro que os casos 1A e 1B devem ser entendidos como subcasos do caso 1; analogamente, 3A e 3B são subcasos de 3. Os casos 1B e 3B são formalmente idênticos. A definição de p nesses casos deve ser entendida da seguinte maneira: escolha qualquer p em P ∗ que satisfaça a condição f [p] /E [p, k] ≤ f [i] /E [i, k] para todo i em P ∗ . Q 0 0 1 0 0 0 m 0 P 0 1 0 0 0 0 0 n 1 0 0 0 0 0 0 ≥ ≥ ≥ Figura 3.7: Matriz E no início de uma iteração. A estrutura de casos. Em cada iteração, pelo menos um dos quatro casos se aplica, como passamos a mostrar. Se os casos 1 e 2 não valem para um elemento h de M − m − P então E [h, N −n] = o e f [h] = 0 . Por outro lado, se essa condição é verdadeira para todo h em M − m − P então é óbvio que vale o caso 3 ou o caso 4. Como se vê, os quatro casos se complementam naturalmente. Essa complementaridade determina a “lógica interna” do Simplex e justifica nossas definições de matriz simples solúvel, inviável e ilimitada. Nossa linguagem algorítmica. Em nossa linguagem de descrição de algoritmos, a ordem em que os casos são enunciados é irrelevante: em cada iteração, qualquer dos casos aplicáveis pode ser executado. O mesmo vale para os subcasos dentro de cada caso. Ademais, a definição de um caso não supõe que os demais não se aplicam. É possível mesmo que os casos não sejam mutuamente exclusivos (embora isso não ocorra no esboço do Simplex acima). A propósito, as expressões lógicas da forma “X e Y ou W e Z” que aparecem na definição de alguns casos devem ser entendidas como “(X e Y) ou (W e Z)”. 31 Feofiloff cap. 3 Introdução ao Simplex 1 0 0 0 1 1 −1 −1 5 −1 −3 1 −1 1 −1 2 5 4 −8 3 1 0 0 0 0 1 0 0 6 −1 −4 0 −2 1 0 3 1 4 −4 7 1/6 1/6 2/3 0 0 1 0 0 1 −1/3 1/6 0 2/3 25/6 0 −4/3 −10/3 0 3 7 0 1/2 −1/2 3/2 0 1 0 0 1 0 0 0 0 0 1 0 32 1 5/2 5/2 −1/2 Figura 3.8: Exemplo de aplicação do Simplex. A figura registra a matriz E no início de sucessivas iterações. Neste exemplo, a primeira iteração começa com P = {1} e Q = {1}. O subcaso 1A se aplica com h, k = 2, 2. Na segunda iteração, o caso 1 se aplica com h, k = 3, 3; o subcaso 1A não se aplica, mas o subcaso 1B vale com p = 1. No início da terceira iteração, a matriz E não é mais simples que no início da iteração anterior, mas em algum sentido é melhor que aquela: depois de uma pivotação em torno de 3, 4 obtemos uma matriz simples solúvel. Terminologia tradicional. Convém mencionar alguns termos consagrados pelo uso em discussões sobre o Simplex. Nos casos 1 e 3, dizemos que a coluna k entra na base. Nos casos 1B e 3B, dizemos que sai da base a coluna q definida pela relação E [p, q] = 1. Qual o critério para a escolha da coluna k que deverá entrar na base? No caso 1, basta que E [h, k] não seja nulo e f [h] /E [h, k] não seja negativo; no caso 3, basta que E [m, k] seja negativo.1 Qual o critério para a escolha da coluna q que deverá sair da base nos casos 1B e 3B? Como a matriz E [P, Q] estabelece uma bijeção entre P e Q, o critério de escolha de q se confunde com o critério de escolha de p e p é escolhido em P ∗ de modo que f [p] /E [p, k] seja mínimo. A propósito, o esboço que fizemos acima corresponde, essencialmente, à chamada versão tabular do Simplex. 1 Dizer que α é negativo é o mesmo que dizer “α < 0”. Analogamente, α é positivo se α > 0. entra na base sai da base Feofiloff cap. 3 Introdução ao Simplex 2 2 −1 1 2 0 1 1 4 5 −2 1 0 −1 1 1 24 −10 2 0 1 0 0 0 1 −2 2 0 2 1 0 −1 0 −1 1 1 12 −34 14 −12 1 0 0 0 1 2 0 −2 2 −1 1 0 0 1 0 0 12 34 −20 −46 33 Figura 3.9: Exemplo de aplicação do Simplex. A fi- gura registra a matriz E no início de sucessivas iterações. A matriz resultante é simples inviável. 2 2 −1 1 2 0 1 1 4 5 −2 1 0 −1 1 1 24 10 2 0 2 2 −1 1 2 0 1 1 4 5 −2 1 −8 −4 0 −8 24 10 2 0 1 0 0 0 1 −2 2 0 2 1 0 −1 0 −1 1 1 12 −14 14 −12 1 0 0 0 1 −2 2 0 2 1 0 −1 −4 4 −4 −4 12 −14 14 −12 1 0 0 0 0 5/2 −1/2 1 −1/2 1/2 0 1 0 0 −1 1 5 7 0 −12 1 0 0 0 0 5/2 1 −1/2 0 1 0 −1 −2 −2 0 −4 5 7 0 −12 1 0 0 0 0 1 0 0 5 7 0 −12 1 0 0 0 0 1 0 0 −2 −2 0 −4 5 7 0 −12 0 −1/2 0 1/2 1 0 0 1 0 0 1 0 Figura 3.10: Mais dois exemplos de aplicação do Simplex, ligeiramente diferentes do anterior. No primeiro (à esquerda), a última matriz é simples solúvel. No segundo, a última matriz é simples ilimitada. Feofiloff 3.3 cap. 3 Introdução ao Simplex 34 Análise Como já anunciamos acima, o Simplex gira em torno de duas propriedades (compare com a seção 2.4: Invariantes No início de cada iteração, (i0) f [P ] ≥ o , (i1) E [P, Q] é de bijeção e E [M −P, Q] = O , onde Q é uma parte de N . Os dois invariantes são trivialmente verdadeiros (com P e Q vazios) no início da primeira iteração. Suponha agora que eles valem no início de uma iteração qualquer que não a última. É claro que nessa iteração ocorre o caso 1 ou o caso 3 e k está necessariamente em N − Q. É preciso mostrar que no fim do caso 1A os invariantes permanecem válidos com E ′ , P + h e Q + k nos papéis de E , P e Q e que no fim dos casos 1B e 3B os invariantes permanecem válidos com E ′ e Q − q + k nos papéis de E e Q, onde q é o único elemento de Q tal que E [p, q] = 1. Trocando em miúdos, basta mostrar que no fim do caso 1A temos f ′ [P +h] ≥ o , (3.a) ′ E [ , Q] = E [ , Q] , E ′ [ , k] = I [ , h] , (3.b) (3.c) e que no fim dos casos 1B e 3B temos f ′ [P ] ≥ o , (3.d) ′ E [ , Q−q] = E [ , Q−q] , E ′ [ , k] = I [ , p] , (3.e) (3.f) onde f ′ = E ′ [ , n] e I é a matriz identidade. As demonstrações de (3.a) e (3.d) explicam a estrutura de casos do Simplex e a elaborada escolha de p nos casos 1B e 3B. D EMONSTRAÇÃO DE (3.a): Considere inicialmente o componente h de f ′ . Em virtude da definição do caso 1, f [h] /E [h, k] ≥ 0 . Como a pivotação no caso 1A ocorre em torno de h, k temos f ′ [h] = f [h] /E [h, k] e portanto f ′ [h] ≥ 0. Resta considerar f ′ [i] com i em P . Suponha inicialmente que E [i, k] não é positivo. Então f ′ [i] ≥ 0 pois f ′ [i] = f [i] − E [i, k] f [h] E [h, k] Feofiloff cap. 3 Q P m 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 Introdução ao Simplex k n 0 0 0 1 0 0 0 ≥ ≥ ≥ ≥ 35 h Figura 3.11: Matriz E ′ no fim do caso 1A. e f [i] ≥ 0 em virtude de (i0). Suponha agora que E [i, k] é positivo. Então f ′ [i] ≥ 0 porque f [i] f [h] − ) f ′ [i] = E [i, k] ( E [i, k] E [h, k] e a expressão entre parênteses não é negativa, em virtude da definição do caso 1A. Em suma, f ′ [i] ≥ 0 para cada i em P + h . ✷ D EMONSTRAÇÃO DE (3.d): Como a pivotação nos casos 1B e 3B ocorre em torno de p, k, temos f ′ [p] = f [p] /E [p, k] . Mas f [p] ≥ 0 em virtude de (i0) e E [p, k] > 0 pois p ∈ P ∗ . Logo, f ′ [p] ≥ 0 . Resta considerar f ′ [i] com i em P − p. Suponha inicialmente que E [i, k] não é positivo. Então f ′ [i] ≥ 0 pois f ′ [i] = f [i] − E [i, k] f [p] E [p, k] e f [i] ≥ 0. Suponha agora que E [i, k] é positivo. Então f ′ [i] ≥ 0 porque f ′ [i] = E [i, k] ( f [p] f [i] − ) E [i, k] E [p, k] e a expressão entre parênteses não é negativa em virtude da maneira como p foi escolhido. ✷ As demonstrações de (3.b), (3.c), (3.e) e (3.f) são análogas às demonstrações das relações correspondentes no algoritmo de Gauss-Jordan. A título de ilustração, vamos examinar as duas últimas. D EMONSTRAÇÃO DE (3.e): Como E [p, Q−q] = 0 em virtude de (i1), a definição da operação de pivotação garante que E ′ [p, Q−q] = E [p, Q−q] para cada i em M − p . ✷ e E ′ [i, Q−q] = E [i, Q−q] Feofiloff cap. 3 q P m 0 1 0 0 0 0 0 1 0 0 0 0 0 0 Introdução ao Simplex k n 0 0 1 0 0 0 0 ≥ ≥ ≥ 36 p Figura 3.12: Matriz E ′ no fim dos casos 1B e 3B. D EMONSTRAÇÃO DE (3.f): Convém representar a operação de pivotação de forma matricial, como já fizemos ao analisar o algoritmo de Gauss-Jordan. Seja F̌ a matriz elementar sobre M × M cuja coluna saliente, p, é igual a E [ , k] . Seja Ǧ a inversa de F̌ , isto é, a matriz elementar com coluna saliente p definida pelas equações Ǧ [p, p] = 1/E [p, k] e Ǧ [i, p] = −E [i, k] /E [p, k] para cada i em M − p. Observe que F̌ Ǧ = Ǧ F̌ = I e E ′ = Ǧ E . Agora, para cada i em M , E ′ [i, k] = Ǧ [i, ] E [ , k] = Ǧ [i, ] F̌ [ , p] = (ǦF̌ ) [i, p] = I [i, p] . Logo, E ′ [ , k] = I [ , p] . ✷ Como acabamos de mostrar, os invariantes (i0) e (i1) valem no início de cada iteração. Em particular, os invariantes valem no início da última iteração. Portanto, a matriz E que o Simplex devolve é simples com relação ao par n, m: no caso 2, E é simples inviável (com linha de inviabilidade h); no caso 3A, E é simples ilimitada (com coluna de ilimitação k); no caso 4, E é simples solúvel (com bases P e Q). 3.4 Convergência Nosso esboço do Simplex freqüentemente não converge, ou seja, freqüentemente não atinge um dos casos terminais (2, 3A ou 4). Enquanto estiver ocorrendo o caso 1A, é óbvio que estamos fazendo progresso, pois P aumenta. Mas é possível que haja uma seqüência infinita de ocorrências dos casos 1B ou 3B. Isto acontece, em especial, se o caso 1 ocorre em duas iterações consecutivas com um mesmo valor de P e valores distintos de h, como mostra a figura 3.13. A convergência melhora se insistirmos na mesma linha h, iteração após iteração, enquanto P não se alterar. A justificativa para esta política está na seguinte observação, a ser demonstrada no próximo capítulo: enquanto estiver F̌ Ǧ Feofiloff cap. 3 Introdução ao Simplex 1 0 0 0 2 1 −6 0 10 12 13 0 2 2 3 0 1/2 −1/2 3 0 1 0 0 0 5 7 43 0 1 1 9 0 1 0 0 0 2 1 −6 0 10 12 13 0 2 2 3 0 37 Figura 3.13: Exemplo de não-convergência do esboço do Simplex na seção 3.2. A figura registra o valor de E no início de três iterações consecutivas. Em todas, 1 é o único elemento de P . Na primeira iteração, o caso 1 se aplica com h, k = 2, 2 e o subcaso 1B se aplica com p = 1. Na segunda iteração, o caso 1 se aplica com h, k = 3, 1 e o subcaso 1B se aplica com p = 1. No início da terceira iteração temos exatamente a mesma configuração que no início da primeira. Este ciclo poderá se repetir ad æternum. acontecendo o caso 1 com um mesmo valor de P e um mesmo valor de h, o valor absoluto de f [h] diminui ou, na pior das hipóteses, não aumenta. Em outras palavras, numa seqüência de ocorrências do caso 1B, a seqüência de valores de f [h] é monotônica, isto é, crescente ou decrescente.2 Exercícios 3.1 Escreva um algoritmo que decida se uma dada matriz E é simples com relação a um dado par n, m de índices. 3.2 Considere o esboço do Simplex feito na seção 3.2. Qual dos casos se aplica numa iteração que começa com P = M − m? 3.3 Escreva uma versão especializada do Simplex para matrizes com uma só linha. Escreva uma versão especializada do Simplex para matrizes com apenas duas linhas. Use as duas matrizes abaixo como teste, com n = 6 e m = 2. (Veja também o exercício 4.3.) 2 2 2 2 1 2 2 2 0 −1 −2 0 0 2 2 2 1 2 −2 2 0 −1 −2 0 0 Diremos que uma seqüência α1 , α2 , α3 , . . . é crescente se α1 ≤ α2 ≤ α3 ≤ · · · e decrescente se α1 ≥ α2 ≥ α3 ≥ · · · . Feofiloff 3.4 cap. 3 Introdução ao Simplex Aplique o Simplex descrito na seção 3.2 à matriz abaixo (como de hábito, a coluna especial é a que está mais à direita e a linha especial é a última). Aplique o Simplex várias vezes, procurando obter soluções diferentes. 1 2 1 0 2 5 0 −1 −1 −3 1 1 −1 −2 −1 0 3.5 1 0 0 0 0 1 0 1 0 0 1 0 12 10 2 0 Suponha que no início de uma iteração do Simplex aplica-se o caso 3 e k é escolhido, por engano, de modo que E [m, k] ≥ 0. Suponha que a iteração é executada com este valor de k. Como isso afeta a iteração corrente? Como isso afeta o andamento das iterações subseqüentes? 38 Capítulo 4 Heurística Simplex “Que a heurística apresente a sua versão dos fatos!” Este capítulo faz uma descrição completa da heurística Simplex. Esta versão do Simplex não merece o rótulo algoritmo pois nem sempre converge.1 Mas os exemplos de não-convergência são muito mais raros que os do esboço que fizemos no capítulo anterior (seção 3.2). O próximo capítulo mostrará como refinar a heurística para transformá-la num algoritmo. 4.1 Introdução A heurística Simplex recebe uma matriz D, o índice n de uma coluna e o índice m de uma linha e calcula uma matriz E que é simples com relação ao par n,m. Para dizer o que, exatamente, o Simplex faz é preciso especificar a relação entre as matrizes E e D. Essa relação é um pouco mais restritiva que a do algoritmo de Gauss-Jordan (capítulo 2): existem matrizes F e G tais que E = GD , G [ , m] = I [ , m] e FG = I , onde I é a matriz identidade. A versão da heurística que descreveremos a seguir devolve F e G. De posse dessas matrizes, basta calcular os produtos F G e GD e verificar se, de fato, o primeiro é igual à matriz identidade e o segundo é simples com relação a n,m. Como E = GD, cada linha de E é uma combinação linear das linhas de D. Como G [ , m] = I [ , m] , cada linha de E [M −m, ] é uma combinação linear das linhas de D [M −m, ] e o vetor E [m, ] é a soma de D [m, ] com uma combinação linear das linhas de D [M −m, ] . 1 Uma heurística é um procedimento de tentativa-e-erro. No presente texto, o termo é usado para designar um procedimento computacional que (ao contrário de um algoritmo) nem sempre converge, mas produz os resultados desejados quando converge. Um procedimento computacional converge se sua execução termina depois de um número finito de iterações, quaisquer que sejam os dados. 39 Feofiloff cap. 4 1 0 0 0 2 2 1 1 0 2 1 −1 0 0 0 1 Heurística Simplex 1 −2 0 0 1 −1/2 0 0 1/2 0 −1 1 0 0 0 1 2 1 2 −1 2 4 0 1 2 0 0 5 −1 1 −3 1 40 24 12 10 2 Figura 4.1: A figura especifica matrizes F , G e D. Verifique que F G = I , que G [ , 4] = I [ , 4] e que a matriz GD é simples com relação à coluna 5 e linha 4. 4.2 A heurística A heurística Simplex adota a política, já sugerida no capítulo anterior (veja seção 3.4), de insistir numa mesma linha h enquanto isso fizer sentido. Essa política melhora muito a convergência, embora não seja suficiente para garanti-la. Para implementar a política, introduzimos duas novas variáveis: L e h. Heurística Simplex Recebe uma matriz D sobre M × N e elementos ne m de N e M respectivamente; se convergir, devolve matrizes F e G sobre M × M tais que F G = I , G [ , m] = I [ , m] e GD é simples (solúvel, inviável, ou ilimitada) com relação ao par n, m. Cada iteração começa com uma parte L de M −m, um elemento h de M −L, e matrizes F , G e E . A primeira iteração começa com F = G = I , E = D, L = ∅ e com h em M , se possível2 distinto de m. Cada iteração adota a abreviatura f = E [ , n] e consiste no seguinte: D n m L h f A LTERNATIVA I: h é diferente de m . C ASO I.1: E [h, k] > 0 e f [h] ≥ 0 ou E [h, k] < 0 e f [h] ≤ 0 para algum k em N − n . Seja L∗ o conjunto de todos os p em L para os quais E [p, k] > 0. k L∗ C ASO I.1A: f [h] /E [h, k] ≤ f [p] /E [p, k] para todo p em L∗ . Seja F ′ , G′ , E ′ o resultado da pivotação de F, G, E em torno de h, k. Seja L′ o conjunto L + h. Escolha h′ em M − L′ , se possível distinto de m. Comece nova iteração com L′ , h′ , F ′ , G′ , E ′ nos papéis de L, h, F , G, E . C ASO I.1B: f [h] /E [h, k] > f [p] /E [p, k] para algum p em L∗ . Escolha qualquer p em L∗ tal que f [p] /E [p, k] é mínimo. Seja F ′ , G′ , E ′ o resultado da pivotação de F, G, E em torno de p, k. Comece nova iteração com F ′ , G′ e E ′ nos papéis de F , G e E . 2 Ou seja, se M − m não é vazio. p Feofiloff cap. 4 Heurística Simplex 41 C ASO I.2: E [h, N −n] ≤ o e f [h] > 0 ou E [h, N −n] ≥ o e f [h] < 0 . Devolva F e G e pare. C ASO I.3: E [h, N −n] = o e f [h] = 0 . Seja L′ o conjunto L + h. Escolha h′ em M − L′ , se possível distinto de m. Comece nova iteração com L′ e h′ nos papéis de L e h. A LTERNATIVA II: h é igual a m . C ASO II.1: E [h, k] < 0 para algum k em N − n . Seja L∗ o conjunto de todos os p em L para os quais E [p, k] > 0. k L∗ C ASO II.1A: L∗ é vazio . Devolva F e G e pare. C ASO II.1B: L∗ não é vazio . Escolha qualquer p em L∗ tal que f [p] /E [p, k] é mínimo. Seja F ′ , G′ , E ′ o resultado da pivotação de F, G, E em torno de p, k. Comece nova iteração com F ′ , G′ e E ′ nos papéis de F , G e E . p C ASO II.2: E [h, N −n] ≥ o . Devolva F e G e pare. ✷ 3 A operação de pivotação é definida como no algoritmo de Gauss-Jordan: dados elementos h de M − m e k de N − n, o resultado da pivotação de F, G, E em torno de h, k é o terno F ′ , G′ , E ′ de matrizes definido pelas equações F ′ [ , h] = D[ , k] , ′ G [h, ] = αh G[h, ] , E ′ [h, ] = αh E [h, ] , pivotação F ′ [ , i] = F [ , i] , ′ G [i, ] = G[i, ] + αi G[h, ] , E ′ [i, ] = E [i, ] + αi E [h, ] , onde αh = 1/E [h, k] e αi = −E [i, k] /E [h, k] para cada i em M −h. Como já vimos em capítulos anteriores, F ′ = F F̌ , G′ = ǦG e E ′ = ǦE , onde F̌ é a matriz elementar com coluna saliente h definida pela equação F̌ [ , h] = E [ , k] e Ǧ é a inversa de F̌ . Observações. É óbvio que uma das duas grandes alternativas se aplica em cada iteração. Dentro de cada alternativa pelo menos um dos casos se aplica, como verificamos no capítulo anterior. A escolha de h no início da primeira iteração e nos casos I.1A e I.3 deve ser entendida assim: escolha h de modo que h = m somente se M − L = {m}. A definição de p nos casos I.1B e II.1B deve ser entendida da seguinte maneira: escolha qualquer p em L∗ que satisfaça a condição f [p] /E [p, k] ≤ f [i] /E [i, k] para todo i em L∗ . 3 Ver solução do exercício 4.2 no apêndice E, página 192. F̌ Ǧ Feofiloff cap. 4 Heurística Simplex 42 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 2 2 −1 1 2 0 1 1 4 5 −2 1 0 −1 1 1 24 10 2 0 2 2 −1 1 0 1 0 0 0 0 1 0 0 0 0 1 1/2 −1 1/2 −1/2 0 1 0 0 0 0 1 0 0 0 0 1 1 0 0 0 1 −2 2 0 2 1 0 −1 0 12 −1 −14 1 14 1 −12 L 2 2 −1 1 2 0 1 1 0 0 1 0 0 0 0 1 0 1/2 1/2 −1/2 −1/2 1 −1/2 0 0 0 1 0 0 0 0 1 1 0 0 0 0 5/2 −1/2 5 1 −1/2 1/2 7 0 1 0 0 0 −1 1 −12 L L 2 2 −1 1 2 4 0 5 1 −2 1 1 0 0 0 1 5/4 1/4 −1/2 −1 −2 −5/2 0 1/2 1 1 1 1 0 0 0 1 1 0 0 0 0 1 0 0 L L L 0 −1/2 5 0 1/2 7 1 0 0 0 1 −12 Figura 4.2: Exemplo de aplicação do Simplex. A figura registra os valores de F , G e E no início de cada iteração. O rótulo “L” indica as linhas que estão em L. A última matriz E é simples solúvel com relação à coluna 5 e linha 4. 3 2 4 3 5 6 1 −5 9 8 1 4 2 5 3 4 4 7 7 11 5 6 7 8 6 7 −8 −9 7 −9 8 −10 5 −10 9 6 3 2 1 4 10 11 9 8 0 157/7473 334/7473 −277/7473 −170/7473 466/7473 −389/7473 −13/7473 19/7473 545/2491 −332/2491 514/2491 −368/2491 −1343/7473 1522/7473 −1486/7473 1597/7473 7690/7473 −12866/7473 12326/7473 −13991/7473 84/2491 168/2491 −686/7473 −68/2491 −136/2491 −275/7473 2509/2491 5018/2491 −49/2491 −1258/2491 −5007/2491 3631/7473 28834/2491 60159/2491 15283/7473 0 0 0 1 0 0 0 1 0 0 1 −1773/2491 0 2147/2491 0 7271/2491 0 −6364/2491 0 45640/2491 0 0 0 0 1 0 1391/7473 1 416/7473 0 3480/2491 0 2714/7473 0 −65620/7473 Figura 4.3: Exemplo de aplicação do Simplex. Ao receber a matriz D (topo da figura) e os índices 9 (coluna) e 5 (linha) o Simplex executou 10 iterações e devolveu a matriz G (meio da figura). A matriz GD (parte inferior da figura) é simples solúvel com relação à coluna 9 e linha 5. Feofiloff cap. 4 Heurística Simplex 43 Fases. Qualquer execução da heurística consiste em uma seqüência de ocorrências da alternativa I seguida de uma seqüência de ocorrências da alternativa II. Enquanto estiver acontecendo a alternativa I, dizemos que a heurística está na primeira fase; enquanto estiver acontecendo a alternativa II, dizemos que a heurística está na segunda fase. A propósito, a alternativa II ocorre quando e somente quando L = M − m. 4.3 fases Análise Para entender como e por que a heurística Simplex funciona, basta verificar as seguintes propriedades (compare com as seções 3.3, 2.4 e 2.5): Invariantes No início de cada iteração da heurística, existe uma parte P de L e uma parte Q de N − n tais que (i0) (i1) (i2) (i3) (i4) f [P ] ≥ o , E [P, Q] é de bijeção , E [M −P, Q] = O e E [L−P, ] = O , FG=I, GD = E , G [ , M −P ] = I [ , M −P ] , onde f é o vetor E [ , n] . P m 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 Q P m 0 0 1 0 0 0 0 0 1 0 0 0 0 0 n 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ≥ ≥ ≥ L 0 Figura 4.4: Matrizes G e E no início de uma iteração da heurística Simplex. É evidente que esses invariantes valem (com P e Q vazios) no início da primeira iteração. Suponha agora que os invariantes valem no início de uma iteração qualquer que não a última. É claro que nessa iteração ocorre o caso I.1A, o caso I.1B, o caso I.3 ou o caso II.1B. É óbvio que depois de uma ocorrência do caso I.3 os invariantes permanecem válidos; para tratar dos demais casos, adote a notação f ′ = E ′ [ , n] e P ′ = P + h . Q Feofiloff cap. 4 Heurística Simplex 44 Seja q é o único elemento de Q tal que E [p, q] = 1. Basta mostrar agora que no fim do caso I.1A f ′ [P ′ ] ≥ o , E′ [ , Q] e = E [ , Q] E′ G′ E′ (4.a) [ , k] = I [ , h] , = E [L−P, ] , [ , M −P ′ ] = G[ , M −P ′ ] , ′ ′ [L −P , ] (4.b) (4.c) (4.d) que no fim dos casos I.1B e II.1B f ′ [P ] ≥ o , E ′ [ , Q−q] = E [ , Q−q] E′ G′ e (4.e) E ′ [ , k] = I [ , q] , = E [L−P, ] , [ , M −P ] = G[ , M −P ] , [L−P, ] (4.f) (4.g) (4.h) e que no fim de quaisquer dos casos F ′ G′ = I e G′ D ′ = E ′ . (4.i) As propriedades (4.c) e (4.g) são triviais. As propriedades (4.a), (4.b), (4.e) e (4.f) já foram demonstradas na seção 3.3. As demonstrações das demais propriedades são análogas às que fizemos ao discutir o algoritmo de Gauss-Jordan. Os invariantes valem, em particular, no início da última iteração. Portanto, na última iteração, a matriz E é simples inviável (caso I.2) ou simples ilimitada (caso II.1A) ou simples solúvel (caso II.2) com relação ao par n, m. Em qualquer desses casos, G [ , m] = I [ , m] em virtude de (i4). Além disso, F G = I em virtude de (i2). Assim, ao devolver F e G, a heurística está se comportando como prometeu. 4.4 Mais três invariantes Os três invariantes que examinaremos a seguir (compare com a seção 2.5) parecem irrelevantes no presente capítulo, mas serão importantes para a análise do mecanismo de convergência que introduziremos no próximo capítulo (seção 5.5). Invariantes No início de cada iteração da heurística, (i5) F [ , M −P ] = I [ , M −P ] e F [ , P ] = D [ , Q] Je , (i6) D [M −P, Q] = −G [M −P, P ] D [P, Q] , (i7) D [P, Q] Je G [P, P ] = I , onde Je é a transposta da matriz de bijeção E [P, Q] . Je Feofiloff cap. 4 Heurística Simplex 45 A demonstração dessas propriedades é análoga à dos invariantes correspondentes do algoritmo de Gauss-Jordan. O invariante (i5) descreve completamente a matriz F . Em particular, mostra que não é preciso atualizar F a cada iteração: a matriz pode ser calculada imediatamente antes do fim da execução da heurística. É claro que para isso é preciso dispor das variáveis P e Q. O invariante (i6) mostra que, para cada i em M − P , o vetor D [i, Q] é uma combinação linear das linhas da matriz D [P, Q] . O invariante (i7) mostra que Je G [P, P ] é uma inversa direita de D [P, Q] . A propósito, os invariantes (i3) e (i4) mostram que Je G [P, P ] é uma inversa esquerda de D [P, Q] . Esses invariantes sugerem que em certas condições podemos tomar um pequeno atalho antes da primeira iteração. Suponha, por exemplo, que existe uma parte Q de N − n tal que D [M −m, Q] é de bijeção e D [M −m, n] ≥ o (mas D [m, Q] não é nula). Seja P o conjunto M − m e G a matriz definida por G[P, P ] = I [P, P ] , G[ , M −P ] = I [ , M −P ] G[M −P, P ] = −D[M −P, Q] Je, e onde Je é a transposta de D [P, Q] . Então a primeira iteração pode começar com E = GD e L = M − m. 0 0 1 9 1 0 0 8 0 1 0 7 4 4 4 6 4 4 4 5 4 4 4 4 4 4 4 3 1 1 1 1 Figura 4.5: Seja D a matriz da figura. Adote n = 8 e m = 4. Calcule matrizes F0 e G0 que permitam começar a primeira iteração do Simplex com L = M − m, F = F0 , G = G0 e E = G0 D. 4.5 Convergência A heurística Simplex nem sempre converge. A figura 4.6 dá um exemplo: o caso II.1B se aplica em todas as iterações; no início da sétima iteração, estamos exatamente na mesma situação que no início da primeira; este ciclo poderá se repetir ad æternum. A experiência sugere que tais exemplos de “ciclagem” são raros.4 É importante examinar o fenômeno mais de perto. É óbvio que nos casos I.1A e I.3 a heurística está fazendo progresso, pois L aumenta. Há algum 4 Entretanto, há quem afirme [Sch86, p.138] que a ocorrência de ciclagem em problemas práticos é mais freqüente do que se imagina, mas é mascarada pelo efeito dos erros de arredondamento da aritmética ponto flutuante. Feofiloff cap. 4 1 0 0 0 0 1 0 0 0 0 1 0 0 1 9 24 1 0 0 0 0 1 0 0 −2 −1 2 20 −18 −8 18 204 1 −11/4 0 1/4 0 11/4 0 53/4 3/4 −1/4 −3/4 27/4 1 0 0 0 0 1/2 −3/2 −15 0 2 −8 −18 1 0 0 0 −5/4 1/4 0 −9/2 1/2 0 141/2 −21/2 1 0 0 0 0 1 −9 −24 1 0 0 0 0 1 0 0 0 −5/2 11/2 93 Heurística Simplex 0 0 −1/2 −3/2 −5/2 −11/2 9 57 46 1 1/2 1/2 −10 1 0 0 1 5 2 −5 −41 11 4 −11 −53 0 0 1 0 1 0 0 1 4 −1/2 −2 1/2 −4 1/2 98 −29/2 0 1 0 0 0 0 1 0 1 0 0 1 0 0 1 0 0 1 0 0 1 −1 2 29 1 0 0 1 0 1 0 0 0 0 1 0 0 1/2 4 9 1 −1/2 −2 20 1 0 0 1 0 0 1 0 0 1 0 0 0 −1/2 2 21 0 −3/2 8 93 1 1/2 −4 −22 1 0 0 1 0 0 1 0 0 1 9 24 0 0 −1/2 −3/2 −5/2 −11/2 9 57 1 1/2 1/2 −10 1 0 0 1 Figura 4.6: Um exemplo [Chv83] de não-convergência da heurística Simplex. A figura registra a matriz E no início de sucessivas iterações. Em todas as iterações os elementos de L são 1, 2, 3 e h é 4. No início da sétima iteração, estamos exatamente na mesma situação que no início da primeira. progresso nos demais casos? Não é difícil verificar que no caso I.1B 0 < f ′ [h] ≤ f [h] e no caso II.1B ou 0 > f ′ [h] ≥ f [h] f ′ [h] ≥ f [h] , (4.j) (4.k) onde f ′ = E ′ [ , n] . Demonstraremos uma generalização dessas desigualdades no próximo capítulo. Imagine agora que estamos diante de uma seqüência de ocorrências do caso I.1B ou do caso II.1B. Suponha, por um instante, que as desigualdades em (4.j) e (4.k) são estritas ao longo da execução da heurística. Então a seqüência de valores de f [h] será estritamente monotônica, isto é, estritamente Feofiloff cap. 4 Heurística Simplex crescente ou estritamente decrescente.5 Nessas condições, cada iteração da seqüência começará com um valor diferente de Q, como mostraremos no próximo capítulo recorrendo aos invariantes (i6) e (i7). Como o número de possíveis valores de Q é finito, o número de iterações será finito, e portanto a heurística convergirá. Em suma, a heurística Simplex converge se as desigualdades em (4.j) e (4.k) forem sempre estritas. Mas essa observação é um tanto vazia, porque não há como prever se a condição estará satisfeita em todas as iterações. A heurística corre o risco de não convergir quando f ′ [h] = f [h] . É fácil verificar que isso acontece quando f [p] = 0. Diz-se que matrizes com essa propriedade são degeneradas. É fácil verificar também que f [p] = 0 quando, em alguma iteração anterior, houve empate na definição de p, ou seja, quando f [p] /E [p, k] é mínimo para mais de um p em L∗ . O capítulo seguinte introduzirá uma política para a escolha de p no caso de empates. 4.6 Conclusão A heurística Simplex recebe uma matriz D, um índice n de coluna e um índice m de linha e procura determinar uma matriz inversível G tal que G [ , m] = I [ , m] e GD é simples com relação a n, m. A heurística nem sempre converge; mas quando converge, produz o resultado desejado. Esta situação pode colocar em dúvida a própria existência de uma matriz G com as propriedades desejadas. 4.7 Apêndice: Simplex Revisto Cada iteração do Simplex usa apenas a linha h e as colunas k e n da matriz E . Podemos, portanto, tentar economizar algumas operações aritméticas eliminando a variável E e calculando os vetores G [h, ] D , GD [ , k] e GD [ , n] apenas quando isso se fizer necessário. Esses ajustes levam a uma variante da heurística conhecida como Simplex Revisto. Vamos exibir abaixo uma versão do Simplex Revisto que se aplica a sistemas D, n, m dotadas da seguinte propriedade (veja exercício 4.4, página 48): existe uma parte Q0 de N − n tal que D[M −m, Q0 ] é de bijeção , D[m, Q0 ] = o e D[M −m, n] ≥ o . É claro que essa versão corresponde à segunda fase da heurística geral. Cada iteração começa com uma parte Q de N − n, uma matriz G e um vetor f . A primeira iteração começa com Q = Q0 , G = I e f = D [ , n] . Cada iteração consiste no seguinte: 5 Uma seqüência α1 , α2 , α3 , . . . é estritamente decrescente se α1 > α2 > α3 > · · · . 47 matriz degenerada empate Feofiloff cap. 4 Heurística Simplex C ASO 1: G [m, ] D [ , k] < 0 para algum k em N − n − Q . Seja a o vetor GD [ , k] . Seja P ∗ o conjunto de todos os p em M − m para os quais a [p] > 0. C ASO 1A: P ∗ é vazio . Devolva G e pare (a matriz GD é simples ilimitada). C ASO 1B: P ∗ não é vazio . Escolha qualquer p em P ∗ tal que f [p] /a [p] é mínimo. Seja q o elemento de Q tal que E [p, q] = 1. Seja G′ , f ′ o resultado da pivotação de G, f em torno de p, k. Comece nova iteração com Q − q + k, G′ , f ′ nos papéis de Q, G, f . C ASO 2: G [m, ] D [ , k] ≥ 0 para todo k em N − n − Q . Devolva G e pare (a matriz GD é simples solúvel). ✷ O resultado da pivotação do par G, f em torno de h, k é o par G′ , f ′ definido da maneira óbvia: G′ [h, ] = G [h, ] /a [h] , f ′ [h] = f [h] /a [h] e, para cada i em M −h, G′ [i, ] = G [i, ] − a [i] G [h, ] /a [h] e f ′ [i] = f [i] − a [i] f [h] /a [h] . No início de cada iteração, f [M −m] ≥ o, (GD) [m, Q] é nulo e (GD) [M −m, Q] é de bijeção. Ademais, G é inversível e G [ , m] = I [ , m] . Tal como a versão básica, a versão revista da heurística pode não convergir. O número de operações aritméticas que a versão revista executa em cada iteração é, em geral, da mesma ordem que o mesmo número de operações da versão básica. Entretanto, se |N | é muito maior que |M | e se a matriz D é esparsa (isto é, tem poucos componentes não-nulos) então a versão revista faz menos operações aritméticas que a versão básica. Além disso, a versão revista é, em geral, menos sensível aos erros de arredondamento quando os números são representados em ponto flutuante. Exercícios 4.1 Escreva uma versão da heurística Simplex que devolva, além de F e G, também a matriz E e, quando apropriado, as bases P e Q, o índice h de uma linha de inviabilidade e o índice k de uma coluna de ilimitação. 4.2 Escreva a heurística Simplex em uma linguagem mais formal, mais próxima de PASCAL ou C (veja apêndice E, página 192). Programe a heurística em um computador. 4.3 Escreva uma versão especializada da heurística Simplex para matrizes com apenas duas linhas. Mostre que essa versão sempre converge. (Solução no apêndice E.) 4.4 (S EGUNDA FASE DO S IMPLEX ) Escreva uma versão especializada da heurística Simplex para o caso em que D tem a seguinte forma: existe uma 48 Feofiloff cap. 4 Heurística Simplex 49 parte Q0 de N − n tal que D [M −m, Q0 ] é de bijeção , D [m, Q0 ] = o e D [M −m, n] ≥ o . É claro que o valor inicial de Q é Q0 . É claro que P = M − m em todas as iterações. 4.5 (P RIMEIRA FASE DO S IMPLEX ) Adote as seguintes definições, um pouco diferentes das que usamos no texto. Dada uma matriz E sobre M × N e um elemento n de N , diremos que E é simples solúvel se existem partes P de M e Q de N − n tais que E [P, Q] é de bijeção , E [M −P, ] = o e E [ , n] ≥ o . Uma matriz E é simples inviável se existe um elemento h de M tal que E [h, N −n] ≤ o e E [h, n] é positivo ou E [h, N −n] ≥ o e E [h, n] é negativo. Escreva uma heurística Simplex-Primeira-Fase que receba uma matriz E e um índice n e devolva matrizes F e G tais que F G = I e a matriz GD é simples no sentido da nova definição. 4.6 (M UDANÇA DE BASE ) Seja E uma matriz sobre M × N e sejam m e n elementos de M e N respectivamente. Suponha que E é simples solúvel com relação a n, m e tem base de linhas P e base de colunas Q. Suponha ainda que E [m, k] = 0 para algum k em N − n − Q e E [p, k] > 0 para algum p em P . Calcule matrizes F e G tais que F G = I , G [ , m] = I [ , m] e a matriz GE é simples solúvel com relação a n, m e tem base de colunas Q − q + k, onde q é um elemento de Q. 4.7 Deduza dos invariantes (i4), (i6) e (i7) que no início de cada iteração da heurística, para todo i em M − P , vale a identidade e [Q, P ] E [P, ] . E [i, ] = D [i, ] − D [i, Q] E (Essa identidade é útil na análise da regra de Bland, a ser mencionada no próximo capítulo.) 4.8 Aplique a heurística Simplex à matriz abaixo [Bea55] com n = 8 e m = 4. Mostre que a heurística não converge quando os elementos de Q são 1, 6, 7, depois 1, 2, 7, depois 2, 3, 7, depois 3, 4, 7, depois 4, 5, 7 e finalmente 5, 6, 7. 1/4 −60 −1/25 1/2 −90 −1/50 0 0 1 −3/4 150 −1/50 9 3 0 6 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0 Capítulo 5 Algoritmo Simplex Para transformar a heurística Simplex (seção 4.2) num algoritmo é preciso introduzir um mecanismo que force a convergência (veja seção 4.5). O mecanismo que discutiremos neste capítulo é um refinamento da regra que a heurística usa, em cada iteração, para escolher a linha em torno da qual fará a próxima pivotação. (Outro mecanismo de convergência será mencionado na seção 5.9.) 5.1 Ordem lexicográfica Seja N um conjunto de índices e ∆ uma enumeração dos elementos de N , isto é, uma seqüência em que cada elemento de N aparece uma e uma só vez. (Em outras palavras, ∆ é uma ordem total sobre N .) Para quaisquer vetores x e y sobre N , diremos que x é lexicograficamente menor que y em relação a ∆ se existe k em N tal que x [k] < y [k] N ∆ mas x [j] = y [j] para todo j que precede k em ∆. Escreveremos ⋖ x⋖y para dizer que x é lexicograficamente menor que y em relação a ∆. Assim, a enumeração ∆ induz uma relação de ordem lexicográfica ⋖ no conjunto dos vetores sobre N : x ⋖ y se x ⋖ y ou x = y. A relação ⋗ é definida da maneira óbvia: x ⋗ y se y ⋖ x. Diremos que um vetor x é lexicograficamente positivo se x ⋗ o. É importante distinguir a desigualdade lexicográfica x ⋖ y da desigualdade usual x ≤ y (veja seção 1.1), que significa que x [i] ≤ y [i] para todo i. Se x ≤ y então x ⋖ y, mas a recíproca não é verdadeira. 50 ⋖ lexicograficamente positivo Feofiloff cap. 5 u = v = 0 11 −99 −88 0 0 0 0 Algoritmo Simplex 51 x = −88 33 44 11 y = −88 33 33 99 z = −88 33 44 12 Figura 5.1: Adote a enumeração h1, 2, 3, 4i do conjunto de índices. O vetor u é lexicograficamente maior que v. O vetor x é lexicograficamente maior que y e lexicograficamente menor que z. 5.2 Regra lexicográfica O capítulo anterior mostrou que a heurística Simplex corre o risco de não convergir sempre que houver mais de uma candidata para a linha de pivotação, ou seja, sempre que houver mais de um p em L∗ tal que E [p, n] /E [p, k] é mínimo (veja a seção 4.5). A regra lexicográfica que descreveremos a seguir força a convergência ao prescrever uma maneira de escolher uma das candidatas. Em virtude dessa regra, o algoritmo “anda” sempre numa mesma “direção”, arbitrária mas fixa. A regra lexicográfica depende da presença de uma enumeração ∆ de N cujo primeiro elemento é n e consiste no seguinte: Nos casos I.1B e II.1B da heurística Simplex, escolha p em L∗ de modo que o vetor 1 E [p, ] E [p, k] seja lexicograficamente mínimo com relação à enumeração ∆. A enumeração não se altera durante as ocorrências dos casos I.1B e II.1B, mas é reajustada no fim de cada ocorrência do caso I.1A de modo que, para todo p em P , o vetor E [p, ] seja lexicograficamente positivo. Como n é o primeiro elemento de ∆, a escolha de p garante que o número E [p, n] /E [p, k] será mínimo. Assim, a regra lexicográfica é um refinamento da regra que usamos na heurística do capítulo anterior. Como veremos adiante, a regra lexicográfica é satisfeita por um único p. 5.3 Algoritmo Se acrescentarmos a regra lexicográfica à heurística Simplex (veja seção 4.2) obteremos o seguinte Algoritmo Simplex Lexicográfico Recebe uma matriz D sobre M × N e elementos n e m de N e M respectivamente; devolve matrizes F e G sobre M × M tais que F G = I , G [ , m] = I [ , m] e GD é simples com relação a n, m. D n m Feofiloff cap. 5 Algoritmo Simplex Cada iteração começa com uma enumeração ∆ de N , uma parte L de M −m, um elemento h de M − L, uma parte P de L, uma parte Q de N − n e matrizes F , G e E. Na primeira iteração, ∆ é qualquer enumeração que comece com n. Ademais, L = P = ∅, Q = ∅, F = G = I , E = D e h é um elemento de M , se possível distinto de m. Cada iteração consiste no seguinte, com f = E [ , n] : 52 ∆ Q f A LTERNATIVA I: h é diferente de m . C ASO I.1: E [h, k] > 0 e f [h] ≥ 0 ou E [h, k] < 0 e f [h] ≤ 0 para algum k em N − n . Seja L∗ o conjunto de todos os p em L tais que E [p, k] > 0. C ASO I.1A: f [h] /E [h, k] ≤ f [p] /E [p, k] para todo p em L∗ . Defina ∆′ , L′ , h′ , F ′ , G′ e E ′ como indicado abaixo. Comece nova iteração com ∆′ , L′ , h′ , P + h, Q + k, F ′ , G′ , E ′ nos papéis de ∆, L, h, P , Q, F , G, E . k L∗ ∆′ C ASO I.1B: f [h] /E [h, k] > f [p] /E [p, k] para algum p em L∗ . Defina q, F ′ , G′ e E ′ como indicado abaixo. Comece nova iteração com Q − q + k, F ′ , G′ , E ′ nos papéis de Q, F , G, E . C ASO I.2: E [h, N −n] ≤ o e f [h] > 0 ou E [h, N −n] ≥ o e f [h] < 0 . Devolva F e G e pare. C ASO I.3: E [h, N −n] = o e f [h] = 0 . Seja L′ o conjunto L + h. Escolha h′ em M − L′ se possível distinto de m. Comece nova iteração com L′ e h′ nos papéis de L e h. A LTERNATIVA II: h é igual a m . C ASO II.1: E [h, k] < 0 para algum k em N − n . Seja L∗ o conjunto de todos os p em L tais que E [p, k] > 0. C ASO II.1A: L∗ é vazio . Devolva F e G e pare. C ASO II.1B: L∗ não é vazio . Defina q, F ′ , G′ e E ′ como indicado abaixo. Comece nova iteração com Q − q + k, F ′ , G′ , E ′ nos papéis de Q, F , G, E . C ASO II.2: E [h, N −n] ≥ o . Devolva F e G e pare. ✷ Resta descrever os detalhes dos casos I.1A, I.1B e II.1B. O caso I.1A consiste no seguinte: Seja F ′ , G′ , E ′ o resultado da pivotação de F, G, E em torno de h, k. k L∗ Feofiloff cap. 5 Algoritmo Simplex Adote uma enumeração ∆′ de N na qual n seja o primeiro elemento e os elementos de Q + k venham logo a seguir (em qualquer ordem). Seja L′ o conjunto L + h. Escolha h′ em M − L′ , se possível distinto de m. 53 ∆′ (A operação de pivotação é definida exatamente como no capítulo anterior.) Os casos I.1B e II.1B são formalmente idênticos e consistem no seguinte: Escolha p em L∗ de modo que o vetor E [p, ] /E [p, k] seja lexicograficamente mínimo com relação à enumeração ∆. Seja q o elemento de Q tal que E [p, q] = 1. Seja F ′ , G′ , E ′ o resultado da pivotação de F, G, E em torno de p, k. p A escolha lexicográfica de p deve ser entendida assim: escolha p em L∗ de modo que 1 1 E [p, ] ⋖ E [i, ] (5.a) E [p, k] E [i, k] para todo i em L∗ . A propósito, L∗ é parte de P , uma vez que a matriz E [L−P, ] é nula em virtude do invariante (i1) abaixo. 5.4 Análise O comportamento do algoritmo pode ser descrito pelas seguintes propriedades (compare com as seções 4.3 e 4.4): Invariantes No início de cada iteração do algoritmo, (i0) (i1) (i2) (i3) (i4) (i5) (i6) (i7) E [i, ] ⋗ o para cada i em P ,1 E [P, Q] é de bijeção , E [M −P, Q] = O e E [L−P, ] = O , FG = I , GD = E , G [ , M −P ] = I [ , M −P ] , F [ , M −P ] = I [ , M −P ] e F [ , P ] = D [ , Q] Je , D [M −P, Q] = −G [M −P, P ] D [P, Q] , D [P, Q] Je G [P, P ] = I , onde Je é a transposta da matriz de bijeção E [P, Q] . Os invariantes (i1) a (i7) são idênticos aos que demonstramos ao analisar a heurística Simplex. O invariante (i0) generaliza o invariante correspondente da heurística. Note que a desigualdade lexicográfica em (i0) é estrita; compare 1 No entanto, a proposição “os elementos de Q precedem os demais elementos de N − n na enumeração ∆” não é invariante! Je Feofiloff cap. 5 b c d e 1 0 0 0 0 1 0 0 0 0 1 0 0 1 9 24 1 E[3,7] E [3, 1 0 0 0 0 1 0 0 ] ⋖ −2 −1 2 20 3/4 −1/4 −3/4 27/4 f h a 0 0 −1/2 −3/2 −5/2 −11/2 9 57 1 1/2 1/2 −10 1 0 0 1 −18 −8 18 204 ] ⋖ ] ⋖ 5 2 −5 −41 ] ⋖ 1 E[1,7] E [1, 11 4 −11 −53 1 E[1,6] E [1, 4 −1/2 −2 1/2 −4 1/2 98 −29/2 1 E[2,5] E [2, 54 g 1 E[2,7] E [2, 1 E[2,6] E [2, 1 −11/4 0 1/4 0 11/4 0 53/4 Algoritmo Simplex 0 0 1 0 1 0 0 1 0 0 1 0 1 0 0 1 ] 0 1 0 0 1 E[3,5] E [3, ] ] 1 0 0 0 −5/2 1/2 5/2 41/2 1/2 −1/2 −1/2 −1/2 2 −4 −2 40 0 1 0 0 1 2 −1 29 0 0 1 0 1 0 0 1 2 1 1 1 −5 −2 0 18 1 0 0 0 4 −2 0 42 0 1 0 0 2 3 0 30 0 0 1 0 2 1 1 2 Figura 5.2: Exemplo de aplicação do Simplex Lexicográfico (compare com a figura 4.6). Na primeira iteração, as linhas 1, 2 e 3 estão em L e em P e as colunas 1, 2 e 3 estão em Q. As letras que encabeçam as colunas, tomadas em ordem alfabética, indicam a enumeração de N (a mesma em todas as iterações). O caso II.1B ocorre em todas as iterações, exceto a última. Indicamos as desigualdades lexicográficas que ditam a escolha de p em cada iteração. A execução do algoritmo termina no caso II.2. Feofiloff cap. 5 Algoritmo Simplex 55 isso com nossa discussão na seção 4.5 sobre a não-convergência da heurística, especialmente no caso de sistemas degenerados. É claro que o invariante (i0) vale no início da primeira iteração. Suponha agora que ele vale no início de uma iteração qualquer que não a última. Seja ⋖′ a ordem lexicográfica induzida por ∆′ . É preciso mostrar então que no fim do caso I.1A teremos E ′ [i, ] ⋗′ o para cada i em P + h , (5.b) e que no fim dos casos I.1B e II.1B teremos E ′ [i, ] ⋗ o para cada i em P . (5.c) D EMONSTRAÇÃO DE (5.b): Já mostramos, ao analisar a heurística Simplex, que E ′ [P +h, n] = f ′ [P +h] ≥ o e que E ′ [P +h, Q+k] é uma matriz de bijeção. Na enumeração ∆′ , o primeiro elemento é n e os elementos de Q + k precedem todos demais elementos de N . Portanto, o vetor E ′ [i, ] é lexicograficamente positivo. ✷ D EMONSTRAÇÃO DE (5.c): É preciso mostrar que, para todo i em P , o vetor E ′ [i, ] é lexicograficamente positivo com relação à enumeração ∆. Considere inicialmente o caso i = p. Então E ′ [p, ] = 1 E [p, ] . E [p, k] Como E [p, k] é positivo e E [p, ] é lexicograficamente positivo, E ′ [p, ] também é lexicograficamente positivo. Suponha agora que i é diferente de p e E [i, k] não é positivo. Por definição, E ′ [i, ] = E [i, ] − E [i, k] E [p, ] = E [i, ] − E [i, k] E ′ [p, ] . E [p, k] Como E [i, ] e E ′ [p, ] são lexicograficamente positivos, também E ′ [i, ] é lexicograficamente positivo. Suponha, finalmente, que i é diferente de p e E [i, k] é positivo. Por definição, E ′ [i, ] = E [i, k] ( 1 E [i, k] E [i, ] − 1 E [p, k] E [p, ] ) . Portanto, E ′ [i, ] ⋗ o em virtude de (5.a). Ademais, a expressão entre parênteses não pode ser nula uma vez que i e p são elementos distintos de P e E [P, Q] é uma matriz de bijeção. Portanto, E ′ [i, ] ⋗ o , como queríamos demonstrar. ✷ ⋖′ Feofiloff 5.5 cap. 5 Algoritmo Simplex 56 Convergência Enquanto estiver ocorrendo o caso I.1A ou o caso I.3, o algoritmo está fazendo progresso, pois L aumenta. A situação é mais delicada quando ocorre o caso I.1B ou o caso II.1B. Em que sentido o algoritmo está fazendo progresso nesses casos? A resposta a esta pergunta está nas seguintes observações, que dependem crucialmente do invariante (i0). Fato 5.1 No fim de cada ocorrência do caso I.1B, o ⋖ E ′ [h, ] ⋖ E [h, ] ou o ⋗ E ′ [h, ] ⋗ E [h, ] . No fim de cada ocorrência do caso II.1B, E ′ [h, ] ⋗ E [h, ] . D EMONSTRAÇÃO : Por definição do caso I.1B, temos f [h] /E [h, k] f [p] /E [p, k] . Logo, 1 1 E [h, ] ⋗ E [p, ] . E [h, k] E [p, k] > Suponha E [h, k] é positivo. Então E [h, ] ⋗ E [h, k] E [p, ] . E [p, k] Por outro lado, como E [p, k] é positivo, o invariante (i0) garante que E [h, k] E [p, ] ⋗ o . E [p, k] Como E ′ [h, ] = E [h, ] − E [h, k] E [p, ] , E [p, k] concluímos que o ⋖ E ′ [h, ] ⋖ E [h, ] . Se E [h, k] for negativo, um raciocício análogo mostra que o ⋗ E ′ [h, ] ⋗ E [h, ] . Finalmente, considere o caso II.1B. Como E [h, k] é negativo, E [p, k] é positivo e E ′ [h, ] = E [h, ] − E [h, k] E [p, ] , E [p, k] o invariante (i0) aplicado ao vetor E [p, ] garante que E ′ [h, ] ⋗ E [h, ] . ✷ Podemos mostrar agora por que o algoritmo converge. Imagine que estamos diante de uma seqüência de iterações em que ocorrem somente o caso I.1B ou somente o caso II.1B, donde L e P permanecem constantes. Sejam Q̇ e Ė os valores das variáveis Q e E no início da primeira das iterações da seqüência e defina Q̈ e Ë analogamente para a última das iterações da seqüência. Como a enumeração ∆ não se altera ao longo da seqüência de iterações em questão, o fato 5.1 garante que Ė [h, ] ⋖ Ë [h, ] ou Ė [h, ] ⋗ Ë [h, ] , Feofiloff cap. 5 Algoritmo Simplex donde Ė [h, ] 6= Ë [h, ] . Nessas condições, o lema abaixo garante que Q̇ 6= Q̈. Como o número de subconjuntos de N é finito, nossa seqüência de iterações é necessariamente finita. Lema 5.2 (da repetição de bases) Se Q̇ = Q̈ então Ė [h, ] = Ë [h, ] . D EMONSTRAÇÃO : Sejam Ġ e G̈ os valores da variável G no início das duas iterações em questão. Seja Q o valor comum de Q̇ e Q̈. Em virtude do invariante (i6), Ġ [h, P ] D [P, Q] = G̈ [h, P ] D [P, Q] , pois ambas as expressões são iguais a −D [h, Q] . Em virtude do invariante (i7), D [P, Q] tem uma inversa direita: D [P, Q] Je Ġ [P, P ] = I , onde Je é a transposta da matriz de bijeção Ė [P, Q] . Logo, Ġ [h, P ] = G̈ [h, P ] . Em virtude de (i4), Ġ [h, ] = G̈ [h, ] . Finalmente, em virtude de (i3), Ė [h, ] = Ġ [h, ] D = G̈ [h, ] D = Ë [h, ] . ✷ Em suma, se L e P permanecem constantes em alguma seqüência de iterações então cada iteração começa com um valor diferente de Q. Assim, o comprimento da seqüência não excede o número de subconjuntos de N −n que têm |P | elementos. Segue daí que o número total de iterações que o algoritmo executa é limitado pelo número total de subconjuntos de N − n, ou seja, por 2|N |−1 . Se ajustarmos a notação de modo que N seja o conjunto {1, 2, . . , n}, teremos n = |N | e poderemos dizer que o número total de iterações do algoritmo é limitado por 2n−1 . Essa delimitação sugere que o número de iterações pode crescer explosivamente em função de n. (Por exemplo, se somarmos 10 a n o valor de 2n−1 será multiplicado por mais de 1000.) Mas a experiência mostra que, em geral, o número de iterações fica bem abaixo desse limite; o estudo deste fenômeno é muito interessante (veja Borgwardt [Bor87]), mas não cabe aqui. O algoritmo pode, de fato, executar cerca de 2n−1 iterações. Klee e Minty [KM72], e também Avis e Chvátal [AC78], construíram uma família de exemplos com n colunas e (n + 1)/2 linhas que forçam o algoritmo a executar cerca de 2(n−1)/2 iterações. Reproduzimos nas figuras 5.3 a 5.5 o resultado da aplicação do algoritmo ao membro n = 9 da família. 57 Feofiloff cap. 5 Algoritmo Simplex 58 i h g f e d c b a 1 4 8 16 8 1 0 0 0 0 0 1 4 8 4 0 1 0 0 0 0 0 1 4 2 0 0 1 0 0 0 0 0 1 1 0 0 0 1 0 5 25 125 625 0 b c d e f g h i a 1 1 0 −4 0 −8 0 −16 0 −8 0 1 4 8 4 0 1 0 0 0 0 0 1 4 2 0 0 1 0 0 0 0 0 1 1 0 0 0 1 0 5 L 5 85 545 −40 b d c e f g h i a 1 0 0 0 0 1 −4 8 16 8 0 1 0 0 0 0 1 −4 −8 −4 0 0 1 4 2 0 0 1 0 0 0 0 0 1 1 0 0 0 1 0 5 L 5 L 65 505 −60 1 4 −8 −16 −8 1 0 0 0 0 0 1 0 0 0 0 1 −4 −8 −4 0 0 1 4 2 0 0 1 0 0 0 0 0 1 1 0 5 L 0 25 L 0 25 1 425 0 −100 e b c f d g h i 1 4 −8 16 8 1 0 0 0 0 0 1 0 0 0 0 1 −4 8 4 0 0 1 0 0 0 0 1 −4 −2 0 0 0 1 1 0 5 L 0 25 L 0 25 L 1 325 0 −150 1 1 0 −4 0 8 0 −16 0 −8 0 1 0 0 0 0 1 −4 8 4 0 0 1 0 0 0 0 1 −4 −2 0 0 0 1 1 0 5 L 0 5 L 0 65 L 1 245 0 −190 0 1 4 −8 −4 0 1 0 0 0 0 0 1 0 0 0 0 1 −4 −2 0 0 0 1 1 0 5 L 0 5 L 0 85 L 1 205 0 −210 1 0 0 0 0 1 −4 −8 16 8 Figura 5.3: Continua na próxima figura. a Feofiloff cap. 5 Algoritmo Simplex 59 1 4 8 −16 −8 1 0 0 0 0 0 1 4 −8 −4 0 1 0 0 0 0 0 1 0 0 0 0 1 −4 −2 0 0 0 1 1 0 5 L 0 25 L 0 125 L 1 125 0 −250 f b g c d h e i 1 4 8 −16 8 1 0 0 0 0 0 1 4 −8 4 0 1 0 0 0 0 0 1 0 0 0 0 1 −4 2 0 0 0 1 0 0 5 0 25 0 125 1 125 −1 −375 L L L L 1 4 8 −16 −8 1 0 0 0 0 0 1 4 −8 −4 0 1 0 0 0 0 0 1 0 0 0 0 1 −4 −2 0 0 0 1 1 0 5 0 25 0 125 1 125 0 −250 L L L L 1 0 0 0 0 1 −4 −8 16 8 0 1 4 −8 −4 0 1 0 0 0 0 0 1 0 0 0 0 1 −4 −2 0 0 0 1 1 0 5 0 5 0 85 1 205 0 −210 L L L L 1 1 0 −4 0 8 0 −16 0 −8 0 1 0 0 0 0 1 −4 8 4 0 0 1 0 0 0 0 1 −4 −2 0 0 0 1 1 0 5 0 5 0 65 1 245 0 −190 L L L L a 1 4 −8 16 8 1 0 0 0 0 0 1 0 0 0 0 1 −4 8 4 0 0 1 0 0 0 0 1 −4 −2 0 0 0 1 1 0 5 0 25 0 25 1 325 0 −150 L L L L 1 4 −8 −16 −8 1 0 0 0 0 0 1 0 0 0 0 1 −4 −8 −4 0 0 1 4 2 0 0 1 0 0 0 0 0 1 1 0 5 0 25 0 25 1 425 0 −100 L L L L 1 0 0 0 0 1 −4 8 16 8 0 1 0 0 0 0 1 −4 −8 −4 0 0 1 4 2 0 0 1 0 0 0 0 0 1 1 0 0 0 1 0 L L L L 5 5 65 505 −60 Figura 5.4: Continua na próxima figura. Feofiloff cap. 5 1 1 0 −4 0 −8 0 −16 0 −8 1 4 8 16 8 1 0 0 0 0 Algoritmo Simplex 60 0 1 4 8 4 0 1 0 0 0 0 0 1 4 2 0 0 1 0 0 0 0 0 1 1 0 0 0 1 0 5 5 85 545 −40 L L L L 0 1 4 8 4 0 1 0 0 0 0 0 1 4 2 0 0 1 0 0 0 0 0 1 1 0 0 0 1 0 5 25 125 625 0 L L L L Figura 5.5: Conclusão das duas figuras anteriores. As figuras mostram a aplicação do algoritmo Simplex Lexicográfico a um sistema com 9 colunas. O algoritmo executa 2(9−1)/2 iterações. As figuras registram o valor de E no início de cada iteração. O rótulo “L” indica as linhas que estão em L. A enumeração de N está indicada pelas letras que encabeçam as colunas, tomadas em ordem alfabética. 5.6 Número de operações aritméticas Mesmo sabendo que o número de iterações do algoritmo cresce exponencialmente com o número de componentes da matriz, é interessante estimar o número de operações aritméticas executadas durante uma iteração. Ajuste a notação de modo que M e N sejam os conjuntos {1, 2, . . , m} e {1, 2, . . , n} respectivamente. Assim poderemos dizer que m é o número de linhas e n o número de colunas da matriz D. Para decidir que caso se aplica e determinar a linha e coluna em torno da qual fará a próxima pivotação, cada iteração do algoritmo Simplex executa no máximo mn divisões e menos que mn subtrações.2 (Na verdade, é mais justo trocar “mn” por “m2 ”, uma vez que o resultado das comparações lexicográficas só depende dos |Q| + 1 primeiras colunas na enumeração ∆.) Por outro lado, cada pivotação requer não mais que mn multiplicações e divisões e menos que mn adições e subtrações, como já observamos na seção 2.6. Portanto, o número total de operações aritméticas em cada iteração é menor que 4mn . (A título de comparação, a multiplicação de G por D requer m2 n multiplicações e outras tantas adições.) Qual o custo de uma operação aritmética? O universo natural do Simplex é o dos números racionais: se cada componente da matriz D é um número racional então todos os números gerados pelo algoritmo serão racionais, uma vez que o algoritmo só envolve as quatro operações aritméticas e portanto transforma 2 As subtrações estão implícitas nas comparações lexicográficas. Feofiloff cap. 5 Algoritmo Simplex números racionais em outros números racionais. O custo de uma operação aritmética sobre números racionais depende da magnitude dos numeradores e denominadores dos números envolvidos. Para estimar esse custo será necessário, portanto, obter uma delimitação superior para os numeradores e denominadores gerados pelo algoritmo. Faremos isto no capítulo 12. Podemos adiantar que esses números são, em geral, muito maiores que os numeradores e denominadores dos componentes da matriz dada D. 5.7 Conclusão O algoritmo Simplex recebe uma matriz D, o índice n de uma coluna e o índice m de uma linha e devolve uma matriz inversível G tal que G [ , m] = I [ , m] e a matriz GD é simples com relação a n, m. O algoritmo é importante não só do ponto de vista computacional mas também do ponto de vista conceitual: ele prova a existência de um matriz G com as propriedades enunciadas. O algoritmo executa cerca de 2n−1 iterações no pior caso, onde n é o número de colunas da matriz D, mas em geral converge bem antes. É claro que o algoritmo Simplex pode ser executado de modo aproximado, com aritmética de ponto flutuante. Uma tal implementação aproximada pode cometer erros arbitrariamente grandes. Há um grande repertório de truques [Chv83] que procuram reduzir tais erros. 5.8 Apêndice: Segunda fase do Simplex Pode ser instrutivo examinar a versão especializada do algoritmo Simplex Lexicográfico que se aplica a matrizes D que têm a seguinte forma: existe uma parte Q0 de N − n tal que D [M −m, Q0 ] é de bijeção , D [M −m, n] ≥ o e D [m, Q0 ] = o . É claro que essa versão do algoritmo corresponde à segunda fase do Simplex Adote uma enumeração ∆ de N na qual n seja o primeiro elemento e os elementos de Q0 precedam os elementos de N − n − Q0 . Cada iteração começa com matrizes F , G e E . A primeira iteração começa com F = G = I e E = D. Cada iteração consiste no seguinte: C ASO 1: E [m, k] < 0 para algum k em N − n . Seja P ∗ o conjunto dos p em M − m para os quais E [p, k] > 0. C ASO 1A: P ∗ é vazio . Devolva F e G e pare (E é simples ilimitada). C ASO 1B: P ∗ não é vazio . Escolha qualquer p em P ∗ tal que o vetor E [p, ] /E [p, k] seja lexicograficamente mínimo em relação à enumeração ∆. 61 Feofiloff cap. 5 Algoritmo Simplex Seja F ′ , G′ , E ′ o resultado da pivotação de F, G, E em torno de p, k. Comece nova iteração com F ′ , G′ e E ′ nos papéis de F , G e E . C ASO 2: E [m, N −n] ≥ o . Devolva F e G e pare (E é simples solúvel). ✷ No início de cada iteração, para cada i em M − m, o vetor E [i, ] é lexicograficamente positivo com relação à enumeração ∆. Ademais, existe uma parte Q de N tal que E [M −m, Q] é uma matriz de bijeção e o vetor E [m, Q] é nulo. O algoritmo converge porque duas iterações diferentes jamais começam com o mesmo valor de Q. Portanto, o número de iterações é limitado pelo número de subconjuntos de N − n que têm |M − m| elementos. 5.9 Apêndice: Regra de Bland O algoritmo Simplex Lexicográfico que discutimos na seção 5.3 é baseado numa regra que escolhe a linha em torno da qual será executada a próxima pivotação. Uma outra regra, igualmente eficaz, foi demonstrada por Bland [Bla77]. A regra de Bland consiste no seguinte: Adote uma enumeração arbitrária sobre o conjunto N − n; essa enumeração permanece fixa ao longo da execução do algoritmo. Escolha sempre o menor k dentre os que podem entrar na base e o menor q dentre os que podem sair da base. Em particular, escolha sempre o menor k que satisfaz a definição dos casos I.1 e II.1 da heurística Simplex. Nos casos I.1B e II.1B, escolha p em L∗ de tal modo que, para todo i em L∗ − p, ou f [p]/E [p, k] < f [i]/E [i, k] f [p]/E [p, k] = f [i]/E [i, k] mas qp < qi , onde qi é o elemento de Q tal que E [i, qi ] = 1. A prova de que a regra de Bland força a convergência do Simplex é baseada na seguinte observação: durante uma seqüência de ocorrências dos casos I.1B ou II.1B, um elemento k de N − n que tenha entrado na base Q só sai da base depois que um elemento maior que k tiver entrado na base. A demonstração dessa observação é um tanto complexa e será omitida. O algoritmo Simplex com regra de Bland executa cerca de 2n−1 iterações no pior caso. Exercícios 5.1 Verifique que a ordem lexicográfica entre vetores sobre N relativa a qualquer enumeração de N é reflexiva (x ⋖ x), transitiva (se x ⋖ y e y ⋖ z então x ⋖ z) e antisimétrica (se x ⋖ y e y ⋖ x então x = y). 62 Feofiloff cap. 5 Algoritmo Simplex 5.2 Suponha que y ⋗ o em relação a uma dada enumeração do conjunto de índices. Mostre que x − y ⋖ x para todo vetor x. 5.3 Seja a, b, c, . . . uma seqüência de vetores, todos indexados por 1, 2, 3. Suponha que os componentes de cada vetor são inteiros entre 0 e 9. Adote a enumeração usual h1, 2, 3i e suponha que a seqüência de vetores é estritamente decrescente no sentido lexicográfico (isto é, a ⋗ b ⋗ c ⋗ . . .). Que comprimento pode ter a seqüência? 5.4 Mostre que duas iterações diferentes do algoritmo podem começar com o mesmo valor de Q e valores diferentes de G. 5.5 Escreva o algoritmo Simplex Lexicográfico em uma linguagem mais formal, mais próxima de PASCAL ou C. Programe o algoritmo em um computador. 5.6 Escreva o algoritmo Simplex com regra de Bland. Programe o algoritmo em um computador. 5.7 Sejam n e m as cardinalidades de N e M respectivamente. Mostre que o número total de iterações do algoritmo Simplex Lexicográfico é limitado pela soma n − 1  + ··· + 0 n−1  m−1 . 63 Capítulo 6 Forma tradicional do Simplex A, b, c GA , Gb , c + gA O algoritmo Simplex discutido nos capítulos anteriores opera sobre uma matriz em que uma determinada coluna e uma determinada linha foram destacadas para receber tratamento especial. Para aplicar o algoritmo ao problema de programação linear (de que trataremos no capítulo 7), é conveniente separar a coluna especial e a linha especial da matriz, e tratar esses dois objetos como vetores. Em outras palavras, é conveniente transformar ternos da forma D, n, m — em que D é uma matriz e n e m são índices — em ternos da forma A, b, c — em que A é uma matriz e b e c são vetores. A reformulação é meramente notacional, mas vale a pena discutí-la com algum vagar. É o que faremos neste capítulo. 6.1 Sistemas matriz-vetor-vetor Um sistema sobre M ×N é um terno A, b, c que consiste em uma matriz A sobre M × N , um vetor b sobre M e um vetor c sobre N . Se D é uma matriz sobre M̄ × N̄ com coluna especial n̄ e linha especial m̄ (veja definição na seção 3.1) então o correspondente sistema A, b, c é definido por A = D [M̄ −m̄, N̄ −n̄] , b = D [M̄ −m̄, n̄] , c = D [m̄, N̄ −n̄] . (6.a) Ou seja, b é a última coluna de D, c é a última linha de D e A é o restante de D. É óbvio que A, b, c é um sistema sobre (M̄ −m̄) × (N̄ −n̄). Reciprocamente, se A, b, c é um sistema sobre M ×N então a correspondente matriz D resulta da justaposição de A, b e c: D [M, N ] = A , D [M, n̄] = b , D [m̄, N ] = c , (6.b) sendo m̄ um objeto que não está em M e n̄ um objeto que não está em N . O valor de D [m̄, n̄] é arbitrário e irrelevante. É claro que D é uma matriz sobre (M +m̄) × (N +n̄), sendo m̄ sua linha especial e n̄ sua coluna especial. 64 Feofiloff cap. 6 A c Forma tradicional do Simplex 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 ≥ ≥ ≥ ≥ ≥ ≥ ≥ ≥ ≥ ≥ ≥ 0 0 0 0 ≥ ≥ ≥ ≥ 65 b 0 0 Figura 6.1: Um sistema simples solúvel. Compare com a figura 3.1. A c 0 0 0 0 0 1 0 0 < 0 0 0 0 ≤ ≤ ≤ ≤ 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 ≥ ≥ ≥ ≥ b 0 0 Figura 6.2: Um sistema simples ilimitado. Compare com a figura 3.3. Deduza da figura 3.2 a aparência de um sistema simples inviável. 6.2 Sistemas simples Um sistema A, b, c é simples se a matriz D que resulta da justaposição de A, b e c for simples (veja seção 3.1) com relação ao par de índices que corresponde a b, c. Em particular, A, b, c é simples solúvel, simples inviável ou simples ilimitado se a matriz D for simples solúvel, simples inviável ou simples ilimitada, respectivamente. Os conceitos de base, linha de inviabilidade e coluna de ilimitação de um sistema simples A, b, c são as adaptações óbvias dos correspondentes conceitos para matriz simples (veja seção 3.1). 6.3 Algoritmo Simplex O algoritmo Simplex pode ser apresentado agora da seguinte maneira: Algoritmo Simplex (forma tradicional) Recebe um sistema A, b, c sobre M × N e devolve matrizes F e G sobre M × M e um vetor g sobre M tais que F G = I e o sistema GA , Gb , c + gA é simples (solúvel, inviável ou ilimitado). g Feofiloff cap. 6 1 1 −1 0 2 1 0 −2 3 Forma tradicional do Simplex 1 −1/8 3/8 0 3/8 −1/8 0 1/4 1/4 −1 7/8 3/8 66 −1 1 1 2 3 −2 1 0 0 0 1 0 0 0 1 −3 0 1 0 0 0 0 1 0 1 0 1 −1/8 3/8 0 3/8 −1/8 0 1/4 1/4 0 0 0 7/8 2 10 6 3 3 4 3/8 Figura 6.3: Digamos que A, b, c é o sistema representado no topo da figura. Sejam F , G e g os objetos definidos na parte inferior esquerda da figura (g está representado sob G). Verifique que F G = I . Verifique que o sistema GA, Gb, c + gA na parte inferior direita da figura é simples solúvel. O algoritmo consiste no seguinte. Construa a justaposição D de A, b e c descrita em (6.b). Seja n̄ a coluna especial e m̄ a linha especial de D. Submeta D, n̄, m̄ ao algoritmo Simplex (veja seção 5.3), que devolverá matrizes F̄ e Ḡ tais que F̄ Ḡ = I , Ḡ [, m̄] = I [, m̄] e ḠD é simples. Defina F , G e g da seguinte maneira: F = F̄ [M, M ] , G = Ḡ [M, M ] e g = Ḡ [m̄, M ] . (6.c) Devolva F , G e g e pare. É claro que F G = I . É claro também que ḠD é o resultado da justaposição de GA, Gb e c + gA. Como ḠD é simples, o sistema GA, Gb, c+gA é simples. Portanto, o algoritmo tem o comportamento que prometemos. ✷ Como já observamos na seção 5.5, o número de iterações do algoritmo é limitado por 2n , sendo n = |N |. Como já observamos na seção 5.6, cada iteração executa menos que 4(m + 1)(n + 1) operações aritméticas, onde m = |M |. Se os componentes do sistema A, b, c são números racionais então F , G e g também terão componentes racionais, uma vez que o algoritmo só envolve as quatro operações aritméticas. 6.4 Invariantes A título de curiosidade, eis os invariantes do Simplex (seções 4.3 e 4.4) traduzidos para a nova notação: no início de cada iteração existem partes P e Q de M e N respectivamente, matrizes F e G, um vetor g, e um sistema A′ , b′ , c′ tais que (i0) b′ [P ] ≥ o , (i1) A′ [P, Q] é de bijeção, A′ [M −P, Q] = O e c′ [Q] = o , (i2) F G = I , F G g Feofiloff cap. 6 Forma tradicional do Simplex (i3) A′ = GA, b′ = Gb e c′ = c + gA , (i4) G [ , M −P ] = I [ , M −P ] e g [M −P ] = o , (i5) F [ , M −P ] = I [ , M −P ] e F [ , P ] = A [ , Q] Je , (i6) A [M −P, Q] = −G [M −P, P ] A [P, Q] e c [Q] = −g [P ] A [P, Q] , (i7) A [P, Q] Je G [P, P ] = I , onde Je é a transposta da matriz de bijeção A′ [P, Q] . O vetor g que o algoritmo devolve é redundante: ele poderia ser calculado a partir de A, c, G e A′ . De fato, e [P, P ] g [P ] = −c [Q] JG (6.d) de acordo com (i6) e (i7) e g [M −P ] = o de acordo com (i4). 6.5 Conclusão O algoritmo Simplex transforma qualquer sistema A, b, c em um sistema equivalente GA, Gb, c + gA que é simples (solúvel, inviável ou ilimitado). A seguinte questão conceitual certamente terá ocorrido ao leitor atento: um dado sistema A, b, c pode ser transformado em sistemas simples de tipos diferentes? Por exemplo, é possível que uma execução do Simplex produza um sistema simples solúvel e uma outra execução, com os mesmos dados, produza um sistema simples ilimitado? A resposta é não. Poderíamos demonstrar esta propriedade de consistência já, mas é mais confortável tratar disso no capítulo 7 (seção 7.4). Exercícios 6.1 Seja A, b, c o sistema descrito abaixo. Exiba matrizes F e G e um vetor g tais que F G = I e o sistema GA, Gb, c + gA é simples. 1 2 1 2 3 −1 3 −1 1 1 3 2 1 0 0 0 1 0 0 0 1 −3 −1 −5 −2 0 0 0 10 7 8 67 Parte II Programação Linear 68 Capítulo 7 Problema canônico primal O algoritmo Simplex (veja capítulo 6) foi criado para resolver o problema canônico de programação linear, que discutiremos neste capítulo. O conceito de matriz simples e os termos solúvel, inviável e ilimitado que usamos ao discutir o Simplex (veja seção 3.1), encontrão aqui sua justificativa. A heurística Simplex e a disciplina de programação linear foram criados por George Dantzig[Dan63] e Leonid Kantorovich[Kan39] durante a II Guerra Mundial (entre  e  aproximadamente). O Simplex foi se tornando cada vez mais popular desde então.1 7.1 Definição do problema O problema canônico primal de programação linear consiste no seguinte: Problema CP(A, b, c): Dada uma matriz A, um vetor b e um vetor c, encontrar um vetor x ≥ o tal que Ax = b e cx é mínimo. A equação Ax = b e a inequação x ≥ o são as restrições do problema. Poderíamos enunciar o problema dizendo: minimize cx sob as restrições Ax = b e x ≥ o. O conjunto de todos os vetores x que satisfazem as restrições é conhecido como poliedro canônico primal e será denotado aqui por X(A, b) . Se o número cx for interpretado como custo do vetor x, o problema canônico primal consiste em encontrar um vetor de custo mínimo em X(A, b). Problemas solúveis, inviáveis e ilimitados. Um vetor x em X(A, b) é uma solução do problema CP(A, b, c) se cx ≤ cx′ para todo x′ em X(A, b). O problema pode não ter solução alguma. Isso acontece, por exemplo, se X(A, b) é 1 Veja a introdução do livro de Chvátal [Chv83] e a resenha histórica [LKS91] organizada por Lenstra, Rinnooy Kan e Schrijver. 69 restrições Feofiloff cap. 7 Problema canônico primal minimizar sujeito a e 70 4x1 + 1x2 + 5x3 + 3x4 1x1 − 1x2 − 1x3 + 3x4 = 2 5x1 + 1x2 + 3x3 − 8x4 = 44 1x1 − 1x2 − 4x3 + 5x4 = −3 x1 , x2 , x3 , x4 ≥ 0 Figura 7.1: Um problema canônico primal, escrito em notação não-matricial. vazio. Dizemos que o problema é inviável2 se X(A, b) = ∅ e viável em caso contrário. O problema também não tem solução se X(A, b) contém vetores de custo arbitrariamente negativo, ou seja, se para todo número ξ existe x em X(A, b) tal que cx < ξ. Nesse caso, dizemos que o problema é ilimitado.3 O problema canônico primal estará resolvido quando tivermos um algoritmo que, ao receber um sistema A, b, c, responda com uma solução x do problema CP(A, b, c) ou com a informação de que o problema não tem solução. É desejável que o algoritmo produza informações adicionais que permitam conferir suas respostas. Assim, no primeiro caso, o algoritmo deveria fornecer informações que permitissem verificar a minimalidade de cx e no segundo caso deveria fornecer informações que comprovassem a inexistência de solução. Esses objetivos só serão plenamente alcançados no próximo capítulo. 1 5 1 −1 1 −1 −1 3 −4 3 −8 5 4 1 5 3 64/9 31/9 5/3 0 inviável viável ilimitado 2 44 −3 Figura 7.2: A parte superior da figura exibe um sistema A, b, c, com b à direita e c abaixo da matriz A. (Compare com a figura 7.1.) O vetor x representado abaixo de c é solução do problema CP(A, b, c). É fácil constatar que x está em X(A, b), mas não é tão fácil verificar que x minimiza cx. Observação sobre terminologia. Para muitos praticantes de programação linear, uma “solução” é qualquer vetor x tal que Ax = b; uma “solução viável” é qualquer vetor em X(A, b); e uma “solução ótima” é qualquer vetor x em 2 3 Não confundir com o conceito de sistema simples inviável definido na seção 6.2. Não confundir com o conceito de sistema simples ilimitado definido na seção 6.2. “solução viável” “solução ótima” Feofiloff cap. 7 Problema canônico primal 71 X(A, b) que minimize cx. O presente texto não usa essa terminologia porque ela é inconsistente e desrespeita o sentido corriqueiro da palavra solução. 7.2 Problemas simples Diremos que um problema CP(A, b, c) é simples se o sistema A, b, c for simples (veja seção 6.2). Um problema simples pode ser resolvido por mera inspeção, como mostraremos a seguir. Problema simples inviável. Digamos que os conjuntos de índices de linhas e colunas do sistema A, b, c são M e N respectivamente. Suponha que o sistema é simples inviável, ou seja, suponha que existe h em M tal que A [h, ] ≤ o e b [h] > 0 ou A [h, ] ≥ o e b [h] < 0 . Então o problema CP(A, b, c) não tem solução: para todo vetor x ≥ o tem-se A [h, ] x ≤ 0 < b [h] ou A [h, ] x ≥ 0 > b [h] , donde Ax 6= b, e portanto X(A, b) é vazio. Problema simples solúvel. Suponha que o sistema A, b, c é simples solúvel e tem base de linhas P e base de colunas Q, isto é, suponha que A[P, Q] é de bijeção , b[P ] ≥ o , A[M −P, N −Q] = O , A[M −P, Q] = O , b[M −P ] = o , c[N −Q] ≥ o , c[Q] = o . Seja x o vetor definido pelas equações x [N −Q] = o e Ax = b . Existe um e um só vetor x que satisfaz estas condições. É claro que x [Q] = e[Q, P ] b [P ] , onde A e é a transposta de A, e portanto x ≥ o. Esse é um vetor A básico do sistema; dizemos que x está associado à base Q. É óbvio que x está em X(A, b). Como x [N −Q] e c [Q] são nulos, temos cx = 0 . Por outro lado, cx′ ≥ o para todo x′ em X(A, b), pois c ≥ o. Logo, x é solução do problema CP(A, b, c). Problema simples ilimitado. Suponha que o sistema A, b, c é simples ilimitado e tem bases P e Q e coluna de ilimitação k, ou seja, suponha que A[P, k] ≤ o , A[P, Q] é de bijeção , b[P ] ≥ o , A[M −P, k] = o , A[M −P, Q] = O , b[M −P ] = o , c[k] < 0 , c[Q] = o . vetor básico Feofiloff cap. 7 Problema canônico primal 1 9 9 9 9 9 9 0 −9 −9 −9 −9 −9 −9 0 0 0 0 0 0 0 0 9 9 9 −9 −9 −9 0 0 0 0 0 0 0 1 −1 1 0 Figura 7.3: A figura define um sistema simples inviável A, b, c (com b à direita e c abaixo de A). O sistema tem duas linhas de inviabilidade: 2 e 3. O problema CP(A, b, c) é simples inviável. 9 9 9 9 0 9 9 9 9 0 9 9 9 9 0 9 9 9 9 0 9 9 9 9 0 0 0 0 1 0 0 1 0 0 0 0 0 1 0 0 1 0 0 0 0 8 8 8 8 0 0 0 0 0 0 0 0 0 0 15 13 14 12 12 13 14 15 0 Figura 7.4: A parte superior da figura descreve um sistema simples solúvel A, b, c. O problema CP(A, b, c) é simples solúvel. Na parte inferior da figura temos um vetor básico. Esse vetor é solução do problema CP(A, b, c). 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 −2 9 −3 9 −4 9 0 9 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 0 8 8 −8 −8 0 −8 0 0 0 0 0 0 0 0 0 14 4 13 3 12 2 0 0 0 0 0 1 12 13 14 0 0 Figura 7.5: A parte superior da figura define um sistema simples ilimitado A, b, c. O problema CP(A, b, c) é simples ilimitado. A parte inferior da figura define vetores x e x′ . Para qualquer λ positivo, o vetor x + λx′ está em X(A, b) e tem custo −8λ, o que comprova o caráter ilimitado do problema. 72 Feofiloff cap. 7 Problema canônico primal Então o problema CP(A, b, c) é ilimitado, pelas razões que passamos a expor. Seja x o vetor definido pelas equações x [N −Q] = o e Ax = b . Existe um e um só vetor que satisfaz estas equações; é claro que x ≥ o. Seja x′ o vetor definido pelas equações x′ [N −Q−k] = o , x′ [k] = 1 e Ax′ = o . Existe um e um só vetor que satisfaz estas equações. É claro que x′ [Q] = e[Q, P ] A [P, k] e portanto x′ ≥ o. Para qualquer λ positivo, é óbvio que o vetor −A x + λx′ está em X(A, b). Ademais, c (x + λx′ ) = λ c [k] , donde c (x + λx′ ) é tanto menor quanto maior for λ. Portanto, o problema CP(A, b, c) é ilimitado. 7.3 O Simplex resolve o problema Para resolver um problema canônico primal arbitrário, basta reduzí-lo a um problema simples. Uma redução genérica tem o efeito descrito a seguir. Observação 7.1 Para qualquer sistema A, b, c, qualquer vetor g e quaisquer matrizes F e G tais que F G = I , os problemas CP(A, b, c) e CP(GA, Gb, c + gA) têm o mesmo conjunto de soluções. D EMONSTRAÇÃO : Se Ax = b então é claro que (GA)x = Gb. Reciprocamente, se (GA)x = Gb então Ax = (F G)Ax = F (GA)x = F (Gb) = (F G)b = b . Esse raciocínio mostra que Ax = b se e só se GAx = Gb e portanto que X(A, b) = X(GA, Gb). Resta mostrar que minimizar cx é o mesmo que minimizar (c + gA)x. Isto é assim porque a diferença entre cx e (c + gA)x não depende de x: cx − (c + gA)x = cx − cx − (gA)x = −g(Ax) = −gb . Logo, se cx é mínimo em X(A, b) então (c+gA)x também é mínimo em X(A, b). Reciprocamente, se (c + gA)x é mínimo então cx também é mínimo. ✷ Portanto, qualquer problema canônico primal CP(A, b, c) pode ser resolvido da seguinte maneira: Submeta o sistema A, b, c ao algoritmo Simplex (veja capítulo 6). O algoritmo devolverá matrizes F e G e um vetor g tais que F G = I e o sistema A′ , b′ , c′ é simples, sendo A′ = GA , b′ = Gb e c′ = c + gA . 73 Feofiloff cap. 7 Problema canônico primal 1 2 2 5 −1 −3 0 1 0 0 −1 1 1 1 0 0 0 1 0 0 0 1 1 −2 −1 0 1 0 74 12 10 2 Figura 7.6: Ilustração da observação 7.1. Considere o sistema A, b, c definido pela figura. Seja a o vetor A [2, ] . Para todo x em X(A, b) temos (c + a)x = cx + ax = cx + 10. Portanto, minimizar cx é o mesmo que minimizar (c + a)x. Os problemas CP(A, b, c) e CP(A, b, c + a) são equivalentes. Se A′ , b′ , c′ é simples inviável, o problema CP(A, b, c) é inviável. Se A′ , b′ , c′ é simples solúvel, então o vetor básico x do sistema A′ , b′ , c′ é solução do problema CP(A, b, c). Se A′ , b′ , c′ é simples ilimitado, o problema CP(A, b, c) não tem solução por ser ilimitado. O algoritmo que acabamos de descrever mostra que, para qualquer sistema A, b, c, o problema CP(A, b, c) tem solução ou é inviável ou é ilimitado. 7.4 Conclusão O problema canônico primal consiste em encontrar um vetor x que minimize cx sujeito às restrições x ≥ o e Ax = b. Todo problema canônico primal tem solução ou é inviável ou é ilimitado. O algoritmo Simplex reduz qualquer problema canônico primal a um problema equivalente que pode ser resolvido por mera inspeção. Convém acrescentar duas observações sobre terminologia. Quando o número cx é interpretado como custo do vetor x, diz-se que (c + gA) x é o custo reduzido de x. Diz-se que uma solução x do problema CP(A, b, c) é básica se x é o vetor básico do problema simples solúvel CP(GA, Gb, c + gA). Durante a discussão do Simplex, adiamos a análise da seguinte questão de consistência: É possível reduzir um dado sistema A, b, c a dois sistemas simples de tipos diferentes? A resposta a esta pergunta fica clara agora. Digamos que F, G, g, F ′ , G′ , g ′ são tais que F G = I , F ′ G′ = I e os sistemas GA, Gb, c + gA e G′ A, G′ b, c + g ′ A são ambos simples. Então os dois sistemas simples são de um mesmo tipo. De fato, (1) se o primeiro sistema é simples inviável, então X(A, b) é vazio e portanto o segundo sistema não pode ser simples solúvel nem simples ilimitado; (2) se o primeiro sistema é simples solúvel, então existe x em X(A, b) tal que cx é mínimo e, portanto, o segundo sistema não pode ser simples inviável nem ilimitado; (3) se o primeiro sistema é simples ilimitado, então X(A, b) não é vazio e cx não tem mínimo, donde o segundo sistema não pode ser simples inviável nem solúvel. terminologia Feofiloff 7.5 cap. 7 Problema canônico primal 75 Exemplo Uma empresa fabrica quatro modelos de um produto. Digamos que xi é o número de unidades do modelo i produzidas. Cada produto passa por dois estágios de fabricação. O primeiro estágio dispõe de não mais que 600 homens-hora e o segundo de não mais que 400 homens-hora. Digamos que o número de homens-hora necessários, em cada estágio, para a fabricação de cada modelo do produto impõe as seguintes restrições: 4x1 + 9x2 + 7x3 + 10x4 ≤ 600 1x1 + 1x2 + 3x3 + 40x4 ≤ 400 . Digamos que o lucro total é 12x1 + 20x2 + 18x3 + 40x4 . Queremos planejar a produção de modo a maximizar o lucro total. Maximizar o lucro é o mesmo que minimizar −12x1 − 20x2 − 18x3 − 40x4 . Assim, nosso problema equivale ao seguinte problema canônico primal: encontrar números não-negativos x1 , . . , x6 que minimizem −12x1 −20x2 −18x3 −40x4 respeitadas as restrições 4x1 + 9x2 + 7x3 + 10x4 + 1x5 + 0x6 = 600 1x1 + 1x2 + 3x3 + 40x4 + 0x5 + 1x6 = 400 . As “variáveis de folga” x5 e x6 correspondem a modelos fictícios do produto; elas consomem o que sobra da disponibilidade da mão de obra. Em suma, estamos diante de um problema CP(A, b, c), onde A, b, c é o sistema descrito na figura 7.7. 4 1 9 1 7 3 10 40 1 0 0 1 −12 −20 −18 −40 0 0 600 400 Figura 7.7: Sistema A, b, c. Seja G a matriz e g o vetor descritos na figura 7.8 (verifique que G é inversível). O sistema GA, Gb, c+gA (figura 7.9) é simples solúvel; sua base é composta pelas colunas 1 e 4. O plano de produção ótimo é x1 = 1 3 400 , x2 = x3 = 0 , x4 = 1 3 20 , x5 = x6 = 0 . Com este plano, teremos cx = − 31 5600. Os números são fracionários porque nosso modelo não exige que x1 , x2 , x3 , x4 sejam inteiros; tal exigência tiraria o problema do mundo da programação linear e o tornaria bem mais complexo. Talvez nossa empresa queira adotar x1 = 133, x2 = x3 = 0 e x4 = 7 e torcer para que o arredondamento não afete muito o lucro. programação inteira Feofiloff cap. 7 Problema canônico primal 76 4/15 −1/15 −1/150 4/150 44/15 4/15 Figura 7.8: Matriz G e vetor g. 1 35/15 25/15 0 −5/150 5/150 0 4/15 −1/15 1 −1/150 4/150 0 0 20/3 10/3 44/15 400/3 20/3 4/15 Figura 7.9: Sistema GA, Gb, c + gA. Exercícios 7.1 Suponha que para todo x em X(A, b) existe x′ em X(A, b) tal que cx′ < cx. O problema CP(A, b, c) é ilimitado? 7.2 Suponha que c ≥ o. Mostre que o vetor nulo é solução do problema canônico CP(A, o, c). 7.3 Seja x um vetor em X(A, b) e g um vetor tal que c+gA ≥ o e (c+gA)x = 0. Prove que x é solução do problema CP(A, b, c). 7.4 Os problemas canônicos CP(A, b, c) e CP(A, b, −c) podem ser ambos ilimitados? 7.5 A folga de x é o conjunto, digamos S(x), de todos os índices j para os quais x [j] não é nulo. Suponha que A, b, c é um sistema simples solúvel e que x é o correspondente vetor básico. Mostre que a folga de x é minimal, ou seja, que não existe x′ em X(A, b) tal que S(x′ ) ⊂ S(x), em que ⊂ indica subconjunto próprio. (Veja apêndice C, página 178.) 7.6 Seja A uma matriz sobre M × N , b um vetor sobre M e i um elemento de M . Mostre que o problema de encontrar o menor valor de b [i] para o qual X(A, b) não é vazio equivale ao problema CP(A [M −i, ] , b [M −i] , A [i, ] ). ⊂ Capítulo 8 Problema canônico dual Dual: 1. Composto de duas partes. [ . . . ] 3. Divisão da categoria de número que existia, ao lado do singular e do plural, no indo-europeu e em certas línguas dele derivadas, indicando um par de seres. Novo Dicionário Aurélio O problema canônico primal, de que tratou o capítulo anterior, está intimamente relacionado com um segundo problema básico de programação linear. A relação entre os dois problema é o objeto de estudo da teoria da dualidade. O algoritmo Simplex (capítulo 6) pode ser usado para resolver os dois problemas simultaneamente. 8.1 Definição do problema O problema canônico dual de programação linear consiste no seguinte: Problema CD(A, c, b): Dada uma matriz A, um vetor b e um vetor c, encontrar um vetor y tal que yA ≤ c e yb é máximo. As inequações yA ≤ c são as restrições do problema.1 Poderíamos enunciar o problema dizendo: maximize yb sob as restrições yA ≤ c. O conjunto de todos os vetores y que satisfazem as restrições será denotado por Y (A, c) . Diz-se que Y (A, c) é o poliedro canônico dual. Se o número yb for interpretado como valor do vetor y, o problema consiste em encontrar um vetor de valor máximo em Y (A, c). 1 O leitor atento já terá reconhecido nessas restrições um reflexo da condição c + gA ≥ o, presente na definição de sistema simples solúvel (seção 6.2). 77 restrições Feofiloff cap. 8 Problema canônico dual maximize 2y1 + 44y2 − 3y3 sujeito a y1 −y1 −y1 3y1 + + + − 5y2 y2 3y2 8y2 + y3 − y3 − 4y3 + 5y3 ≤ ≤ ≤ ≤ 78 4 1 5 3 Figura 8.1: Um problema canônico dual (compare com figura 7.1), escrito em notação não-matricial. Problemas solúveis, inviáveis e ilimitados. Um vetor y em Y (A, c) é solução do problema canônico dual CD(A, c, b) se yb ≥ y ′ b para todo y ′ em Y (A, c). O problema pode não ter solução alguma. Isto acontece, por exemplo, se Y (A, c) é vazio; acontece também se Y (A, c) contém vetores de valor arbitrariamente grande, isto é, se para todo número ξ existe y em Y (A, c) tal que yb > ξ. No primeiro caso, dizemos que o problema é inviável. No segundo caso, dizemos que o problema é ilimitado. Se Y (A, c) não é vazio, dizemos que o problema é viável. 8.2 inviável ilimitado viável Lema da dualidade Há uma relação muito íntima entre os problemas canônico dual e canônico primal. Essa relação está resumida no seguinte lema. Lema 8.1 (da dualidade canônica) Para todo x em X(A, b) e todo y em Y (A, c) tem-se cx ≥ yb. D EMONSTRAÇÃO (muito simples, mas fundamental): produto y · A · x. Por um lado, Basta examinar o yAx = y (Ax) = yb , onde a segunda igualdade vale porque Ax = b. Por outro lado, yAx = (yA) x ≤ cx , onde a desigualdade vale porque yA ≤ c e x ≥ o . ✷ O lema é às vezes chamado, um tanto pomposamente, de teorema fraco da dualidade. Vale o seguinte corolário, óbvio mas importante: Se o problema primal CP(A, b, c) é ilimitado então o problema dual CD(A, c, b) é inviável. É claro que também vale o corolário dual: Se o problema primal é ilimitado então o problema dual é inviável. Portanto, para mostrar que o problema primal não é ilimitado basta exibir um elemento de Y (A, c); e para mostrar que o problema dual não é ilimitado basta exibir um vetor em X(A, b). teorema fraco da dualidade Feofiloff cap. 8 Problema canônico dual 2 0 −1 1 5 1 −1 1 −1 −1 3 −4 3 −8 5 4 1 5 3 2 44 −3 Figura 8.2: Ilustração do lema 8.1. Seja A, b, c o sistema definido pela parte direita da figura (o mesmo da figura 7.2). Seja y o vetor representado à esquerda de A, na vertical. Verifique que yA ≤ c e yb = 7. Conclua que cx ≥ 7 para todo x ≥ o tal que Ax = b. O lema da dualidade tem mais um corolário importante: Para qualquer x em X(A, b) e qualquer y em Y (A, c), se cx = yb então x é solução de CP(A, b, c) e y é solução de CD(A, c, b). Portanto, para tornar evidente que um certo vetor x em X(A, b) de fato minimiza cx é suficiente exibir um vetor y em Y (A, c) tal que cx = yb. Ao mesmo tempo, para tornar óbvio que um certo vetor y em Y (A, c) maximiza yb basta exibir um vetor x em X(A, b) tal que cx = yb. 11/18 5/6 −7/9 1 5 1 −1 1 −1 −1 3 −4 3 −8 5 4 1 5 3 64/9 31/9 5/3 0 2 44 −3 Figura 8.3: Sistema A, b, c (o mesmo da figura 8.2) e vetores y (à esquerda de A) e x (abaixo de c). Verifique que y está em Y (A, c), que x está em X(A, b) e que yb = 362/9 = cx. Conclua que x é solução do correspondente problema canônico primal e y é solução do problema canônico dual. Folgas complementares. A folga de um elemento x de X(A, b) é o conjunto dos índices k para os quais x [k] > 0; a folga de um elemento y de Y (A, c) é o conjunto dos índices q para os quais (yA) [q] < c [q] . Dizemos que o par x, y tem folgas complementares se a folga de x é disjunta da folga de y. Se N denota o conjunto de índices de colunas de A, a definição também pode ser formulada assim: existe uma parte Q de N tal que (yA) [Q] = c [Q] e x [N −Q] = o . Fato 8.2 Para todo x em X(A, b) e todo y em Y (A, c), o par x, y tem folgas complementares se e só se cx = yb. D EMONSTRAÇÃO : Suponha que P x, y tem folgas complementares. Então cx − yb = cx − yAx = (c − yA)x = j (c − yA) [j] x [j] = 0. Logo, cx = yb. 79 Feofiloff cap. 8 Problema canônico dual 80 P Suponha agora que cx = yb. Então cx−yAx = 0, donde j (c−yA) [j] x [j] = 0. Como x ≥ o e yA ≤ c, cada um dos termos desta soma é menor ou igual a 0. Como a soma é nula, cada um de seus termos deve ser nulo. ✷ 8.3 Vetores de inviabilidade A inviabilidade do problema canônico dual está intimamente ligada à ilimitação do problema canônico primal. De modo análogo, há uma relação íntima entre a ilimitação do problema canônico dual e a inviabilidade do problema canônico primal. Os dois lemas abaixo resumem essas relações. Os lemas mostram que para tornar óbvia a inviabilidade e/ou ilimitação dos problemas basta exibir vetores apropriados em X(A, o) e/ou em Y (A, o). Lema 8.3 (da inviabilidade primal) Se y ′ b > 0 para algum vetor y ′ em Y (A, o) então o problema primal CP(A, b, c) é inviável e o problema dual CD(A, c, b) é ilimitado ou inviável. D EMONSTRAÇÃO : Seja y ′ um vetor como o descrito no enunciado. Para todo x em X(A, b) teríamos a contradição 0 < y ′ b = y ′ (Ax) = (y ′ A)x ≤ 0, donde se conclui que X(A, b) é vazio. Suponha que CD(A, c, b) não é inviável e seja y um vetor em Y (A, c). Então, para todo λ positivo, (y + λy ′ )A = yA + λy ′ A ≤ c + o = c, e portanto o vetor y + λy ′ está em Y (A, c). O valor desse vetor, igual a yb + λy ′ b, é tanto maior quanto maior for λ. Portanto o problema CD(A, c, b) é ilimitado. ✷ Diante desse lema, é razoável que todo vetor y ′ em Y (A, o) que satisfaça a condição y ′ b > 0 seja chamado vetor de inviabilidade do problema primal. CP(A, b, c). 1 0 −1 −1 1/2 0 −1 −1 2 1 2 −1 2 1 0 1 4 2 5 −2 1 1 1 0 24 0 12 −1 −10 1 2 1 Figura 8.4: Ilustração do lema 8.3. A figura mostra um sistema A, b, c, um vetor y ′ (à esquerda de A) e um vetor y (à esquerda de y ′ ). Verifique que y está em Y (A, c), que y ′ está em Y (A, o), e que y ′ b é positivo. Conclua que CP(A, b, c) é inviável e CD(A, c, b) é ilimitado. Lema 8.4 (da inviabilidade dual) Se cx′ < 0 para algum vetor x′ em X(A, o) então o problema dual CD(A, c, b) é inviável e o problema primal CP(A, b, c) é ilimitado ou inviável. vetor de inviabilidade primal Feofiloff cap. 8 Problema canônico dual 81 D EMONSTRAÇÃO : Seja x′ um vetor como o descrito no enunciado. Para todo y em Y (A, c) teríamos a contradição 0 > cx′ ≥ yAx′ = yo = 0. Logo, Y (A, c) é vazio. Suponha que CP(A, b, c) não é inviável e seja x um vetor qualquer em X(A, b). Então, para todo λ positivo, x + λx′ está em X(A, b), pois A(x + λx′ ) = Ax + λAx′ = b + o = b e x + λx′ ≥ o. Ademais, o custo de x + λx′ , igual a cx + λcx′ , é tanto menor quanto maior for λ. Portanto, o problema CP(A, b, c) é ilimitado. ✷ Esse lema justifica o uso do termo vetor de inviabilidade do problema dual CD(A, c, b) para designar qualquer vetor x′ em X(A, o) tal que cx′ < 0. 2 1 2 −1 2 1 0 1 4 2 5 −2 −8 −4 −4 0 1 1 1 −8 5 2 7 2 0 0 0 1 24 12 10 2 Figura 8.5: Ilustração do lema 8.5. Sistema sistema A, b, c, vetor x (abaixo de c) e vetor x′ (abaixo de x). Verifique que x está em X(A, b), que x′ está em X(A, o) e que cx′ é negativo. Conclua que CP(A, b, c) é ilimitado e CD(A, c, b) é inviável. 8.4 Algoritmo baseado no Simplex O algoritmo abaixo usa o Simplex para resolver simultaneamente os dois problemas canônicos. O algoritmo produz uma solução do primal e uma solução do dual, ou provas da inviabilidade do primal e da ilimitação do dual, ou provas da ilimitação do primal e da inviabilidade do dual, ou provas da inviabilidade de ambos os problemas. Se os dois problemas têm solução, cada uma constitui prova da otimalidade (minimalidade ou maximalidade) da outra. As provas de inviabilidade e de ilimitação consistem em vetores de inviabilidade apropriados. Algoritmo para o par de problemas canônicos Recebe um sistema A, b, c e devolve um dos seguintes pares de vetores: (1) (2) (3) (4) x′ em X(A, o) e y ′ em Y (A, o) tais que cx′ < 0 e y ′ b > 0, ou y em Y (A, c) e y ′ em Y (A, o) tal que y ′ b > 0, ou x em X(A, b) e x′ em X(A, o) tal que cx′ < 0, ou x em X(A, b) e y em Y (A, c) tais que cx = yb. vetor de inviabilidade dual Feofiloff cap. 8 Problema canônico dual Nos itens (1) e (2), y ′ é um vetor de inviabilidade do problema primal CP(A, b, c). Nos itens (1) e (3), x′ é um vetor de inviabilidade do problema dual CD(A, c, b). No item (4), x é solução do problema primal e y é solução do problema dual. O algoritmo consiste no seguinte. Seja N o conjunto de índice de colunas de A. Submeta o sistema A, b, c ao algoritmo Simplex, que devolverá matrizes F e G e um vetor g tais que F G = I e o sistema GA, Gb, c + gA é simples. C ASO 1: o sistema GA, Gb, c + gA é simples inviável. Seja h uma linha de inviabilidade. Defina o vetor y ′ da seguinte maneira: se G [h, ] b > 0 então y ′ = G [h, ] senão y ′ = −G [h, ] . Submeta o sistema A, o, c ao algoritmo Simplex, que devolverá matrizes F0 e G0 e um vetor g0 tais que F0 G0 = I e o sistema G0 A, G0 o, c + g0 A é simples solúvel ou simples ilimitado. C ASO 1.1: o sistema G0 A, G0 o, c + g0 A é simples ilimitado. Seja Q0 uma base de colunas e k uma coluna de ilimitação do sistema. Seja x′ o vetor definido pelas equações x′ [k] = 1, x′ [N −Q0 −k] = o e (G0 A)x′ = o. Devolva x′ e y ′ e pare. C ASO 1.2: o sistema G0 A, G0 o, c + g0 A é simples solúvel. Devolva −g0 e y ′ e pare. C ASO 2: o sistema GA, Gb, c + gA é simples ilimitado. Seja Q uma base de colunas e k uma coluna de ilimitação do sistema. Seja x o vetor básico associado a Q (isto é, x [N −Q] = o e (GA)x = Gb). Seja x′ o vetor definido pelas equações x′ [k] = 1, x′ [N −Q−k] = o e (GA)x′ = o. Devolva x e x′ e pare. C ASO 3: o sistema GA, Gb, c + gA é simples solúvel. Seja Q uma base de colunas do sistema. Seja x o vetor básico associado a Q (isto é, x [N −Q] = o e (GA)x = Gb). Devolva x e −g e pare. ✷ Eis a análise do algoritmo. No caso 1, é claro que y ′ A ≤ o e y ′ b é positivo. Em particular, y ′ está em Y (A, o). Para decidir se Y (A, c) é ou não vazio, o algoritmo resolve o problema CP(A, o, c). Como X(A, o) contém o vetor nulo, o problema CP(A, o, c) não é inviável; isto explica por que o caso 1 tem apenas dois e não três subcasos. No caso 1.1, o vetor x′ está em X(G0 A, o), que é idêntico a X(A, o) pois G0 é inversível. Ademais, cx′ é negativo pois cx′ = (c + g0 A)x′ − g0 Ax′ = (c + g0 A)[k] x′ [k] − g0 o = (c + g0 A)[k] e (c + g0 A) [k] é negativo. Portanto, o par de vetores x′ , y ′ satisfaz o item (1) do enunciado do algoritmo. 82 Feofiloff cap. 8 Problema canônico dual 83 No caso 1.2 temos c + g0 A ≥ o e portanto −g0 está em Y (A, c). Assim, o par −g0 , y ′ satisfaz o item (2) do enunciado do algoritmo. No caso 2, o algoritmo devolve um vetor x em X(GA, Gb) e um vetor x′ em X(GA, o). Os vetores x e x′ também estão em X(A, b) e X(A, o) respectivamente, pois G é inversível. Ademais, cx′ = (c + gA)x′ − gAx′ = (c + gA)[k] x′ [k] − go = (c + gA)[k] , donde cx′ é negativo. Portanto, ao devolver x e x′ o algoritmo está se comportando como previsto no item (3). No caso 3 tem-se x ≥ o, Ax = b e c + gA ≥ o, donde x está em X(A, b) e −g está em Y (A, c). Ademais, o par x, −g tem folgas complementares, uma vez que (c + gA) [Q] e x [N −Q] são nulos. Logo, cx = −gb. Assim, ao devolver x e −g o algoritmo está se comportanto como previsto no item (4). 8.5 Teorema da dualidade O algoritmo da seção anterior demonstra o seguinte teorema da dualidade canônica, também conhecido como teorema forte da dualidade. Teorema 8.5 (da dualidade canônica) Para qualquer matriz A, qualquer vetor b e qualquer vetor c, vale uma e apenas uma das seguintes afirmações: (1) (2) (3) (4) existem x′ em X(A, o) e y ′ em Y (A, o) tais que cx′ < 0 e y ′ b > 0; existe y em Y (A, c) e y ′ em Y (A, o) tal que y ′ b > 0; existe x em X(A, b) e x′ em X(A, o) tal que cx′ < 0; existem x em X(A, b) e y em Y (A, c) tais que cx = yb. (Fica subentendido que b é indexado pelo mesmo conjunto que as linhas de A e que c é indexado pelo mesmo conjunto que as colunas de A.) O teorema da dualidade pode ser resumido da seguinte maneira: a menos que os problemas CP(A, b, c) e CD(A, c, b) sejam ambos inviáveis, tem-se minx cx = maxy yb , onde min é tomado sobre x em X(A, b) e max é tomado sobre y em Y (A, c). Essa identidade traduz não somente o caso (4) do enunciado do teorema, mas também os casos (2) e (3), se estivermos dispostos a dizer que min cx = +∞ quando o problema primal é inviável, que min cx = −∞ quando o problema primal é ilimitado, que max yb = −∞ quando o problema dual é inviável e que max yb = +∞ quando o problema dual é ilimitado. A igualdade só não vale no caso (1), quando os dois problemas são inviáveis. (Esse é o caso, por exemplo, teorema forte da dualidade Feofiloff cap. 8 Problema canônico dual X vazio X não-vazio Y vazio primal inviável dual inviável primal ilimitado dual inviável Y não-vazio primal inviável dual ilimitado primal solúvel dual solúvel Figura 8.6: Os quatro casos do teorema da dualidade 8.5 correspondem exatamente aos quatro possíveis valores do par X(A, b), Y (A, c). se todos os componentes de A são iguais a 0, todos os componentes de b são iguais a 1, e todos os componentes de c são iguais a −1.) Todas as operações aritméticas do algoritmo Simplex transformam números racionais em outros números racionais. Portanto, vale o seguinte adendo ao teorema da dualidade: se os componentes de A, b, c são números racionais então os casos (1), (2), (3) ou (4) são satisfeitos por vetores com componentes racionais. 8.6 Conclusão O problema canônico dual consiste em encontrar um vetor y que maximize yb sujeito às restrições yA ≤ c. Todo problema canônico dual tem solução ou é inviável ou é ilimitado. Há uma íntima relação entre o problema canônico primal CP(A, b, c) e o problema canônico dual CD(A, c, b): os dois problemas constituem as duas faces de uma mesma moeda. A menos que os dois problemas sejam inviáveis, tem-se minx cx = maxy yb. O algoritmo Simplex pode ser usado para resolver simultaneamente os dois problemas. Para esclarecer de forma cabal a natureza dos dois problemas (ambos inviáveis, um inviável e outro ilimitado, ou ambos solúveis), basta exibir dois vetores convenientes extraídos dos conjuntos X(A, b), Y (A, c), X(A, o) e Y (A, o). 8.7 Apêndice: Uma interpretação do Simplex É interessante interpretar o funcionamento do Simplex à luz dos conceitos deste capítulo. Vamos nos restringir à segunda fase do algoritmo, em que as coisas ficam mais claras. Considere, pois, uma seqüência de iterações em que ocorre a alternativa II. Cada iteração começa com um sistema GA, Gb, c − yA e uma base Q e portanto também, implicitamente, com o vetor básico x do sistema. Podemos dizer então que cada iteração começa com vetores x e y tais que 84 Feofiloff cap. 8 Problema canônico dual x está em X(A, b) e o par x, y tem folgas complementares (donde cx = yb). Se y está em Y (A, c), a execução do algoritmo termina. Senão, o algoritmo calcula um novo par x̄, ȳ tal que cx̄ ≤ cx ou um vetor x′ em X(A, o) tal que cx′ < 0. No primeiro caso, o algoritmo começa nova iteração. No segundo, a execução do algoritmo termina. 8.8 Apêndice: Problema do vetor viável O problema do vetor primal viável consiste em encontrar um elemento de X(A, b). Mais especificamente: dada uma matriz A e um vetor b, encontrar um vetor x tal que x ≥ o e Ax = b. Não é difícil verificar que esse problema equivale ao problema canônico CP(A, b, o). O problema do vetor dual viável consiste em encontrar um elemento de Y (A, c). Mais especificamente: dada uma matriz A e um vetor c, encontrar um vetor y tal que yA ≤ c. Esse problema equivale ao problema CD(A, c, o). Os seguintes corolários do teorema da dualidade (conhecidos como lemas de Farkas [Chv83, p.248]) descrevem as condições em que os problemas do vetor viável têm solução. Corolário 8.6 (lema de Farkas) Para qualquer matriz A e qualquer vetor b, vale uma e apenas uma das alternativas: (1) existe x em X(A, b); (2) existe y ′ em Y (A, o) tal que y ′ b > 0. Corolário 8.7 (lema de Farkas) Para qualquer matriz A e qualquer vetor c, vale uma e apenas uma das alternativas: (1) existe y em Y (A, c); (2) existe x′ em X(A, o) tal que cx′ < 0. Do ponto de vista computacional, o corolário 8.6 precede o teorema da dualidade: antes de calcular os objetos de que trata o teorema, o algoritmo Simplex calcula (implicitamente) os objetos de que trata o corolário. É instrutivo demonstrar os corolários diretamente a partir do Simplex, ainda que as demonstrações sejam uma reciclagem de raciocínios já feitos acima. D EMONSTRAÇÃO DE 8.6: Submeta A, b, o ao Simplex. O algoritmo devolverá objetos F , G e g tais que F G = I e GA, Gb, gA é simples. É fácil verificar que g será necessariamente nulo e portanto GA, Gb, gA será simples solúvel ou simples inviável. No primeiro caso, qualquer vetor básico do sistema GA, Gb, o satisfaz (1). No segundo caso, se h é uma linha de inviabilidade então G [h, ] ou −G [h, ] satisfaz (2). 85 Feofiloff cap. 8 Problema canônico dual Resta mostrar que as duas alternativas não podem ser simultaneamente verdadeiras. Se (1) e (2) fossem ambas verdadeiras teríamos a contradição 0 < y ′ b = y ′ Ax ≤ ox = 0. ✷ D EMONSTRAÇÃO DE 8.7: Submeta A, o, c ao algoritmo Simplex, que devolverá objetos F , G e g tais que F G = I e GA, Go, c + gA é simples solúvel ou simples ilimitado (é claro que o sistema GA, Go, c + gA não é simples inviável). No primeiro caso, −g satisfaz (1). No segundo, é fácil extrair de GA e c + gA um vetor x′ que satisfaz (1). As duas alternativas não podem ser simultaneamente verdadeiras: se assim fosse, teríamos a contradição 0 > cx′ ≥ yAx′ = yo = 0. ✷ Exercícios 8.1 Prove que o problema CD(A, c, b) é viável se e só se o problema CP(A, o, c) tem solução. Prove a afirmação dual: o problema CP(A, b, c) é viável se e só se o problema CD(A, o, b) tem solução. 8.2 Se existe um vetor y ′ em Y (A, o) tal que y ′ b > 0 então existe um vetor y ′′ em Y (A, o) tal que y ′′ b ≥ 1. Se existe um vetor x′ em X(A, o) tal que cx′ < 0 então existe x′′ em X(A, o) tal que cx′′ ≤ −1. 8.3 Mostre que para todo x em X(A, o), todo y em Y (A, o) e todo índice j tem-se (yA) [j] = 0 ou x [j] = 0. 8.4 [Chv83] Dada uma matriz A, vetores b e c, e um número δ, dizemos que o par A, c implica o par b, δ se o sistema de inequações yA ≤ c tem pelo menos uma solução e se todo y que satisfaz o sistema yA ≤ c também satisfaz a inequação yb ≤ δ. Mostre que o teorema da dualidade é equivalente à seguinte proposição: se A, c implica b, δ então existe x ≥ o tal que Ax = b e cx ≤ δ. 8.5 Encontre números não-negativos x1 , x2 , x3 , x4 que satisfaçam as equações 2x1 x1 2x1 −x1 + + + − 4x2 + 2x3 2x2 + x3 5x2 − x4 3x2 + x3 + x4 = 4 = 2 = −10 = 12 . 86 Capítulo 9 Problema geral Os problemas canônicos primal e dual discutidos nos capítulos 7 e 8 são casos particulares do problema geral de programação linear. O problema consiste na otimização (maximização ou minimização) de uma função linear sujeita a restrições lineares. 9.1 Definição do problema O problema (geral) de programação linear, ou ppl, consiste no seguinte: Dadas matrizes A11 , A12 , A13 , A21 , A22 , A23 , A31 , A32 , A33 e vetores b1 , b2 , b3 , c1 , c2 , c3 , encontrar vetores x1 , x2 , x3 que minimizem a expressão sujeita às restrições c1 x1 + c2 x2 + c3 x3 x1 A11 x1 + A12 x2 + A13 x3 A21 x1 + A22 x2 + A23 x3 A31 x1 + A32 x2 + A33 x3 x3 ≥ ≥ = ≤ ≤ o b1 b2 b3 o. Estamos supondo que, para i = 1, 2, 3, as matrizes Ai1 , Ai2 e Ai3 têm um mesmo conjunto Mi de índices de linhas, e que Mi também é o conjunto de índices de bi . Analogamente, estamos supondo que o vetor cj e as colunas de A1j , A2j e A3j têm um mesmo conjunto Nj de índices. A matriz do ppl é a matriz D que resulta da justaposição de A11 , . . , A33 , b1 , . . , b3 e c1 , . . , c3 , à maneira da seção 6.1 (o i-ésimo bloco de linhas de D é formado por Ai1 , Ai2 , Ai3 , bi e a única linha do quarto bloco é c1 , c2 , c3 , 0). A função objetivo do problema é a função que leva qualquer terno de vetores x1 , x2 , x3 no número c1 x1 + c2 x2 + c3 x3 . Esse número é o custo do terno x1 , x2 , x3 . Embora o ppl tenha sido formulado como um problema de minimização, nossa definição inclui, implicitamente, problemas de maximização, uma vez que minimizar c1 x1 + c2 x2 + c3 x3 é o mesmo que maximizar −c1 x1 − c2 x2 − c3 x3 . 87 ppl Feofiloff cap. 9 Problema geral 88 Se todas as matrizes exceto A21 são vazias e todos os vetores exceto c1 e b2 são vazios então o ppl é o problema canônico primal CP(A21 , b2 , c1 ). Se todas as matrizes exceto A32 são vazias e todos os vetores exceto c2 e b3 são vazios, então g o ppl é o problema canônico dual CD(A 32 , b3 , −c2 ). 9.2 Dualidade Há uma fundamental relação de dualidade entre problemas de programação e linear. Por definição, o dual de um ppl cuja matriz é D é o ppl cuja matriz é −D, ou seja, a transposta de D com sinal trocado. Assim, o dual do ppl descrito na seção anterior é o ppl minimizar a expressão sujeita às restrições −b1 y1 − b2 y 2 − dual b3 y 3 y1 g g g −A 11 y1 − A21 y2 − A31 y3 g g g −A12 y1 − A22 y2 − A32 y3 g g g −A 13 y1 − A23 y2 − A33 y3 y3 ≥ o ≥ −c1 = −c2 ≤ −c3 ≤ o. É evidente que o dual do dual de qualquer ppl P é P . Digamos que P é o ppl descrito na seção anterior e que D é o seu dual. É evidente que D também pode ser escrito assim: maximizar a expressão y 1 b1 + y2 b2 sujeita às restrições y1 A11 + y2 A21 y1 A12 + y2 A22 y1 A13 + y2 A23 y1 + y 3 b3 y3 + y3 A31 + y3 A32 + y3 A33 ≤ ≤ = ≥ ≥ o c1 c2 c3 o. Observe que o ppl D tem uma incógnita para cada restrição de P (exceto as restrições “x1 ≥ o” e “x3 ≤ o”) e uma restrição para cada incógnita de P. Por exemplo, a incógnita y1 corresponde à restrição A11 x1 + A12 x2 + A13 x3 ≥ b1 de P; e a restrição y1 A11 + y2 A21 + y3 A31 ≤ c1 corresponde à incógnita x1 de P. Se todas as matrizes exceto A21 são vazias e todos os vetores exceto c1 e b2 são vazios então P é o problema canônico primal CP(A21 , b2 , c1 ) e D é o problema canônico dual CD(A21 , c1 , b2 ). 9.3 Lema da dualidade Digamos que P é o ppl definido na seção 9.1 e D é o seu dual. O conjunto dos P D Feofiloff cap. 9 minimizar cx + dy sujeita a Ax + By = f , Problema geral l≤y≤u 89 e x ≤ o. Figura 9.1: Exemplo de um ppl. As matrizes A e B são dadas. Os vetores c, d, f , l e u são dados. As incógnitas são x e y. Identifique as matrizes A11 , . . , A33 e os vetores b1 , b2 , b3 e c1 , c2 , c3 . minimizar cx maximizar yb sujeito a sujeito a x ≥ o e Ax ≥ b y ≥ o e yA ≤ c Figura 9.2: Verifique que o ppl à direita é o dual do ppl à esquerda. ≥ o A11 x1 + A12 x2 + A13 x3 ≥ b1 A21 x1 + A22 x2 + A23 x3 = b2 A31 x1 + A32 x2 + A33 x3 ≤ b3 x3 ≤ o x1 min c1 x1 + c2 x2 + c3 x3 max y1 A12 + y2 A22 + y3 A32 y1 A13 + y2 A23 + y3 A33 y1 y3 y1 A11 + y2 A21 + y3 A31 ≤ ≤ = ≥ ≥ o c1 c2 c3 o y 1 b1 + y 2 b2 + y 3 b3 Figura 9.3: A primeira parte da figura é uma representação taquigrá- fica de um ppl. A segunda (leia na vertical, de cima para baixo) é uma representação do seu dual. As posições relativas dos símbolos Aij , bi e cj não se alteram. Feofiloff cap. 9 Problema geral ternos x1 , x2 , x3 de vetores que satisfazem as restrições do problema P será denotado por X(b1 , b2 , b3 ) e o conjunto dos ternos y1 , y2 , y3 de vetores que satisfazem as restrições do problema D será denotado por Y (c1 , c2 , c3 ). Em linguagem geométrica, diz-se que esses conjuntos são poliedros. 90 X(b1 , b2 , b3 ) Y (c1 , c2 , c3 ) Lema 9.1 (da dualidade) Para todo terno x1 , x2 , x3 em X(b1 , b2 , b3 ) e todo terno y1 , y2 , y3 em Y (c1 , c2 , c3 ) vale a desigualdade c1 x1 + c2 x2 + c3 x3 ≥ y1 b1 + y2 b2 + y3 b3 . D EMONSTRAÇÃO : Para todo terno x1 , x2 , x3 e todo terno y1 , y2 , y3 , c1 x1 + c2 x2 + c3 x3 ≥ (y1 A11 + y2 A21 + y3 A31 ) x1 + (y1 A12 + y2 A22 + y3 A32 ) x2 + (y1 A13 + y2 A23 + y3 A33 ) x3 = y1 (A11 x1 + A12 x2 + A13 x3 ) + y2 (A21 x1 + A22 x2 + A23 x3 ) + y3 (A31 x1 + A32 x2 + A33 x3 ) ≥ y 1 b1 + y 2 b2 + y 3 b3 , como queríamos demonstrar. ✷ O lema (também conhecido como teorema fraco da dualidade) tem o seguinte corolário: se c1 x1 + c2 x2 + c3 x3 = y1 b1 + y2 b2 + y3 b3 então x1 , x2 , x3 é solução do problema P e y1 , y2 , y3 é solução do problema D. 9.4 Construção do dual A definição do dual de um ppl é pesada. Felizmente, a demonstração do lema da dualidade pode ser usada para inferir a forma correta do dual de qualquer ppl P: escreva uma incógnita do dual para cada restrição do P e uma restrição do dual para cada incógnita do P; em seguida, procure as desigualdades mais brandas que assegurem a validade do lema da dualidade. Os seguintes exemplos ilustram a construção. Primeiro exemplo. Suponha que o problema P consiste em encontrar números x1 , x2 , x3 , x4 que minimizem a expressão 1 11x1 + 12x2 + 13x3 + 14x4 1 Note que aqui x1 , x2 e x3 são números e não vetores. P Feofiloff cap. 9 Problema geral sob as restrições 15x1 + 16x2 + 17x3 + 18x4 20x1 + 21x2 + 22x3 + 23x4 25x1 + 26x2 + 27x3 + 28x4 x1 x3 ≤ 19 = 24 ≥ 29 ≤ 0 ≥ 0. Qual o dual de P? O dual terá três incógnitas: uma incógnita y1 associada à primeira restrição, uma incógnita y2 associada à segunda, etc. A função objetivo do dual será, portanto, y1 19+y2 24+y3 29. Para todos os vetores x que satisfazem as restrições de P e todos os vetores y que satisfazem as restrições do seu dual devemos ter 11x1 + 12x2 + 13x3 + 14x4 ≥ y1 19 + y2 24 + y3 29. Essa desigualdade entre as funções objetivo deverá valer em virtude da seqüência de relações 11x1 + 12x2 + 13x3 + 14x4 ≥ (y1 15 + y2 20 + y3 25) x1 + (y1 16 + y2 21 + y3 26) x2 + (y1 17 + y2 22 + y3 27) x3 + (y1 18 + y2 23 + y3 28) x4 = y1 (15x1 + 16x2 + 17x3 + 18x4 ) + y2 (20x1 + 21x2 + 22x3 + 23x4 ) + y3 (25x1 + 26x2 + 27x3 + 28x4 ) ≥ y1 19 + y2 24 + y3 29 . As restrições mais brandas que garantem a primeira desigualdade são 11 12 13 14 ≤ = ≥ = y1 15 + y2 20 + y3 25 , y1 16 + y2 21 + y3 26 , y1 17 + y2 22 + y3 27 , y1 18 + y2 23 + y3 28 , pois x1 pois x2 pois x3 pois x4 ≤ 0, não tem restrição de sinal , ≥ 0, não tem restrição de sinal . As restrições mais brandas que garantem a segunda desigualdade são y1 ≤ 0 , y3 ≥ 0 , pois 15x1 + 16x2 + 17x3 + 18x4 ≤ 19, e pois 25x1 + 26x2 + 27x3 + 28x4 ≥ 29 . Portanto, o dual de P consiste em encontrar números y1 , y2 , y3 que maximizem a expressão 19y1 + 24y2 + 29y3 sujeita às restrições 15y1 + 20y2 + 25y3 16y1 + 21y2 + 26y3 17y1 + 22y2 + 27y3 18y1 + 23y2 + 28y3 y1 y3 ≥ = ≤ = ≤ ≥ 11 12 13 14 0 0. 91 Feofiloff cap. 9 Problema geral Segundo exemplo. Seja P o problema de encontrar vetores x e v que minimizem a expressão cx + f v sujeita às restrições Ax ≤ b , Dv = e e x ≥ o . (Aqui, A e D são matrizes dadas e c, f , b e e são vetores dados.) Qual o dual de P? O dual terá uma incógnita, digamos y, associada à restrição Ax ≤ b e uma outra incógnita, digamos w, associada à restrição Dv = e. A função objetivo do dual será, portanto, yb + we. As funções objetivo deverão satisfazer a relação cx + f v ≥ yb + we. Essa desigualdade deverá valer em virtude da seqüência de relações cx + f v ≥ (yA)x + (wD)v = y(Ax) + w(Dv) ≥ yb + we . As restrições mais brandas sobre y e w que garantem todas essas desigualdades são yA ≤ c , wD = f e y ≤ o . Portanto, o dual de P consiste em encontrar vetores y e w que maximizem a expressão yb + we sujeita a essas restrições. Terceiro exemplo. Seja P o problema de encontrar vetores y e w que maximizem yb + we sujeita às restrições yA ≤ c , wD = f e y ≤ o. O problema dual terá uma incógnita, digamos x, associada à restrição yA ≤ c e uma incógnita, digamos v, associada à restrição wD = f . A função objetivo do dual será cx + f v. As restrições do problema dual devem garantir a validade das relações yb + we ≤ y(Ax) + w(Dv) = (yA)x + (wD)v ≤ cx + f v . As restrições mais brandas sobre x e v que garantem todas estas desigualdades são Ax ≤ b , Dv = e e x ≥ o . Portanto, o dual de P consiste em encontrar x e v que minimizem a expressão cx + f v sujeita a essas restrições. 9.5 Teorema da dualidade Retornemos aos problema P e D e aos poliedros X(b1 , b2 , b3 ) e Y (c1 , c2 , c3 ) da seção 9.3. O problema P é viável se X(b1 , b2 , b3 ) não é vazio, inviável se 92 Feofiloff cap. 9 Problema geral 93 X(b1 , b2 , b3 ) é vazio e ilimitado se para todo número ξ existe um terno x1 , x2 , x3 em X(b1 , b2 , b3 ) tal que c1 x1 + c2 x2 + c3 x3 < ξ. Se P é inviável ou ilimitado, é evidente que P não tem solução. Definições análogas valem para o problema D: o problema é viável se Y (c1 , c2 , c3 ) não é vazio, inviável se Y (c1 , c2 , c3 ) é vazio e ilimitado se para todo número ξ existe um terno y1 , y2 , y3 em Y (c1 , c2 , c3 ) tal que y1 b1 + y2 b2 + y3 b3 > ξ. O lema da dualidade tem o seguinte corolário óbvio: se um dos problemas do par P, D é ilimitado então o outro é inviável. Um vetor de inviabilidade para o problema P é qualquer terno y1′ , y2′ , y3′ em Y (o, o, o) tal que y1′ b1 + y2′ b2 + y3′ b3 > 0. Um vetor de inviabilidade para o problema D é qualquer terno x′1 , x′2 , x′3 em X(o, o, o) tal c1 x′1 + c2 x′2 + c3 x′3 < 0. É fácil demonstrar o seguinte lema: Lema 9.2 (da inviabilidade) Se existe um vetor de inviabilidade para o problema P então P é inviável e D é inviável ou ilimitado. Se existe um vetor de inviabilidade para o problema D então D é inviável e P é inviável ou ilimitado. O teorema abaixo (também conhecido como teorema forte da dualidade) estende ao par P, D o teorema da dualidade 8.5. Teorema 9.3 (da dualidade) Vale uma e apenas uma das seguintes afirmativas: (1) existe um vetor de inviabilidade para P e existe um vetor de inviabilidade para D; (2) D é viável e existe um vetor de inviabilidade para P; (3) P é viável e existe um vetor de inviabilidade para D; (4) existem x1 , x2 , x3 em X(b1 , b2 , b3 ) e y1 , y2 , y3 em Y (c1 , c2 , c3 ) tais que c1 x1 + c2 x2 + c3 x3 = y1 b1 + y2 b2 + y3 b3 . É claro que nos casos (1), (2) e (3) os problemas P e D não têm solução; no caso (4), x1 , x2 , x3 é solução de P e y1 , y2 , y3 é solução de D. A demonstração de que duas das afirmativas não podem ser simultaneamente verdadeiras é elementar: ela decorre dos lemas da inviabilidade e do lema da dualidade. A demonstração de que pelo menos uma das afirmativas é verdadeira não é tão simples: ela consiste em uma redução ao caso, já demonstrado na seção 8.4, em que os problemas P e D são canônicos. Para não tornar o texto ainda mais indigesto, vamos nos limitar a ilustrar o processo de redução com alguns exemplos. Faremos isso na próxima seção. 9.6 Redução ao canônico primal Todo ppl equivale a algum problema canônico primal. Em virtude dessa equivalência, qualquer algoritmo (como o Simplex) que resolva problemas canônicos redução Feofiloff cap. 9 11 12 13 14 15 16 17 18 19 20 21 22 Problema geral 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 −11 −12 −13 −14 −15 −16 −17 −18 −19 −20 −21 −22 1 0 0 0 0 1 0 0 0 0 1 0 94 23 24 25 Figura 9.4: O topo da figura especifica um sistema A, b, c. Considere o problema de minimizar cx sujeito a Ax ≤ b. Esse problema equivale ao problema canônico CP(A′ , b′ , c′ ), onde A′ , b′ , c′ é o sistema representado na parte inferior da figura. pode ser usado para resolver um ppl arbitrário. Os dois exemplos abaixo ilustram o fenômeno. Primeiro exemplo. Considere o problema de encontrar um vetor x que minimize a expressão cx sujeita às restrições (9.a) Ax ≤ b (veja exemplo numérico na figura 9.4). Esse problema equivale ao seguinte problema canônico primal: encontrar vetores u, v e r que minimizem a expressão cu − cv sujeita às restrições Au − Av + Ir = b , u ≥ o, v≥o e r ≥ o. (9.b) Eis a verificação da equivalência. Suponha que x satisfaz as restrições (9.a). Sejam u, v, r vetores definidos pelas equações u[i] = se x[i] ≥ 0 então x[i] senão 0 v [i] = se x[i] ≥ 0 então 0 senão −x[i] r = b − Ax . É claro que o terno u, v, r satisfaz as restrições (9.b). Ademais, x e o terno u, v, r atribuem o mesmo valor às correspondentes funções objetivo: cx é igual a cu − cv. Reciprocamente, se o terno u, v, r satisfaz as restrições (9.b) então o vetor x = u − v satisfaz as restrições (9.a). Ademais, cx = cu − cv. Segue dessa discussão que há uma correspondência biunívoca entre as soluções do primeiro problema e as soluções do segundo, e que soluções correspondentes dão o mesmo valor às funções objetivo. Portanto, os dois problemas são equivalentes. A propósito, o dual do problema canônico (9.b) consiste em maximizar zb sujeito a zA ≤ c, zA ≥ c e z ≤ o. Não é de surpreender que esse problema seja equivalente ao dual do primeiro problema, que consiste em maximizar yb sujeito a yA = c e y ≤ o. Feofiloff cap. 9 Problema geral Segundo exemplo. Considere o problema de encontrar vetores x e z que maximizem a expressão ax + dz sujeita às restrições Ax + Bz = b , Cx + Dz ≤ c , x≤o (veja exemplo numérico na figura 9.5). Esse problema equivale ao seguinte problema canônico primal: encontrar vetores y, v, w, r que minimizem a expressão ay − dv + dw sujeita às restrições −Ay + Bv − Bw = b , −Cy + Dv − Dw + Ir = c , y ≥ o, v ≥ o, w ≥ o, r ≥ o. Eis a verificação da equivalência. Para qualquer par x, z de vetores, sejam y, v, w e r os vetores definidos pelas equações y = −x v [i] = se z [i] ≥ 0 então z [i] senão 0 w[i] = se z [i] ≥ 0 então 0 senão −z [i] r = c − Cx − Dz . Se x, z satisfaz as restrições do primeiro problema então os vetores y, v, w, r satisfazem as restrições do segundo. Ademais, os vetores em questão dão o mesmo valor às correspondentes funções objetivo, a menos de uma troca de sinal: ax + dz = −(ay − dv + dw) (a troca de sinal se deve à substituição de “maximizar” por “minimizar”). Reciprocamente, se y, v, w, r satisfazem as restrições do segundo problema então o par de vetores −y, v − w satisfaz as restrições do primeiro. Ademais, ay − dv + dw = −(a(−y) + d(v − w)). Em suma, há uma correspondência biunívoca entre as soluções do primeiro problema e as soluções do segundo, e soluções correspondentes dão o mesmo valor (a menos de uma troca de sinal) às funções objetivo. 9.7 Conclusão O problema geral de programação linear consiste em encontrar, no conjunto de todos os vetores que satisfazem dadas restrições lineares, um vetor que minimize uma dada função linear. Os problemas canônicos primal e dual são casos particulares desse problema. Os problemas de programação linear estão casados em pares: a cada problema corresponde um problema dual (se D é o dual de P então P é o dual de D). Um problema e o seu dual estão intimamente relacionados: ou ambos 95 Feofiloff cap. 9 Problema geral 96 encontrar números xi e zi que maximizem 11x1 + 16x2 + 21z1 + 26z2 sujeito a 12x1 + 17x2 + 22z1 + 27z2 13x1 + 18x2 + 23z1 + 28z2 14x1 + 19x2 + 24z1 + 29z2 15x1 + 20x2 + 25z1 + 30z2 x1 x2 = = ≤ ≤ ≤ ≤ 32 33 34 35 0 0 encontrar números não-negativos yi , vi , wi e ri que minimizem 11y1 + 16y2 − 21v1 + 21w1 − 26v2 + 26w2 sujeito a −12y1 − 17y2 + 22v1 − 22w1 + 27v2 − 27w2 −13y1 − 18y2 + 23v1 − 23w1 + 28v2 − 28w2 −14y1 − 19y2 + 24v1 − 24w1 + 29v2 − 29w2 + 1r1 + 0r2 −15y1 − 20y2 + 25v1 − 25w1 + 30v2 − 30w2 + 0r1 + 1r2 = = = = 32 33 34 35 Figura 9.5: O ppl no topo da figura e o problema canônico primal na parte inferior da figura são equivalentes. são inviáveis, ou um é inviável e o outro é ilimitado, ou ambos têm solução. Esse fato é a essência do teorema da dualidade. Qualquer problema de programação linear pode ser reduzido a um problema canônico primal equivalente. O algoritmo Simplex (ou qualquer outro algoritmo que resolva problemas canônicos primais) pode então ser usado para resolver o problema reduzido. 9.8 Apêndice: Uma interpretação do dual O seguinte exemplo procura ilustrar o significado das incógnitas (ou variáveis) duais. Considere o problema de encontrar números não-negativos x1 , x2 , x3 , x4 que minimizem a expressão 11x1 + 12x2 + 13x3 + 14x4 sob as restrições 15x1 + 16x2 + 17x3 + 18x4 ≥ 19 20x1 + 21x2 + 22x3 + 23x4 ≥ 24 25x1 + 26x2 + 27x3 + 28x4 ≥ 29 . Esse problema pode estar modelando a tarefa de um nutricionista: encontrar quantidades x1 , x2 , x3 , x4 de pacotes de carne, batatas, leite e goiabada respectivamente que minimizem o custo 11x1 + 12x2 + 13x3 + 14x4 de uma refeição que contenha pelo menos 19 gramas de cálcio, pelo menos 24 gramas de carboidratos, e pelo menos 29 gramas de proteínas. É claro que a primeira restrição dá o conteúdo de cálcio nos quatro alimentos (15 gramas por pacote de carne, Feofiloff cap. 9 Problema geral 16 gramas por pacote de batatas, etc.), a segunda restrição dá o conteúdo de carboidratos, etc. O dual do nosso problema consiste em encontrar números não-negativos y1 , y2 , y3 que maximizem 19y1 + 24y2 + 29y3 sob as restrições 15y1 + 20y2 + 25y3 16y1 + 21y2 + 26y3 17y1 + 22y2 + 27y3 18y1 + 23y2 + 28y3 ≤ ≤ ≤ ≤ 11 12 13 14 . O dual pode ser interpretado como segue. Um fabricante de cálcio em pó, carboidratos em pó e proteínas em pó quer lançar seus produtos no mercado a preços y1 por grama de cálcio, y2 por grama de carboidrato e y3 por grama de proteína. Para competir com os produtos naturais, o preço de um pacote de carne artificial (composta por 15 gramas de cálcio, 20 gramas de proteína e 25 gramas de carboidratos) não pode ser superior ao preço de um pacote de carne natural. Analogamente, os preços das batatas, leite e goiabada artificiais não podem ultrapassar os preços dos correspondentes produtos naturais. Satisfeitas estas restrições, o fabricante quer maximizar o preço y1 19 + y2 24 + y3 29 de uma refeição que contenha as quantidades mínimas dos três nutrientes. É fácil verificar (veja o exercício 9.7, página 98) que ambos os problemas são viáveis. O teorema da dualidade garante então que ambos os problemas têm solução e que 11x1 +12x2 +13x3 +14x4 = 19y1 +24y2 +29y3 para qualquer solução x1 , x2 , x3 , x4 do primeiro problema e qualquer solução y1 , y2 , y3 do segundo. Exercícios 9.1 Considere o problema de encontrar vetores x e z tais que x ≥ o, Ax+Dz ≥ b e cx + f z é mínimo. Verifique que o dual deste problema consiste em encontrar um vetor y tal que y ≥ o, yA ≤ c, yD = f e yb é máximo. 9.2 Seja X o conjunto dos vetores x ≥ o tais Ex ≥ f e Ax = b. Seja Y o conjunto dos pares y, w tais que y ≤ o e yE + wA ≥ c. Prove que para todo x em X e todo par y, w em Y tem-se cx ≤ yf + wb. 9.3 Demonstre o lema da inviabilidade 9.2. 9.4 Seja P o problema de encontrar vetores x e u que maximizem a expressão cx + du sujeita às restrições Ax + Bu = d e o ≤ u ≤ e. Mostre que P é inviável se existem vetores y ′ e z ′ tais que y ′ A = o, y ′ B + z ′ ≥ o, z ′ ≥ o e y ′ d + z ′ e < 0. Mostre que um par y ′ , z ′ como o que acabamos de descrever certamente existe se e tem algum componente negativo. Mostre que o dual de P é inviável se existe um vetor x′ tal que Ax′ = o e cx′ > 0. 9.5 Suponha dada uma matriz A, vetores b e c e um número β. Seja R o conjunto dos vetores y que satisfazem as restrições yA ≤ c e yb > β. Seja S o conjunto dos vetores x que satisfazem as restrições Ax = b, x ≥ o 97 Feofiloff cap. 9 Problema geral e cx ≤ β. Seja T o conjunto dos vetores x que satisfazem as restrições Ax = o, x ≥ o e cx < 0. Mostre que R é vazio se e só se S ∪ T não é vazio. 9.6 Seja S o conjunto dos vetores x tais que Ax > o, isto é, A [i, ] x > 0 para todo i. Seja T o conjunto dos vetores não-nulos y tais que y ≥ o e yA = o. Mostre que S é vazio se e só se T não é vazio. 9.7 Seja P o problema que consiste em minimizar cx sujeito a Ax ≥ b e x ≥ o. Mostre que o dual de P consiste em maximizar yb sujeito a yA ≤ c e y ≥ o. Mostre que se c ≥ o, b ≥ o, A ≥ O e A [i, ] 6= o para todo i então ambos os problemas têm solução. 98 Parte III Algoritmos para Dados Inteiros 99 Capítulo 10 Determinantes Os próximos capítulos pretendem examinar as “variantes inteiras” do algoritmo de Gauss-Jordan e do algoritmo Simplex. A análise dessas variantes depende do conceito de determinante.1 Embora o conceito seja bem conhecido, convém fazer uma revisão. O determinante de uma matriz quadrada A é um número da forma σ − σ ′ , onde σ e σ ′ são somas de produtos de elementos de A e cada produto contém exatamente um elemento de cada linha e de cada coluna de A. Por exemplo, o determinante da matriz α β γ δ ε ζ η θ ι é αει + βζη + γδθ − ηεγ − αζθ − βδι. A propriedade mais importante dos determinantes é a “lei do produto”: det(AB) = det(A) det(B) . O conceito de determinante será definido em duas etapas. Primeiro, definiremos o determinante de matrizes de permutação e mostraremos que este satisfaz a “lei do produto”. Depois, usaremos o determinante de matrizes de permutação para definir o determinante de uma matriz quadrada arbitrária. 10.1 Sinal de uma matriz de permutação Uma matriz de permutação é uma matriz de bijeção cujos conjuntos de índices de linhas e colunas são idênticos. É evidente que o produto de duas matrizes de permutação é uma matriz de permutação. Um arco de uma matriz de permutação J sobre M × M é qualquer par ordenado hj, ii de elementos de M tal que J [i, j] = 1. Um circuito em J é uma 1 Veja a nota histórica Matrices and Determinants na MacTutor History of Mathematics Archive (University of St Andrews, Escócia). 100 Feofiloff cap. 10 Determinantes 101 seqüência hk1 , . . , kn i de elementos de M , distintos dois a dois, tal que hk1 , k2 i, hk2 , k3 i, . . . , hkn−1 , kn i e hkn , k1 i são arcos de J . Por exemplo, se J [i, i] = 1 para algum i então a seqüência hii é um circuito. Circuitos que diferem apenas por uma rotação — como, por exemplo, hk1 , k2 , k3 i, hk2 , k3 , k1 i e hk3 , k1 , k2 i — são considerados idênticos. Feitas essas convenções, fica claro que cada elemento de M pertence a um e um só circuito de J . O número de circuitos de J será denotado por circ(J) . É óbvio que 1 ≤ circ(J) ≤ |M |. É óbvio também que circ(J) = |M | se e só se J é a matriz identidade. Uma matriz de transposição é uma matriz de permutação T tal que circ(T ) = |M | − 1. Em outras palavras, T é de transposição se existem elementos distintos, i e j , de M tais que hj, ii e hi, ji são arcos e todos os demais arcos de T têm a forma hk, ki. Diremos que uma tal matriz transpõe i e j . transposição Lema 10.1 Seja T uma matriz de transposição que transpõe i e j e J uma matriz de permutação arbitrária. Se i e j pertencem ao mesmo circuito de J então circ(T J) = circ(J) + 1; caso contrário, circ(T J) = circ(J) − 1. D EMONSTRAÇÃO : É fácil entender o efeito da multiplicação de J por T : como (T J) [j, ] = J [i, ] , um arco de J que tem a forma hk, ii é transformado no arco hk, ji de T J ; analogamente, um arco de J que tem a forma hk, ji é transformado no arco hk, ii de T J . Suponha que i e j pertencem a um mesmo circuito, digamos hk1 , . . , kn i, de J . Ajuste a notação de modo que k1 = i. Seja p um índice tal que kp = j . Então hk1 , k2 , . . , kp−1 i e hkp , kp+1 , . . , kn i p são circuitos2 de T J . Todos os demais circuitos de J também são circuitos de T J . Logo, circ(T J) = circ(J) + 1. Suponha agora que i e j pertencem a circuitos distintos, digamos hh1 , . . , hm i e hk1 , . . , kn i, de J . Ajuste a notação de modo que h1 = i e k1 = j . Então hh1 , h2 , . . , hm , k1 , k2 , . . , kn i é um circuito3 de T J . Todos os demais circuitos de J também são circuitos de T J . Logo, circ(T J) = circ(J) − 1. ✷ O valor de circ(J) é menos importante que a relação entre a paridade de circ(J) e a de |M |. Diremos que uma matriz de permutação J é positiva se 2 3 Se n = 2, então p = 2 e, portanto, esses circuitos são hk1 i e hk2 i. Se m = n = 1, então esse circuito é hh1 , k1 i. matriz positiva Feofiloff cap. 10 0 0 1 0 1 0 0 0 0 1 0 0 Determinantes 102 0 0 0 1 Figura 10.1: Se J é a matriz da figura então circ(J) = 2 e portanto sig(J) = +1. |M | − circ(J) é par e negativa em caso contrário. A matriz identidade, por exemplo, é positiva; e toda matriz de transposição é negativa. O sinal de uma matriz de permutação J será denotado por sig(J) . negativa Assim, sig(J) = +1 se J é positiva e sig(J) = −1 se J é negativa. O lema 10.1 mostra que sig(T J) = −sig(J) para qualquer matriz de transposição T e qualquer matriz de permutação J . O teorema abaixo generaliza essa relação, mostrando que sig satisfaz a “lei do produto”. Teorema 10.2 Para todo par J, K de matrizes de permutação, sig(JK) = sig(J) sig(K). D EMONSTRAÇÃO : Nossa demonstração é uma indução no número circ(J). Suponha inicialmente que circ(J) = |M |. Então a proposição vale trivialmente pois J = I e portanto sig(J) = +1. Suponha agora que circ(J) < |M |. Então J possui um circuito hk1 , . . , kn i com n ≥ 2. Seja T a matriz de transposição que transpõe k1 e k2 . De acordo com o lema 10.1, circ(T J) = circ(J) + 1. Podemos pois supor, a título de hipótese de indução, que sig(T JK) = sig(T J) sig(K) . T Por outro lado, de acordo com o lema 10.1, temos sig(T J) = −sig(J) e também sig(T JK) = −sig(JK). Logo, sig(JK) = sig(J)sig(K), como queríamos demonstrar. ✷ A demonstração do teorema revela, em particular, que toda matriz de permutação tem a forma T1 · . . · Tp I , onde T1 , . . , Tp são matrizes de transposição. É evidente que uma tal matriz é positiva se e só se p é par. 10.2 Determinante de matriz quadrada Uma matriz é quadrada se seus conjuntos de índices de linhas e colunas são matriz quadrada Feofiloff cap. 10 Determinantes idênticos. Em outras palavras, uma matriz A sobre M × N é quadrada se M = N . As definições abaixo aplicam-se apenas a matrizes quadradas. Para qualquer matriz A sobre M ×M , vamos denotar por diag(A) o produto dos elementos da diagonal de A: Q diag(A) = i∈M A [i, i] . O P determinante de uma matriz quadrada A sobre M × M é o número J sig(J) diag(AJ), em que a soma se estende a todas as matrizes de permutação J sobre M × M . O determinante de A é denotado por det(A). Portanto, P det(A) = J sig(J) diag(AJ) . P P É claro que det(A) = J diag(AJ) − K diag(AK), em que a primeira soma se refere a todas as matrizes de permutação positivas e a segunda se refere a todas as matrizes de permutação negativas. A definição de determinante não se altera se a expressão diag(AJ) for substituída pela expressão diag(JA) , uma Q duas expressões têm o mesmo valor. De fato, diag(AJ) = Q vez que essas A J = [i, ] [ , i] i A [i, ϕi] , onde ϕ é a bijeção de M em M definida i Qpela equação J = 1. Se denotarmos por ψ a inversa de ϕ teremos [ϕi, i] i A [i, ϕi] = Q Q j J [j, ] A [ , j] = diag(JA). j A [ψj, j] = α δ η β ε θ γ ζ ι 0 0 1 1 0 0 0 1 0 Figura 10.2: Digamos que A é a primeira das matrizes da e é o produto figura e J é a segunda. Observe que diag(AJ) dos elementos de A que estão nas posições correspondentes aos elementos não-nulos de J . É muito fácil verificar as seguintes propriedades do determinante de uma matriz quadrada A: se A é de permutação então det(A) = sig(A); se A é diagonal então det(A) = diag(A) ; se A [m, ] = o ou A [ , m] = o para algum m então det(A) = 0 . Também é fácil verificar que para qualquer matriz diagonal D det(DA) = diag(D) det(A) . 103 Feofiloff cap. 10 Determinantes Em particular, para qualquer número δ, det(δA) = δ m det(A), onde m é o número de linhas de A. Como calcular o determinante de uma matriz? Embora a definição envolva uma soma de m! parcelas (pois este é o número de matrizes de permutação com m linhas), o determinante pode ser calculado com esforço proporcional a m3 , como veremos num próximo capítulo.4 10.3 Três propriedades básicas Esta seção reune três propriedades básicas dos determinantes. No enunciado de todas as propriedades, A é uma matriz sobre M × M . Propriedade 10.3 (desenvolvimento por uma linha) Para qualquer m em M , se A [m, M −m] = o então o determinante de A é o produto de A [m, m] pelo determinante de A [M −m, M −m] . D EMONSTRAÇÃO : Suponha que A [m, M −m] é nulo. Seja J uma matriz de permutação Q sobre M × M . Se J [m, m] = 0 então A [m, ] J [ , m] = 0 e portanto diag(AJ) = i A [i, ] J [ , i] = 0. Caso contrário, diag(AJ) = A [m, m] diag(BK) , onde B = A [M −m, M −m] e K = J [M −m, M −m] . Como sig(K) = sig(J), temos P P K sig(K) diag(BK) , J sig(J) diag(AJ) = A [m, m] onde K percorre o conjunto das matrizes de permutação sobre M −m × M −m. Logo, det(A) = A [m, m] det(B). ✷ Vale também a propriedade “transposta”: se A [M −m, m] é nulo então det(A) = A [m, m] det(A [M −m, M −m] ). A demonstração é análoga, essencialmente porque diag(JA) = diag(AJ). A propriedade seguinte é um caso particular da “lei do produto” que demonstraremos na próxima seção. Propriedade 10.4 (multiplicação por matriz de permutação) Para qualquer matriz de permutação K sobre M × M , det(KA) = sig(K) det(A). P D EMONSTRAÇÃO : Por definição, det(KA) = J sig(J) det(JKA). Em virtude do teorema 10.2, sig(J) = sig(K)sig(JK). Logo, P det(KA) = J sig(K)sig(JK)diag(JKA) P = sig(K) J sig(JK)diag(JKA) = sig(K) det(A) , P A título de curiosidade, o permanente de uma matriz quadrada A é o número J diag(AJ), onde a soma se estende a todas as matrizes de permutação J . Não se conhece um algoritmo eficiente — isto é, polinomial no número de componentes de A — para o cálculo do permanente. 4 104 Feofiloff cap. 10 Determinantes 105 uma vez que quando J percorre o conjunto de todas as matrizes de permutação a matriz JK também percorre o conjunto de todas as matrizes de permutação. ✷ Propriedade 10.5 (matriz com duas linhas iguais) Para dois elementos distintos h e k de M , se A [h, ] = A [k, ] então det(A) = 0. D EMONSTRAÇÃO : Seja T a matriz de transposição que transpõe h e k. Como T A = A, temos det(T A) = det(A) . Por outro lado, det(T A) = sig(T ) det(A), em virtude da propriedade 10.4. Como sig(T ) = −1, temos det(T A) = − det(A) . Essas equações só podem ser simultaneamente verdadeiras se det(A) for nulo. ✷ Vale também a propriedade “transposta”: se A [ , h] = A [ , k] para dois elementos distintos h e k de M então det(A) = 0. 10.4 Determinante do produto de matrizes Esta seção mostra que para quaisquer matrizes quadradas A e B vale a identidade det(AB) = det(A) det(B). A demonstração será feita por etapas: primeiro mostraremos que a identidade vale quando A é quase-identidade; daí deduziremos a identidade no caso em que A é elementar; finalmente, cuidaremos do caso geral. As duas etapas finais são análogas ao algoritmo de Gauss-Jordan (veja capítulo 2). Uma matriz A sobre M × M é quase-identidade se existem elementos h e k de M tais que A [i, j] = I [i, j] para todo par i, j distinto do par h, k. Diremos que esta é uma matriz quase-identidade do tipo h, k. É claro que toda matriz quase-identidade do tipo h, k é elementar. Lema 10.6 (multiplicação por matriz quase-identidade) Se A é uma matriz quase-identidade do tipo h, k então det(AB) = A[h, h] det(B) se h = k e det(AB) = det(B) em caso contrário , qualquer que seja a matriz B. D EMONSTRAÇÃO : Se h = k então A é uma matriz diagonal e portanto det(AB) = diag(A) det(B) enquanto diag(A) = A [h, h] . Suponha agora que h 6= k. Seja α o número A [h, k] . É claro que (AB) [i, ] = B [i, ] para todo i distinto de h e (AB) [h, ] = B [h, ] + αB [k, ] . Para toda matriz quaseidentidade Feofiloff cap. 10 Determinantes 106 de permutação J , Q (AB)[i, ]J [ , i] Q = i6=h B [i, ]J [ , i] i B [i, ]J [ , i] + αB [k, ]J [ , h] Q = diag(BJ) + αB̌ [h, ]J [ , h] i6=h B̌ [i, ]J [ , i] diag(ABJ) = Qi = diag(BJ) + α diag(B̌J) , onde B̌ é a matriz definida pelas equações B̌ [M −h, ] = B [M −h, ] e B̌ [h, ] = B [k, ] . Portanto, P sig(J) diag(ABJ) det(AB) = P PJ = J sig(J) diag(B̌J) J sig(J) diag(BJ) + α = det(B) + α det(B̌) . Como B̌ tem duas linhas iguais, a propriedade 10.5 garante que det(B̌) = 0. Portanto, det(AB) = det(B). ✷ Lema 10.7 (multiplicação por matriz elementar) Se A é uma matriz elementar com coluna saliente h então det(AB) = A [h, h] det(B) qualquer que seja a matriz B. D EMONSTRAÇÃO : Seja M o conjunto de índices de linhas e colunas de A. A proposição é trivialmente verdadeira se A [h, h] = 0, pois nesse caso A [h, ] é nulo, donde (AB) [h, ] é nulo, e portanto det(AB) = 0. Suponha no que segue que A [h, h] 6= 0. Diremos que a complexidade de A é o número de componentes não-nulos do vetor A [M −h, h] . Nossa demonstração prossegue por indução na complexidade de A e depende do lema 10.6. Suponha que a complexidade de A é nula, ou seja, que o vetor A [M −h, h] é nulo. Então A é uma matriz quase-identidade do tipo h, h. Pelo lema 10.6, det(AB) = A [h, h] det(B), como queríamos demonstrar. Suponha agora que A [i, h] 6= 0 para algum i em M − h. Seja Ǧ a matriz quase-identidade do tipo i, h definida pela equação Ǧ Ǧ [i, h] = −A [i, h] /A [h, h] (veja a análise de algoritmo de Gauss-Jordan, seção 2.4) e seja A′ a matriz ǦA. É fácil verificar que a matriz A′ é elementar com coluna saliente h e que A′ [i, h] = 0 e A′ [M −i, h] = A [M −i, h] . Como a complexidade de A′ é menor que a complexidade de A podemos pois supor, a título de hipótese de indução, que det(A′ B) = A′ [h, h] det(B) . Como Ǧ é quase-identidade, o lema 10.6 garante que det(A′ B) = det(ǦAB) = det(AB) . Finalmente, como A′ [h, h] = A [h, h] , temos det(AB) = A [h, h] det(B). ✷ A′ Feofiloff cap. 10 Determinantes 107 É claro que vale a propriedade “transposta”: det(AB) = A [h, h] det(B) para qualquer matriz elementar A com linha saliente h e qualquer matriz B. Teorema 10.8 (do produto de determinantes5 ) Para quaisquer matrizes A e B sobre M × M , det(AB) = det(A) det(B) . D EMONSTRAÇÃO : A demonstração deste teorema é em tudo análoga à análise do algoritmo de Gauss-Jordan. Digamos que a simplicidade de uma matriz A sobre M × M é a cardinalidade do maior subconjunto P de M dotado da seguinte propriedade: existe uma parte Q de M tal que A [P, Q] é de bijeção e A [M −P, Q] é nula. Suponha inicialmente que a simplicidade de A é |M |, ou seja, que A é uma matriz de permutação. Então, pela propriedade 10.4, det(AB) = sig(A) det(B). Como sig(A) = det(A), temos a identidade desejada. Suponha agora que a simplicidade de A é menor que |M |. Sejam P e Q partes de M tais que A [P, Q] é de bijeção, A [M −P, Q] é nula e |P | é igual à simplicidade de A. Seja h um elemento de M − P . Há dois casos a considerar: P h C ASO 1: A [h, ] é nulo. É claro que det(A) e det(AB) são nulos, uma vez que (AB) [h, ] = A [h, ] B = o. Portanto, a identidade det(AB) = det(A) det(B) vale trivialmente neste caso. C ASO 2: A [h, ] não é nulo. Seja k um elemento de M − Q tal que A [h, k] 6= 0. Seja F̌ a matriz elementar com coluna saliente h definida pela equação k F̌ F̌ [ , h] = A [ , k] (veja a análise de algoritmo de Gauss-Jordan). Seja Ǧ a matriz elementar com coluna saliente h definida pelas equações Ǧ Ǧ [i, h] = αi , onde αh = 1/A [h, k] e αi = −A [i, k] /A [h, k] para todo i em M − h. É fácil verificar que F̌ Ǧ = ǦF̌ = I . Seja A′ a matriz ǦA. Então A′ [h, ] = αh A [h, ] e A′ [i, ] = A [i, ] + αi A [h, ] para cada i em M − h. Como A [h, Q] é nulo, temos A′ [ , Q] = A [ , Q] . Por outro lado, A′ [i, k] = Ǧ [i, ] A [ , k] = Ǧ [i, ] F̌ [ , h] = (ǦF̌ ) [i, h] = I [i, h] para cada i em M , donde A′ [ , k] = I [ , h] . 5 Publicado em , simultaneamente por Jacques P. M. Binet (–) e Augustin-Louis Cauchy (–). A′ Q Feofiloff cap. 10 Determinantes 108 Segue daí que A′ [P +h, Q+k] é uma matriz de bijeção e A′ [M −P −h, Q+k] é nula. Portanto, a simplicidadade de A′ é maior que a simplicidade de A. Podemos pois supor, a título de hipótese de indução, que det(A′ B) = det(A′ ) det(B) . Como F̌ A′ B = AB e F̌ é elementar, o lema 10.7 garante que det(AB) = F̌ [h, h] det(A′ B) = F̌ [h, h] det(A′ ) det(B) . Como A′ = ǦA e Ǧ é elementar, o lema 10.7 garante que det(A′ ) = Ǧ [h, h] det(A). Portanto, det(AB) = F̌ [h, h] Ǧ [h, h] det(A) det(B) . Como F̌ [h, h] = 1/αh e Ǧ [h, h] = αh , temos a identidade desejada. ✷ 10.5 Delimitação do determinante É importante estabelecer uma delimitação superior para o valor absoluto de det(A), que denotaremos por absdet(A). absdet(A) Delimitação 10.9 Para qualquer matriz A sobre M × M , Q P absdet(A) ≤ i∈M j∈M αij , onde αij denota o valor absoluto de A [i, j] . D EMONSTRAÇÃO : Há uma correspondência biunívoca óbvia entre matrizes de permutação sobre M ×M e bijeções de M em M : uma matriz de permutação J e uma bijeção ϕ se correspondem se J [i, ϕi] = 1 para todo i em M . Para toda bijeção ϕ de M em M , podemos definir o número sig(ϕ) com sendo sig(J), onde J é a matriz de permutação que corresponde a ϕ. Podemos dizer então que Q P det(A) = ϕ sig(ϕ) i A [i, ϕi] , onde a soma se estende a todas as bijeções ϕ de M em M . Portanto, P Q absdet(A) ≤ ϕ i αi ϕi . Ora, cada um dos produtos que comparecemQdoPlado direito da desigualdade também está presente6 no produto de somas i j αij . Logo, absdet(A) não é maior que esse produto de somas. ✷ Acabamos de mostrar que absdet(A) é limitado pelo produto das somas de Demonstra-se analogamente que absdet(A) é limitado pelo produto Q linhas. P α das somas de colunas. ij j i 6 Da mesma forma que αδ e βγ estão presentes no produto de somas (α + β)(γ + δ). αij Feofiloff cap. 10 Determinantes α δ η γ ζ ι β ε θ Figura 10.3: Suponha que todos os componentes da matriz são positivos. Então seu determinante é limitado por (α + β + γ)(δ + ε + ζ)(η + θ + ι) e também por (α + δ + η)(β + ε + θ)(γ + ζ + ι). 10.6 Conclusão O determinante de uma matriz quadrada A é um número da forma σ − σ ′ , em que σ e σ ′ são somas de produtos de elementos de A e cada produto tem exatamente um elemento de cada linha e de cada coluna de A. A propriedade mais importante do determinante é a “lei do produto”: para qualquer par A, B de matrizes det(AB) = det(A) det(B) . Mesmo sem conhecer os detalhes da definição de determinante, fica claro que o determinante de uma matriz inteira é um número inteiro. Fica claro também que o valor absoluto do determinante é limitado pelo produto das somas de linhas e pelo produto das somas de colunas: Q P Q P absdet(A) ≤ i j αij e absdet(A) ≤ j i αij , em que αij é o valor absoluto de A [i, j] . Estas delimitações permitem prever, ainda que grosseiramente, a ordem de grandeza do determinante da matriz. Exercícios e = sig(J) para toda matriz de permutação J . 10.1 Mostre que sig(J) e = det(A) para qualquer matriz quadrada A. 10.2 Mostre que det(A) 10.3 Suponha que A é uma matriz elementar com coluna saliente k. Mostre que det(A) = A [k, k] . 10.4 Mostre que o determinante de uma matriz quadrada A não depende da e = det(A) indexação das linhas e colunas, ou seja, mostre que det(JAJ) para qualquer matriz de permutação J . 10.5 Dê exemplos de matrizes para as quais a delimitação 10.9 vale com igualdade. Dê exemplos de matrizes para as quais a delimitação de determinantes de submatrizes vale com igualdade. 10.6 Deduza da delimitação produto-de-somas 10.9 a seguinte delimitação produto-de-produtos: Para qualquer matriz A sobre M × M , Q Q absdet(A) ≤ i∈M j∈M (1 + αij ) , 109 Feofiloff cap. 10 onde αij é o valor absoluto de A [i, j] . Determinantes 110 Capítulo 11 Algoritmo de Gauss-Jordan-Chio Este capítulo (que só depende dos capítulos 1, 2 e 10) examina uma variante do algoritmo de Gauss-Jordan. Por falta de um nome melhor, diremos que se trata do algoritmo de Gauss-Jordan-Chio.1 (Veja lema 11.1 adiante.) Uma das conseqüências do algoritmo é a conhecida regra de Cramer2 para solução de sistemas de equações por meio de determinantes. O algoritmo transforma qualquer matriz D numa matriz equivalente E que é escalonada a menos de um fator multiplicativo. Ademais, os componentes de E são determinantes de submatrizes de D (em particular, se D só tem componentes inteiros então todos os componentes de E serão inteiros). Graças a essa propriedade, é possível formular uma boa delimitação superior para o valor absoluto dos componentes de E . A delimitação permite mostrar que o consumo de tempo do algoritmo é polinomial. 11.1 Algoritmo Antes de formular o algoritmo, é preciso generalizar o conceito de matriz escalonada. Para qualquer número não-nulo δ, diremos que uma matriz K é δ-bijetora se a matriz δ −1 K é de bijeção. Diremos que uma matriz E sobre M × N é δ-escalonada se a matriz δ −1 E é escalonada, ou seja, se existem partes P e Q de M e N respectivamente tais que E [M −P, ] = O e E [P, Q] é δ-bijetora. (Veja figura 11.1.) Podemos agora descrever o algoritmo. Algoritmo de Gauss-Jordan-Chio Recebe uma matriz D sobre M × N e devolve matrizes F e G sobre M × M e um número não-nulo δ tais que F G = δI e GD é δ-escalonada. 1 Referência a F. Chio [Chi53], conforme H. Eves [Eve80, sec.3.6]. ver [Sch86, p.34]. 2 Referência a Gabriel Cramer (–). 111 Veja também Schrij- δ-bijetora δ-escalonada Feofiloff cap. 11 Algoritmo de Gauss-Jordan-Chio 112 Cada iteração começa com uma parte P de M , uma parte Q de N , matrizes F e G, uma matriz E e um número δ. A primeira iteração começa com P e Q vazios, F = G = I , E = D e δ = 1. Cada iteração consiste no seguinte: C ASO 1: E [h, ] 6= o para algum h em M − P . Escolha k em N tal que E [h, k] 6= 0. Para cada i em M , seja δi o número E [i, k] . Seja F ′ , G′ , E ′ o resultado da pivotação de F, G, E em torno de h, k. Comece nova iteração com P + h, Q + k, F ′ , G′ , E ′ e δh nos papéis de P , Q, F , G, E e δ. h k δi = E [i, k] C ASO 2: E [M −P, ] = O . Devolva F , G, δ e pare. ✷ A operação de pivotação a que se refere o texto do algoritmo é ligeiramente diferente da dos capítulos 2 e 3: dados elementos h de M e k de N , o resultado da pivotação de F, G, E em torno de h, k é o terno F ′ , G′ , E ′ de matrizes definido pelas equações F ′ [ , h] = D[ , k] , F ′ [ , i] = F [ , i] , G′ [h, ] = G[h, ] , G′ [i, ] = E ′ [h, ] = E [h, ] , E ′ [i, ] = δh G[i, ] − δi G[h, δ δh E [i, ] − δi E [h, δ ] ] , , para cada i em M − h. (Veja exemplo numérico na figura 11.2.) 11.2 Análise: preliminares Para mostrar como e por que o algoritmo de Gauss-Jordan-Chio produz os resultados anunciados basta verificar as seguintes propriedades. Invariantes No início de cada iteração do algoritmo, (i0) (i1) (i2) (i3) (i4) δ 6= 0 , F G = δI , E = GD , E [P, Q] é uma matriz δ-bijetora e E [M −P, Q] = O , G [ , M −P ] = δI [ , M −P ] . É claro que estas propriedades valem no início da primeira iteração. Suponha agora que elas valem no início de uma iteração qualquer que não a última. Para mostrar que continuam válidas no início da próxima iteração basta mostrar pivotação Feofiloff cap. 11 0 0 0 δ 0 0 0 0 δ 0 0 0 0 δ 0 0 0 0 Algoritmo de Gauss-Jordan-Chio 113 δ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Figura 11.1: Matriz δ-escalonada. 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 1 0 5 0 0 0 2 5 3 0 0 −1 0 1 −5 1 1 0 2 1 0 0 5 0 2 1 1 0 −5 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 0 0 2 5 3 0 0 −1 0 1 −5 1 1 −5 2 1 0 0 5 0 2 1 2 0 −10 0 0 0 1 −5 −3 0 0 0 2 0 0 0 0 0 2 0 0 0 0 0 2 2 0 0 0 0 0 0 2 2 −1 1 0 5 −15 0 5 1 0 −10 2 0 0 10 0 4 2 5 −5 −10 25 −50 0 0 −5 5 −25 0 1 2 −5 10 0 0 0 5 0 0 0 0 0 5 5 0 0 0 0 0 5 0 0 0 0 5 0 0 −5 5 5 −15 10 0 40 −25 0 −70 60 5 15 −5 −15 5 −5 −25 25 5 −50 −130 5 3 1 −5 10 −5 5 15 5 70 0 0 0 0 40 40 0 0 0 0 0 40 0 0 0 80 65 10 −60 −25 −30 65 6 −10 −15 −10 −65 2 40 −5 50 −65 −10 60 25 −50 −130 10 70 40 0 25 0 15 0 5 40 −25 0 130 40 130 0 0 0 0 0 130 0 0 0 0 0 130 0 0 0 0 0 130 0 0 0 0 0 130 130 0 0 40 0 0 Figura 11.2: Exemplo de execução do algoritmo de Gauss-Jordan-Chio. A figura registra os valores de G, E e δ no início de cada iteração. Feofiloff cap. 11 Algoritmo de Gauss-Jordan-Chio 114 que no fim do caso 1 (11.a) δh 6= 0 , ′ FG ′ E ′ (11.b) = δh I , ′ = G D, (11.c) −1 (11.d) ′ E [ , Q] = δh δ E [ , Q] , E ′ [ , k] = δh I [ , h] , ′ G [ , M −P −h] = δh δ −1 (11.e) G[ , M −P −h] . (11.f) A propriedade (11.a) segue imediatamente da maneira como h e k são escolhidos no caso 1. P M −P 0 0 0 δ 0 0 0 0 0 0 δ 0 Q 0 0 P 0 0 0 M −P δ 0 0 δ 0 0 0 0 δ 0 0 0 0 N −Q δ 0 0 0 0 0 Figura 11.3: Matrizes G e E no início de uma iteração. D EMONSTRAÇÃO DE (11.d) E (11.f): Por definição da operação de pivotação, E ′ [h, ] = E [h, ] e E ′ [i, ] = δh δ −1 E [i, ] − δi δ −1 E [h, ] para cada i em M −h. Como E [h, Q] é nulo em virtude de (i3), temos a igualdade desejada. De modo análogo, G′ [h, ] = G [h, ] e G′ [i, ] = δh δ −1 G [i, ] − δi δ −1 G [h, ] para cada i em M − h. Como G [h, M −P −h] é nulo em virtude de (i4), temos a igualdade desejada. ✷ Antes de empreender as demonstrações das demais propriedades, convém dar uma representação matricial à operação de pivotação. Seja F̌ a matriz elementar com coluna especial h definida pelas equações F̌ [ , h] = δh−1 E [ , k] e F̌ F̌ [ , M −h] = δδh−1 I [ , M −h] , Seja Ǧ a matriz elementar com coluna especial h definida pelas equações Ǧ[M −h, h] = −δ −1 E [M −h, k] , Ǧ[h, h] = 1 , Ǧ[ , M −h] = δh δ −1 I [ , M −h] . Ǧ Feofiloff cap. 11 Algoritmo de Gauss-Jordan-Chio 115 (Veja figuras 11.4 e 11.5.) É fácil verificar que E ′ = ǦE F̌ Ǧ = ǦF̌ = I , e G′ = ǦG . (11.g) A propriedade (11.c) segue daí imediatamente. As duas propriedades restantes exigem um pouco mais de esforço. δ/δ6 0 0 0 0 0 δ/δ6 0 0 0 0 0 δ/δ6 0 0 0 0 0 δ/δ6 0 0 0 0 0 δ/δ6 0 0 0 0 0 δ1 /δ6 δ2 /δ6 δ3 /δ6 δ4 /δ6 δ5 /δ6 δ6 /δ6 δ6 /δ 0 0 0 0 0 δ6 /δ 0 0 0 0 0 δ6 /δ 0 0 0 0 0 δ6 /δ 0 0 0 0 0 δ6 /δ 0 0 0 0 0 −δ1 /δ −δ2 /δ −δ3 /δ −δ4 /δ −δ5 /δ 1 Figura 11.4: Exemplo com h = 6. A matriz à esquerda é F̌ . A matriz à direita é Ǧ. δ 0 0 0 0 0 0 δ 0 0 0 0 0 0 δ 0 0 0 0 0 0 δ 0 0 0 0 0 0 δ 0 δ1 δ2 δ3 δ4 δ5 δ6 δ6 0 0 0 0 0 0 δ6 0 0 0 0 0 0 δ6 0 0 0 0 0 0 δ6 0 0 0 0 0 0 δ6 0 −δ1 −δ2 −δ3 −δ4 −δ5 δ Figura 11.5: Exemplo com h = 6. A matriz à esquerda é δ6 F̌ . A matriz à direita é δ Ǧ. δh D EMONSTRAÇÃO DE (11.b): Observe que a matriz F ′ [ , M −h] é igual a [ , M −h] (ambas as matrizes são iguais a F [ , M −h] ). Ademais, δ −1 F F̌ F ′ [ , h] = D[ , k] = (δ −1 F G)D[ , k] = δ −1 F (E [ , k]) = δ −1 F (δh F̌ [ , h]) . Em suma, F ′ = δh δ −1 F F̌ . Logo, F ′ G′ = δh δ −1 (F F̌ )(ǦG) = δh δ −1 F (F̌ Ǧ)G = δh δ −1 F G = δh I , em virtude de (i1). ✷ D EMONSTRAÇÃO DE (11.e): Para cada i em M , E ′ [i, k] = Ǧ [i, ] E [ , k] = Ǧ [i, ] δh F̌ [ , h] = δh (ǦF̌ ) [i, h] = δh I [i, h] . Logo, E ′ [ , k] = δh I [ , h] . ✷ Feofiloff cap. 11 Algoritmo de Gauss-Jordan-Chio 116 Concluímos assim a demonstração de que os invariantes (i0) a (i4) valem no início de cada iteração do algoritmo. Os invariantes valem, em particular, no início da última iteração, quando E [M −P, ] é nula. Nesta ocasião, em virtude de (i3), E é δ-escalonada (e tem bases P e Q). Além disso, em virtude de (i1), F G = δI . Portanto, o número δ e as matrizes F e G que o algoritmo devolve têm as propriedades anunciadas. Tal como acontece no algoritmo de Gauss-Jordan (seção 2.3), a matriz F pode ser facilmente calculada a partir de D e E : no início de cada iteração, e portanto também ao final da execução do algoritmo, F [ , M −P ] = I [ , M −P ] e F [ , P ] = D [ , Q] Je, onde Je é a transposta da matriz δ −1 E [P, Q] . 11.3 Análise: invariante principal A seção anterior deixou de lado o invariante mais característico do algoritmo: os componentes de G e E são determinantes de submatrizes de D. Para demonstrar esta propriedade, convém reformular algumas das variáveis do algoritmo. Ajuste a notação de modo que M e N sejam disjuntos. Seja D a matriz que se obtém pela justaposição de D com a matriz identidade, isto é, D é a matriz sobre M × (M ∪ N ) definida pelas equações D [M, M ] = I D e D [M, N ] = D . No início de cada iteração, seja E a matriz definida pela justaposição de G com E : E [M, M ] = G e E [M, N ] = E (veja figura 11.6). A relação E = G D, garantida pelo invariante (i2), leva a uma relação simples entre determinantes de certas submatrizes de E e determinantes das correspondentes submatrizes de D. O enunciado preciso dessa relação depende da seguinte convenção de notação. Uma função ψ de M em M ∪ N é uma injeção se ψi e ψj são distintos quando i e j são distintos.3 Dada uma tal injeção ψ, denotaremos por Dψ a matriz sobre M × M definida pelas equações E Dψ (Dψ ) [ , i] = D [ , ψi] . Portanto, Dψ tem os mesmos componentes que D [ , ψM ] mas suas colunas são indexadas por M . Diremos que Dψ é a submatriz de D definida por ψ. Definições análogas valem para a matriz E. 3 Aqui, ψi denota o valor de ψ em i. Eψ Feofiloff cap. 11 Algoritmo de Gauss-Jordan-Chio M M 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 M −Q M −Q M ∩Q N 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 1 M ∩Q 0 0 0 δ 0 0 0 0 0 0 δ 0 0 0 0 0 0 δ N ∩Q 0 0 δ 0 0 0 0 δ 0 0 0 0 N −Q δ 0 0 0 0 0 Figura 11.6: A primeira parte da figura é uma representação da matriz D. A segunda parte representa a matriz E. Estamos prontos para formular a relação entre determinantes de submatrizes de E e D. Essa relação corresponde ao “método de condensação de Chio” [Chi53] para cálculo de determinantes [Eve80, sec.3.6]. Poderíamos dizer que a relação é o invariante (i5) do algoritmo. Lema 11.1 (lema de Chio) No início de cada iteração do algoritmo, para qualquer injeção ψ de M em M ∪ N , det(Eψ ) = δ m−1 det(Dψ ) , onde Eψ e Dψ são as submatrizes de E e D respectivamente definidas por ψ. Como de hábito, m é a cardinalidade de M . D EMONSTRAÇÃO : É claro que a propriedade vale no início da primeira iteração, pois nessa ocasião E = D e δ = 1. Suponha agora que a propriedade vale no início de uma iteração qualquer que não a última; para mostrar que a propriedade vale no início da iteração seguinte, basta verificar que no fim do caso 1 det(E′ψ ) = δhm−1 det(Dψ ) , onde E′ é a matriz definida pela justaposição de G′ e E ′ e E′ψ é a submatriz de E′ definida por ψ. Em virtude de (11.g) temos E′ = ǦE, donde E′ψ = ǦEψ . O teorema 26 (do produto de determinantes) garante que det(E′ψ ) = det(Ǧ) det(Eψ ) . Como Ǧ é uma matriz diagonal, det(Ǧ) = (δh /δ)m−1 . Isso prova a igualdade desejada. ✷ 117 Feofiloff cap. 11 Algoritmo de Gauss-Jordan-Chio Podemos mostrar agora que cada componente de E é igual ao determinante de uma submatriz de D. Seja Q o conjunto Q ∪ (M − P ), donde P = M − Q e M − P = M ∩ Q. Os invariantes (i3) e (i4) garantem que E [M, Q] é uma matriz δ-bijetora (veja figura 11.6). Para cada i em M , seja ϕi o único elemento de Q para o qual E [i, ϕi] = δ. Assim, ϕ é uma injeção de M em M ∪ N e Eϕ = δI . A propriedade 11.2 abaixo — que poderíamos chamar de invariante (i6) do algoritmo — mostra que os componentes não-nulos de E [ , Q] são determinantes de Dϕ ; a propriedade 11.3 — que poderíamos denominar invariante (i7) — trata dos demais componentes de E. Propriedade 11.2 No início de cada iteração do algoritmo, δ = det(Dϕ ). D EMONSTRAÇÃO : De acordo com o lema 11.1, det(Eϕ ) = δ m−1 det(Dϕ ). Mas det(Eϕ ) = δ m , uma vez que Eϕ = δI . Como δ 6= 0 em virtude de (i0), temos δ = det(Dϕ ) . ✷ Propriedade 11.3 No início de cada iteração do algoritmo, para cada i em M e cada j em (M ∪ N ) − Q, E [i, j] = det(Dψ ) , onde ψ é a injeção de M em M ∪ N definida pelas equações ψi = j e ψh = ϕh para cada h em M − i. D EMONSTRAÇÃO : De acordo com o lema 11.1, det(Eψ ) = δ m−1 det(Dψ ). Como δ 6= 0, resta apenas provar que det(Eψ ) = δ m−1 E [i, j] . Para isso, é preciso estudar a estrutura de Eψ . A definição de ψ garante que Eψ [ , M −i] = Eϕ [ , M −i] . Como Eϕ = δI , temos Eψ [ , M −i] = δI [ , M −i] , donde Eψ [i, M −i] é nulo. Portanto, o desenvolvimento do determinante de Eψ pela linha i (propriedade 10.3) garante que det(Eψ ) = Eψ [i, i] det(Eψ [M −i, M −i]) = Eψ [i, i] δ m−1 . Para concluir a demonstração, resta observar que Eψ [ , i] = E [ , j] . ✷ Esta seção demonstrou que, no início de cada iteração do algoritmo de Gauss-Jordan-Chio, cada componente de E é o determinante de uma submatriz de D. Se o conceito de submatriz for generalizado da maneira óbvia, a propriedade pode ser reformulada (com auxílio da propriedade 10.3 do desenvolvimento do determinante por uma linha) diretamente em termos de D, G e E : No início de cada iteração do algoritmo, cada componente de G e de E é o determinante de alguma submatriz de D . 118 Q ϕ Feofiloff 11.4 cap. 11 Algoritmo de Gauss-Jordan-Chio Delimitação dos números gerados As propriedades que discutimos acima permitem delimitar o valor absoluto dos componentes da matriz E ao longo da execução do algoritmo. Como E é mera justaposição de G e E , a delimitação se aplica aos componentes das matrizes G e E , e portanto também ao número δ. Delimitação 11.4 No início de cada iteração do algoritmo, para cada i em M e cada j em M ∪ N , P Q |E [i, j] | ≤ p∈M (1 + q∈N αpq ) , onde αpq é o valor absoluto de D [p, q] . D EMONSTRAÇÃO : De acordo com as propriedades 11.2 e 11.3, E [i, j] é da forma det(Dψ ), onde ψ é uma injeção de M em M ∪ N . De acordo com a delimitação 10.9 do determinante, P Q absdet(Dψ ) ≤ p∈M ( q∈ψM |D [p, q] |) . A desigualdade não é violada se “q ∈ ψM ” for trocado por “q ∈ M ∪N ” (sempre supondo M disjunto de N ). Finalmente, como D é a justaposição de I e D, P P q∈N αpq , q∈M ∪N |D [p, q] | = 1 + 1 0 0 0 1 0 0 0 1 11 12 13 21 22 23 31 32 33 41 42 43 12 −11 −22 21 10 −20 0 0 10 0 10 0 10 20 30 0 −10 −20 0 0 0 21 22 23 11 12 13 0 0 1 21 22 23 0 1 0 0 0 1 21 22 23 11 12 13 41 42 43 Figura 11.7: Ilustração das propriedades 11.2 e 11.3. A primeira matriz da figura é D e a segunda é E. O valor de δ é 10. A injeção ϕ é definida por ϕ1 = 5, ϕ2 = 4, ϕ3 = 3. A terceira matriz da figura é Dϕ . O seu determinante vale 10. A quarta matriz é Dψ com i = 2 e j = 2. O seu determinante, 21, é o valor de E [2, 2] . A quinta matriz é Dψ com i = 3 e j = 7. O seu determinante, 0, é o valor de E [3, 7] . Todas as matrizes estão indexadas por 1, 2, 3, . . . de cima para baixo e da esquerda para a direita. 119 Feofiloff cap. 11 Algoritmo de Gauss-Jordan-Chio como queríamos demonstrar. ✷ Uma demonstração Q Psemelhante prova que E [i, j] é limitado pelo produto das somas de colunas q p αpq (desta vez sem o “1+ ”). Mostraremos a seguir que E [i, j] também é limitado por um produto de produtos. A delimitação é mais grosseira que as anteriores, mas muito útil, por ser mais fácil de manipular. Delimitação 11.5 No início de cada iteração do algoritmo, para cada i em M e cada j em M ∪ N , Q Q |E [i, j] | ≤ p∈M q∈N (1 + αpq ) , em que αpq é o valor absoluto de D [p, q] . D EMONSTRAÇÃO : Em virtude da delimitação 11.4, basta mostrar que Q P 1 + q∈N αpq ≤ q∈N (1 + αpq ) para cada p em M . Ora, a soma à esquerda é parte do desenvolvimento do produto à direita (da mesma forma que 1+α+β +γ é parte do desenvolvimento de (1 + α)(1 + β)(1 + γ)). Como as demais parcelas do desenvolvimento são nãonegativas, temos a desigualdade desejada. ✷ 11.5 Aplicação a matrizes inteiras Tudo que dissemos até aqui não depende da natureza dos componentes de D. Suponha agora que todos os componentes da matriz dada D são inteiros. Submeta D ao algoritmo de Gauss-Jordan-Chio. No início de cada iteração, todos os componentes de E serão determinantes de submatrizes da matriz D; portanto, todos os componentes de G e E serão inteiros (veja figura 11.8). Ademais, de acordo com a delimitação 11.5, todos os componentes de G e E estarão entre −ω e +ω, Q Q onde ω = p q (1 + αpq ) e αpq é o valor absoluto de D [p, P Qq] . A delimitação (1 + permanece válida se ω for definido pelo produto de somas q αpq ) ou p Q P pelo produto de somas q p αpq . É oportuno perguntar se os componentes da matriz E que o algoritmo gera não são muito maiores que o estritamente necessário. A resposta é negativa, ainda que num sentido fraco: os componentes de E admitem, não raro, um divisor comum não-trivial; mas há matrizes D para as quais pelo menos um dos componentes de E — digamos δ — resulta primo. Quando a matriz dada D é inteira, o algoritmo de Gauss-Jordan-Chio pode ser executado usando somente aritmética inteira. Para isso, basta calcular as expressões que definem a operação de pivotação exatamente na ordem indicada: primeiro a expressão no numerador e depois a divisão por δ, que será exata. (Veja a figura 11.9.) 120 Feofiloff cap. 11 Algoritmo de Gauss-Jordan-Chio 5 · 1 + 5 · 15 δ3 E [4, 4] − δ4 E [3, 4] = δ 2 Figura 11.8: Examine o exemplo da figura 11.2. Apesar das divisões por δ, todos os números permanecem inteiros ao longo das sucessivas iterações. Por exemplo, durante a terceira iteração ocorre uma pivotação em torno de 3 , 3 e o valor de E ′ [4, 4] é dado pela expressão da figura. A expressão tem valor inteiro, ainda que as sub-expressões 5 · 1/2 e 5 · 15/2 tenham valor fracionário. 3 4 5 1 32 8 9 −129574 35638 2472 53560 −9064 41406 −45114 2 3 6 5 6 7 8 1 4 5 6 7 8 9 10 2 5 6 7 8 9 73 1 3 4 7 9 8 10 1 2 4 7 5 10 9 6 2 3 5 8 9 10 9 2 7 4 6 9 10 5 2 3 4 5 7 11 3 2 1 4 5 8 118845 −13654 6748 1192 955 −7880 −35661 20158 −10816 −2992 −5203 9236 −3186 36 −864 1860 −678 288 −45906 −5780 3584 −208 1874 4436 15372 −460 −5852 −1244 5848 −3680 −60315 −750 18000 3480 5679 −6000 61527 450 −10800 −2088 −8475 3600 0 0 50676 0 0 0 0 −89310 7482125 −1237456 0 50676 0 0 0 0 0 116190 −2279561 364492 50676 0 0 0 0 0 0 −10884 −200274 25368 0 0 0 50676 0 0 0 1980 −2839490 532912 0 0 0 0 50676 0 0 26460 1024700 −98920 0 0 0 0 0 50676 0 −111090 −3978015 400560 0 0 0 0 0 0 50676 117330 4033779 −443040 Figura 11.9: Resultado da aplicação do algoritmo de Gauss-Jordan-Chio à ma- triz que aparece no topo da figura. O algoritmo devolve o número 50676 e as matrizes G (meio da figura) e E (parte inferior da figura). O valor da expressão P Q (1 + q αpq ) é, aproximadamente, 4 411 057 000 000. p 121 Feofiloff cap. 11 Algoritmo de Gauss-Jordan-Chio Eficiência. O número de dígitos na representação de ω vale, aproximadamente, log ω. Se adotarmos o produto-de-produtos como definição de ω, teremos P P log ω = p q log(1 + αpq ) e, portanto, o número de dígitos de ω será igual, aproximadamente, ao número total de dígitos de D. Pode-se dizer que ω é uma medida do tamanho da matriz dada D. Cada operação de pivotação envolve menos que 3(m−1)n multiplicações e divisões e menos que (m−1)n subtrações, onde m é o número de linhas e n o número de colunas de D. Como o número de iterações não passa de m, o número total de operações aritméticas é menor que 4m2 n . Suponhamos que o tempo necessário para executar uma operação aritmética entre dois números inteiros que estejam entre −ω e ω é limitado por log2 ω . Então o consumo total de tempo do algoritmo será da ordem de m2 n log2 ω no pior caso. Em suma, o tempo que o algoritmo consome é limitado por uma função polinomial do espaço necessário para descrever a matriz D. Esta delimitação polinomial foi originalmente demonstrada por Jack Edmonds [Edm67]. Matrizes totalmente unimodulares. Uma matriz é totalmente unimodular se o determinante de cada uma de suas submatrizes quadradas vale −1, 0 ou +1 (em particular, o valor de cada componente é −1, 0 ou +1). Matrizes totalmente unimodulares aparecem, naturalmente, em vários problemas de otimização combinatória [CCPS98, Sch86, AMO93]. Se o algoritmo de Gauss-Jordan-Chio for aplicado a uma matriz totalmente unimodular D então, de acordo com a propriedade 11.2, o número δ será igual a −1 ou +1 em todas as iterações. Portanto, o algoritmo devolverá uma matriz inversível inteira G tal que GD ou −GD é 1-escalonada. 11.6 Conclusão Ao receber uma matriz inteira D, o algoritmo de Gauss-Jordan-Chio devolve uma matriz inversível inteira G e um número inteiro não-nulo δ tais que a matriz GD é δ-escalonada. (É como se o algoritmo produzisse uma matriz escalonada cujos componentes são números racionais, todos com o mesmo denominador δ.) O valor absoluto de cada componente de G e GD (e, em particular, o número δ) será limitado 122 Feofiloff cap. 11 Algoritmo de Gauss-Jordan-Chio pelo produto ω de todos os números da forma 1 + α onde α é o valor absoluto de um componente de D. A quantidade de tempo que o algoritmo consome no pior caso é da ordem de m2 n log2 ω, onde m é o número de linhas e n o número de colunas de D. Exercícios 11.1 Use o algoritmo de Gauss-Jordan-Chio para calcular o determinante da matriz abaixo. 1 1 1 1 2 3 4 5 4 9 16 25 8 27 64 125 11.2 Suponha que ω é o produto das somas de colunas de D. Mostre que log ω ≤ n log(nα), onde α = maxq maxp αpq e n é o número de colunas de D. 11.3 Implemente o algoritmo de Gauss-Jordan-Chio em um computador. Suponha que a matriz dada, D, é inteira. Seu programa deve detectar overflow de operações aritméticas ou fazer aritmética inteira com precisão ilimitada. 123 Capítulo 12 Algoritmo Simplex-Chio A operação de pivotação característica do algoritmo de Gauss-Jordan-Chio (veja capítulo 11) pode também ser usada no algoritmo Simplex. O resultado dessa combinação será chamado algoritmo Simplex-Chio, por falta de um nome melhor. O algoritmo transforma qualquer matriz D numa matriz equivalente E que é simples a menos de um fator multiplicativo. Cada componente de E é igual ao determinante de alguma submatriz de D; portanto, se cada componente de D é inteiro então os componentes de E também serão inteiros. É possível dar uma boa delimitação superior para o valor absoluto dos componentes de E e assim mostrar que o consumo de tempo de cada iteração é polinomialmente limitado (ainda que o número de iterações possa ser exponencial). 12.1 Algoritmo Para qualquer número não-nulo δ, diremos que uma matriz E é δ-simples com relação a um par n, m de índices se a matriz δ −1 E é simples (solúvel, inviável ou ilimitada) com relação a n, m. O algoritmo Simplex-Chio recebe uma matriz arbitrária D e um par n, m de índices e devolve um número não-nulo δ e uma matriz E que é δ-simples com relação a n, m. Para simplificar a exposição, vamos descrever apenas a heurística SimplexChio; essa heurística pode ser convertida num algoritmo pela introdução de um mecanismo de convergência como o que usamos no Simplex Lexicográfico (seção 5.3). Heurística Simplex-Chio Recebe uma matriz D sobre M ×N e elementos n e m de N e M respectivamente; se convergir, devolve matrizes F e G e um número não-nulo δ tais que F G = δI , G [ , m] = δI [ , m] e GD é δ-simples 124 Feofiloff cap. 12 Algoritmo Simplex-Chio 125 n 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 m ≥ ≥ ≥ ≥ ≥ ≥ ≥ ≥ ≥ ≥ 0 0 δ 0 0 0 0 0 δ 0 0 0 0 0 δ ≥ 0 ≥ 0 ≥ 0 0 0 0 0 0 0 Figura 12.1: Matriz δ-simples solúvel. (solúvel, inviável ou ilimitada) com relação a n, m. Cada iteração começa com matrizes F , G e E , um número δ, uma parte L de M − m e um elemento h de M − L. A primeira iteração começa com F = G = I , E = D, δ = 1, L = ∅ e com h em M , se possível distinto de m. Cada iteração consiste no seguinte, com f = E [ , n] : h A LTERNATIVA I: h é diferente de m . C ASO I.1: E [h, k] > 0 e f [h] ≥ 0 ou E [h, k] < 0 e f [h] ≤ 0 para algum k em N − n . Para cada p em M − m, seja δp o número E [p, k] . Seja L∗ o conjunto dos índices p em L para os quais δp /δ > 0. C ASO I.1 A: f [h] /δh ≤ f [p] /δp para todo p em L∗ . Seja F ′ , G′ , E ′ o resultado da pivotação de F, G, E em torno de h, k. Seja L′ o conjunto L + h. Escolha h′ em M − L′ , se possível distinto de m. Comece nova iteração com F ′ , G′ , E ′ , δh , L′ , h′ nos papéis de F , G, E , δ, L, h. C ASO I.1 B: f [h] /δh > f [p] /δp para algum p em L∗ . Escolha qualquer p em L∗ tal que f [p] /δp é mínimo. Seja F ′ , G′ , E ′ o resultado da pivotação de F, G, E em torno de p, k. Comece nova iteração com F ′ , G′ , E ′ e δp nos papéis de F , G, E e δ. C ASO I.2: E [h, N −n] ≤ o e f [h] > 0 ou E [h, N −n] ≥ o e f [h] < 0 . Devolva F , G, δ e pare. C ASO I.3: E [h, N −n] = o e f [h] = 0 . Seja L′ o conjunto L + h. Escolha h′ em M − L′ , se possível distinto de m. Comece nova iteração com L′ e h′ nos papéis de L e h. A LTERNATIVA II: h é igual a m . k δp = E [p, k] Feofiloff cap. 12 Algoritmo Simplex-Chio C ASO II.1: E [h, k] /δ < 0 para algum k em N − n . Para cada p em M − m, seja δp o número E [p, k] . Seja L∗ o conjunto dos índices p em L para os quais δp /δ > 0. C ASO II.1 A: L∗ é vazio . Devolva F , G, δ e pare. C ASO II.1 B: L∗ não é vazio . Escolha qualquer p em L∗ tal que f [p] /δp é mínimo. Seja F ′ , G′ , E ′ o resultado da pivotação de F, G, E em torno de p, k. Comece nova iteração com F ′ , G′ , E ′ e δp nos papéis de F , G, E e δ. C ASO II.2: E [h, N −n] /δ ≥ o . Devolva F , G, δ e pare. ✷ A operação de pivotação é definida exatamente como no algoritmo de Gauss-Jordan-Chio. 12.2 Análise A análise da heurística é análoga à do algoritmo de Gauss-Jordan-Chio. Invariantes No início de cada iteração da heurística, (i0) δ 6= 0 , (i1) F G = δI , (i2) E = GD , e existem partes P de L e Q de N − n tais que (i3) E [P, Q] é δ-bijetora , E [M −P, Q] = O e E [L−P, ] = O , (i4) G [ , M −P ] = δI [ , M −P ] , (i5) f [P ] ≥ o , onde f é o vetor E [ , n] . Além disso, cada componente de G e de E é o determinante de uma submatriz de D . A demonstração dos invariantes é inteiramente análoga à que discutimos para o algoritmo de Gauss-Jordan-Chio. Os invariantes valem, em particular, no fim da última iteração. Portanto, as objetos F , G e δ que a heurística devolve nos casos I.2, II.1A e II.2 têm as propriedades anunciadas. 12.3 Aplicação a matrizes inteiras Suponha agora que todos os componentes da matriz dada D são inteiros. Então, no início de cada iteração, em virtude de (i6), o número δ e todos os componen- 126 k δp = E [p, k] Feofiloff cap. 12 Algoritmo Simplex-Chio tes de G e de E também serão inteiros. Ademais, pelas mesmas razões que na delimitação 11.5, todos estarão entre −ω e +ω, Q Q onde ω = p q (1 + αpq ) e αpq é o valor absoluto de D [p, P Qq] . A delimitação (1 + permanece válida se ω for definido pelo produto de somas q αpq ) ou p Q P pelo produto de somas q p αpq . Quando D é inteira, o Simplex-Chio pode ser executado usando somente aritmética inteira. De fato, a divisão por δ implícita na operação de pivotação terá sempre resultado inteiro. Além disso, a operação de divisão que aparece na definição de L∗ não precisa ser executada explicitamente pois δp /δ é positivo se e só se δp e δ têm o mesmo sinal. Analogamente, as operações de divisão que aparecem na definição dos casos I.1A e I.1B e na escolha de p podem ser feitas implicitamente. 3 2 1 4 4 3 2 5 5 6 3 4 1 −5 4 7 9 8 7 11 5 6 7 8 10 6 7 −8 −9 11 7 −9 8 −10 9 5 −10 9 6 8 3 2 1 4 0 −157 −334 277 170 0 −466 389 13 −19 0 −1635 996 −1542 1104 0 1343 −1522 1486 −1597 0 −7690 12866 −12326 13991 −7473 −252 −504 686 0 0 −7473 5319 0 −1391 204 408 275 0 0 0 −6441 −7473 −416 −7527 −15054 147 0 −7473 0 −21813 0 −10440 3774 15021 −3631 −7473 0 0 19092 0 −2714 −86502 −180477 −15283 0 0 0 −136920 0 65620 Figura 12.2: Submeta à heurística Simplex-Chio a matriz D descrita no topo da figura. Depois de 10 iterações, a heurística devolverá o número −7473, a matriz G (meio da figura) e a matriz E (parte inferior da figura). A matriz é simples solúvel com P Q −E/7473 relação à coluna 9 e linha 5. O valor da expressão p (1 + q αpq ) é 381 966 750. Eficiência de uma iteração. Qualquer que seja o mecanismo de convergência adotado, o número de iterações do algoritmo Simplex-Chio será da ordem de 2n no pior caso, onde n é o número de colunas de D. Se adotarmos o mecanismo lexicográfico, o número de operações aritméticas em uma iteração será inferior a m(4n + 3m), onde m é o número de linhas de D, pelas razões que passamos a detalhar. Cada operação de pivotação envolve menos que 3(m−1)n multiplicações e divisões e menos que (m−1)n subtrações. 127 Feofiloff cap. 12 Algoritmo Simplex-Chio A escolha da linha e coluna em torno da qual se fará a próxima pivotação envolve menos que 2(m−1)n multiplicações e menos que (m−1)n subtrações. (Na verdade, é mais justo trocar “n” por “m”, uma vez que o resultado das comparações lexicográficas só depende dos |Q| + 1 primeiras colunas de E .) Em cada operação aritmética, o número de dígitos de cada operando é limitado por log ω e portanto o esforço necessário para executar a operação é limitado por log2 ω. Logo, o consumo de tempo de uma iteração é da ordem de mn log2 ω . 12.4 Conclusão Ao receber uma matriz inteira D e índices n e m de coluna e linha respectivamente, o algoritmo Simplex-Chio devolve uma matriz inversível inteira G e um número inteiro não-nulo δ tais que a matriz GD é δ-simples com relação a n, m. O valor absoluto de cada componente de G e GD (e, em particular, o número δ) será limitado pelo produto de todos os números da forma 1 + α, onde α é o valor absoluto de um componente de D. Exercícios 12.1 Implemente o algoritmo Simplex-Chio (com regra lexicográfica ou regra de Bland) em um computador. Suponha que a matriz dada é inteira. Seu programa deve detectar overflow de operações aritméticas ou fazer aritmética inteira com precisão ilimitada. 128 Capítulo 13 Problemas com dados inteiros Suponha dado um sistema de equações lineares com coeficientes inteiros ou um par dual de problemas canônicos de programação linear com coeficientes inteiros. Este capítulo resume o resultado da aplicação dos algoritmos Gauss-JordanChio e Simplex-Chio a esses problemas. Mostra também como é possível prever a ordem de grandeza das soluções dos problemas. 13.1 Sistemas de equações Suponha que A é uma matriz inteira e b é um vetor inteiro. Nosso problema é encontrar um vetor racional x∗ tal que Ax∗ = b . Submeta A ao algoritmo de Gauss-Jordan-Chio (seção 11.1) O algoritmo produzirá um inteiro não-nulo δ e uma matriz inversível G tal que GA é δ-escalonada. É fácil extrair de GA e Gb, como já fizemos na seção 2.8, uma solução x∗ de nosso problema ou a evidência de que tal solução não existe. Segue daí o seguinte Teorema 13.1 Para qualquer matriz inteira A sobre M × N e qualquer vetor inteiro b sobre M , vale uma e apenas uma das alternativas: (1) existe um inteiro δ entre 1 e ω e um vetor inteiro x com componentes entre −ω e ω tais que Ax = δb , (2) existe um vetor inteiro g com componentes entre −ω e ω tal que gA = o, gb 6= 0 e gb está entre −ω e ω , onde ω é o tamanho do sistema A , b. Q Q Q O tamanho do sistema A, b é o número i (1 + βi ) · i j (1 + αij ), em que βi e αij são os valores absolutos de b [i] e A [i, j] respectivamente. As conclusões Q continuam válidas se o tamanho do sistema for definido pelas expressões i (1+ P Q P P βi + j αij ) ou ( j i αij ) · ( i βi ). 129 Feofiloff cap. 13 Problemas com dados inteiros 130 A alternativa (1) é, essencialmente, o resultado da solução das equações = b pela “regra de Cramer”. 1 A alternativa (2) é um certificado de que as equações não têm solução. Ax∗ Matrizes totalmente unimodulares. Se A é totalmente unimodular (veja seção 11.5) então δ = 1 no teorema acima e portanto existe um vetor inteiro x tal que Ax = b. 13.2 Problemas canônicos Suponha que A, b, c é um sistema inteiro. Considere os problemas canônicos CP(A, b, c) e CD(A, c, b). O primeiro consiste em encontrar um vetor racional x∗ em X(A, b) que minimize a expressão cx∗ ; o segundo procura um vetor racional y ∗ em Y (A, c) que maximize y ∗ b. Submeta ao algoritmo Simplex-Chio (seção 12.1) o sistema D, m, n definido, como em (6.b), pela justaposição de A, b e c. O algoritmo produzirá uma matriz δ-simples E a partir da qual é fácil deduzir, como já fizemos nos capítulos 7 e 8, soluções x∗ e y ∗ dos dois problemas canônicos ou a evidência de que tais soluções não existem. Segue daí a versão do teorema da dualidade 8.5 enunciada abaixo. Nosso enunciado envolve os conjuntos X(A, δb) e Y (A, δc) , com δ positivo. É óbvio um vetor x está no primeiro conjunto se e só se x/δ está em X(A, b); analogamente, um vetor y está no segundo se e só se y/δ está em Y (A, c). Teorema 13.2 (dualidade para dados inteiros) Para qualquer matriz inteira A sobre M × N , vetor inteiro b sobre M e vetor inteiro c sobre N , existe um inteiro positivo δ para o qual vale uma e apenas uma das seguintes afirmações: (1) existe um vetor inteiro x em X(A, δb) e um vetor inteiro y Y (A, δc) tais que cx = yb, (2) existe um vetor inteiro x em X(A, δb) e um vetor inteiro x′ X(A, o) tal que cx′ ≤ −1, (3) existe um vetor inteiro y em Y (A, δc) e um vetor inteiro y Y (A, o) tal que y ′ b ≥ +1, (4) existe um vetor inteiro x′ em X(A, o) e um vetor inteiro y ′ Y (A, o) tais que cx′ ≤ −1 e y ′ b ≥ +1. em em em em Ademais, cada componente de x, x′ , y e y ′ , bem como os números δ, cx, yb, cx′ e y ′ b, estão entre −ω e ω, onde ω é o tamanho do sistema A, b, c. 1 Referência a Gabriel Cramer (–). Feofiloff cap. 13 Problemas com dados inteiros Q Q Q Q O tamanho do sistema A, b, c é o número i j (1+αij )· i (1+βi )· j (1+γj ), em que αij , βi e γj são os valores absolutos de A [i, j] , b [i] e c [j] respectivamente (é claro que i percorre o conjunto de índices de linhas de A e j percorre o conjunto de índices de colunas de A). O teorema válido se o tamanho doQ sistema P Q continuaP A, b, c for definido pelas expressões i (1 + βi + j αij ) · (1 + j γj ) ou j (γj + P P β ). α ) · ( i i i ij Matrizes totalmente unimodulares. Se A é totalmente unimodular então o teorema da dualidade 13.2 vale com δ = 1. Nesse caso, se os problemas CP(A, b, c) e CD(A, c, b) têm soluções então existe um vetor inteiro x em X(A, b) e um vetor inteiro y em Y (A, c) tais que cx = yb. Essas observações trazem à baila a seguinte questão, de fundamental importância para problemas de otimização combinatória: em que condições os problemas CP(A, b, c) e CD(A, c, b) têm soluções inteiras? Edmonds e Giles [EG84] investigaram essa questão e introduziram o conceito de sistema TDI (totally dual integral) para caracterizar algumas respostas. O leitor interessado poderá encontrar mais informações no livro de Schrijver [Sch86, Sch03]. 13.3 Conclusão O algoritmo Simplex-Chio pode ser usado para resolver o par dual de problemas canônicos CP(A, b, c) e CD(A, c, b) com dados A, b e c inteiros. A eventual solução do problema primal e a correspondente solução do problema dual terão a forma x/δ e y/δ respectivamente, onde x e y são vetores inteiros enquanto δ é um número inteiro positivo. Tanto δ quanto os componentes de x e y são limitados, em valor absoluto, pelo produto de todos os monômios da forma (1+α), onde α é o valor absoluto de um componente do sistema A, b, c. As conclusões se aplicam também, num certo sentido, a dados racionais: se os dados são racionais, basta multiplicá-los todos por um inteiro positivo tão grande que todos se tornem inteiros. 131 Parte IV Algoritmos Polinomiais 132 Capítulo 14 Introdução aos algoritmos polinomiais O Simplex é um algoritmo exponencial: o número de operações aritméticas que o algoritmo executa, no pior caso, ao receber o sistema A, b, c que define um problema canônico primal é da ordem de m (m+n) 2n , onde m é o número de linhas e n o número de colunas de A. A mesma observação vale para o Simplex-Chio. Talvez não seja razoável exigir que o número de operações aritméticas executadas por um algoritmo de programação linear seja limitado por um polinômio em m e n. Mas existem algoritmos de programação linear em que o número de operações aritméticas é limitado por um polinômio em m , n e log ω , onde log ω representa o número total de dígitos necessário para escrever todos os componentes de A, b, c. O presente capítulo descreve as camadas externas de um tal algoritmo polinomial. O núcleo, conhecido como algoritmo de Yamnitsky-Levin, será discutido no próximo capítulo. A existência de um algoritmo polinomial para programação linear foi objeto de especulação por algum tempo. O primeiro algoritmo desse tipo foi descrito por Khachiyan [Kha79, GL81, PS82] e ficou conhecido como algoritmo do elipsóide. Outros algoritmos polinomiais, como o que pretendemos descrever, foram publicados mais tarde. O algoritmo que discutiremos não é uma alternativa prática para o Simplex, mas tem profundas implicações teóricas (veja Schrijver [Sch86, Sch03] e Grötschel-Lovász-Schrijver [GLS88, GLS93]). Além disso, algumas de suas idéias são úteis em outros algoritmos polinomiais, como os “algoritmo de pontos interiores” [Kar84, Gon89, Gon92], que estão ganhado aceitação na prática. 133 Feofiloff 14.1 cap. 14 Introdução aos algoritmos polinomiais 134 Problemas CD, PV, V e PI O algoritmo polinomial que queremos descrever resolve o problema canônico dual (mas é preciso lembrar que qualquer problema de programação linear pode ser transformado num problema canônico dual equivalente). Convém repetir a definição do Problema CD(A, c, b): Dado um sistema A, c, b, encontrar um vetor y em Y (A, c) que maximize yb. Como de hábito, Y (A, c) é o poliedro canônico dual, ou seja, o conjunto de todos os vetores y que satisfazem a restrição yA ≤ c. Nosso algoritmo consiste em três “camadas” que envolvem um “núcleo”. A camada externa reduz o problema CD ao seguinte Problema do Ponto Viável PV(A, c): um vetor y em Y (A, c). Dado um sistema A, c, encontrar A segunda camada reduz o problema PV ao Problema da Viabilidade V(A, c): Y (A, c) é ou não é vazio. Dado um sistema A, c, decidir se A camada interna reduz o problema V ao Problema do Ponto Interior PI (A, c): Dado um sistema A, c, encontrar um vetor z tal que z · A [ , j] < c [j] para todo j . Finalmente, o núcleo, conhecido como algoritmo de Yamnitsky-Levin, resolve o problema PI . Trataremos do núcleo no próximo capítulo; o presente capítulo cuidará das reduções. A redução de um problema a outro é um método que resolve o primeiro recorrendo a um hipotético algoritmo para o segundo. Tamanho e complexidade. Antes de tratar das reduções é necessário adotar algumas hipóteses e convenções de notação. Suporemos que os componentes das matrizes e vetores que definem nossos problemas são números inteiros.1 Essa hipótese não é muito restritiva: qualquer sistema com dados racionais pode ser transformado num sistema inteiro equivalente mediante multiplicação por um número inteiro positivo suficientemente grande. O número de linhas de qualquer matriz A será denotado por m(A). O número de colunas será denotado por n(A). O tamanho de A (veja capítulo 13) será medido pelo produto ω(A) de todos os números da forma 1 + α, onde α é o valor absoluto de um componente de A. Analogamente, o tamanho ω de 1 Mas as eventuais soluções do problema podem ter componentes fracionários. algoritmo de YamnitskyLevin m(A) n(A) ω(A) Feofiloff cap. 14 Introdução aos algoritmos polinomiais 135 qualquer vetor b será o produto de todos os números da forma 1 + β, onde β é o valor absoluto de um componente de b. Usaremos também as abreviaturas ω(A, b) = ω(A) ω(b) e ω(A, b, c) = ω(A) ω(b) ω(c) , qualquer que seja o vetor c. O número total de dígitos binários de um sistema inteiro A, b, c é essencialmente igual a lg ω(A, b, c), onde lg denota o logaritmo na base 2. Diremos que a complexidade de um algoritmo é o número de operações aritméticas que o algoritmo executa no pior caso.2 Um algoritmo que age sobre um sistema A, b, c é polinomial se sua complexidade é limitada por um polinômio em m(A), n(A) e lg ω(A, b, c). 14.2 Redução do CD ao PV Suponha que dispomos de um algoritmo que resolve o problema PV. Como esse algoritmo pode ser usado para resolver o problema CD? A resposta é relativamente simples desde que se conheça o teorema da dualidade. Para resolver o problema CD(A, c, b), basta encontrar um par y , x de vetores tal que yA ≤ c , Ax = b , x ≥ o e cx ≤ yb . (14.a) Esta é uma instância do problema PV; para tornar isso mais claro, basta colocar as restrições na forma yA ≤ c , e ≤ b, xA −xI ≤ o , e ≤ −b , −xA −yb + xc ≤ 0 . (14.b) (Veja figura 14.1.) O lema da dualidade 8.1 garante que para todo par y , x que satisfaz (14.a) o vetor y é uma solução do problema CD(A, c, b). Reciprocamente, para toda solução y do problema CD, o teorema da dualidade 8.5 garante a existência de um vetor x tal que o par y , x é solução de (14.a). Complexidade. Digamos que A′ , c′ é o sistema descrito implicitamente em (14.b). Suponha que a complexidade de nosso hipotético algoritmo para o problema PV(A′ , c′ ) é limitada por um polinômio em m(A′ ), n(A′ ) e lg ω(A′ , c′ ). É fácil verificar que m(A′ ) = m(A) + n(A) e n(A′ ) = 2n(A) + 2m(A) + 1. Ademais, ω(A′ ) = ω(A)3 2n(A) ω(b) ω(c) e ω(c′ ) = ω(c) ω(b)2 , donde lg ω(A′ , c′ ) ≤ n(A) + 3 lg ω(A, c, b). Portanto, a complexidade de nosso algoritmo para o problema CD(A, c, b) será limitada por um polinômio em m(A), n(A) e lg ω(A, c, b). 2 Uma definição mais realista deveria levar em conta o tempo total dispendido na execução de cada operação aritmética; os algoritmos mencionados na introdução podem ser formulados de modo que seu consumo total de tempo seja polinomial. lg Feofiloff cap. 14 Introdução aos algoritmos polinomiais y A O O O −b x O Ã −Ã I c c b −b o 0 136 Figura 14.1: Construção do problema PV que equivale ao problema CD(A, c, b). 14.3 Redução do PV ao V Suponha que dispomos de um algoritmo A que resolve o problema V. Eis como A pode ser usado para resolver o problema PV(A, c), ou seja, para encontar um vetor y em Y (A, c): Use A para decidir se Y (A, c) é vazio. Se Y (A, c) não é vazio, use A repetidas vezes para determinar uma parte K de N que seja maximal com relação à seguinte propriedade:3 existe um vetor y tal que yA ≤ c e − yA [ , K] ≤ −c [K] .4 (Veja a figura 14.2.) Seja A′ a matriz A [ , K] . Use o algoritmo de GaussJordan (capítulo 2) para determinar matrizes F e G tais que F G = I e GA′ é escalonada. Seja P ′ a base de linhas e Q′ uma base de colunas de GA′ . Seja w∗ o único vetor que satisfaz as equações w∗ (GA′ ) [ , Q′ ] = c [Q′ ] e w∗ [M −P ′ ] = o . A′ P′ Q′ w∗ O vetor y ∗ = w∗ G está em Y (A, c). ✷ Análise do algoritmo. O conjunto K foi construído de modo que yA ≤ c e yA′ = c′ para algum vetor y, onde c′ = c [K] . Mostraremos a seguir que a maximalidade de K garante que (GA) [M −P ′ , ] = O . (14.c) (Na terminologia do apêndice D, página 185, o vetor y é básico em Y (A, c). A identidade (14.c) afirma que K é um gerador de A. A demonstração da identidade é uma combinação das demonstrações de D.1 e D.3.) Suponha por um instante que (GA) [i, ] 6= o para algum i em M − P ′ . Seja v 3 4 Ou seja, nenhum superconjunto próprio de K tem a propriedade. Mas o algoritmo A não fornece o vetor y. v Feofiloff cap. 14 y Introdução aos algoritmos polinomiais A −A′ c −c′ 137 Figura 14.2: Construção do problema V que equivale ao problema PV(A, c). Legenda: A′ = A [ , K] e c′ = c [K] . o vetor G [i, ] . Ajuste a notação, trocando v por −v se necessário, de modo que (vA) [j] seja positivo para algum j em N − K . Seja λ o maior número tal que λ ≤ (c − yA) [j] (vA) [j] para todo j em N −K tal que (vA) [j] é positivo. É fácil verificar que yA+λvA ≤ c. Como (vA) [K] = (GA) [i, K] = o, temos (yA + λvA) [K] = c [K] . Ademais, em virtude da maximalidade de λ, (yA + λvA) [j] = c [j] para algum j em N − K . Mas isso é incompatível com a maximalidade de K . A contradição prova (14.c). Podemos mostrar agora que y ∗ está em Y (A, c). Como yA ≤ c, basta verificar que y ∗ A = yA. (Na terminologia do apêndice D, página 185, diríamos que y e y ∗ pertencem à mesma face minimal do poliedro. Se P ′ = M então y = y ∗ é um vértice do poliedro.) É claro que y ∗ A = w∗ GA e yA = yF GA = wGA, onde w é o vetor yF . Como (GA) [M −P ′ , ] é nula, temos y ∗ A = w∗ [P ′ ] (GA) [P ′ , ] e yA = w [P ′ ] (GA) [P ′ , ] . Resta apenas verificar que w∗ [P ′ ] = w [P ′ ] . Por definição, w∗ [P ′ ] (GA′ ) [P ′ , Q′ ] = c [Q′ ] . Por outro lado, w [P ′ ] (GA′ ) [P ′ , Q′ ] = w [P ′ ] (GA) [P ′ , Q′ ] = yA [ , Q′ ] = c [Q′ ] , uma vez que Q′ é parte de K . Finalmente, como (GA′ ) [P ′ , Q′ ] é uma matriz de bijeção, temos w∗ [P ′ ] = w [P ′ ] . Segue daí que y ∗ A = yA, como queríamos demonstrar. λ Feofiloff cap. 14 Introdução aos algoritmos polinomiais Complexidade. Para resolver o problema PV(A, c), nossa redução apela ao algoritmo A não mais que 1 + n(A) vezes. Em cada apelo, resolvemos um problema V(A′ , c′ ) tal que n(A′ ) ≤ 2n(A) , m(A′ ) = m(A) e ω(A′ , c′ ) ≤ ω(A, c)2 . Se a complexidade do algoritmo A é limitada por um polinômio em n(A′ ), m(A′ ) e lg ω(A′ , c′ ), então a soma das complexidades em todos os apelos ao algoritmo será limitada por um polinômio em n(A), m(A) e lg ω(A, c). A complexidade do algoritmo de Gauss-Jordan usado em nossa redução também é limitada por um polinômio. Em suma, a complexidade de nosso algoritmo para o problema PV(A, c) é limitada um polinômio em m(A), n(A) e lg ω(A, c). 14.4 Redução do V ao PI O problema PI (A′ , c′ ) consiste em encontrar um ponto interior do poliedro Y (A′ , c′ ), ou seja, um vetor z tal que zA′ [ , j] < c′ [j] para cada j . Suponha que dispomos de um algoritmo para o problema PI e queremos resolver o problema da viabilidade para um sistema inteiro A, c. Adote as abreviaturas n = n(A) e ω = ω(A, c) e faça ξ = nω , A′ = ξA e c′ = ξc + u , onde u é o vetor de 1s (todos os componentes de u são iguais a 1). Resolva o problema do ponto interior para o sistema A′ , c′ . Se Y (A′ , c′ ) não tem ponto interior então o teorema abaixo garante que Y (A, c) é vazio; caso contrário, o teorema garante que Y (A, c) não é vazio (embora sem exibir, explicitamente, um elemento do poliedro). Nossa redução depende do seguinte teorema, que é uma conseqüência simples do teorema da dualidade 13.2 para dados inteiros. O teorema afirma que o poliedro Y (A, c) é vazio se e só se um poliedro auxiliar, ligeiramente maior, não tem pontos interiores. Teorema 14.1 (da redução) Para qualquer sistema inteiro A, c, o poliedro Y (A, c) é vazio se e só se Y (ξA , ξc + u) tem um ponto interior, onde ξ = nω. D EMONSTRAÇÃO : Suponha que existe um vetor y tal que yA ≤ c. É claro que yA < c + ξ −1 u e portanto y é um ponto interior de Y (ξA, ξc + u). Agora considere a recíproca. Suponha que Y (ξA, ξc + u) tem um ponto interior z. É claro que zA < c + ξ −1 u . 138 Feofiloff cap. 14 Introdução aos algoritmos polinomiais Considere o problema de encontrar um vetor y que satisfaça as restrições yA ≤ c. O teorema da dualidade 13.2 para dados inteiros garante que vale uma das seguintes alternativas: existem um inteiro δ entre 1 e ω e um vetor inteiro y com componentes entre −ω e ω tais que yA ≤ δc; existe um vetor inteiro x′ com componentes entre 0 e ω tal que Ax′ = o e cx′ ≤ −1. Suponha por um momento que vale a segunda alternativa. Então, por um lado, (c + ξ −1 u)x′ > (zA)x′ = z(Ax′ ) = 0 , onde a primeira desigualdade vale porque x′ não é nulo, uma vez que cx′ não é nulo. Por outro lado, (c + ξ −1 u)x′ = cx′ + ξ −1 ux′ ≤ −1 + ξ −1 nω ≤ −1 + (nω)−1 nω = 0 . Esta contradição mostra que a segunda alternativa é impossível, e portanto vale a primeira. Como yA ≤ δc, o vetor δ −1 y está em Y (A, c). ✷ A ênfase do teorema está menos nos pontos interiores que na possibilidade de aumentar ligeiramente o lado direito das restrições que definem um poliedro vazio sem que ele deixe de ser vazio. De fato, algumas alterações óbvias na demonstração acima provam que Y (A, c) é vazio se e só se Y (2ξA, 2ξc + u) é vazio. Complexidade. Suponha que a complexidade de nosso algoritmo hipotético para o problema PI (A′ , c′ ) é limitada por um polinômio em n(A′ ), m(A′ ) e lg ω(A′ , c′ ). Para resolver o problema V(A, c) como esboçamos acima é necessário tomar A′ = ξA e c′ = ξc + u. Se observarmos que m(A′ ) = m(A) e n(A′ ) = n(A) e adotarmos as abreviaturas m e n respectivamente para esses dois números, teremos ω ′ = ω(A′ ) ω(c′ ) ≤ ξ mn ω(A) ξ n ω(c) = ξ mn+n ω = n mn+n ω mn+n+1 , onde ω e ω ′ são abreviaturas para ω(A, c) e ω(A′ , c′ ) respectivamente. Portanto lg ω ′ = (mn + n) lg n + (mn + n + 1) lg ω . Assim, a complexidade do algoritmo que propusemos para o problema V(A, c) é limitada por um polinômio em m(A), n(A) e lg ω(A, c). 139 Feofiloff 14.5 cap. 14 Introdução aos algoritmos polinomiais Conclusão Este capítulo mostrou como um algoritmo para o problema do ponto interior, PI , pode ser usado para resolver o problema canônico CD. O método consiste em uma redução ao problema PV, seguida de uma redução ao problema V, seguida de uma redução ao problema PI . Se o algoritmo para o problema PI (A′ , c′ ) tiver complexidade limitada por um polinômio em m(A′ ), n(A′ ) e lg ω(A′ , c′ ) então a complexidade do algoritmo resultante para o problema CD(A, c, b) será limitada por um polinômio em m(A), n(A) e lg ω(A, c). A menos de casos excepcionais,5 a complexidade do algoritmo de Yamnitsky-Levin (veja próximo capítulo) para o problema PI (A′ , c′ ) é limitada pelo polinômio 70 (m′ + 1)4 (m′ + n′ + 1) lg ω ′ , onde m′ = m(A′ ), n′ = n(A′ ) e ω ′ = ω(A′ , c′ ). Os termos mais significativos desse polinômio são 5 70 m′ lg ω ′ 4 e 70 m′ n′ lg ω ′ . Se um problema V(A, c) for reduzido a um problema PI e esse último resolvido pelo algoritmo de Yamnitsky-Levin, o número total de operações aritméticas será limitado por um polinômio cujos termos mais significativos são 70 m6 n lg ω e 70 m5 n2 lg ω , onde m = m(A), n = n(A) e ω = ω(A, c). Se um problema PV(A, c) for reduzido a um problema V e este for resolvido como sugerido acima, o número total de operações aritméticas será limitado por um polinômio cujos termos mais significativos são 280 m6 n2 lg ω e 560 m5 n3 lg ω , onde m = m(A), n = n(A) e ω = ω(A, c). Finalmente, no polinômio correspondente para o problema CD(A, c, b), o termo mais significativo será (miserere nobis! ) 13440 (m + n)8 lg ω , onde m = m(A), n = n(A) e ω = ω(A, c, b). Esses cálculos, ainda que grosseiros, sugerem que nosso algoritmo dificilmente poderá competir com o Simplex na prática. 5 Sistemas com menos que 7 + lg m(A′ ) componentes não-nulos. 140 Capítulo 15 Algoritmo de Yamnitsky-Levin Este capítulo descreve um algoritmo polinomial para o problema do ponto interior, já enunciado no capítulo 14: Problema PI (A, c): Dada uma matriz inteira A e um vetor inteiro c, encontrar um vetor z tal que zA < c. O algoritmo, publicado por Yamnitsky e Levin [YL82][Chv83, Sch86, Sch03], é semelhante ao célebre algoritmo do elipsóide [Kha79, GL81], mas, ao contrário daquele, opera apenas com números racionais. O número de operações aritméticas que o algoritmo de Yamnitsky-Levin executa é da ordem de m4 (m + n) log ω , onde m e n são os números de linhas e colunas de A respectivamente e log ω representa o número total de dígitos necessário para escrever todos os componentes de A e c. A concepção básica do algoritmo é simples: o poliedro Y (A, c) é envolvido por um tetraedro suficientemente grande que é então progressivamente “encolhido” até que o centro do tetraedro seja um ponto interior do poliedro ou até que fique evidente que o poliedro não tem ponto interior. Embora a idéia pareça simples, sua realização técnica é bastante complexa. 15.1 Definições básicas Os protagonistas principais do capítulo são uma matriz A sobre M × N e um vetor c sobre N . Suporemos que o sistema A , c é inteiro, ou seja, que todos os componentes de A e c são números inteiros. O tamanho de A (veja capítulo 13) é o produto de todos os números da forma 1 + α, onde α é o valor absoluto de um componente de A. O tamanho de c é definido de maneira análoga. O tamanho do sistema A , c é o produto ω(A) ω(c), onde ω(A) e ω(c) são os tamanhos de A e c respectivamente. Como de hábito, Y (A, c) denota o conjunto de todos os vetores y para os quais yA ≤ c. Diremos que esse conjunto é o poliedro determinado por A , c. 141 Feofiloff cap. 15 Algoritmo de Yamnitsky-Levin Nosso problema é encontrar um ponto interior do poliedro, isto é, um vetor racional z tal que zA < c . 142 ponto interior A desigualdade deve ser entendida componente-a-componente: zA [ , j] < c [j] para cada índice j . 15.2 Tetraedros e seus volumes A existência de um ponto interior em Y (A, c) está intimamente relacionada com o “volume” de Y (A, c): o poliedro tem um ponto interior se e só se seu “volume” não é nulo. Felizmente, não será necessário definir o “volume” de um poliedro arbitrário; basta definir o conceito para certos poliedros muito simples, que chamaremos tetraedros. Um tetraedro1 sobre M é o conjunto de todas as combinações convexas de m + 1 vetores sobre M , onde m = |M |. Uma combinação convexa dos vetores t0 , . . , tm é qualquer vetor da forma combinação convexa λ 0 t 0 + · · · + λ m tm , onde λ0 , . . , λm são números não-negativos tais que λ0 + · · · + λm = 1. Os m + 1 vetores que definem um tetraedro são os vértices ou geradores do tetraedro. O tetraedro gerado pelos vetores t0 , . . , tm será denotado por [t0 , . . , tm ]. Antes de definir o volume do tetraedro, convém ajustar nossa notação de modo que M seja o conjunto {1, . . , m} e adotar a abreviatura M+0 = {0, 1, . . , m}. Feito esse ajuste, seja T a matriz definida pelas equações T [i, 0] = 1 e T [i, M ] = ti para i = 0, . . , m. É claro que T é definida sobre M+0 × M+0. Diremos que T é a matriz do tetraedro gerado pelos vetores t0 , . . , tm . Graças ao ajuste de notação, a matriz é quadrada. O volume do tetraedro gerado por t0 , . . , tm é, por definição, o valor absoluto do determinante da matriz do tetraedro. Se o valor absoluto de det(T ) for denotado por absdet(T ), podemos dizer que vol [t0 , . . , tm ] = absdet(T ) . O volume do tetraedro não depende da ordem em que tomamos seus vértices. De fato, se T ′ é a matriz do tetraedro gerado por uma permutação t′0 , . . , t′m de t0 , . . , tm então existe uma matriz de permutação J tal que T ′ = JT ; como det(T ′ ) = sig(J) det(T ) = ± det(T ), temos absdet(T ′ ) = absdet(T ). O número vol [t0 , . . , tm ] /m! é o volume do conjunto [t0 , . . , tm ] no sentido geométrico. Nossa definição de volume deixa de lado o fator 1/m! porque o algoritmo de Yamnitsky-Levin só depende dos valores relativos dos volumes de certos tetraedros. 1 A rigor, o termo tetraedro só é apropriado quando m = 3. Quando m = 2, o tetraedro é um triângulo. Quando m = 1, o tetraedro se reduz a um intervalo. [t0 , . . , tm ] M+0 T volume Feofiloff cap. 15 −4 20 −4 −4 −4 −4 20 −4 −4 −4 −4 20 Algoritmo de Yamnitsky-Levin 1 1 1 1 −4 20 −4 −4 −4 −4 20 −4 143 −4 −4 −4 20 Figura 15.1: O volume do tetraedro gerado pelas linhas da primeira matriz é o valor absoluto do determinante da segunda matriz, ou seja, 243 . Propriedades do volume. O volume de um tetraedro pode ser calculado a partir das “arestas” ti − t0 . Esse cálculo depende da matriz reduzida do tetraedro: trata-se da matriz T̄ sobre M × M definida pelas equações T̄ [i, ] = ti − t0 . Propriedade 15.1 (fórmula do volume) Se T̄ é a matriz reduzida do tetraedro gerado por t0 , . . , tm então vol [t0 , . . , tm ] = absdet(T̄ ). D EMONSTRAÇÃO : Basta mostrar que o determinante de T̄ é igual ao determinante da matriz T do tetraedro. A relação entre as duas matrizes é simples: T̄ = (GT ) [M, M ] , onde G é a matriz elementar sobre M+0 × M+0 com coluna saliente 0 definida pelas equações G [0, 0] = 1 e G [M, 0] = −u, onde u é o vetor de 1s (u [j] = 1 para todo j ). De acordo com propriedade 10.3, det((GT ) [M, M ] ) = det(GT ), uma vez que (GT ) [ , 0] = Gu = I [ , 0] . De acordo com o teorema 26, det(GT ) = det(G) det(T ) = G [0, 0] det(T ) = det(T ) . Logo, det(T̄ ) = det(T ), como queríamos demonstrar. ✷ Essa fórmula do volume ajuda a calcular o volume do tetraedro que servirá de ponto de partida do algoritmo de Yamnitsky-Levin. Considere o tetraedro gerado pelos vetores t0 = αu e ti = αu + βI [i, ] , onde u é um vetor de 1s (veja figura 15.1). Então vol [t0 , . . , tm ] = β m , (15.a) uma vez que a matriz reduzida do tetraedro é βI . A análise do algoritmo de Yamnitsky-Levin depende de mais duas propriedades do volume de um tetraedro. A primeira dá condições suficientes para que o volume de um tetraedro seja nulo; a segunda mostra que se [t′0 , . . , t′m ] ⊆ [t0 , . . , tm ] então vol [t′0 , . . , t′m ] ≤ vol [t0 , . . , tm ]. Propriedade 15.2 (do volume nulo) Se t0 · a = t1 · a = · · · = tm · a para algum vetor não-nulo a sobre M então vol [t0 , . . , tm ] = 0. T̄ Feofiloff cap. 15 Algoritmo de Yamnitsky-Levin D EMONSTRAÇÃO : Seja T̄ a matriz reduzida do tetraedro gerado por t0 , . . , tm . De acordo com a propriedade 15.1, basta mostrar que det(T̄ ) = 0. Submeta T̄ ao algoritmo de Gauss-Jordan (seção 2.3). O algoritmo produzirá matrizes F e G tais que F G = I e a matriz GT̄ é escalonada. Seja P a base de linhas da matriz GT̄ . Suponha, tentativamente, que P = M e portanto que GT̄ é uma matriz de bijeção. De acodo com nossas hipóteses, T̄ [i, ] a = ti a − t0 a = 0 para cada i. Como T̄ a é nulo, também GT̄ a é nulo. Como a matriz GT̄ é de bijeção, o vetor a é necessariamente nulo. o que é inconsistente com nossas hipóteses. Concluímos assim que M − P não é vazio. Seja i um elemento de M −P . Como o vetor (GT̄ ) [i, ] é nulo, o determinante de GT̄ é nulo. Como o determinante de GT̄ é o produto dos determinantes de G e T̄ (teorema 26), um desses dois últimos é nulo. Mas det(F ) det(G) = det(I) = 1, donde det(T̄ ) = 0. ✷ Propriedade 15.3 (monotonicidade) Se os vetores t′0 , . . , t′m estão todos em [t0 , . . , tm ] então vol [t′0 , . . , t′m ] ≤ vol [t0 , . . , tm ]. D EMONSTRAÇÃO : Sejam T e T ′ as matrizes dos tetraedros gerados, respectivamente, por t0 , . . , tm e t′0 , . . , t′m . Basta mostrar que absdet(T ′ ) ≤ absdet(T ). Por hipótese, cada vetor t′i é uma combinação convexa de t0 , . . , tm . Portanto, cada linha da matriz T ′ é uma combinação convexa das linhas de T . Em outras palavras, existe uma matriz Ǧ sobre M+0 × M+0 tal que P T ′ = ǦT , Ǧ [i, ] ≥ o e j Ǧ [i, j] = 1 para cada i em M+0. Portanto, o determinante de T ′ é o produto dos determinantes de Ǧ e T (teorema 26). Mas Q P absdet(Ǧ) ≤ i ( j Ǧ [i, j] ) = 1 de acordo com a delimitação 10.9. Logo, absdet(T ′ ) ≤ absdet(T ). ✷ 15.3 Teorema do tetraedro interior A seção anterior começou com a seguinte observação informal: um poliedro possui um ponto interior se e só se o seu “volume” não é nulo. Agora estamos em condições de fazer uma afirmação mais precisa: um poliedro possui um ponto interior se e só se inclui um tetraedro de volume não-nulo. O teorema abaixo prova esta afirmação é dá estimativas do volume do tetraedro e da norma de seus vértices. A norma de um vetor z é o maior componente, em valor absoluto, de z: |z| = maxj |z [j] | . O teorema adota, tacitamente, a convenção M = {1, . . , m} que já usamos na seção anterior. 144 Feofiloff cap. 15 Algoritmo de Yamnitsky-Levin Teorema 15.4 (do tetraedro interior) Seja A, c um sistema inteiro sobre M × N . Se Y (A, c) possui um ponto interior então existem um inteiro δ entre 2 1 e ω̈ e vetores inteiros z0 , . . , zm sobre M dotados das seguintes propriedades: vol [z0 /δ, . . , zm /δ] ≥ 1/ω̈ m e, para cada i, zi /δ ∈ Y (A, c) e |zi | ≤ 2ω̈ + 1, onde ω̈ é o número 4 ω(A)2 ω(c)2 . D EMONSTRAÇÃO : Para qualquer inteiro positivo δ, é evidente que Y (A, δc) é o conjunto de todos os vetores da forma δy com y em Y (A, c). Se δ for suficientemente grande, alguns dos vetores em Y (A, δc) terão componentes inteiros. São desse tipo os vetores z0 , . . , zm que estamos procurando. O vetor z0 , em particular, deverá estar suficientemente afastado de algumas das fronteiras do poliedro Y (A, δc). A prova da existência de um tal z0 será delegada, em parte, ao lema 15.5 abaixo. Seja a o vetor definido da seguinte maneira para cada j em N : se A [ , j] ≤ o então a [j] = 0 senão a [j] = maxi A [i, j] . É óbvio que a ≥ o e a ≥ A [i, ] para cada i em M . Ademais, a é inteiro uma vez que A é inteira. A definição de a garante que para cada j existe i tal que a [j] ≤ |A [i, j] |. Segue daí imediatamente que ω(a) ≤ ω(A) . Nossa primeira tarefa é a determinação de um vetor inteiro z0 e um número δ tais que a diferença entre δc e z0 A seja pelo menos a. Digamos que z é um ponto interior de Y (A, c) e defina o número ζ da seguinte maneira: se a é nulo então ζ = 1 senão ζ é o maior número racional que satisfaz a desigualdade zA + ζa ≤ c. Como z é um ponto interior, temos ζ > 0. Nestas condições, o lema 15.5 abaixo garante a existência de um inteiro δ, um inteiro ζ0 e um vetor inteiro z0 tais que ζ0 ≥ 1 , z0 A + ζ0 a ≤ δc , 1 ≤ δ ≤ 4ω̇ e |z0 | ≤ 8ω̇ , onde ω̇ = ω(A)ω(a)ω(c). Como a ≥ o e ω(a) ≤ ω(A), temos z0 A + a ≤ δc , 1 ≤ δ ≤ ω̈ e |z0 | ≤ 2ω̈ . (Note que z0 pertence a Y (A, δc) mas não é necessariamente um ponto interior.) 2 A expressão “δ está entre α e β ” deve ser entendida como α ≤ δ ≤ β . 145 Feofiloff cap. 15 Algoritmo de Yamnitsky-Levin 146 Agora que temos um dos vértices do tetraedro, podemos construir os demais: para i = 1, . . , m, zi = z0 + I [i, ] . É evidente que cada zi é inteiro e |zi | ≤ 2ω̈ + 1. Como a ≥ A [i, ] , temos zi A = z0 A + A [i, ] ≤ z0 A + a ≤ δc para cada i em M . Como a ≥ o, podemos dizer que z0 A ≤ z0 A + a ≤ δc. Portanto, cada um dos vetores zi está em Y (A, δc). Finalmente, é preciso calcular o volume do tetraedro gerado pelos vetores z0 /δ, . . , zm /δ. Seja Z̄ a matriz reduzida do tetraedro. De acordo com a propriedade 15.1, vol [z0 /δ, . . , zm /δ] = absdet(δ −1 Z̄) . Como Z̄ [i, ] = zi − z0 = I [i, ] para cada i, temos absdet(δ −1 Z̄) = absdet(δ −1 I) = δ −m ≥ ω̈ −m , uma vez que δ ≤ ω̈. ✷ O teorema que acabamos de demonstrar tem a seguinte conseqüência imediata: se Y (A, c) é parte de um tetraedro gerado por t0 , . . , tm e vol [t0 , . . , tm ] < 1/ω̈ m então Y (A, c) não tem ponto interior. Esta é, essencialmente, a “condição de parada” do algoritmo de Yamnitsky-Levin. Lema do ponto profundo. Para completar a demonstração do teorema, é preciso estabelecer o seguinte lema, que é uma mera aplicação da versão inteira do teorema da dualidade 13.2. Grosso modo, o lema mostra que todo poliedro dotado de um ponto interior possui um ponto “profundo”, ou seja, um ponto suficientemente afastado das fronteiras. Lema 15.5 Seja A uma matriz inteira sobre M × N e sejam a e c vetores inteiros sobre N . Se existe um número racional ζ e um vetor racional z tais que ζ > 0 e zA + ζa ≤ c então existem um inteiro δ, um inteiro ζ ∗ e um vetor inteiro z ∗ tais que ζ∗ ≥ 1 , z ∗ A + ζ ∗ a ≤ δc , 1 ≤ δ ≤ 4ω̇ e |z ∗ | ≤ 8ω̇ , onde ω̇ = ω(A)ω(a)ω(c). D EMONSTRAÇÃO : Considere o problema de encontrar um vetor z ∗ e um número ζ ∗ que maximizem ζ ∗ sujeito a z ∗ A + ζ ∗ a ≤ c e ζ ∗ ≥ 0 . (15.b) Feofiloff cap. 15 Algoritmo de Yamnitsky-Levin Convém mostrar explicitamente que este problema é canônico dual. Seja A′ a matriz definida por A′ [M, N ] = A , A′ [M, 0] = o e A′ [0, 0] = −1 . A′ [0, N ] = a , É claro que A′ é definida sobre M+0 × N+0; a notação está sendo ajustada de modo que 0 não esteja em N . Sejam b′ e c′ os vetores definidos por b′ [M ] = o , b′ [0] = 1 , c′ [N ] = c e c′ [0] = 0 . Nosso problema (15.b) é essencialmente igual ao problema canônico dual CD(A′ , c′ , b′ ), que consiste em maximizar y ′ b′ sujeito a y ′ A′ ≤ c′ . Para qualquer solução y ′ do segundo problema, o par y ′ [M ] , y ′ [0] é uma solução do primeiro. Observe que ω(A′ )ω(c′ )ω(b′ ) = 4ω̇, uma vez que ω(A′ ) = 2ω(a)ω(A), = 2 e ω(c′ ) = ω(c). De acordo com a versão inteira 13.2 do teorema da dualidade, existe um inteiro δ entre 1 e 4ω̇ para o qual vale uma das seguintes alternativas: existem vetores inteiros y ′ e x′ tais que ω(b′ ) y ′ A′ ≤ δc′ , A′ x′ = δb′ , |y ′ | ≤ 4ω̇ , x′ ≥ o , y ′ b′ = c′ x′ , |x′ | ≤ 4ω̇ , ou existem vetores inteiros y ′ e y ′′ tais que y ′ A′ ≤ δc′ , y ′′ A′′ ≤ o , |y ′ | ≤ 4ω̇ , y ′′ b′ ≥ 1 , |y ′′ | ≤ 4ω̇ . Suponha inicialmente que vale a primeira das alternativas. Defina z ∗ = y ′ [M ] e ζ ∗ = y ′ [0] . Observe que z ∗ A + ζ ∗ a ≤ δc pois y ′ A′ ≤ δc′ . Observe também que ζ∗ ≥ 1 pelos motivos que passamos a expor. Seja z ′ o vetor definido por z ′ [M ] = z e z ′ [0] = ζ . Como z ′ satisfaz as restrições do problema CD(A′ , b′ , c′ ), o lema da dualidade 8.1 garante que z ′ b′ ≤ c′ x′ . Logo, ζ ∗ = y ′ [0] = y ′ b′ = c′ x′ ≥ z ′ b′ = z ′ [0] = ζ . Como ζ é positivo e y ′ é inteiro, temos ζ ∗ ≥ 1. ζ∗ Suponha agora que vale a segunda alternativa e adote z ∗ = y ′ [M ] + y ′′ [M ] e = y ′ [0] + y ′′ [0] . É claro que ζ ∗ ≥ y ′′ [0] = y ′′ b′ ≥ 1 e |z ∗ | ≤ |y ′ | + |y ′′ | ≤ 8ω̇ . Ademais, z ∗ A + ζ ∗ a ≤ δc pois y ′ A′ + y ′′ A′ ≤ δc′ . ✷ 147 Feofiloff 15.4 cap. 15 Algoritmo de Yamnitsky-Levin 148 Algoritmo O objetivo do algoritmo é encontrar um ponto interior do poliedro Y (A, c). O algoritmo envolve o poliedro num tetraedro suficientemente grande,3 que é então progressivamente “encolhido”. A cada iteração, o algoritmo verifica se o centro do tetraedro é um ponto interior do poliedro; em caso negativo, o tetraedro é deformado de modo que continue envolvendo o poliedro mas sofra uma redução de volume. Quando o volume do tetraedro se torna suficientemente pequeno, o algoritmo conclui que o poliedro não tem pontos interiores. O algoritmo não se aplica a matrizes com menos que duas linhas; mas nesse caso o problema pode ser resolvido por meios elementares (veja apêndice deste capítulo). Algoritmo de Yamnitsky-Levin Recebe uma matriz inteira A sobre M × N com |M | ≥ 2 e um vetor inteiro c sobre N ; devolve um vetor racional t tal que t · A < c ou pára sem nada devolver se um tal vetor não existe. Ajuste a notação de modo que M = {1, . . , m}. Adote a abreviatura ω para o tamanho do sistema A, c e a abreviatura ω̈ para a expressão 4ω 2 . Em suma, ω = ω(A) ω(c) e m≥2 ω̈ = 4ω 2 . Seja t⋆0 o vetor −4ω̈u, onde u é o vetor de 1s (ou seja, u [j] = 1 para todo j em M ). Para i = 1, . . , m, seja t⋆i o vetor t⋆0 t⋆i −4ω̈u + 8ω̈mI [i, ] . Cada iteração do algoritmo começa com vetores racionais t0 , . . , tm sobre M e um número racional θ. A primeira iteração começa com ti = t⋆i para cada i e com θ = (8ω̈m)m . Cada iteração consiste no seguinte: C ASO 1: θ ≥ 1/ω̈ m . 1 (t0 + · · · + tm ). Seja t o vetor m+1 t0 , . . , t m θ t C ASO 1.1: t · A [ , k] < c [k] para cada k em N . Devolva t e pare. C ASO 1.2: t · A [ , k] ≥ c [k] para algum k em N . k C ASO 1.2A: A [ , k] = o . Pare sem nada devolver. C ASO 1.2B: A [ , k] 6= o . Para cada i = 0, 1, . . , m, seja πi o número (t − ti ) · A [ , k] . Escolha h de modo que πh seja máximo. 3 Para efeito desta descrição informal, suponha que o poliedro é limitado (veja exercício 15.4, página 159). h Feofiloff cap. 15 Algoritmo de Yamnitsky-Levin Para i = 0, 1, . . , m, seja ρi o número 1 − 1 m2 π 149 πi . h Sejam t′0 , . . , t′m os vetores definidos pelas equações t′h = th 1 1 e t′i = ti + (1 − ) th para cada i distinto de h. ρi ρi ρ Seja θ′ o número Q h θ . i ρi Comece nova iteração com t′0 , . . , t′m e θ′ nos papéis de t0 , . . , tm e θ. C ASO 2: θ < 1/ω̈ m . Pare sem nada devolver. ✷ Eis algumas observações informais de caráter geométrico que podem ajudar a tornar o algoritmo menos misterioso: O tetraedro gerado por t⋆0 , . . , t⋆m é tão grande que contém todos os eventuais vértices de Y (A, c). Se Y (A, c) for limitado (veja exercício 15.4, página 159) então Y (A, c) é parte de [t⋆0 , . . , t⋆m ]. O número θ é o volume do tetraedro gerado por t0 , . . , tm . No caso 1.2B, o vetor t é o centro do tetraedro gerado por t0 , . . , tm e o número πi é a projeção do vetor t − ti na direção A [ , k] . A transformação de t0 , . . , tm em t′0 , . . , t′m deixa fixo o vértice th do tetraedro e multiplica por 1/ρi a aresta que liga os vértices ti e th . Cada Qρi é positivo e pode ser maior que 1 ou menor que 1. Mas o fator ρh / i ρi é estritamente menor que 1. Portanto, o volume θ′ do novo tetraedro é estritamente menor que θ. Operação de pivotação. Diremos que a operação que transforma t0 , . . , tm em t′0 , . . , t′m no caso 1.2B é uma pivotação em torno de h. A operação de pivotação pode ser representada de forma matricial, como mostraremos a seguir. Sejam T e T ′ as matrizes dos tetraedros gerados por t0 , . . , tm e t′0 , . . , t′m respectivamente. Seja Ǧ a matriz sobre M+0 × M+0 definida pelas equações Ǧ [ , i] = 1 I [ , i] , ρi Ǧ [i, h] = 1 − 1 , ρi Ǧ [h, h] = 1 , onde as duas primeiras equações valem para cada i distinto de h. (Veja a figura 15.2). A matriz está bem definida pois ρi 6= 0 para todo i, como veremos adiante. Diremos que Ǧ é a matriz de pivotação. É fácil verificar que T ′ = ǦT (15.c) (emQ particular, T ′ [ , 0] = u = ǦT [ , 0] ). Também é fácil constatar que det(Ǧ) = ρh / i ρi , donde (15.d) θ′ = det(Ǧ) θ . pivotação T Ǧ T′ Feofiloff cap. 15 Algoritmo de Yamnitsky-Levin 150 A matriz Ǧ é inversível. De fato, se F̌ é a matriz definida por F̌ [ , i] = ρi I [ , i] , F̌ [i, h] = 1 − ρi , F̌ F̌ [h, h] = 1 , (15.e) onde as duas primeiras equações valem para cada i distinto de h, então F̌ Ǧ = ǦF̌ = I . ρ0 0 0 ρ1 0 0 0 0 0 0 0 0 0 0 ρ2 0 0 0 0 0 0 ρ3 0 0 0 0 0 0 ρ4 0 1 − ρ0 1 − ρ1 1 − ρ2 1 − ρ3 1 − ρ4 1 1/ρ0 0 0 0 0 0 1/ρ1 0 0 0 0 0 1/ρ2 0 0 0 0 0 1/ρ3 0 0 0 0 0 1/ρ4 0 0 0 0 0 1 − 1/ρ0 1 − 1/ρ1 1 − 1/ρ2 1 − 1/ρ3 1 − 1/ρ4 1 Figura 15.2: Exemplo com m = h = 5. O lado esquerdo da figura descreve F̌ ; o lado direito descreve Ǧ. 15.5 Invariantes Para compreender o algoritmo basta observar as seguintes propriedades invariantes No início de cada iteração, (i1) se yA ≤ c e y ∈ [t⋆0 , . . , t⋆m ] então y ∈ [t0 , . . , tm ] , (i2) vol [t0 , . . , tm ] = θ , (i3) θ > 0 . O primeiro invariante afirma4 que Y (A, c) ∩ [t⋆0 , . . , t⋆m ] é parte de [t0 , . . , tm ]. Os invariantes (i1) e (i3) são obviamente verdadeiros no início da primeira iteração. O invariante (i2) também vale no início da primeira iteração, pois vol [t⋆0 , . . , t⋆m ] = (8ω̈m)m = θ de acordo com (15.a). A validade dos invariantes no início das demais iterações será discutida nas próximas seções. A prova dos invariantes e a estimativa do número de iterações dependem muito mais da geometria de [t0 , . . , tm ] que do sistema A, c. Por outro lado, a análise da última iteração não depende de t0 , . . , tm mas apenas de A, c. 15.6 O algoritmo está bem definido Para garantir que o algoritmo está bem definido é preciso verificar que πh 6= 0 e ρi 6= 0 para todo i em cada iteração. Vamos mostrar que estas condições estão satisfeitas desde que (i2) e (i3) sejam válidas no início da iteração. 4 Se Y (A, c) for limitado então (i1) afirma que Y (A, c) é parte de [t0 , . . , tm ], pois nesse caso Y (A, c) é parte de [t⋆0 , . . , t⋆m ]. Feofiloff cap. 15 Algoritmo de Yamnitsky-Levin 151 Comecemos P Pcom a seguinte observação. Em cada ocorrência do caso 1.2B temos πi = (t − ti )A [ , P k] . Essa última expressão é igual a (m+1)tA [ , k] − P ti A [ , k] . Como (m+1)t = ti , temos necessariamente P πi = 0 . (15.f) Lema 15.6 Se (i2) e (i3) valem no início de uma iteração em que ocorre o caso 1.2B então πh > 0. P D EMONSTRAÇÃO : Como πi = 0, a maximalidade de πh garante que πh não é negativo. Suponha por um instante que πh é nulo. Então πi = 0 para todo i, donde tA [ , k] = ti A [ , k] para todo i, e portanto t0 A [ , k] = t1 A [ , k] = · · · = tm A [ , k] . Como A [ , k] não é nulo por definição do caso 1.2B, a propriedade 15.2 do volume nulo garante que vol [t0 , . . , tm ] = 0 . Mas isso é inconsistente com os invariantes (i2) e (i3). Portanto, a hipótese πh = 0 é insustentável e devemos ter πh > 0. ✷ Suponha que (i2) e (i3) valem no início de uma iteração em que ocorre o caso 1.2B. O lema que acabamos de mostrar, mais a maximalidade de πh e a hipótese m ≥ 2, permitem concluir que ρi está bem definido e também que ρi > 0 (15.g) P para todo i. Finalmente, convém calcular ρi . Como P P 2 πi /(m πh ) e πi = 0, temos P ρi = m + 1 . 15.7 P ρi = (m + 1) + (15.h) Última iteração Suponha que os invariantes (i1) a (i3) valem no início da última iteração do algoritmo, quando ocorrem os casos 1.1, 1.2A ou 2. Então o algoritmo dá a resposta correta, como passamos a mostrar. Análise do caso 1.1. Suponha que tA < c. Então t é ponto interior de Y (A, c). Assim, ao devolver t, o algoritmo está se comportando como previsto. Análise do caso 1.2A. Suponha que A [ , k] é nulo e tA [ , k] ≥ c [k] para algum k. Então yA [ , k] = 0 ≥ c [k] para todo vetor y. Logo, o poliedro Y (A, c) não tem ponto interior. Assim, ao parar sem nada devolver, o algoritmo está se comportando da maneira prevista. m≥2 Feofiloff cap. 15 Algoritmo de Yamnitsky-Levin Análise do caso 2. Suponha, finalmente, que θ < 1/ω̈ m . Então, de acordo com o invariante (i2), vol [t0 , . . , tm ] < 1/ω̈ m . Suponha que, ao contrário do que afirma o algoritmo, Y (A, c) tem um ponto interior. Então, de acordo com o teorema 15.4 do tetraedro interior, existem um inteiro δ entre 1 e ω̈ e vetores inteiros z0 , . . , zm tais que vol [z0 /δ, . . , zm /δ] ≥ 1/ω̈ m e, para cada i, zi /δ ∈ Y (A, c) e |zi | ≤ 2ω̈ + 1 . A última desigualdade garante que cada vetor zi /δ está no tetraedro gerado por t⋆0 , . . , t⋆m . De fato, zi [j] /δ ≥ (−2ω̈ − 1)/δ ≥ −2ω̈ − 1 ≥ −4ω̈ para todo j em M e P j zi [j] /δ ≤ m(2ω̈ + 1)/δ ≤ m(2ω̈ + 1) ≤ 4mω̈ . Como Y (A, c) ∩ [t⋆0 , . . , t⋆m ] ⊆ [t0 , . . , tm ] em virtude do invariante (i1), concluímos que zi /δ está em [t0 , . . , tm ] para cada i. Nestas circunstâncias, a propriedade 15.3 da monotonicidade garante que vol [z0 /δ, . . , zm /δ] ≤ vol [t0 , . . , tm ] . Segue-se que vol [t0 , . . , tm ] ≥ 1/ω̈ m , o que é inconsistente com a definição do caso 2. Portanto, a existência de um ponto interior em Y (A, c) é insustentável. Assim, ao parar sem nada devolver o algoritmo está se comportando como prometeu. 15.8 Demonstração dos invariantes Suponha que os invariantes (i1), (i2) e (i3) valem no início de uma iteração qualquer que não a última. Para mostrar que estas propriedades continuam valendo no início da próxima iteração, basta verificar os seguintes fatos. Fato 15.7 No fim do caso 1.2B, vol [t′0 , . . , t′m ] = θ′ e θ′ > 0 . D EMONSTRAÇÃO : Considere a matriz de pivotação Ǧ e observe que Q det(Ǧ) = ρh / ρi . Em virtude de (15.g), det(Ǧ) é positivo. Como θ′ = det(Ǧ) θ, o invariante (i2) garante que θ′ é positivo. Isto conclui a demonstração da segunda parte. Para demonstrar a primeira parte basta verificar que vol [t′0 , . . , t′m ] = det(Ǧ) vol [t0 , . . , tm ] . 152 Feofiloff cap. 15 Algoritmo de Yamnitsky-Levin Sejam T e T ′ as matrizes dos tetraedros gerados por t0 , . . , tm e t′0 , . . , t′m respectivamente. Como já observamos em (15.c), T ′ = ǦT . Pelo teorema 26, o determinante de T ′ é o produto dos determinantes de Ǧ e T . Portanto, vol [t′0 , . . , t′m ] = absdet(T ′ ) = det(Ǧ) absdet(T ) = det(Ǧ) vol [t0 , . . , tm ] , como queríamos demonstrar. ✷ Fato 15.8 No fim do caso 1.2B, se yA [ , k] ≤ c [k] e y está em [t0 , . . , tm ] então y está em [t′0 , . . , t′m ] . D EMONSTRAÇÃO : Seja y um ponto do tetraedro gerado por t0 , . . , tm . Se T denota a matriz do tetraedo, podemos dizer que existe um vetor l sobre M+0 tal que lT [ , M ] = y , lT [ , 0] = 1 e l ≥ o . Seja F̌ a inversa de Ǧ definida em (15.e) e seja l′ o vetor lF̌ . Mostraremos a seguir que se yA [ , k] ≤ c [k] então l′ T ′ [ , M ] = y , lT ′ [ , 0] = 1 e l′ ≥ o , onde T ′ é a matriz do tetraedro gerado por t′0 , . . , t′m ; isso provará que y está em [t′0 , . . , t′m ]. As duas primeiras relações seguem imediatamente de (15.c): l′ T ′ = (lF̌ )(ǦT ) = l(F̌ Ǧ)T = lT . Na demonstração da desigualdade l′ ≥ 0, vamos adotar as abreviaturas λi = l [i] e λ′i = l′ [i] . Para cada i distinto de h temos λ′i = lF̌ [ , i] = ρi λi ≥ 0 , uma vez que ρi não é negativo de acordo com (15.g). Resta apenas mostrar que λ′h não é negativo. Como P λ′h = lF̌ [ , h] = ρh λh + (1 − ρi )λi P e ρh não é negativo em virtude de (15.g),Pbasta mostrar que (1 − ρi )λi não é negativo. Isso equivale a mostrar que πi λi não é negativo, uma vez que πi = m2 πh (1 − ρi ) e πh é positivo em virtude do lema 15.6. Mas P P λ i πi = λ (t − ti ) A[ , k] Pi P = ( λi t − λi ti ) A[ , k] = (t − y) A[ , k] = tA[ , k] − yA[ , k] ≥ c[k] − c[k] = 0, uma vez que tA [ , k] ≥ c [k] por definição do caso 1.2 e yA [ , k] ≤ c [k] por hipótese. Com isto, concluímos a demonstração de que λ′h não é negativo. ✷ 153 Feofiloff 15.9 cap. 15 Algoritmo de Yamnitsky-Levin 154 Número de iterações O número de iterações depende fundamentalmente do número de ocorrências do caso 1.2B. Em cada ocorrência desse caso, θ é multiplicado por ρ Qh . ρi Diremos que esse número é o fator de contração da iteração e mostraremos que ele é significativamente menor que 1. É mais cômodo manipular o inverso do fator de contração. Mostraremos que o logaritmo desse inverso é maior que o número positivo 1 / 2(m + 1)2 . Delimitação 15.9 (do fator de contração) Em cada ocorrência do caso 1.2B, Q ρi 1 1 ≥ (1 − 2 )m (1 − )−1 . ρh m m D EMONSTRAÇÃO : Para comparar guinte lema: Q ρi com P ρi , convém demonstrar o se- se σi ≥ ε ≥ 0 para i = 0, . . , k então σ0 · · · σk ≥ (σ0 + · · · + σk − kε) εk . A proposição é trivialmente verdadeira quando k é nulo. Suponha agora que k é positivo e adote como hipótese de indução a desigualdade σ0 · · · σk−1 ≥ σ εk−1 , onde σ denota a expressão σ0 + · · · + σk−1 − (k−1)ε. Então σ0 · · · σk−1 σk ≥ (σσk ) εk−1 . Como σi ≥ ε para todo i, temos σ ≥ kε − (k − 1)ε = ε e portanto σσk = (σ + σk − ε)ε + (σ − ε)(σk − ε) ≥ (σ + σk − ε) ε . Segue daí que (σσk ) εk−1 ≥ (σ + σk − ε) εk = (σ0 + · · · + σk−1 − (k − 1)ε + σk − ε) εk = (σ0 + · · · + σk − kε) εk . Isto encerra a demonstração do lema. Podemos agora aplica-lo à nossa situação 2 concreta. Em P virtude da maximalidade de πh , temos ρi ≥ 1 − 1/m para todo i. Ademais, ρi = m + 1 de acordo com (15.h). Diante disso, o lema (15.i) — com m, ρi e 1 − 1/m2 no lugar de k, σi e ε — garante que Q ρi ≥ (1 + 1/m) (1 − 1/m2 )m . Como ρh = 1 − 1/m2 = (1 − 1/m) (1 + 1/m), temos a delimitação desejada. ✷ contração Feofiloff cap. 15 m 2 3 4 5 6 ϕ Algoritmo de Yamnitsky-Levin lg ϕ ψ 9/8 0.16992 · · · 256/243 0.07518 · · · 16875/16384 0.04259 · · · 1990656/1953125 0.02745 · · · 367653125/362797056 0.01918 · · · ϕ = (1 − 1 m 1 ) (1 − )−1 m2 m 155 ψ= 0.055555 · · · 0.031250 · · · 0.020000 · · · 0.013888 · · · 0.010204 · · · 1 2(m + 1)2 Figura 15.3: Ilustração das delimitações 15.9 e 15.10. É importante estabelecer uma delimitação simples para o logaritmo do fator de contração. O logaritmo na base 2 será denotado por lg. lg Delimitação 15.10 (do logaritmo do fator de contração) Em cada ocorrência do caso 1.2B, Q ρi 1 lg > . ρh 2(m + 1)2 D EMONSTRAÇÃO : Se ln denota o logaritmo na base e então, para todo λ entre 0 e 1, ln(1 − λ) = −λ − λ2 /2 − λ3 /3 − λ4 /4 − · · · . ln Observe agora que 1/m2 e 1/m estão entre 0 e 1, uma vez que m ≥ 2. Portanto, o logaritmo da delimitação 15.9 produz as desigualdades m≥2 1  1 − ln 1 − ≥ 2 m m 1 1 1 1 1 1 1 − − − ··· + + + + ··· − − 3 5 7 2 m 2m 3m 4m m 2m 3m3 1 1 1  1 1  1 1− 2 + 1 − 3 + ··· 1− + 2 3 4 2m m 3m m 4m m 1 1 1− 2m2 m m−1 2m3 m−1 2(m + 1)(m + 1)(m − 1) 1 . 2(m + 1)2 m ln 1 − ≥ = > = > = Como lg κ > ln κ quando ln κ é positivo, temos a delimitação desejada. ✷ Feofiloff cap. 15 Algoritmo de Yamnitsky-Levin 156 Delimitação 15.11 (do número de iterações) O algoritmo executa não mais que 2m(m + 1)2 (4 lg ω + lg m + 7) iterações, onde ω = ω(A)ω(c). D EMONSTRAÇÃO : No início da primeira iteração temos Q θ = (8ω̈m)m . No fim de cada ocorrência do caso 1.2B, θ é substituído por (ρh / ρi ) θ. No fim da j -ésima iteração teremos θ < (8ω̈m)m L−j , onde L é uma delimitaçao do fator de contração. Em virtude da delimitação 15.10, 1 lg θ < m lg(8ω̈m) − j 2(m + 1)2 no início da j+1-ésima iteração. Quando j ≥ 2(m + 1)2 m(lg ω̈ + lg(8mω̈)) , teremos lg θ < −m lg ω̈ e portanto θ < ω̈ −m , desigualdade esta que caracteriza o caso 2 do algoritmo. Mas lg ω̈ + lg(8ω̈m) = 2 lg ω̈ + lg m + 3 = 2 lg(4ω 2 ) + lg m + 3 = 4 lg ω + lg m + 7 . 2m(m+1)2 (4 lg ω+lg m+7) Portanto, de iterações. ✷ é uma delimitação superior para o número A menos que o sistema A, c seja extremamente esparso (menos que 7 + lg m componentes não-nulos), teremos lg ω ≥ lg m + 7, e portanto o número de iterações é limitado por 10 (m+1)3 lg ω . (15.i) 15.10 Número de operações aritméticas Seja n uma abreviatura para |N |. Não é difícil verificar que o algoritmo executa não mais 2mn + m2 + m + 2 operações aritméticas para decidir que caso se aplica e não mais que 6m2 + 6m + 4 operações aritméticas ao longo da execução do caso 1.2B. Assim, o número de operações aritméticas em cada iteração é limitado por 7m2 + 2mn + 7m + 6. Quando m ≥ 2 e n ≥ 1, esse número não passa de 7m(m + n + 1) . A propósito, as operações aritméticas envolvem números racionais; mas é possível reorganizar o algoritmo de modo que ele opere apenas com inteiros. Em virtude de (15.i), o número total de operações aritméticas durante a execução do algoritmo é limitado por 70 (m+1)4 (m + n + 1) lg ω (a menos que o sistema seja extremamente esparso). n Feofiloff 15.11 cap. 15 Algoritmo de Yamnitsky-Levin Conclusão O algoritmo de Yamnitsky-Levin recebe um sistema inteiro A, c e devolve um ponto interior do poliedro Y (A, c) se tal ponto existir. O número de operações aritméticas que o algoritmo executa no pior caso está na ordem de m4 (m + n) lg ω , onde ω é o produto de todos os números da forma 1+α sendo α o valor absoluto de um componente do sistema A , c. Infelizmente, nossa análise não leva em conta o custo de cada operação aritmética; esse custo é considerável, pois os números envolvidos podem ter numeradores e denominadores enormes. É possível reescrever o algoritmo, com a introdução de arredondamentos apropriados [GLS88, p.80] [GLS93] [Sch86, p.166], de modo que o consumo total de tempo — que leva em conta o custo de cada operação aritmética — ainda seja limitado por um polinômio em m, n e lg ω. 15.12 Apêndice: Uma só linha Considere o problema do ponto interior no caso em que a matriz A tem uma só linha (m = 1). O algoritmo de Yamnitsky-Levin não se aplica diretamente, pois depende da desigualdade m ≥ 2. Mas não é difícil escrever uma variante do algoritmo para esse caso. Nessa variante, os tetraedros são intervalos e o algoritmo nada mais é que uma busca binária. Nosso algoritmo recebe vetores inteiros a e c sobre N e devolve um número racional t tal que ta < c ou pára sem nada devolver se tal número não existe. Cada iteração começa com números racionais t0 , t1 e θ. A primeira iteração começa com t0 = t⋆0 , t1 = t⋆1 e θ = 8ω̈, onde t⋆0 = −4ω̈, t⋆1 = +4ω̈ e ω̈ = 4ω(a)2 ω(c)2 . Cada iteração consiste no seguinte: C ASO 1: θ ≥ ω̈ −1 . Seja t o número 21 t0 + 21 t1 . C ASO 1.1: ta [k] < c [k] para cada k em N . Devolva t e pare. C ASO 1.2: ta [k] ≥ c [k] para algum k em N . C ASO 1.2A: a [k] = 0 . Pare sem nada devolver. C ASO 1.2B: a [k] 6= 0 . Sejam π0 e π1 os números (t − t0 ) a [k] e (t − t1 ) a [k] respectivamente. Defina t′0 e t′1 da seguinte maneira: se π0 ≥ 0 então t′0 = t0 e t′1 = t senão t′1 = t1 e t′0 = t. Seja θ′ o número θ/2. Comece nova iteração com t′0 , t′1 e θ′ nos papéis de t0 , t1 e θ. 157 Feofiloff cap. 15 Algoritmo de Yamnitsky-Levin 158 C ASO 2: θ < ω̈ −1 . Pare sem nada devolver. ✷ O funcionamento do algoritmo pode ser descrito pelos seguintes invariantes: No início de cada iteração, (i1) se ya ≤ c e t⋆0 ≤ y ≤ t⋆1 então t0 ≤ y ≤ t1 , (i2) t1 = t0 + θ , (i3) θ > 0 . Para mostrar a validade do invariante (i1) basta verificar que no fim do caso 1.2B temos se ya [k] ≤ c [k] e t0 ≤ y ≤ t1 então t′0 ≤ y ≤ t′1 . (15.j) A demonstração desse fato é um caso particular do que discutimos na seção 15.8. Suponha que y é um número tal que t0 ≤ y ≤ t1 e ya [k] ≤ c [k] . É claro que existe um número λ entre 0 e 1 tal que λt0 + (1 − λ)t1 = y . É preciso mostrar que existe λ′ entre 0 e 1 tal que y = λ′ t′0 + (1 − λ′ )t′1 . Como estamos no caso 1.2, temos ta [k] ≥ c [k] . Como ya [k] ≤ c [k] , vale um das alternativas: t0 a [k] ≤ c [k] ≤ t1 a [k] ou t0 a [k] ≥ c [k] ≥ t1 a [k] . Digamos que vale a primeira alternativa (a demonstração é análoga no outro caso). Como ya [k] ≤ c [k] , concluímos que y está mais próximo de t0 que de t1 e portanto λ ≥ 1/2. Seja λ′ o número 2λ − 1 e observe que 0 ≤ λ′ ≤ 1 . Como ta [k] ≥ c [k] ≥ t0 a [k] , temos π0 ≥ 0 e portanto t′0 = t0 e t′1 = t. É fácil verificar agora que λ′ t′0 + (1 − λ′ )t′1 = λt0 + (1 − λt1 ) = y . Isso conclui a demonstração de (15.j). No caso 2, o poliedro Y (a, c) é vazio, ou seja, não existe número y tal que ya ≤ c. A demonstração desse fato segue do teorema 15.4 do tetraedro interior, que poderia ser enunciado assim nesse caso especial: Se existe um número y tal que ya < c então existem um inteiro δ entre 1 e ω̈ e números inteiros z0 e z1 entre −2ω̈ e 2ω̈ + 1 tais que z 0 + 1 ≤ z1 , z0 a ≤ δc onde ω̈ é o número 4ω(a)2 ω(c)2 . e z1 a ≤ δc , λ′ Feofiloff cap. 15 Algoritmo de Yamnitsky-Levin Exercícios 15.1 Verifique a proposição 15.1 (fórmula do volume) e a proposição 15.2 (do volume nulo) no caso m = 1 e no caso m = 2. 15.2 Dê uma prova elementar do teorema 15.4 (tetraedro interior) no caso |M | = |N | = 1. Enuncie o teorema 15.4 e o lema 15.5 no caso |M | = 1 (e N arbitrário); demonstre essas versões especializadas. 15.3 Suponha que Y (A, c) tem um ponto interior. Mostre que Y (A, c) contém um cubo suficientemente grande. Mais especificamente, mostre que existe um inteiro δ entre 1 e 2ω̈ e um vetor inteiro z ∗ tais que |z ∗ | ≤ 4ω̈ e (z ∗ + v)A ≤ δc para todo vetor v sobre M com componentes em {−1, +1}, onde ω̈ = 4ω(A)2 ω(c)2 . 15.4 O poliedro Y (A, c) é limitado (seja seções C.5 e D.5) se existe um número ψ tal que |y| ≤ ψ para todo y em Y (A, c). Suponha que Y (A, c) é limitado. Mostre que Y (A, c) ⊆ [t⋆0 , . . , t⋆m ] no início da primeira iteração do algoritmo de Yamnitsky-Levin. 15.5 Suponha que Y (A, c) não é vazio. Mostre que, no início da primeira iteração do algoritmo de Yamnitsky-Levin, Y (A, c) ∩ [t⋆0 , . . , t⋆m ] não é vazio. 15.6 Escreva e analise uma versão especializada do algoritmo de YamnitskyLevin para o caso m = 2. 15.7 Escreva o algoritmo de Yamnitsky-Levin em uma linguagem mais formal, mais próxima de PASCAL ou C. Escreva o algoritmo de modo que ele manipule somente números inteiros. 159 Parte V Apêndices 160 Apêndice A Simplex Dual O algoritmo Simplex (secao 6.3) foi criado para resolver o problema canônico primal (seção 7.1). O algoritmo Simplex Dual, que esboçaremos neste apêndice, resolve o problema canônico dual. Para evitar confusão, passaremos a nos referir ao primeiro algoritmo como Simplex Primal. O Simplex Primal procura, primeiro, estabelecer a desigualdade E [ , n] ≥ o e, depois, a desigualdade E [m, ] ≥ o. Para fazer isso, examina uma nova linha da matriz em cada iteração. O Simplex Dual, ao contrário, examina uma nova coluna da matriz em cada iteração e procura, primeiro, estabelecer a desigualdade E [m, ] ≥ o e só depois a desigualdade E [ , n] ≥ o. Ambos os algoritmos fazem pivotação “de linhas”, isto é, em cada iteração somam a cada linha de E uma combinação linear apropriada das outras linhas. A.1 Simplex Primal Matrizes simples no sentido dual O conceito de matriz dual-simples é semelhante ao conceito de matriz simples; para evitar confusão, usaremos a expressão primal-simples (veja seção 3.1) em referências ao último. Suponha que M e N são conjuntos de índices e que m e n são elementos de M e N respectivamente. Diremos que uma matriz E sobre M × N é dual-simples (ou simples no sentido dual) em relação ao par m, n de índices se for de um dos três tipos definidos a seguir. Uma matriz E é dual-simples solúvel com relação ao par m, n se for primalsimples solúvel com relação ao par n, m, ou seja, se existem partes P de M − m e Q de N − n tais que primalsimples dual-simples E [P, Q] é de bijeção , E [P, n] ≥ o , E [M −m−P, N ] = O , E [m, N −n−Q] ≥ o , E [m, Q] = o . O conjunto P é a base de linhas e o conjunto Q é uma base de colunas da matriz. Uma matriz E é dual-simples inviável com relação ao par m, n se existe 161 bases Feofiloff ap. A Simplex Dual k Q 0 0 1 0 0 0 0 ≤ ≤ ≤ 0 0 0 m < 0 1 0 0 0 0 0 162 n 1 0 0 0 0 0 0 Figura A.1: Matriz dual-simples inviável. n ≥ ≥ ≥ ≥ ≥ ≥ ≥ ≥ ≥ ≥ ≥ ≥ ≥ < h m ≥ ≥ ≥ ≥ ≥ ≥ ≥ ≥ ≥ ≥ ≥ ≥ ≥ Figura A.2: Matriz dual-simples ilimitada. uma parte P de M − m, uma parte Q de N − n e um elemento k em N − n − Q tais que E [P, k] ≤ o , E [P, Q] é de bijeção , E [M −m−P, k] = o , E [M −m−P, Q] = O , E [m, k] < 0 , E [m, Q] = o . Note que esta definição é semelhante — mas não idêntica — à de uma matriz primal-simples ilimitada. Os conjuntos P e Q são as bases da matriz e k é o índice de uma coluna de inviabilidade. Uma matriz E é dual-simples ilimitada com relação a m, n se E [m, N ] ≥ o e existe h em M − m tal que E [h, N −n] ≤ o e E [h, n] > 0 ou E [h, N −n] ≥ o e E [h, n] < 0 . Esta definição é semelhante — mas não idêntica — à de uma matriz primalsimples inviável. O elemento h de M − m é o índice de uma linha de ilimitação. A.2 coluna de inviabilidade Esboço do Simplex Dual Para fazer um primeiro esboço do Simplex Dual, suponha que E é uma matriz sobre M × N tal que (i0) f [Q] = o , f [N −n−Q] ≥ o , linha de ilimitação Feofiloff ap. A Simplex Dual 163 (i1) E [P, Q] é uma matriz de bijeção e E [M −m−P, N −n] = O , onde P é uma parte de M −m, Q é uma parte de N −n, e f é a linha m da matriz, ou seja, f = E [m, ] . Nosso objetivo é transformar E , por meio de sucessivas operações de pivotação, numa matriz que seja dual-simples com relação a m, n. Q P m 0 0 1 0 0 0 0 0 1 0 0 0 0 0 f n 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ≥ ≥ ≥ ≥ ≥ ≥ ≥ ≥ ≥ ≥ Figura A.3: Matriz E no início de uma iteração do Simplex Dual. Se E [M −m−P, n] 6= o então E é dual-simples ilimitada. Se E [M −m−P, n] é nulo e E [P, n] ≥ o então E é dual-simples solúvel. Suponha agora que E [M −m−P, n] é nulo mas E [p, n] é negativo para algum p em P . Para tornar a matriz “mais simples”, o Simplex Dual considera a possibilidade de executar uma pivotação em torno de p, k, com k escolhido em N − n − Q de modo que a validade dos invariantes (i0) e (i1) seja preservada. Uma pivotação em torno de p, k consiste em substituir a matriz E pela matriz E ′ definida pelas equações E ′ [p, ] = 1 E [p, k] E [p, ] e E ′ [i, ] = E [i, ] − E [i, k] E [p, ] E [p, k] para cada i em M − p. Ao mesmo tempo, Q é substituído pelo conjunto Q′ = Q − q + k, onde q é o único elemento de Q tal que E [p, q] = 1. Para garantir que E ′ [p, n] não seja negativo, é preciso escolher p e k de modo que E [p, k] < 0 . (A.a) É claro que depois da pivotação o invariante (i1) continuará valendo com E ′ e Q′ no lugar de E e Q. Resta entender as condições sobre k que garantem a preservação de (i0). Se denotarmos por f ′ o vetor E ′ [m, ] então é claro que f′ = f − f [k] E [p, ] . E [p, k] É fácil verificar que f ′ [Q′ ] é nulo e portanto a primeira parte de (i0) vale. Resta considerar a segunda parte de (i0), supondo satisfeita a condição (A.a). É claro que f ′ [q] ≥ f [q] . De modo mais geral, para cada j em N −n, temos f ′ [j] ≥ f [j] se E [p, j] ≥ 0 e f ′ [j] ≤ f [j] em caso contrário. Portanto, para garantir f ′ [N −n] ≥ o é necessário e suficiente que k satisfaça a condição f [j] ≥ f [k] E [p, j] E [p, k] (A.b) f′ Feofiloff ap. A Simplex Dual para todo j em N − n tal que E [p, j] é negativo. As condições (A.a) e (A.b) são o ponto de partida do Simplex Dual. Basta escolher p em P e k em N − n que satisfaçam as condições e executar uma pivotação em torno de p, k. Se não existe k que satisfaça (A.a) então p é uma linha de ilimitação. A nova matriz E ′ não é necessariamente “mais simples” que E , uma vez que E ′ [P, n] pode ter mais componentes negativos que E [P, n] . Mas o Simplex Dual espera, assim mesmo, estar fazendo algum progresso. 2 −1 1 4 1 2 3 4 −5 3 1 0 −2 6 11 5 −13 39 −11 16 1 0 0 0 0 1 0 0 0 0 1 0 1 −1 −1 0 3 1 0 −1 4 0 1 1 0 1 0 0 0 5 0 6 1 −12 0 −5 1 0 0 0 0 −1 17 1 3 −30 0 −1 12 0 1 −17 0 −5 0 13 1 −4 0 5 −5 11 8 0 Figura A.4: Exemplo de aplicação do Simplex Dual. A figura registra o valor de E no início de sucessivas iterações. Na primeira iteração os elementos de Q são 4, 5, 6 e os elementos de P são 1, 2, 3. A última matriz é dual-simples ilimitada com relação à linha 4 e coluna 7. A.3 Heurística Simplex Dual Dada uma matriz D sobre M ×N e elementos m e n de M e N respectivamente, o objetivo do Simplex Dual é transformar D, por meio de sucessivas operações de pivotação, numa matriz que seja dual-simples com relação a m, n. A tarefa de escrever o algoritmo completo ficará a cargo do leitor; cuidaremos aqui apenas da fase II, que formaliza o esboço feito na seção anterior. Heurística Simplex Dual (fase II) Recebe uma matriz D sobre M × N , elementos m e n de M e N respectivamente e partes P0 e Q0 de M − m e N − n respectivamente tais que D [m, Q0 ] = o , D [m, N −n−Q0 ] ≥ o , D [P0 , Q0 ] é uma matriz de bijeção e D [M −m−P0 , N −n] = O ; se convergir, devolve matrizes F e G tais que F G = I , G [ , m] = I [ , m] e a matriz GD é dual-simples (solúvel ou ilimitada) com relação ao par m, n. 164 Feofiloff ap. A Simplex Dual 165 Cada iteração começa com uma parte Q de N − n, uma parte P de M − m e matrizes F , G e E . A primeira iteração começa com Q = Q0 , P = P0 , F = G = I e com E = D. Cada iteração consiste no seguinte, com f = E [m, ] : C ASO 0: E [M −m−P, n] 6= o . Devolva F e G e pare (E é dual-simples ilimitada). C ASO 1: E [M −m−P, n] = o e E [p, n] < 0 para algum p em P . Seja K ∗ o conjunto de todos os k em N − n para os quais E [p, k] < 0. C ASO 1A: K ∗ é vazio . Devolva F e G e pare (E é dual-simples ilimitada). C ASO 1B: K ∗ não é vazio . Escolha k em K ∗ de modo que f [k] /E [p, k] seja máximo. Seja F ′ , G′ , E ′ o resultado da pivotação de F, G, E em torno de p, k. Seja q um elemento de Q tal que E [p, q] = 1. Comece nova iteração com Q − q + k, F ′ , G′ e E ′ nos papéis de Q, F , G e E . C ASO 2: E [M −m−P, n] = o e E [P, n] ≥ o . Devolva F e G e pare (E é dual-simples solúvel). ✷ A operação de pivotação é definida exatamente como no Simplex Primal. O comportamento da heurística é descrita pelos seguintes Invariantes No início de cada iteração, (i0) f [Q] = o e f [N −n−Q] ≥ o , (i1) E [P, Q] é uma matriz de bijeção e E [M −m−P, N −n] = O , (i2) F G = I e GD = E , onde f é o vetor E [m, ] . f As demonstrações dos invariantes são análogas às correspondentes demonstração no Simplex Primal. A cada ocorrência do caso 1B temos f ′ [n] = f [n] − f [k] E [p, n] ≤ f [n] , E [p, k] sendo f ′ = E ′ [m, ] , pois E [p, n] e E [p, k] são negativos e f [k] ≥ 0. Portanto, numa seqüência de ocorrências do caso 1B, a correspondente seqüência de valores de f [j] é monotônica. Se for estritamente monotônica, a seqüência será finita, pois os valores correspondentes da variável Q serão todos distintos. Infelizmente, a monotonia pode não ser estrita e a heurística pode não convergir. f′ Feofiloff ap. A Simplex Dual 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 1 4/5 0 −1/5 0 2/5 0 6/5 0 0 1 0 0 0 0 1 −5/3 −4/3 2/3 1/3 1/3 2/3 1 2 0 0 1 0 0 0 0 1 −6 3 −2 5 2 −1 0 3 4 −5 2 6 −18/5 −3/5 6/5 −3/5 2/5 1/5 −4/5 1/5 −2/5 43/5 3/5 9/5 0 1 0 0 6 −3 −2 5 1 −2 1 3 1 0 0 0 −2 1 0 3 1 0 0 0 166 0 1 0 0 0 0 1 0 14 −25 14 0 1 4/5 0 −1/5 0 2/5 0 6/5 0 0 1 0 −6 5 4 −30 0 −5/3 −4/3 1 2/3 1/3 0 1/3 2/3 0 1 2 0 0 1 0 10 1 2 −36 Figura A.5: Exemplo de aplicação da heurística Simplex Dual. A figura registra os valores de G e E no início de sucessivas iterações. No início da primeira iteração, os elementos de Q são 5, 6, 7 e os elementos de P são 1, 2, 3. A última matriz E é dualsimples solúvel com relação a 4, 8. A.4 Algoritmo Simplex Dual Para transformar a heurística Simplex Dual num algoritmo basta usar uma versão apropriada da regra lexicográfica ou da regra de Bland (veja capítulo 5) a que recorremos no Simplex Primal. Como no caso do Simplex Primal, podemos reformular a notação fazendo A = D [M −m, N −n] , c = D [m, N −n] e b = D [M −m, n] . Diremos que o terno A, c, b é um sistema dual. O sistema é simples se a correspondente matriz D for dualsimples. Nessa notação, o algoritmo poderia ser formulado assim: Recebe um sistema dual A, c, b e devolve matrizes F e G e um vetor g tais que F G = I e o sistema dual GA , c + gA , Gb é simples. A.5 Problema canônico dual De acordo com a seção 8.1, o problema canônico dual CD(A, c, b) consiste no seguinte: dado um sistema dual A, c, b sobre M × N , encontrar um vetor y em Y (A, c) que maximize yb. Como de hábito, Y (A, c) é o conjunto de todos os vetores y para os quais yA ≤ c. Sistemas duais simples. O problema canônico dual CD(A, c, b) pode ser resolvido por mera inspeção quando o sistema dual A, c, b é simples. Suponha inicialmente que o sistema dual A, c, b é simples solúvel e tem bases P e Q. O vetor y = o está em Y (A, c) pois yA = o ≤ c. Por outro lado, yb é máximo sistema dual Feofiloff ap. A Simplex Dual pois y ′ b ≤ 0 para todo y ′ em Y (A, c). De fato, y ′ b = y ′ [P ] b [P ] ≤ 0 pois b [M −P ] = o, b [P ] ≥ o e y ′ [P ] ≤ 0, uma vez que y ′ [P ] A [P, Q] = y ′ A [ , Q] ≤ c [Q] = o. Concluímos assim que o vetor nulo é solução do problema CD(A, c, b). Suponha agora que A, c, b é simples inviável com bases P e Q e coluna de inviabilidade k. Então Y (A, c) é vazio pelo seguinte motivo. Suponha que y está em Y (A, c). Então y [P ] A [P, k] = (yA) [k] ≤ c [k] < 0, donde y [p] > 0 para algum p em P . Se q é o elemento de Q para o qual A [p, q] = 1, temos y [p] A [p, q] = y [p] > 0. Isto contradiz nossa hipótese de que yA ≤ c. Portanto, CD(A, c, b) é inviável. Suponha, finalmente, que A, c, b é simples ilimitado com linha de ilimitação h. Suponha A [h, ] ≤ o e b [h] é positivo (o outro caso é análogo). Tome y ′ [h] = 1 e y ′ [M −h] nulo. Então y ′ A = y ′ [h] A [h, ] ≤ o ≤ c e y ′ b > 0 . Para qualquer λ positivo, λy ′ está em Y (A, c) e λy ′ b é tanto maior quanto maior for λ. Portanto, CD(A, c, b) é ilimitado. Sistemas duais arbitrários. Suponha que A, c, b não é simples. Submeta A, c, b ao algoritmo Simplex Dual, que devolverá matrizes F e G e um vetor g tais que F G = I e o sistema dual GA, c + gA, Gb é simples. Considere a função que leva qualquer vetor y no vetor (y + g) F . Esta função é uma bijeção de Y (A, c) em Y (GA, c + gA). A inversa dessa bijeção leva qualquer elemento z de Y (GA, c + gA) no elemento zG − g de Y (A, c). A existência da bijeção mostra que Y (A, c) é vazio se e só se Y (GA, c + gA) é vazio. Portanto, CD(A, c, b) é inviável se e só se CD(GA, c + gA, Gb) é inviável. Considere agora os valores das funções objetivo nos dois problemas. O valor de um elemento y de Y (A, c) no problema CD(A, c, b) é yb, enquanto o correspondente valor de (y + g)F no problema CD(GA, c + gA, Gb) é ((y + g)F )(Gb) = yb + gb . Portanto, os valores de vetores correspondentes nos dois problemas diferem por gb, que é constante. Segue daí que (1) o primeiro problema é ilimitado se e só se o segundo é ilimitado e (2) o primeiro problema tem solução se e só se o segundo tem solução. Mais especificamente, se y é solução do primeiro problema então (y + g)F é solução do segundo; e se z é solução do segundo problema então zG − g é solução do primeiro. 167 Feofiloff ap. A Simplex Dual Exercícios A.1 Mostre que os três tipos de matriz dual-simples são disjuntos (assim, por exemplo, uma matriz dual-simples solúvel com relação a m, n não pode ser, ao mesmo tempo, dual-simples inviável). A.2 Escreva uma versão completa da heurística Simplex Dual. A heurística deve receber uma matriz arbitrária D sobre M × N e elementos m e n de M e N respectivamente; se convergir, deve devolver matrizes F e G tais que F G = I , G [ , m] = I [ , m] e a matriz GD é dual-simples (solúvel, inviável ou ilimitada) com relação ao par m, n. A.3 Escreva e analise o algoritmo Simplex Dual com regra lexicográfica. Escreva e analise o algoritmo Simplex Dual com regra de Bland. 168 Apêndice B Análise de sensibilidade Como a solução de um problema canônico é afetada por pequenas variações da função objetivo? Pequenas variações de c não afetam a solução do problema CP(A, b, c). Analogamente, pequenas variações de b não afetam a solução do problema CD(A, c, b). A primeira seção deste apêndice trata dessas questões no caso em que apenas um dos componentes de c ou b varia. A segunda seção procura descrever, de maneira mais global e abstrata, a natureza da dependência entre o valor ótimo dos problemas e os parâmetros b e c. Este apêndice só depende dos capítulos 4, 6, 7 e 8. B.1 Variação de um só componente Seja A, b, c um sistema sobre M × N e suponha que existem matrizes F e G e um vetor y tais que F G = I e o sistema GA, Gb, c − yA é simples solúvel e tem bases P e Q. Portanto, (GA)[P, Q] é de bijeção , (GA)[M −P, N −Q] = O , (GA)[M −P, Q] = O , (Gb)[P ] ≥ o , (Gb)[M −P ] = o , (c − yA)[N −Q] ≥ o , (c − yA)[Q] = o . É claro que y é solução do problema CD(A, c, b). É claro que o vetor básico x do sistema GA, Gb, c − yA é solução do problema CP(A, b, c). Ademais, cx = yb. Diremos que esse número é o valor ótimo do par de problemas. Suponha agora que b é substituído por um vetor b̌, ligeiramente diferente. Quão próximo b̌ deve estar de b para que o sistema GA, Gb̌, c − yA seja simples solúvel e tenha a mesma base Q de colunas? Suponha, em seguida, que c é substituído por um vetor ligeiramente diferente č. Quão próximo č deve ser de c para que o sistema GA, Gb, č − y̌A seja simples solúvel, com base de colunas Q, para algum y̌? 169 Feofiloff ap. B Análise de sensibilidade Variação de um componente de b Suponha que b̌ difere de b em apenas um componente: b̌ [m] = b [m] + β para algum m em M e b̌ [i] = b [i] para todo i distinto de m. Fato Se G [M −P, m] = o e β respeita as restrições a seguir então o sistema GA, Gb̌, c − yA é simples solúvel e tem base de colunas Q. As restrições são −G [p, ] b −G [p, ] b ≤ β ≤ , G [p, m] G [p, m] onde a desigualdade esquerda se aplica a todo p em P tal que G [p, m] é positivo e a desigualdade direita se aplica a todo p em P tal que G [p, m] é negativo. D EMONSTRAÇÃO : É óbvio que Gb̌ = Gb+βG [ , m] . Como G [M −P, m] é nulo, temos (Gb̌) [M −P ] = (Gb) [M −P ] = o. Como β satisfaz as desigualdades, temos β G [p, m] ≥ −G [p, ] b para todo p em P , donde (Gb̌) [P ] ≥ o. Portanto, o sistema GA, Gb̌, c − yA é simples solúvel e tem base de colunas Q. ✷ Eis algumas observações óbvias. 1. O lado esquerdo das restrições sobre β pode ser vazio; o lado direito também pode ser vazio. 2. Nas restrições sobre β, a expressão à esquerda tem valor não-positivo e a expressão à direita tem valor não-negativo. As restrições estão certamente satisfeitas quando β = 0. 3. A condição G [M −P, m] = o significa, em particular, que m deve estar em P . De fato, se G foi gerada pelo algoritmo Simplex então G [M −P, m] = I [M −P, m] 6= o quando m está em M − P . Respeitadas as condições acima, é óbvio que y é solução do novo problema CD(A, c, b̌). O valor ótimo do problema, y b̌, varia linearmente com β: y b̌ = yb + βy [m] . Quanto ao problema CP(A, b̌, c), este terá por solução o vetor básico, digamos x̌, do sistema GA, Gb̌, c − yA. É claro que cx̌ = y b̌. Variação de c fora da base Suponha que č difere de c em apenas um elemento de N − Q, ou seja, suponha que č [n] = c [n] + γ para algum n em N − Q e č [j] = c [j] para j distinto de n. Fato Se γ ≥ (yA−c) [n] então o sistema GA, Gb, č−yA é simples solúvel com base de colunas Q. 170 Feofiloff ap. B Análise de sensibilidade 171 D EMONSTRAÇÃO : Como č [Q] = c [Q] , temos (yA) [Q] = č [Q] . Ademais, (yA) [j] ≤ č [j] para todo j distinto de n. Finalmente, (yA) [n] ≤ c [n] + γ = č [n] . Logo, o sistema GA, Gb, č − yA é simples solúvel e tem base de colunas Q. ✷ Respeitada a restrição sobre γ , é óbvio que x é solução do novo problema CP(A, b, č) e que čx = cx. Quanto ao problema dual, é claro que y é solução de CD(A, č, b) e que yb = čx. Variação de c na base Suponha que č só difere de c em um elemento de Q. Mais especificamente, suponha que č [n] = c [n] + γ para algum n em Q e č [j] = c [j] para todo j distinto de n. Seja m o único elemento de P tal que (GA) [m, n] = 1. Fato Se γ respeita as restrições a seguir então existe um vetor y̌ tal que o sistema GA, Gb, č − y̌A é simples solúvel com base de colunas Q. As restrições são (c − yA) [k] (c − yA) [k] ≤ γ ≤ , (GA) [m, k] (GA) [m, k] onde a desigualdade esquerda se aplica a todo k em N − Q tal que (GA) [m, k] é negativo e a desigualdade direita se aplica a todo k em N − Q tal que (GA) [m, k] é positivo. D EMONSTRAÇÃO : Adote a abreviatura E = GA. Seja y̌ o vetor y + γG [m, ] . É claro que y̌A = yA + γE [r, ] . (B.a) Se restringirmos (B.a) a Q teremos (y̌A) [Q] = (yA) [Q] +γE [m, Q] = c [Q] +γI [n, Q] . Logo, (y̌A) [Q] = č [Q] . (B.b) Se restringirmos (B.a) a um elemento k de N − Q teremos (y̌A) [k] = (yA) [k] + γE [m, k] . Se γ satisfaz as desigualdade expostas no enunciado então γE [m, k] ≤ c [k] − (yA) [k] e portanto (y̌A) [k] ≤ c [k] . Como c [N −Q] = č [N −Q] , temos (y̌A) [N −Q] ≤ č [N −Q] . Segue daí e de (B.b) que o sistema GA, Gb, č − y̌A é simples e tem base de colunas Q. ✷ É óbvio que o lado esquerdo das restrições sobre γ pode ser vazio; o lado direito também pode ser vazio. É claro também que as restrições estão satisfeitas quando γ = 0. m m Feofiloff ap. B Análise de sensibilidade Satisfeitas as restrições sobre γ , o vetor básico x do sistema GA, Gb, c − yA também é vetor básico do sistema GA, Gb, č − y̌A. Ademais, čx = cx + γx [n] , donde čx varia linearmente com γ . Quanto ao problema dual, é claro que y̌ é solução de CD(A, č, b) e que y̌b = čx. B.2 Exemplo Retomemos o exemplo discutido na seção 7.5 do capítulo 7. Para conveniência do leitor, vamos repetir a descrição do problema. Imagine que uma empresa fabrica quatro modelos de um produto. Cada produto passa por dois estágios de fabricação. O primeiro estágio dispõe de não mais que 600 homens-hora e o segundo de não mais que 400 homens-hora. Digamos que o número de homenshora necessários, em cada estágio, para a fabricação de cada modelo do produto impõe as seguintes restrições: 4x1 + 9x2 + 7x3 + 10x4 ≤ 600 , 1x1 + 1x2 + 3x3 + 40x4 ≤ 400 , onde xi é o número de unidades do modelo i. Queremos planejar a produção de modo a maximizar o lucro total, que é dado por 12x1 + 20x2 + 18x3 + 40x4 . Nosso problema equivale ao problema canônico primal CP(A, b, c) com A, b e c descritos na figura B.1. Seja G a matriz e y o vetor descritos na figura B.2. 4 1 9 1 7 3 10 40 1 0 0 1 −12 −20 −18 −40 0 0 600 400 Figura B.1: Sistema A, b, c. 4/15 −1/15 −1/150 4/150 −44/15 −4/15 Figura B.2: Matriz G e vetor y. 1 35/15 25/15 0 −5/150 5/150 0 4/15 −1/15 1 −1/150 4/150 0 0 20/3 10/3 44/15 400/3 20/3 4/15 Figura B.3: Sistema GA, Gb, c − yA. 172 Feofiloff ap. B Análise de sensibilidade 4 1 9 1 7 3 10 40 1 0 0 1 −12 −20 −18 −40 0 0 173 β + 600 400 Figura B.4: Sistema A, b̌, c. 1 35/15 25/15 0 −5/150 5/150 0 4/15 −1/15 1 −1/150 4/150 0 0 20/3 10/3 44/15 4β/15 + 400/3 nβ/150 + 20/3 4/15 Figura B.5: Sistema GA, Gb̌, c − yA. O sistema GA, Gb, c − yA (figura B.3) é simples solúvel; sua base é composta pelas colunas 1 e 4. Portanto, um plano de produção ótimo requer a fabricação de apenas dois modelos: x1 = 1 3 400 , x2 = x3 = 0 , x4 = 1 3 20 , x5 = x6 = 0 . (B.c) Com este plano, teremos cx = − 31 5600. Suponha agora que a disponibilidade de mão de obra no primeiro estágio é alterada para 600 + β. Nosso problema passa a ser definido pelo sistema A, b̌, c descrito na figura B.4. Não é difícil verificar que se −500 ≤ β ≤ 1000 então o sistema GA, Gb̌, c−yA (figura B.5) é simples solúvel e a base continua composta pelas colunas 1 e 4. O plano de produção ótimo continua limitado aos modelos 1 e 4: x̌1 = x̌4 = 1 3 1 3 1 15 4β , 1 150 β , 400 + x̌2 = x̌3 = 0 , 20 − x̌5 = x̌6 = 0 . Com este plano de produção teremos cx̌ = − 13 5600 − 1 15 44 β. Suponha a seguir que b permanece constante mas c é substituído por um vetor č. Digamos que č2 = c2 +γ e č coincide com c em todos os componentes. É fácil verificar que se γ ≥ − 13 20 então o sistema GA, Gb, č − yA é simples solúvel. O plano de produção x descrito em (B.c) continua ótimo e e čx continua valendo − 31 5600. Suponha, finalmente, que č1 = c1 + γ e č coincide com c em todos os demais componentes (figura B.6). Seja y̌ o vetor especificado na figura B.7. É claro que o sistema GA, Gb, č − y̌A (figura B.8) é simples solúvel desde que −4 ≤ γ ≤ 2. O vetor x descrito em (B.c) continua sendo um plano de produção ótimo e čx = − 13 5600 + 13 400 γ . Feofiloff ap. B Análise de sensibilidade 4 1 9 1 7 3 10 40 1 0 0 1 γ − 12 −20 −18 −40 0 0 174 600 400 Figura B.6: Sistema A, b, č. 4/15 −1/150 −1/15 4/150 4γ/15 − 44/15 −γ/15 − 4/15 Figura B.7: Matriz G e vetor y̌. 1 0 35/15 −5/150 25/15 0 5/150 1 4/15 −1/150 −1/15 400/3 4/150 20/3 0 −7γ/3 + 20/3 −5γ/3 + 10/3 0 −4γ/15 + 44/15 γ/15 + 4/15 Figura B.8: Sistema GA, Gb, č − y̌A. B.3 Valor ótimo como função de b e c Considere os problemas canônicos CP(A, b, c) e CD(A, c, b). Se o primeiro problema tem solução então o seu valor ótimo é o número minx cx para x variando em X(A, b). Analogamente, se o segundo problema tem solução então o seu valor ótimo é o número maxy yb com y variando em Y (A, c). De acordo com o teorema da dualidade 8.5, se um dos problemas tem solução então ambos têm solução e seus valores ótimos coincidem. O valor ótimo comum será denotado por ϕ(b, c) . valor ótimo Diremos que esse é o valor ótimo do sistema A, b, c. Como varia ϕ(b, c) em função de b e de c, supondo A fixa? É preciso começar por esclarecer o domínio da função ϕ. Seja B o conjunto de todos os vetores b para os quais X(A, b) não é vazio, isto é, o conjunto de todos os vetores b para os quais existe x ≥ o tal que Ax = b. (Há quem diga que B é o cone de A.) Analogamente, seja C o conjunto de todos os vetores c para os quais Y (A, c) não é vazio, isto é, o conjunto de todos os vetores c para os quais existe y tal que yA ≤ c. De acordo com o teorema da dualidade 8.5, os problemas CP(A, b, c) e CD(A, c, b) têm solução se e só se b está em B e c está em C . Portanto, o domínio de ϕ é o produto cartesiano B×C. B C Feofiloff ap. B Análise de sensibilidade É fácil verificar que o conjunto B é convexo, ou seja, que para todo par b1 , b2 de elementos de B e todo par λ1 , λ2 de números não-negativos, se λ1 + λ2 = 1 então λ1 b1 + λ2 b2 está em B. Eis a demonstração desse fato. Suponha que x1 um vetor em X(A, b1 ) e x2 um vetor em X(A, b2 ). Para qualquer par λ1 , λ2 com as propriedades acima, seja b′ o vetor λ1 b1 + λ2 b2 e x′ o vetor λ1 x1 + λ2 x2 . Então x′ ≥ o e Ax′ = λ1 Ax1 + λ2 Ax2 = λ1 b1 + λ2 b2 = b′ , donde x′ está em X(A, b′ ). A existência de um tal x′ mostra que b′ está em B. É igualmente fácil verificar que o conjunto C é convexo, ou seja, que para todo par c1 , c2 de elementos de C e todo par λ1 , λ2 de números não-negativos, se λ1 + λ2 = 1 então λ1 c1 + λ2 c2 está em C . Mostraremos a seguir que, quando o segundo parâmetro está fixo, a função ϕ é convexa, contínua e linear por trechos. Fato B.1 (ϕ é convexa no primeiro parâmetro) Seja c um elemento de C . Para todo par b1 , b2 de elementos de B e todo par λ1 , λ2 de números não-negativos tais que λ1 + λ2 = 1 tem-se ϕ(λ1 b1 + λ2 b2 , c) ≤ λ1 ϕ(b1 , c) + λ2 ϕ(b2 , c) . D EMONSTRAÇÃO : Seja x1 um vetor em X(A, b1 ) tal que ϕ(b1 , c) = cx1 . Seja x2 um vetor em X(A, b2 ) tal que ϕ(b2 , c) = cx2 . Para todo par λ1 , λ2 com as propriedades definidas no enunciado, seja b′ o vetor λ1 b1 + λ2 b2 e x′ o vetor λ1 x1 + λ2 x2 . Então x′ está em X(A, b′ ) e b′ está em B (como mostramos acima) e portanto ϕ(b′ , c) ≤ cx′ = λ1 cx1 + λ2 cx2 = λ1 ϕ(b1 , c) + λ2 ϕ(b2 , c). ✷ Por definição, ϕ(b, c) = maxy yb para y variando em Y (A, c). Mas é possível dizer mais: existe uma parte finita Y ′ de Y (A, c) tal que ϕ(b, c) = maxy yb para y variando em Y ′ . Fato B.2 (ϕ é linear por trechos e contínua no primeiro parâmetro) Para todo c em C existem vetores y1 , y2 , . . , yk sobre M tais que ϕ(b, c) = max { y1 b, y2 b, . . , yk b } para todo b em B. D EMONSTRAÇÃO : Seja c um elemento fixo de C . Seja Q conjunto das partes Q de N dotadas da seguinte propriedade: existem uma matriz inversível G e um vetor y tais que o sistema GA, Gb, c − yA é simples solúvel com base de colunas Q para algum b em B. É óbvio que Q é finito. Para cada Q em Q, escolha um par GQ , yQ de modo que, para algum b, o sistema GQ A, GQ b, c − yQ A seja simples solúvel com base de colunas Q. Em particular, yQ está em Y (A, c) para todo Q em Q. O conjunto de todos os vetores da forma yQ com Q em Q é o que estamos procurando, como mostraremos a seguir. 175 conjunto convexo Feofiloff ap. B Análise de sensibilidade Seja b um vetor em B e seja xb uma solução do problema CP(A, b, c). É claro que ϕ(b, c) = cxb . Vamos mostrar que cxb = maxQ yQ b , onde o máximo é tomado sobre todo Q em Q. Para todo Q em Q, yQ está em Y (A, c) e portanto o lema da dualidade 8.1 garante que cxb ≥ yQ b. Resta mostrar que cxb = yQ b para algum Q em Q. Como c está em C , e portanto Y (A, c) não é vazio, a análise do algoritmo Simplex mostra que existe uma parte Q de N , uma matriz inversível G e um vetor y tais que o sistema GA, Gb, c − yA é simples solúvel com base de colunas Q. Logo, Q está em Q. Seja x o vetor básico do sistema simples solúvel GA, Gb, c − yA, isto é, x [N −Q] é nulo e (GA)x = Gb. Observe que cx = yb e que cx = cxb . Mas x também é o vetor básico do sistema GQ A, GQ b, c − yA, pois x [N −Q] = o e GQ Ax = GQ b . Segue que (c − yQ A)x = 0, donde cx = yQ b. Portanto cxb = cx = yQ b, como queríamos demonstrar. ✷ Portanto, para descrever ϕ(b, c) completamente como função de b basta calcular os vetores y1 , . . , yk . Infelizmente, isto não é prático pois k cresce exponencialmente com |N |. Demonstra-se analogamente que, como função do segundo parâmetro, ϕ é côncava, contínua e linear por trechos. Fato B.3 (ϕ é côncava no segundo parâmetro) Seja b um elemento de B. Para todo par c1 , c2 de elementos de C e todo par λ1 , λ2 de números não-negativos tais que λ1 + λ2 = 1 tem-se ϕ(b, λ1 c1 + λ2 c2 ) ≥ λ1 ϕ(b, c1 ) + λ2 ϕ(b, c2 ) . Fato B.4 (ϕ é linear por trechos e contínua no segundo parâmetro) Para todo b em B existem vetores x1 , x2 , . . , xk sobre N tais que ϕ(b, c) = min { cx1 , cx2 , . . , cxk } para todo c em C . B.4 Conclusão Para qualquer matriz fixa A, os problemas canônicos CP(A, b, c) e CD(A, c, b) têm solução se e só se o par b, c está em B × C , onde B é o conjunto dos vetores b para os quais X(A, b) não é vazio e C é o conjunto dos vetores c para os quais Y (A, c) não é vazio. 176 Feofiloff ap. B Análise de sensibilidade Para b fixo em B, a função que a cada c em C associa o valor ótimo ϕ(b, c) do sistema A, b, c é contínua, linear por trechos, e côncava. Para c fixo em C , a função que a cada b em B associa o valor ótimo ϕ(b, c) do sistema A, b, c é contínua, linear por trechos, e convexa. A solução x do problema CP(A, b, c) não é afetada por variações suficientemente pequenas de c. Analogamente, a solução y do problema CD(A, c, b) não se altera se b sofre variações suficientemente pequenas. 177 Apêndice C Poliedro canônico primal Este apêndice estuda algumas propriedades geométricas do poliedro canônico primal X(A, b) . Esse é o conjunto de todos os vetores x ≥ o tais que Ax = b. Suporemos, ao longo do apêndice, que A é uma matriz sobre M × N e que b é um vetor sobre M . C.1 Dependência linear Comecemos por examinar, em uma linguagem adequada ao nosso contexto, os conceitos de dependência e independência linear. Uma matriz J sobre M × K é de injeção se existe uma parte P de M tal que J [P, K] é uma matriz de bijeção e J [M −P, K] = O. Por exemplo, se E é uma matriz escalonada com base de colunas Q então E [ , Q] é uma matriz de injeção. Proposição C.1 Para qualquer parte K de N , vale uma e apenas uma das seguintes alternativas: (1) existe uma matriz G tal que GA [ , K] é de injeção; (2) existe um vetor u tal que Au = o, u [K] 6= o e u [N −K] = o. D EMONSTRAÇÃO : De acordo com o algoritmo de Gauss-Jordan aplicado à matriz A [ , K] , existem matrizes F e G tais que F G = I e GA [ , K] é escalonada. Digamos que a base de colunas da matriz escalonada é Q. É claro que GA [ , Q] é uma matriz de injeção. Se Q = K então vale a alternativa (1). Suponha agora que Q ⊂ K e seja k um elemento de K − Q. É evidente que existe um vetor u sobre N tal que u [k] = 1 , u [N −Q−k] = o e GAu = o . É claro que u [N −K] = o, u [K] 6= o e Au = F GAu = o. Portanto, vale a alternativa (2). 178 matriz de injeção Feofiloff ap. C Poliedro canônico primal 179 Resta mostrar que as duas alternativas não podem ser simultaneamente verdadeiras. Suponha pois que vale (2). Como u [N −K] é nulo, GA [ , K] u [K] = GAu = o , uma vez que Au = o. Mas u [K] não é nulo, e portanto GA [ , K] não pode ser uma matriz de injeção. Portanto, a alternativa (1) não vale. ✷ Na linguagem da álgebra linear, a alternativa (1) afirma que o conjunto de colunas da matriz A [ , K] é linearmente independente enquanto (2) afirma que o conjunto de colunas da matriz A [ , K] é linearmente dependente. No presente contexto, convém atribuir as propriedades de dependência e independência linear aos subconjuntos de N . Diremos, pois, que K é linearmente independente em A se vale a alternativa (1) e linearmente dependente em A se vale a alternativa (2). A proposição C.1 mostra que as duas propriedades são complementares. Usaremos as abreviaturas li e ld para as expressões “linearmente independente” e “linearmente dependente”. É óbvio que todo subconjunto de um conjunto li também é li e que todo superconjunto de um conjunto ld também é ld. A demonstração da proposição C.1 pode ser facilmente convertida em um algoritmo que, ao receber A e K , decide se K é li ou ld. No primeiro caso, o algoritmo devolve uma matriz G para atestar que K é li; no segundo caso, o algoritmo devolve um vetor u para atestar que K é ld. C.2 Combinações convexas Suponha que x1 , . . , xk são vetores sobre N . Uma combinação afim desses vetores é qualquer combinação linear λ1 x1 + · · · + λk xk tal que λ1 + · · · + λk = 1 . (Em termos geométricos, um vetor é combinação afim de x1 e x2 se estiver “na reta que passa pelos pontos x1 e x2 ”.) Uma combinação convexa dos vetores x1 , . . , xk é qualquer combinação afim λ1 x1 + · · · + λk xk tal que λi ≥ 0 para todo i. (Em termos geométricos, um vetor é combinação convexa de x1 e x2 se estiver “no segmento de reta que une os pontos x1 e x2 ”.) O poliedro canônico primal é um conjunto convexo no seguinte sentido: Proposição C.2 Para qualquer parte finita Z de X(A, b), toda combinação convexa de elementos de Z está em X(A, b). D EMONSTRAÇÃO : Digamos que os elementos de Z são z1 , . . , zk e considere P uma combinação convexa λi zi . Como Azi = b para todo i, P P P P A( λi zi ) = λi Azi = λi b = ( λ i ) b = b , li ld algoritmo Feofiloff ap. C Poliedro canônico primal 180 P P uma vez que λi = 1.PPor outro lado, λi zi ≥ 0, uma vez que λi ≥ 0 e zi ≥ o para todo i. Portanto, λi zi está em X(A, b). ✷ A envoltória convexa de um conjunto finito Z de vetores é o conjunto de todas as combinações convexas de elementos de Z . A envoltória convexa de Z será denotada por [Z]. A proposição C.2 mostra que [Z] ⊆ X(A, b) para toda parte finita Z de X(A, b). Em certas circunstâncias, X(A, b) = [Z] para um certo conjunto finito Z . A caracterização de um tal Z é o principal objetivo deste apêndice. [Z] C.3 Vértices A folga, ou suporte, de um elemento x de X(A, b) é o conjunto de todos os índices j em N para os quais x [j] > 0. A folga de x será denotada por folga suporte S(x) . Um vetor x em X(A, b) é básico se sua folga S(x) é minimal, ou seja, se não existe x′ em X(A, b) tal que S(x′ ) ⊂ S(x). Vetores básicos de X(A, b) também são conhecidos como vértices. É óbvio que todo poliedro não-vazio X(A, b) tem pelo menos um vértice. 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 1 −3 −4 3 0 0 7 6 1 1 −1 1 0 2 3 1 6 5 0 7 8 0 8 7 8 9 8 9 0 0 0 0 0 1 0 1 0 0 0 0 9 8 7 6 Figura C.1: O topo da figura define um sistema A, b. Os vetores x, x′ e x′′ definidos nesta ordem pelas três últimas linhas da figura estão todos em X(A, b). A folga de x′ não é minimal porque S(x′ ) ⊃ S(x). A folga de x é minimal porque qualquer vetor x′′′ em X(A, b) tal que S(x′′′ ) ⊆ S(x) é necessariamente igual a x. A folga de x′′ é menor que S(x), embora não seja parte de S(x). Nossa definição de vetores básicos tem um caráter “intrínseco”: ela não depende do particular sistema A, b usado para definir o poliedro X(A, b). Já a seguinte observação caracteriza os vetores básicos em termos de propriedades da matriz A. Proposição C.3 Um vetor x em X(A, b) é básico se e só se S(x) é li em A. vetor básico Feofiloff ap. C Poliedro canônico primal 181 D EMONSTRAÇÃO : Suponha que x não é básico. Então existe um vetor x′ em X(A, b) tal que S(x′ ) ⊂ S(x). Seja u o vetor x − x′ e observe que Au = Ax − Ax′ = b − b = o. Observe também que u [S] 6= o e u [N −S] = o , onde S é uma abreviatura para S(x). A existência de um tal vetor u mostra que S é ld. Agora considere a recíproca. Suponha que x está em X(A, b) e S(x) é ld. Então existe um vetor u tal que u [S] 6= o e Au = o , u [N −S] = o , onde S = S(x). Vamos mostrar que S não é minimal. Ajuste a notação, trocando o sinal de u se necessário, de modo que u [j] > 0 para algum j em S . Seja λ o maior número tal que λ ≤ x [j] /u [j] (C.a) para todo j em S tal que u [j] > 0. Observe agora que x − λu ≥ o. De fato, se u [j] > 0 então x [j] − λu [j] ≥ 0 em virtude da maneira como λ foi definido e se u [j] ≤ 0 então x [j] − λu [j] ≥ 0 uma vez que λ ≥ 0. Como x − λu ≥ 0 e A(x − λu) = Ax − λAu = Ax = b, o vetor x − λu está em X(A, b). Por outro lado, como u [j] = 0 sempre que x [j] = 0, temos S(x − λu) ⊆ S . Ademais, a inclusão é estrita, uma vez que (C.a) vale com igualdade para algum j em S . Concluimos assim que S não é minimal e portanto x não é básico. ✷ Esta demonstração, juntamente com a demonstração da proposição C.1, sugere um algoritmo que, ao receber um elemento x de X(A, b), decide que x é um vértice ou devolve um vetor x′ em X(A, b) tal que S(x′ ) ⊂ S(x). Corolário C.4 Para quaisquer vértices z e z ′ de X(A, b), se S(z) = S(z ′ ) então z = z ′ . D EMONSTRAÇÃO : Seja u o vetor z − z ′ . É claro que Au = Az − Az ′ = b − b = o. É claro também que u [N −S] = o, onde S é o valor comum de S(z) e S(z ′ ). Como S é li, concluimos que u [S] = o. Portanto u = o e assim z = z ′ . ✷ De acordo com o corolário C.4, o número de vértices de X(A, b) é menor que número de subconjuntos de N , ou seja, menor que 2|N | . Grosso modo, esta |  delimitação é a melhor possível: existem poliedros com até |N|N|/2 vértices, e esse número é maior que 2|N |/2 . algoritmo Feofiloff ap. C Poliedro canônico primal C.4 Soluções do problema canônico primal As soluções do problema canônico primal são vértices, como veremos a seguir. Fato C.5 Se o problema CP(A, b, c) tem solução então alguma das soluções é um vértice de X(A, b). D EMONSTRAÇÃO : Suponha que o problema CP(A, b, c) tem solução. Então, de acordo com o algoritmo Simplex, existem matrizes F e G e um vetor y tais que F G = I e o sistema GA, Gb, c−yA é simples. Digamos que Q é uma base de colunas do sistema simples. Então GA [ , Q] é uma matriz de injeção e portanto Q é li. Seja x o vetor básico associado à base Q. Então S(x) ⊆ Q e portanto S(x) é li. De acordo com a proposição C.3, x é um vértice. ✷ Cada iteração da segunda fase do algoritmo Simplex (seção 4.2, página 43) começa, implicitamente, com um vértice de X(A, b). Se o vértice não for satisfatório, o algoritmo caminha para um dos vértices “vizinhos”. Os mecanismos de convergência — como a regra lexicográfica e a regra de Bland discutidos no capítulo 5 — evitam que um mesmo vértice seja examinado mais de uma vez. A execução do algoritmo termina ao encontrar um vértice que seja solução do problema (ou ao constatar que o problema é inviável ou ilimitado). Fato C.6 Se z é um vértice de X(A, b) então existe um vetor c tal que z é a única solução do problema CP(A, b, c). D EMONSTRAÇÃO : Adote a abreviatura S = S(z). Seja c o vetor definido pelas equações c [S] = o e c [j] = 1 para cada j em N − S . É evidente que cx ≥ 0 para todo x em X(A, b). Mas cz = 0, uma vez que z [N −S] = o. Logo, z minimiza cz e portanto é solução do problema CP(A, b, c). Resta mostrar que z é a única solução do problema. Suponha pois que cx = cz para algum x em X(A, b). Então cx = 0 e portanto x [N −S] = o, donde S(x) ⊆ S(z). Como S(z) é minimal, é preciso ter S(x) = S(z), donde x também é vértice. Agora o corolário C.4 permite concluir que x = z. ✷ C.5 Poliedros limitados O poliedro X(A, b) é limitado se existe um número ψ tal que x [j] ≤ ψ para todo x em X(A, b) e todo j . O conceito é geometricamente intuitivo, mas um tanto abstrato, uma vez que não está claro, de imediato, como verificar algoritmicamente se um dado poliedro é ou não limitado. Também não está claro, de imediato, como certificar o caráter limitado ou ilimitado de um poliedro. Ainda assim é útil restringir a atenção aos poliedros limitados pois eles têm uma estrutura muito simples. 182 Feofiloff ap. C Poliedro canônico primal 183 Teorema C.7 (da decomposição) Se X(A, b) é limitado então todo elemento de X(A, b) é combinação convexa de vértices. D EMONSTRAÇÃO : Seja x um elemento de X(A, b). Se x é um vértice então a proposição é trivialmente verdadeira. Suponha agora que x não é um vértice e adote como hipótese de indução a validade da proposição para todo elemento x′ de X(A, b) tal que S(x′ ) ⊂ S(x). De acordo com a proposição C.3, S(x) é ld em A. Portanto, existe um vetor u tal que Au = o , u [S] 6= o e u [N −S] = o , onde S é uma abreviatura para S(x). É preciso investigar agora para que valores de λ o vetor x ± λu está em X(A, b). É claro que A(x ± λu) = b para qualquer λ; resta estudar a validade de x ± λu ≥ 0. Suponha por um instante que u ≤ o. Então, para qualquer λ positivo, o vetor x − λu estará em X(A, b). Como u [j] 6= 0 para algum j , o valor de (x − λu) [j] será tanto maior quanto maior for λ, e isso é inconsistente com o caráter limitado de X(A, b). É forçoso concluir, portanto, que u tem pelo menos um componente positivo. A partir daqui os cálculos são iguais aos da demonstração da proposição C.3. Seja λ o maior número que satisfaz a restrição λ ≤ x [k] /u [k] para todo k em S tal que u [k] > 0. Não é difícil verificar que x − λu está em X(A, b). Também é fácil constatar que S(x−λu) ⊂ S . Nossa hipótese de indução garante então que x − λu é uma combinação convexa de vértices. Um raciocínio paralelo ao que acabamos de fazer permite concluir que u tem pelo menos um componente negativo e portanto existe um número λ′ tal que x + λ′ u está em X(A, b) e S(x + λ′ u) ⊂ S(x). A partir daí, nossa hipótese de indução garante que x + λ′ u é uma combinação convexa de vértices. ′ λ Como x é combinação convexa de x − λu e x + λ′ u (de fato, x = λ+λ ′ (x − λ ′ λu) + λ+λ′ (x + λ u)), e esses dois vetores são combinações convexas de vértices, também x é combinação convexa de vértices. ✷ Esta demonstração pode ser facilmente convertida num algoritmo que, ao receber um sistema A, b e um elemento x de X(A, b), constata que X(A, b) não é limitado ou devolve P P vértices z1 , . . , zp e números não-negativos λ1 , . . , λp tais que λ i = 1 e x = λ i zi . O teorema C.7 tem o seguinte corolário imediato: Se X(A, b) é limitado então X(A, b) = [Z], onde Z é o conjunto dos vértices do poliedro. Isso mostra que, em termos geométricos, os vértices estão na “casca” ou “fronteira” de X(A, b). Feofiloff ap. C Poliedro canônico primal Exercícios C.1 Suponha que W é um conjunto finito de vetores sobre N e c um vetor sobre N . Mostre que o mínimo de cx para x em [W ] é igual ao mínimo de cw para w em W . C.2 Um conjunto li K é maximal se nenhum superconjunto próprio de K é li. Mostre que todos os conjuntos li maximais têm a mesma cardinalidade (veja exercício 2.11). | C.3 Mostre que o número de vértices de X(A, b) não passa de |N , onde Q é |Q| qualquer conjunto li maximal (veja exercício C.2) em A. C.4 Suponha que um elemento x de X(A, b) é combinação convexa de dois elementos de X(A, b)−{x}; mostre que x não é um vértice. Agora suponha que um elemento x de X(A, b) não é vértice e mostre que x é combinação convexa de dois vetores em X(A, b) − {x}. C.5 Suponha que X(A, b) = [W ], onde W é um conjunto finito de vetores. Mostre que X(A, b) é limitado. C.6 Suponha que o poliedro X(A, b) é limitado e mostre que X(A, b) é vazio ou X(A, o) = {o}. Suponha que X(A, o) = {o} e mostre que X(A, b) é limitado. C.7 Escreva um algoritmo que receba um sistema A, b e decida se o poliedro X(A, b) é ou não limitado. C.8 Suponha que X(A, b) é limitado. Mostre que, para qualquer vetor c, o problema CP(A, b, c) é inviável ou tem solução. C.9 Mostre que todo vetor em X(A, b) é da forma x + r onde x é uma combinação convexa de vértices e r um elemento de X(A, o). C.10 Um elemento r de X(A, o) − {o} é um raio se seu suporte, S(r), é minimal. Uma combinação cônica de vetores x1 , . . , xk é qualquer combinação linear λ1 x1 + · · · + λk xk tal que λi ≥ 0 para todo i. Mostre que todo elemento de X(A, o) é combinação cônica de raios. 184 Apêndice D Poliedro canônico dual Este apêndice estuda algumas propriedades geométricas do poliedro canônico dual Y (A, c) . Esse é o conjunto de todos os vetores y tais que yA ≤ c. Suporemos, ao longo do apêndice, que A é uma matriz sobre M × N e que c é um vetor sobre N . D.1 Conjuntos geradores A seguinte observação é uma espécie de “dual” da proposição C.1. Proposição D.1 Para qualquer parte K de N , vale uma e apenas uma das seguintes alternativas: (1) existem matrizes F e G tais que F G = I e GA é uma matriz escalonada cuja base de colunas é parte de K ; (2) existe um vetor v tal que (vA) [K] = o mas (vA) [N −K] 6= o. D EMONSTRAÇÃO : Seja B a matriz A [ , K] . De acordo com algoritmo de Gauss-Jordan, existem matrizes F e G tais que F G = I e GB é escalonada. Seja Q uma base de colunas de GB. Se a matriz GA é escalonada então vale a alternativa (1). Suponha agora que GA não é escalonada. Então (GA) [i, ] 6= o para algum i em M − P , onde P é a base de linhas de GB. Seja v o vetor G [i, ] . Então (vA) [K] = (GA) [i, K] = (GB) [i, ] = o . Mas (vA) [N −K] 6= o, uma vez que vA = (GA) [i, ] 6= o. Assim, vale a alternativa (2). Resta mostrar que as duas alternativas não podem ser simultaneamente verdadeiras. Suponha que vale a alternativa (1). Seja E a matriz escalonada GA, seja P a base de linhas de E e seja Q uma base de colunas de E tal que 185 Feofiloff ap. D Poliedro canônico dual 186 Q ⊆ K . Tome qualquer vetor v tal que (vA) [K] = o e seja w o vetor vF . Como E [M −P, ] = O, temos w [P ] E [P, ] = wE = vF GA = vA . Em particular, w [P ] E [P, Q] = (vA) [Q] . Mas (vA) [Q] = o uma vez que Q ⊆ K . Logo, w [P ] = o , já que E [P, Q] é uma matriz de bijeção. Segue daí que vA = w [P ] E [P, ] = o. Portanto, a alternativa (2) não pode valer. ✷ Na linguagem da álgebra linear, a alternativa (1) afirma que cada coluna de A [ , N −K] é uma combinação linear das colunas de A [ , K] enquanto a alternativa (2) afirma que alguma coluna da matriz A [ , N −K] é linearmente independente das colunas de A [ , K] . Diremos que K é um gerador de A se vale a alternativa (1). É óbvio que todo superconjunto de um gerador também é gerador. A demonstração da proposição D.1 pode ser facilmente convertida em um algoritmo que, ao receber A e K , decide se K é ou não um gerador. No primeiro caso, o algoritmo devolve um par F, G de matrizes para atestar o caráter gerador de K ; no segundo caso, o algoritmo devolve um vetor v para atestar que K não é um gerador. D.2 Combinações convexas O poliedro canônico dual é um conjunto convexo no seguinte sentido: Proposição D.2 Para qualquer parte finita Z de Y (A, c), toda combinação convexa de elementos de Z está em Y (A, c). P D EMONSTRAÇÃO : Seja λi zi uma combinação convexa dos elementos de Z . Como zi A ≤ c e λi ≥ 0 para todo i, P P P P ( λi zi )A = λ i zi A ≤ λ i c = ( λi ) c = c , P P uma vez que λi = 1. Portanto, λi zi está em Y (A, c). ✷ A proposição D.2 mostra que [Z] ⊆ Y (A, c) para toda parte finita Z de Y (A, c), onde [Z] é a envoltória convexa de Z . Em certas circunstâncias, Y (A, c) = [Z] para um certo conjunto finito Z . A caracterização de um tal Z é o principal objetivo deste apêndice. gerador algoritmo Feofiloff D.3 ap. D Poliedro canônico dual 187 Vetores básicos e faces minimais A folga de um elemento y de Y (A, c) é o conjunto de todos os índices j em N para os quais (yA) [j] < c [j] . A folga de y será denotada por folga S(y) . Um vetor y em Y (A, c) é básico se S(y) é minimal, ou seja, se não existe y ′ em Y (A, c) tal que S(y ′ ) ⊂ S(y). É óbvio que todo poliedro não-vazio Y (A, c) tem pelo menos um vetor básico. A seguinte proposição caracteriza os vetores básicos em termos de propriedades da matriz A. Proposição D.3 Um vetor y em Y (A, c) é básico se e só se N − S(y) é um gerador de A. D EMONSTRAÇÃO : Seja y um vetor em Y (A, c) e suponha que y não básico, ou seja, que S(y) não é minimal. Então existe um vetor y ′ em Y (A, c) tal que S ′ ⊂ S , onde S ′ e S são abreviaturas para S(y ′ ) e S(y) respectivamente. Vamos mostrar que N − S não é um gerador de A. Seja v o vetor y − y ′ e observe que (vA) [N −S] = (yA) [N −S] − (y ′ A) [N −S] = c [N −S] − c [N −S] = o . Agora tome qualquer k em S − S ′ e observe que (vA) [k] = (yA) [k] − (y ′ A) [k] 6= 0 , uma vez que (yA) [k] < c [k] enquanto (y ′ A) [k] = c [k] . Assim, de acordo com a proposição D.1, N − S não é um gerador de A. Agora considere a recíproca. Seja y um vetor em Y (A, c) e suponha que N − S não é gerador de A, onde S é S(y). Então existe um vetor v tal que (vA) [N −S] = o mas (vA) [S] 6= o . Ajuste a notação, trocando v por −v se necessário, de modo que (vA) [j] > 0 para algum j em S . Seja λ o maior número tal que λ ≤ (c − yA) [j] (vA) [j] (D.a) para todo j em S tal que (vA) [j] > 0. É fácil verificar que yA+λvA ≤ c. De fato, se (vA) [j] > 0 então (yA) [j] + λ(vA) [j] ≤ c [j] em virtude da maneira como λ foi escolhido; e se (vA) [j] ≤ 0 então (yA) [j] + λ(vA) [j] ≤ c [j] uma vez que λ ≥ 0. Portanto, y + λv está em Y (A, c). Por outro lado, como (vA) [j] = 0 sempre que (yA) [j] = c [j] , temos S(y + λv) ⊆ S . Ademais, a inclusão é estrita, uma vez que (D.a) vale com igualdade para algum j em S . Logo, S não é minimal e portanto y não é básico. ✷ vetor básico Feofiloff ap. D Poliedro canônico dual Essa demonstração, juntamente com a demonstração da proposição D.1, sugere um algoritmo que, ao receber um elemento y de Y (A, c), decide que y é um vetor básico ou devolve um vetor y ′ em Y (A, c) tal que S(y ′ ) ⊂ S(y). 188 algoritmo Corolário D.4 Para quaisquer vetores básicos z e z ′ , se S(z) = S(z ′ ) então zA = z ′ A. D EMONSTRAÇÃO : Seja v o vetor z − z ′ e seja S é o valor comum de S(z) e S(z ′ ). É claro que (vA) [N −S] = (zA) [N −S] − (z ′ A) [N −S] = c [N −S] − c [N −S] = o , Como N −S é um gerador de A, a proposição D.1 garante que (vA) [S] = o Logo, vA = o e portanto zA = z ′ A. ✷ Uma face minimal de Y (A, b) é o conjunto de todos os vetores básicos que têm uma mesma folga. Assim, dois vetores básicos, digamos z e z ′ , pertencem à mesma face minimal se e só se S(z) = S(z ′ ). O corolário D.4 mostra que z e z ′ estão na mesma face minimal se e só se zA = z ′ A. Toda face minimal é um conjunto afim, no seguinte sentido. face minimal Proposição D.5 Toda combinação afim de vetores de uma face minimal pertence à face minimal. D EMONSTRAÇÃO : Digamos que os vetores básicos z1 , . . , zk pertencem a ′ uma P face minimal Y . Agora suponha que λ1 , . . , λk são números tais que λi = 1. Como zi A = z1 A para todo i temos também P P P ( λi zi )A = λi (zi A) = ( λi )z1 A = z1 A . P Portanto, λi zi é um vetor básico de Y (A, c) e pertence à face minimal Y ′ . ✷ Se uma face minimal contém um único vetor diremos que esse vetor é um vértice de Y (A, c). Em outras palavras, um vetor básico z é um vértice se o conjunto unitário {z} é uma face minimal. Se o conjunto de linhas de A é li — ou seja, se existe uma matriz G tal que GA é escalonada e tem base de linhas M — então a igualdade zA = z ′ A implica em z = z ′ , e portanto todo vetor básico é um vértice. D.4 Soluções do problema canônico dual As soluções do problema canônico dual são vetores básicos, como veremos a seguir. vértice Feofiloff ap. D Poliedro canônico dual Fato D.6 Se o problema CD(A, c, b) tem solução então alguma das soluções é um vetor básico de Y (A, c). D EMONSTRAÇÃO : Suponha que o problema CD(A, c, b) tem solução. Então, de acordo com o algoritmo Simplex, existem matrizes F e G e um vetor y tais que F G = I e o sistema GA, Gb, c−yA é simples. Digamos que Q é uma base de colunas do sistema simples. É claro que Q é um gerador de A. Como (c − yA) [Q] é nulo, Q é parte de N − S(y), donde N − S(y) é um gerador de A. Assim, de acordo com a proposição D.3, y é um vetor básico. ✷ Fato D.7 Para todo vetor básico z de Y (A, c), existe um vetor b tal que os vetores da face minimal que contém z são as únicas soluções do problema CD(A, c, b). D EMONSTRAÇÃO : Adote a abreviatura S = S(z). Seja A′ a matriz A [ , N −S] e seja b o vetor A′ u, onde u é o vetor 1s sobre N − S (isto é, u [j] = 1 para todo j em N − S ). Seja c′ o vetor c [N −S] . É evidente que yb = yA′ u ≤ c′ u para todo y em Y (A, c). Mas zb = zA′ u = c′ u. Logo, z maximiza zb e portanto é solução do problema CD(A, c, b). Suponha agora y é uma solução do problema CD(A, c, b); vamos mostrar y és básico e pertence à mesma face minimal que z. Como yb = c′ u, temos necessariamente yA′ = c′ e portanto S(y) ⊆ S(z). Como S(z) é minimal, é preciso ter S(y) = S(z), donde y é um vetor básico. Agora o corolário D.4 permite concluir que yA = zA, garantindo assim que y está na mesma face minimal que z. ✷ D.5 Poliedros limitados O poliedro canônico dual Y (A, c) é limitado se existe um número ψ tal que |y [i] | ≤ ψ para todo y em Y (A, c) e todo i. O conceito é um tanto abstrato, uma vez que não está claro, de imediato, como verificar algoritmicamente se um dado poliedro é ou não limitado. Ainda assim é útil restringir a atenção aos poliedros limitados pois eles têm uma estrutura muito simples. Fato D.8 Se Y (A, c) é limitado então todos os seus vetores básicos são vértices. D EMONSTRAÇÃO : Suponha que uma face minimal contém dois vetores básicos distintos, digamos z e z ′ . De acordo com a proposição D.5, o vetor λz + (1 − λ)z ′ também está em Y (A, b), qualquer que seja λ. Seja i um índice tal que z [i] 6= z ′ [i] . Como |(λz + (1 − λ)z ′ ) [i] | ≥ |λ(z [i] − z ′ [i] )| − |z ′ [i] | , 189 Feofiloff ap. D Poliedro canônico dual 190 vemos que o valor absoluto do componente i de λz + (1 − λ)z ′ é tanto maior quanto maior for o valor absoluto de λ. Mas isso é incompatível com o caráter limitado de Y (A, c). Concluimos assim que toda face minimal de Y (A, c) é unitária. ✷ Teorema D.9 (da decomposição dual) Se Y (A, c) é limitado então todo elemento de Y (A, c) é combinação convexa de vértices. D EMONSTRAÇÃO : - Seja y um elemento de Y (A, b). Se y é um vértice então a proposição é trivialmente verdadeira. Suponha agora que y não é um vértice e adote como hipótese de indução a validade da proposição para todo elemento y ′ de Y (A, c) tal que S(y ′ ) ⊂ S(y). De acordo com a proposição D.3, S(y) não é gerador de A. Portanto, existe um vetor v tal que (vA) [N −S] = o e (vA) [S] 6= o , onde S = S(y). Suponha por um instante que vA ≤ o. Então, para qualquer número positivo λ teremos (y+λv)A ≤ c, donde y+λv estará em Y (A, c). Como v [i] não é nulo para algum i, o valor absoluto de (y + λv) [i] será tanto maior quanto maior for λ, e isso é inconsistente com o caráter limitado de Y (A, c). É forçoso concluir, portanto, que vA tem pelo menos um componente positivo. A partir daqui os cáculos são iguais aos que fizemos na demosntração da proposição D.3. Seja λ o maior número que satisfaz a restrição λ ≤ (c − yA) [j] (vA) [j] para todo j em S tal que (vA) [j] > 0. Então yA + λvA ≤ c e portanto y + λv está em Y (A, c). Ademais, S(y + λv) ⊂ S . Nossa hipótese de indução garante agora que y + λv é uma combinação convexa de vértices. Um raciocínio análogo ao que acabamos de fazer permite concluir que vA tem pelo menos um componente negativo e portanto existe um número λ′ tal que y − λ′ v está em Y (A, c) e S(y − λ′ v) ⊂ S(y). A partir daí, nossa hipótese de indução garante que y − λ′ v é uma combinação convexa de vértices. Como y é combinação convexa de y + λv e y − λ′ v, e esses dois vetores são combinações convexas de vértices, também y é combinação convexa de vértices. ✷ Exercícios D.1 Suponha que W é um conjunto finito de vetores sobre M e b um vetor sobre M . Mostre que o máximo de yb para y em [W ] é igual ao máximo de yw para w em W . λ Feofiloff ap. D Poliedro canônico dual D.2 Um conjunto gerador K é minimal se nenhum subconjunto próprio de K é gerador. Mostre que todos os conjuntos geradores minimais têm a mesma cardinalidade. D.3 Mostre que todo conjunto gerador minimal tem a mesma cardinalidade que qualquer conjunto li minimal (veja exercício C.2). | D.4 Mostre que o número de faces minimais de Y (A, c) não passa de |N , |Q| onde Q é qualquer conjunto gerador minimal de A. D.5 Suponha que um elemento y de Y (A, c) é combinação convexa de dois elementos, digamos y ′ e y ′′ de Y (A, c) − {y}. Suponha que y é básico. Mostre que y ′ e y ′′ também são básicos e pertencem à mesma face minimal que y. D.6 Suponha que Y (A, c) possui um vértice, ou seja, uma face minimal unitária. Mostre que todas as faces minimais são unitárias. D.7 Suponha que Y (A, c) = [W ], onde W é um conjunto finito de vetores. Mostre que Y (A, c) é limitado. D.8 Suponha que o poliedro Y (A, c) é limitado e mostre que Y (A, c) é vazio ou Y (A, o) = {o}. Suponha que Y (A, o) = {o} e mostre que Y (A, c) é limitado. D.9 Escreva um algoritmo que receba um sistema A, c e decida se o poliedro Y (A, c) é ou não limitado. D.10 Suponha que Y (A, c) é limitado. Mostre que, para qualquer vetor b, o problema CD(A, c, b) é inviável ou tem solução. D.11 Mostre que todo vetor em Y (A, c) é da forma y + r onde x é uma combinação convexa de vetores básicos e r um elemento de Y (A, o). 191 Apêndice E Exercícios resolvidos Este apêndice contém as soluções de alguns dos exercícios propostos no texto. E.1 Solução do exercício 2.5 A figura E.1 descreve o algoritmo de Gauss-Jordan em uma linguagem mais formal que aquela do texto. Vamos supor que os elementos de M são 1, 2, . . . , m e os elementos de N são 1, 2, . . . , n. As bases P e Q são representadas por um vetor ϕ sobre M : se i está em P então ϕ[i] é único q em Q tal que E[i, q] = 1; se i está em M − P então ϕ[i] = 0. O pseudocódigo da figura E.1 supõe que nosso computador é capaz de executar aritmética racional exata. Supõe também que, durante a pivotação, as operações aritméticas que envolvem um operando nulo não consomem tempo algum (senão, as operações relativas às colunas do conjunto Q + k deveriam ser executadas apenas implicitamente). Nossa solução usa o espaço de memória de maneira pouco econômica, pois armazena as matrizes E , G e F em separado. E.2 Solução do exercício 2.11 Suponha que G1 e G2 são matrizes inversíveis tais que G1 D e G2 D são escalonadas. Queremos mostrar que as bases de colunas das duas matrizes escalonadas têm a mesma cardinalidade. Solução: Sejam Q1 e Q2 bases de G1 D e G2 D respectivamente. Seja G uma matriz inversível tal que GD é escalonada e possui uma base de colunas Q de cardinalidade |Q1 |; escolha G de modo a minimizar Q2 − Q. Suponha agora que Q2 − Q 6= ∅ (E.a) e seja q2 um elemento desse conjunto. Seja P a base de linhas da matriz E = GD. Há uma parte P ′ de P tal que E [P ′ , Q ∩ Q2 ] e E [P −P ′ , Q−Q2 ] são matrizes de 192 Feofiloff ap. E Exercícios resolvidos 193 E, G, ϕ ← D, I, o para h ← 1 até m faça k←1 enquanto k ≤ n e E[h, k] = 0 faça k ← k + 1 se k ≤ n então α ← E[h, k] para j ← 1 até m faça G[h, j] ← G[h, j]/α para j ← 1 até n faça E[h, j] ← E[h, j]/α para i ← 1 até m faça se i 6= h então α ← E[i, k] para j ← 1 até m faça G[i, j] ← G[i, j] − α · G[h, j] para j ← 1 até n faça E[i, j] ← E[i, j] − α · E[h, j] ϕ[h] ← k para j ← 1 até m faça ✄ gera matriz F se ϕ[j] = 0 então para i ← 1 até m faça F [i, j] ← 0 F [j, j] ← 1 senão para i ← 1 até m faça F [i, j] ← D[i, ϕ[j]] Figura E.1: Formalização do algoritmo de Gauss-Jordan (exercício 2.5). A pri- meira linha atribui valores iniciais às variáveis E , G e ϕ respectivamente. O primeiro bloco de código cuida da operação de pivotação. O segundo, gera a matriz F a partir do vetor ϕ. bijeção. Seja x um vetor sobre Q2 tal que E [P ′ , Q2 ] · x = o e x [q2 ] = 1 . (E.b) Agora suponha, por um instante, que E [P −P ′ , q2 ] = o . (E.c) Então os vetores E [P, Q2 ] · x e E [ , Q2 ] · x são nulos, ou seja, GD2 x = o , (E.d) onde D2 denota a matriz D [ , Q2 ] . Seja F uma matriz tal que F G = I . Se multiplicarmos ambos os lados de (E.d) por G2 F , teremos G2 D2 x = o . Como Q2 é uma base de colunas da matriz escalonada G2 D, o vetor x é nulo, o que é inconsistente com (E.b). (Na linguagem da álgebra da linear, diríamos simplesmente que o conjunto de colunas da matriz G2 D2 é linearmente independente.) Concluímos assim que a hipótese (E.c) é insustentável, ou seja, que Feofiloff ap. E Exercícios resolvidos existe p em P −P ′ tal que E [p, q2 ] 6= 0. É possível, agora, executar uma pivotação em torno de p, q2 . Seja F̌ a matriz elementar cuja coluna saliente, p, é igual a E [ , q2 ] . Seja Ǧ a inversa de F̌ . É claro que a matriz ǦG é inversível e que ǦE é escalonada e tem base de colunas Q − q + q2 , onde q é o único elemento de Q que possui a propriedade E [p, q] 6= 0. Está claro que |Q − q + q2 | = |Q1 | e Q2 − (Q − q + q2 ) é parte própria de Q2 − Q, o que torna a existência da matriz ǦG é incompatível com nossa escolha de G. Logo, a hipótese (E.a) é insustentável. Segue daí que |Q2 | ≤ |Q1 | . Se repetirmos o raciocínio todo depois de inverter os papéis de Q1 e Q2 concluiremos que |Q1 | ≤ |Q2 |. Corolário. Para qualquer matriz D, qualquer matriz inversível G1 tal que G1 D é escalonada e qualquer matriz inversível G2 tal que G2 D é escalonada, as bases de linhas das duas matrizes escalonadas têm a mesma cardinalidade. E.3 Solução do exercício 2.13 Dada uma matriz A sobre M × N , um vetor b sobre M e um vetor c sobre N , encontrar x tal que Ax = b e cx é mínimo. Solução: Use o algoritmo de Gauss-Jordan para obter uma matriz inversível G e um vetor g tais que GA é escalonada e (c − gA) [Q] = o , onde Q é uma base de colunas de GA. Seja P a base de linhas de GA. C ASO 1: (Gb) [M −P ] 6= o. Neste caso o problema não tem solução porque não existe x tal que Ax = b. De fato, se um tal x existisse teríamos a contradição o = (GA) [M −P ] x = (Gb) [M −P ] 6= o. C ASO 2: condições (Gb) [M −P ] = o e c − gA = o. Seja, x o vetor definido pelas x [N −Q] = o e (GA) [, Q] x [Q] = Gb . Como GAx = Gb e G é inversível, temos Ax = b. Observe agora que (c − gA)x é nulo, donde cx = gb. Por outro lado, para qualquer x′ tal que Ax′ = b teremos (c − gA)x′ = o, donde cx′ = gb. Portanto, x é uma solução do problema. C ASO 3: (Gb) [M −P ] = o e c−gA 6= o. Seja j um índice tal que (c−gA) [j] 6= 0; é claro que j ∈ N − Q. Seja x o vetor definido pelas seguintes condições: (c − gA) [j] x [j] < 0 , x [(N −Q)−j] = o e (GA)x = Gb . 194 Feofiloff ap. E Exercícios resolvidos E, G, ϕ, h ← D, I, o, 1 repita ✄ primeira fase k1 ← k2 ← n se E[h, n] ≥ 0 então k1 ← 0 repita k1 ← k1 + 1 até que k1 = n ou E[h, k1 ] > 0 se E[h, n] ≤ 0 então k2 ← 0 repita k2 ← k2 + 1 até que k2 = n ou E[h, k2 ] < 0 k ← min (k1 , k2 ) se k < n então p ← L INHA -M ÍNIMA (h, k) se E[p, n]/E[p, k] ≥ E[h, n]/E[h, k] então P IVOTAÇÃO (h, k) h←h+1 senão P IVOTAÇÃO (p, k) senão se E[h, n] = 0 então h ← h + 1 senão pare (h é linha de inviabilidade) até que h = m ✄ fim da primeira fase e início da segunda repita k←0 repita k ← k + 1 até que k = n ou E[m, k] < 0 se k < n então p ← L INHA -M ÍNIMA (m, k) se p = m então pare (k é coluna de ilimitação) senão P IVOTAÇÃO (p, k) até que k = n Figura E.2: Formalização da heurística Simplex (exercício 4.2). A primeira linha atribui valores iniciais às variáveis E , G, ϕ e h respectivamente. As funções L INHA -M ÍNIMA e P IVOTAÇÃO estão descritas nas figuras seguintes. A matriz F poderia ser determinada, a partir de D e ϕ, como na figura E.1. É claro que Ax = b. É claro também que cx − gb = (c − gA)x = (c − gA) [j] x [j] , donde cx = (c − gA) [j] x [j] + gb . Logo, cx é tanto menor quanto maior for o valor absoluto de x [j] . Concluímos assim que o problema não tem solução. 195 Feofiloff ap. E Exercícios resolvidos L INHA -M ÍNIMA (h, k) p←0 repita p ← p + 1 até que p = h ou E[p, k] > 0 para i ← p + 1 até h − 1 faça se E[i, k] > 0 e E[i, n]/E[i, k] < E[p, n]/E[p, k] então p←i devolva p Figura E.3: A função L INHA -M ÍNIMA (usada no código da figura E.2) recebe índices h e k e devolve p entre 1 e h−1 tal que E[p, k] é positivo e E[p, n]/E[p, k] é mínimo; se tal p não existe, a função devolve h. P IVOTAÇÃO (h, k) α ← E[h, k] para j ← 1 até m faça G[h, j] ← G[h, j]/α para j ← 1 até n faça E[h, j] ← E[h, j]/α para i ← 1 até m faça se i 6= h então α ← −E[i, k] para j ← 1 até m faça G[i, j] ← G[i, j] − α · G[h, j] para j ← 1 até n faça E[i, j] ← E[i, j] − α · E[h, j] ϕ[h] ← k ✄ k entra na base Figura E.4: A função P IVOTAÇÃO (usada no código da figura E.2) recebe índices h e k e executa uma pivotação de G, E em torno de h, k. E.4 Solução do exercício 4.2 As figuras E.2 a E.4 descrevem a heurística Simplex em uma linguagem mais formal que aquela usada no texto. Esta formalização supõe que os elementos de M são 1, 2, . . . , m, os elementos de N são 1, 2, . . . , n, a coluna especial é n e a linha especial é m. Se convergir, a heurística produz não só matrizes G e E mas também índices h e k. Se 1 ≤ h < m então E é simples inviável e h é uma linha de inviabilidade. Se 1 ≤ k < n então E é simples ilimitada e k é uma coluna de ilimitação. Em caso contrário, E é simples solúvel. Os conjuntos P e Q são representados por um vetor ϕ sobre M definido da seguinte maneira: se i está em P então ϕ[i] é único q em Q tal que E[i, q] = 1; senão ϕ[i] = 0. 196 Feofiloff ap. E Exercícios resolvidos Esta formalização do Simplex supõe um computador capaz de executar aritmética racional exata. Supõe também que, durante a pivotação, as operações aritméticas que envolvem um operando nulo não consomem tempo algum (senão, as operações relativas às colunas do conjunto Q+k deveriam ser executadas apenas implicitamente). Além disso, esta formalização usa o espaço de memória de maneira pouco econômica. E.5 Solução do exercício 4.3 É instrutivo analisar uma versão especializada da heurística Simplex para matrizes com apenas duas linhas. Essa versão sempre converge; a análise da convergência contém um prenúncio do algoritmo Simplex Lexicográfico. Suponha que M é um conjunto com apenas dois elementos, h e m. Nossa versão especializada do Simplex recebe uma matriz D sobre M × N e um elemento n de N e devolve uma matriz G tal que G [h, h] 6= 0, G [ , m] = I [ , m] e GD é simples com relação à coluna n e à linha m. É claro que a matriz G é inversível; sua inversa F é definida pelas equações F [h, h] = 1/G [h, h] , F [m, h] = −G [m, h] /G [h, h] e F [ , m] = I [ , m] . O algoritmo consiste no seguinte: C ASO 1: D [h, N −n] ≤ o e D [h, n] > 0 ou D [h, N −n] ≥ o e D [h, n] < 0 . Devolva I e pare (D é simples inviável). C ASO 2: D [h, N ] = o . Devolva I e pare (D é simples solúvel se D [m, N −n] ≥ o e simples ilimitada em caso contrário). C ASO 3: D [h, q̇] > 0 e D [h, n] ≥ 0 ou D [h, q̇] < 0 e D [h, n] ≤ 0 para algum q̇ em N − n . Seja Ġ, Ė o resultado da pivotação de I, D em torno de h, q̇. Execute o processo iterativo descrito a seguir. Cada iteração começa com um elemento q de N − n e matrizes G e E . A primeira iteração começa com q = q̇, G = Ġ e E = Ė . Cada iteração consiste no seguinte: C ASO 3.1: E [m, k] < 0 e E [h, k] > 0 para algum k em N − n . Seja G′ , E ′ o resultado da pivotação de G, E em torno de h, k. Comece nova iteração com G′ e E ′ nos papéis de G e E . C ASO 3.2: E [m, k] < 0 e E [h, k] ≤ 0 para algum k em N − n . Devolva G e pare (E é simples ilimitada). C ASO 3.3: E [m, N −n] ≥ o . Devolva G e pare (E é simples solúvel). É óbvio que o algoritmo produz o resultado desejado nos casos 1 e 2. Resta analisar o processo iterativo dentro do caso 3. É fácil verificar os seguintes invariantes: 197 Feofiloff ap. E Exercícios resolvidos 198 no início de cada iteração, (i0) (i1) (i2) (i3) (i4) (i6) (i7) E [h, n] ≥ 0 e E [h, q̇] > 0 , E [ , q] = I [ , h] , G [h, h] 6= 0 , E = GD , G [ , m] = I [ , m] , G [m, h] D [h, q] = −D [m, q] e D [h, q] G [h, h] = 1 . Esses invariantes valem, em particular, no início da última iteração. Portanto, a matriz G que o algoritmo devolve nos casos 3.2 e 3.3 tem as propriedades desejadas. h m q q̇ n 1 0 > ≥ Figura E.5: Matriz E no início de uma iteração. Resta provar a convergência do algoritmo. O processo iterativo dentro do caso 3 termina depois de um número finito de iterações pelos motivos que passamos a expor. Os invariantes (i4), (i6) e (i7) têm a seguinte conseqüência imediata: se duas iterações diferentes começam com o mesmo valor da variável q então os correspondentes valores de G são iguais. Em virtude de (i3), os correspondentes valores de E [m, q̇] também são iguais. Por outro lado, no fim de cada ocorrência do caso 3.1, E ′ [m, q̇] > E [m, q̇] . De fato, E ′ [m, q̇] = E [m, q̇] + αE [h, q̇] , onde α = −E [m, k] /E [h, k] . Como α e E [h, q̇] são positivos, temos a desigualdade desejada. Essas observações levam à seguinte conclusão: duas iterações diferentes jamais começam com o mesmo valor de q. Logo, o número de iterações não excede |N | − 1. Exercícios E.1 Aplique a heurística Simplex às matrizes descritas abaixo. 2 2 2 1 2 2 2 0 −1 −2 0 0 2 2 2 1 2 −2 2 0 −1 −2 0 0 E.2 Mostre como eliminar o processo iterativo dentro do caso 3 mediante uma escolha criteriosa de k. Referências Bibliográficas [AC78] D. Avis and V. Chvátal. Notes on Bland’s pivoting rule. In Mathematical Programming Study, volume 8, pages 24–34. North-Holland, 1978. 57 [AMO93] R. K. Ahuja, T. L. Magnanti, and J. B. Orlin. Network Flows: Theory, Algorithms and Applications. Prentice Hall, 1993. 122 [Bea55] E. M. L. Beale. Cycling in the dual simplex algorithm. Naval Research Logistics Quarterly, 2:269–275, 1955. 49 [Bla77] R. Bland. New finite pivoting rules for the simplex method. Mathematics of Operations Research, 2:103–107, 1977. 62 [Bor87] K. H. Borgwardt. The Simplex Method — A Probabilistic Approach. Springer-Verlag, 1987. 57 [CCPS98] W. J. Cook, W. H. Cunningham, W. R. Pulleyblank, and A. Schrijver. Combinatorial Optimization. John Wiley, 1998. 122 [Chi53] F. Chio. Mémoire sur les fonctions connues sous le nom de résultantes ou de dèterminants. Turin, 1853. 111, 117 [Chv83] V. Chvátal. Linear Programming. W. H. Freeman, 1983. i, 22, 23, 46, 61, 69, 85, 86, 141 [CLRS01] T. H. Cormen, C. E. Leiserson, R. L. Rivest, and C. Stein. Introduction to Algorithms. MIT Press and McGraw-Hill, second edition, 2001. 23 [Dan63] G. B. Dantzig. Linear Programming and Extensions. Princeton University Press, 1963. 69 [Edm67] J. Edmonds. Systems of distinct representatives and linear algebra. J. of Research of the National Bureau of Standards, B, 71:241–245, 1967. 122 [EG84] J. Edmonds and R. Giles. Total dual integrality of linear inequality systems. In W. R. Pulleyblank, editor, Progress in Combinatorial Optimization, pages 117–129, Toronto, 1984. Academic Press. Proceedings of Jubilee Conference, University of Waterloo, 1982. 131 199 Feofiloff Referências Bibliográficas [Eve80] H. Eves. Elementary Matrix Theory. Dover, 1980. Republication of the 1966 Allyn and Bacon edition. 111, 117 [GKP94] R. L. Graham, D. E. Knuth, and O. Patashnik. Concrete Mathematics: A Foundation for Computer Science. Addison-Wesley, second edition, 1994. ii [GL81] P. Gács and L. Lovász. Khachiyan’s algorithm for linear programming. In Mathematical Programming Study, volume 14, pages 61–68. North-Holland, 1981. 133, 141 [GL96] G. H. Golub and C. F. Van Loan. Matrix Computations. Johns Hopkins University Press, Baltimore, third edition, 1996. i [GLS88] M. Grötschel, L. Lovász, and A. Schrijver. Geometric Algorithms and Combinatorial Optimization, volume 2 of Algorithms and Combinatorics. Springer-Verlag, first edition, 1988. 133, 157 [GLS93] M. Grötschel, L. Lovász, and A. Schrijver. Geometric Algorithms and Combinatorial Optimization, volume 2 of Algorithms and Combinatorics. Springer-Verlag, second edition, 1993. 133, 157 [Gon89] C. C. Gonzaga. An algorithm for solving linear programming problems in O(n3 L) operations. In N. Megiddo, editor, Progress in Mathematical Programming: Interior Point and Related Methods, pages 1–28. Springer-Verlag, New York, 1989. 133 [Gon92] C. C. Gonzaga. Path following methods for linear programming. SIAM Review, 34(2):167–227, 1992. A survey. 133 [Jor20] W. Jordan. Handbuch der Vermessungskunde, volume I. Metzler, Stuttgart, seventh edition, 1920. 13 [Kan39] L. V. Kantorovich. Mathematical methods of organizing and planning production. Publication House of the Leningrad State University, 1939. [Translated in Management Science, 6 (1960, p.366–422]. 69 [Kar84] N. Karmarkar. A new polynomial-time algorithm for linear programming. Combinatorica, 4:373–395, 1984. 133 [Kha79] L. G. Khachiyan. A polynomial algorithm for linear programming. Soviet Mathematical Doklady, 20:191–194, 1979. Translation of Doklady Akademii Nauk SSSR, vol.244, pp.1093–1096. 133, 141 [KM72] V. Klee and G. J. Minty. How good is the simplex algorithm? In O. Shisha, editor, Inequalities, III, pages 159–175. Academic Press, 1972. 57 [LKS91] J. K. Lenstra, A. H. G. Rinnooy Kan, and A. Schrijver, editors. History of Mathematical Programming: a Collection of Personal Reminiscences. North-Holland, 1991. 69 200 Feofiloff Referências Bibliográficas [PS82] C. H. Papadimitriou and K. Steiglitz. Combinatorial Optimization: Algorithms and Complexity. Prentice Hall, 1982. Second printing by Dover, 1998. 133 [Sch86] A. Schrijver. Theory of Linear and Integer Programming. John Wiley, 1986. 45, 111, 122, 131, 133, 141, 157 [Sch03] A. Schrijver. Combinatorial Optimization: Polyhedra and Efficiency. Number 24 in Algorithms and Combinatorics. Springer, 2003. [Three volumes]. 131, 133, 141 [YL82] B. Yamnitsky and L. A. Levin. An old linear programming algorithm runs in polynomial time. In 23rd Annual Symposium on Foundations of Computer Science, pages 327–328. IEEE, 1982. 141 201 Índice Remissivo e (transposição), 6 o, 1 O, 3 I, 5 x [n] , 1 x [Q] , 1 A [m, n] , 2 A [P, Q] , 2 A [P, ] , 2 A [ , Q] , 2 A [m, ] , 2 A [ , n] , 3 A [P, n] , 2 A [m, Q] , 2 M − m, 8 N − n, 8 Ax, 5 yA, 5 ⊂, 76 Bland, 49, 62 Borgwardt, 57 busca binária, 157 absdet( ), 108 algoritmo, 26, 39 do elipsóide, 141 exponencial, 133 Gauss-Jordan, 16 Gauss-Jordan-Chio, 111 polinomial, 122 Simplex, 51 forma tradicional, 65 Simplex Dual, 166 Simplex Primal, 65 Simplex-Chio, 124 Yamnitsky-Levin, 133, 148 arredondamento, i, 22, 45, 61 Avis e Chvátal, 57 CD(A, c, b), 77 Chio, 111, 117 Chvátal, 46, 69, 86, 141 ciclagem, 45 circ( ), 101 circuito, 100 coluna de ilimitação, 27, 65 de inviabilidade, 162 de matriz, 3 especial, 26 saliente, 8 combinação afim, 179 cônica, 184 convexa, 142, 179 linear, 10, 179 complexidade, 135 polinomial, 135 componente, 1, 2 cone, 174 conjunto convexo, 175 converge, 16, 39 convergência (de algoritmo), 16, 36, 39, 45, 56 convexo, 175 CP(A, b, c), 69 Cramer, 111, 130 crescente, 37, 47 custo, 69, 87 reduzido, 74 base, 65 de colunas, 13, 27 de linhas, 13, 27 de matriz escalonada, 13 de matriz simples, 27 Beale, 49 bijeção (matriz de), 7 Dantzig, 69 decrescente, 37, 47 delimitação do determinante produto de produtos, 120 produto de somas, 108, 119 det( ), 103 determinante, 103 202 Feofiloff Índice Remissivo diag( ), 103 dual de um ppl, 88 construção, 90 interpretação, 96 dualidade, 88 lema, 78, 90 teorema, 83, 93 forte, 83, 93 fraco, 78, 90 índices, 1, 2 1, 2, 3, . . . , 2, 3 invariantes, 18 inviável problema, 70, 78, 92 sistema simples, 65 inviável (matriz simples), 27 Edmonds, 122 Edmonds e Giles, 131 elipsóide, 133, 141 entra na base, 32 enumeração de um conjunto, 50 envoltória convexa, 180, 186 erro de arredondamento, i, 22, 45 escalonada (matriz), 13 Kantorovich, 69 Karmarkar, 133 Khachiyan, 133, 141 Klee e Minty, 57 face minimal, 188 Farkas, 85 fase I do Simplex, 49 fase II do Simplex, 47, 48, 61 fases do Simplex, 43 fator de contração, 154 folga, 180, 187 minimal, 180, 187 folgas complementares, 79 função objetivo, 87 Gács e Lovász, 133, 141 Gauss, 13 método de eliminação, 23 Gauss-Jordan algoritmo, 16 Gauss-Jordan-Chio algoritmo, 111 gerador de uma matriz, 186 minimal, 191 Gonzaga, 133 Grötschel, Lovász, Schrijver, 133 heurística, 39 Simplex, 40 Simplex Dual, 164 Simplex-Chio, 124 I (matriz identidade), 5 ilimitada (matriz simples), 27 ilimitado problema, 70, 78, 93 sistema simples, 65 Jordan, 13 ld (linearmente dependente), 179 lei do produto, 107 lema da dualidade, 78, 90 da inviabilidade, 93 da inviabilidade dual, 80 da inviabilidade primal, 80 da repetição de bases, 57 de Chio, 117 de Farkas, 85 do ponto profundo, 146 Lenstra, Rinnooy Kan, Schrijver, 69 Levin, 141 lexicograficamente positivo, 50 lexicográfico, 50 lg (logaritmo na base 2), 135 li (linearmente independente), 179 limitado (poliedro), 159, 182, 189 linearmente dependente, 179 linearmente independente, 179 maximal, 184 linguagem algorítmica, ii, 31 linha de ilimitação, 162 de inviabilidade, 27, 65 de matriz, 2 especial, 26 saliente, 9 m (linha especial), 26 m (número de linhas), 60, 134 matriz, 2 -coluna, 8 de bijeção, 7 de injeção, 178 de permutação, 100 de pivotação, 149 de transposição, 101 203 Feofiloff de um ppl, 87 de um tetraedro, 142 degenerada, 47 δ-bijetora, 111 δ-escalonada, 111 δ-simples, 124 diagonal, 8 dual-simples, 161 elementar, 10 escalonada, 13 esparsa, i identidade (I ), 5 inversa, 6 -linha, 9 nula (O), 3 quadrada, 102 simples, 27, 28 ilimitada, 27 inviável, 27 solúvel, 27 sobre M × N , 2 totalmente unimodular, 122 transposta, 6 monotônica, 37, 46 mudança de base, 49 n (coluna especial), 26 n (número de colunas), 57, 60, 134 negativo, 32 norma, 144 número negativo, 32 positivo, 32 racional, ii, 22 O (matriz nula), 3 o (vetor nulo), 1 ω, 120, 127, 129, 130, 135 ordem lexicográfica, 50 induzida, 50 otimização, i otimização combinatória, 122, 131 Papadimitriou e Steiglitz, 133 permanente, 104 permutação (matriz de), 100 PI (A, c), 134 pivotação, 30, 112, 149 pivotação, 16 representação matricial, 19 poliedro, 90 canônico dual, 77, 185 Índice Remissivo canônico primal, 69, 178 limitado, 159, 182, 189 ponto flutuante, 22, 61 ponto interior, 138, 142 positivo, 32 posto de matriz, 25 pleno, ii, 25 ppl, 87 primeira fase do Simplex, 49 problema canônico dual, 77 canônico primal, 69 da viabilidade, 134 de programação linear, 87 do ponto interior, 134, 141 do ponto viável, 134 do vetor viável, 85 dual, 88 ilimitado, 70, 78, 93 inviável, 70, 78, 92 simples, 71 viável, 70, 78, 92 produto matriz por matriz, 5 matriz por vetor, 4 vetor por matriz, 4 vetor por vetor, 4 programação inteira, 75 linear, i, 69, 87 propriedade associativa, 5 pseudocódigo, ii, 31, 192 PV(A, c), 134 racional, 22 raio, 184 redução entre problemas, 134 regra de Bland, 49, 62 de Cramer, 111, 130 lexicográfica, 51 restrições, 69, 77 sai da base, 32 saliente coluna, 8 linha, 9 Schrijver, 45, 122, 131, 133, 141 segunda fase do Simplex, 47, 48, 61 seqüência crescente, 37, 47 204 Feofiloff decrescente, 37, 47 sig( ), 102 simples matriz, 27, 28 problema, 71 sistema, 65 Simplex algoritmo, 51 forma tradicional, 65 Dual, 161 algoritmo, 166 heurística, 164 esboço, 30 heurística, 40 Primal, 161 Revisto, 47 Tabular, 32 Simplex-Chio algoritmo, 124 heurística, 124 sinal de matriz de permutação, 102 sistema, 64 simples, 65 sistema dual, 166 “solução”, 70 “solução ótima”, 70 “solução viável”, 70 solução básica, 74 solúvel matriz simples, 27 problema, 69, 78 sistema simples, 65 submatriz, 116 suporte de vetor, 180 tamanho de matriz, 134 de sistema, 129, 131 de vetor, 134 teorema da dualidade, 83, 93 dados inteiros, 130 forte, 83, 93 fraco, 78, 90 do produto de determinantes, 107 terminologia tradicional, 32, 70, 74 tetraedro, 142 transposta, 6 V(A, c), 134 valor ótimo, 169, 174 Índice Remissivo variáveis de folga, 75 vértice, 180, 188 de um tetraedro, 142 vetor, 1 básico, 23, 71, 180, 187 de inviabilidade, 93 dual, 81 primal, 80 nulo (o), 1 sobre N , 1 “vetor coluna”, 3 “vetor linha”, 3 viável (problema), 70, 78, 92 volume de um tetraedro, 142 X(A, b), 69 Y (A, c), 77 Yamnitsky, 141 Yamnitsky-Levin algoritmo, 133, 148 205 Feofiloff Índice Remissivo 206 Alfabeto grego α β γ δ ε ζ η θ A alfa B beta Γ gama ∆ delta E epsilon Z zeta H eta Θ téta ι κ λ µ ν ξ o π I K Λ M N Ξ O Π iota kapa lambda mü nü ksi ômicron pi ρ σ τ υ ϕ χ ψ ω P Σ T Υ Φ X Ψ Ω rô sigma tau upsilon fi qui psi ômega