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