Escolar Documentos
Profissional Documentos
Cultura Documentos
Algoritmos de Programação Linear
Algoritmos de Programação Linear
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
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 ii
Para quem. Este livro é dirigido a qualquer pessoa que queira compreen-
der 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 dis-
ciplina Programação Linear nos cursos de graduação e pós-graduação em Ciên-
cia 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:
Dados técnicos. A elaboração do livro contou com o apoio dos projetos As-
pectos Estruturais e Algorítmicos de Objetos Combinatórios (FAPESP 96/04505-
2) e Complexity of Discrete Structures (ProNEx 107/97). O livro foi escrito em
Feofiloff iii
Prefácio i
1 Vetores e Matrizes 1
1.1 Vetores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Matrizes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.3 Produtos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.4 Matrizes inversíveis . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.5 Transposição . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.6 Matrizes de bijeção . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.7 Matrizes diagonais . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.8 Matrizes elementares . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.9 Combinações lineares . . . . . . . . . . . . . . . . . . . . . . . . . . 10
I Algoritmos Básicos 12
2 Algoritmo de Gauss-Jordan 13
2.1 Matrizes escalonadas . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.2 Esboço do algoritmo . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.3 Algoritmo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.4 Análise do algoritmo: invariantes . . . . . . . . . . . . . . . . . . . 18
2.5 Mais invariantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.6 Número de operações aritméticas . . . . . . . . . . . . . . . . . . . 21
2.7 Conclusão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.8 Aplicação: Sistemas de equações . . . . . . . . . . . . . . . . . . . 23
3 Introdução ao Simplex 26
3.1 Matrizes simples . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
3.2 Esboço do Simplex . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.3 Análise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.4 Convergência . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
iv
Feofiloff SUMÁRIO v
4 Heurística Simplex 39
4.1 Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
4.2 A heurística . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
4.3 Análise: invariantes . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
4.4 Mais três invariantes . . . . . . . . . . . . . . . . . . . . . . . . . . 44
4.5 Convergência . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
4.6 Conclusão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
4.7 Apêndice: Simplex Revisto . . . . . . . . . . . . . . . . . . . . . . 47
5 Algoritmo Simplex 50
5.1 Ordem lexicográfica . . . . . . . . . . . . . . . . . . . . . . . . . . 50
5.2 Regra lexicográfica . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
5.3 Algoritmo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
5.4 Análise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
5.5 Convergência . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
5.6 Número de operações aritméticas . . . . . . . . . . . . . . . . . . . 60
5.7 Conclusão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
5.8 Apêndice: Segunda fase do Simplex . . . . . . . . . . . . . . . . . 61
5.9 Apêndice: Regra de Bland . . . . . . . . . . . . . . . . . . . . . . . 62
II Programação Linear 68
9 Problema geral 87
9.1 Definição do problema . . . . . . . . . . . . . . . . . . . . . . . . . 87
9.2 Dualidade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
9.3 Lema da dualidade . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
9.4 Construção do dual . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
9.5 Teorema da dualidade . . . . . . . . . . . . . . . . . . . . . . . . . 92
9.6 Redução ao problema canônico primal . . . . . . . . . . . . . . . . 93
9.7 Conclusão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
9.8 Apêndice: Uma interpretação do dual . . . . . . . . . . . . . . . . 96
10 Determinantes 100
10.1 Sinal de uma matriz de permutação . . . . . . . . . . . . . . . . . 100
10.2 Determinante de matriz quadrada . . . . . . . . . . . . . . . . . . 102
10.3 Três propriedades básicas . . . . . . . . . . . . . . . . . . . . . . . 104
10.4 Determinante do produto de matrizes . . . . . . . . . . . . . . . . 105
10.5 Delimitação do determinante . . . . . . . . . . . . . . . . . . . . . 108
10.6 Conclusão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
V Apêndices 160
Vetores e Matrizes
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] 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]
1
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
1 11 11
2 14 14
4 13 22
3 22 13
1.2 Matrizes
Uma matriz é uma função que leva o produto cartesiano de dois conjuntos fini-
tos 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 con-
juntos de índices.
Se uma matriz A tem domínio M × N , dizemos que M é o conjunto de ín-
dices 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 A [m, n]
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 [m, Q]
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 7 1 0 2 0 1 3 7 1 0 2 0 1 3
8 0 1 0 4 5 6 9 7 0 8 1 0 9 9 7 0 8 1 0 9
9 0 0 1 7 8 9 8 4 1 5 0 0 6 8 4 1 5 0 0 6
99 −4 12 13 77
98 14 19 −7 88
32 11 22 9 −6
a b c d e f g b d e
f 3 1 9 0 0 4 9 f 1 0 0
g 4 0 8 1 0 5 9 g 0 1 0
h 5 0 7 0 1 6 9 h 0 0 1
1.3 Produtos
Matrizes e vetores podem ser multiplicados entre si. A versão mais básica dessa
operação de multiplicação envolve dois vetores.
a b c d e e b d c a
11 22 33 44 55 35 41 37 39 43
para cada m em M . É claro que A · x é um vetor sobre M . Analogamente, para produto vetor
qualquer vetor y sobre M , o produto de y por A é o vetor y · A definido pela por matriz
expressão y·A
(y · A) [n] = y · A [ , n]
(A · x) [P ] = A [P, ] · x e (y · A) [Q] = y · A [ , Q] .
y · (A · x) = (y · A) · x .
Feofiloff cap. 1 Vetores e Matrizes 5
(A · B) [l, n] = A [l, ] · B [ , n]
(A · B) [P, Q] = A [P, ] · B [ , Q] .
(BA) [ , Q] = B · (A [ , Q] ) e (yA) [ , Q] = y · (A [ , Q] ) .
Toda matriz identidade será denotada por I , quaisquer que sejam seus conjun- I
tos de índices.
Feofiloff cap. 1 Vetores e Matrizes 6
a b d c
a 1 0 0 0
b 0 1 0 0
c 0 0 1 0
d 0 0 0 1
Uma inversa esquerda de uma matriz A é uma matriz E tal que EA = inversa
I . Uma matriz A é inversível pela esquerda se possui uma inversa esquerda. esquerda
A inversa direita de uma matriz A é uma matriz D tal que AD = I . Uma matriz inversa
A é inversível pela direita se possui uma inversa direita. 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
E = E(AD) = (EA)D = D .
Ademais, as inversas são únicas. De fato, para qualquer matriz D0 tal que AD0 =
I tem-se D0 = (EA)D0 = E(AD0 ) = E = D. Analogamente, para qualquer E 0
tal que E 0 A = I tem-se E 0 = 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 imediata-
mente 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 −2 0 0
1 2 2 0 0
0 1 −1/2 0
0 1 1 0 0
0 0 1/2 0
0 0 2 0 0
0 −1 1 1
0 1 −1 1 0
1 2 3 4
1.5 Transposição
1/2 0 0 0
0 0 0 0
0 0 5 0
0 0 0 2
Ax = xA
e
para todo vetor x tal que o produto de A por x esteja definido. Também é fácil
verificar que
AB
g=B eA
e
(J J)
e [i, j] = J [i, ] Je[ , j] = J [i, ] J [ j, ] .
0 0 1 0
1 0 0 0
0 0 0 1
0 1 0 0
1 0 0 4 0 1 0 0 −4/7 0
0 1 0 5 0 0 1 0 −5/7 0
0 0 1 6 0 0 0 1 −6/7 0
0 0 0 7 0 0 0 0 1/7 0
0 0 0 8 1 0 0 0 −8/7 1
λ1 a1 + · · · + λk ak ,
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:
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, dife-
rente 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 .
Feofiloff cap. 1 Vetores e Matrizes 11
1.5 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 b c a f h a b c d e
f 11 12 13 14 15 f 11 12 13 14 15 g 11 12 13 14 15
g 21 22 23 24 25 g 21 22 23 24 25 k 21 22 23 24 25
k 31 32 33 34 35 k 31 32 33 34 35 i 31 32 33 34 35
Algoritmos Básicos
12
Capítulo 2
Algoritmo de Gauss-Jordan
1
Referências ao célebre Carl Friedrich Gauss (–) e ao (menos célebre) Wilhelm Jordan
(–), que popularizou o algoritmo [Jor20].
13
Feofiloff cap. 2 Algoritmo de Gauss-Jordan 14
Q
0 0 0 0 1
0 0 0 1 0
0 0 1 0 0 P
0 1 0 0 0
1 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 1 0 0
0 0 0 0 0 0
0 0 0 0 1 0 0 0
0 −2 1 44 66 1
0 0 0 0 0 0 1 0
1 33 0 55 77 0
0 0 0 0 0 0 0 1
0 0 0 0 0 0
0 0 0 0
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 0 a matriz definida pelas equações E 0 [h, ] = E [h, ] /E [h, k] e
E 0 [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 0 nos papéis de P e E .
C ASO 2: E [M −P, ] = O .
Devolva E e pare. 2
1 1 2 0
2 1 5 −1
2 2 4 0
−1 1 −3 1
0 1 −1 1
1 0 3 −1
0 0 0 0
0 0 1 −1
0 1 0 0
1 0 0 2
0 0 0 0
0 0 1 −1
1 1 0 2 −1 1 0 1 1 1 2 0
1 2 0 5 8 −5 0 −3 2 1 5 −1
2 2 1 4 −2 0 1 0 2 2 4 0
1 −1 0 −3 −3 2 0 1 −1 1 −3 1
1 0 0 0 1 0 2 3 4 1 0 2 3 4
0 1 0 0 0 1 4 5 6 0 1 4 5 6
0 0 0 0 6 7 8 9 0 0 0 0 0 0
0 0 0 0 9 8 7 6 5 0 0 0 0 0
2.3 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 de-
volve 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.
2
Veja exercício 2.5.
Feofiloff cap. 2 Algoritmo de Gauss-Jordan 17
1 0 0 0 1 0 0 0 1 1 2 0
0 1 0 0 0 1 0 0 2 1 5 −1
0 0 1 0 0 0 1 0 2 2 4 0
0 0 0 1 0 0 0 1 −1 1 −3 1
1 1 0 0 2 −1 0 0 0 1 −1 1
1 2 0 0 −1 1 0 0 1 0 3 −1
2 2 1 0 −2 0 1 0 0 0 0 0
1 −1 0 1 −3 2 0 1 0 0 1 −1
1 1 0 2 −1 1 0 1 0 1 0 0
1 2 0 5 8 −5 0 −3 1 0 0 2
2 2 1 4 −2 0 1 0 0 0 0 0
1 −1 0 −3 −3 2 0 1 0 0 1 −1
1 0 0 0 2 1 2 4 0 1
0 1 0 0 1 1 1 2 1 3
0 0 1 0 2 1 0 5 −1 4
0 0 0 1 −1 −1 1 −2 1 3
1 −1 0 0 1 0 1 2 −1 −2
−1 2 0 0 0 1 0 0 2 5
−1 0 1 0 0 0 −2 1 −1 3
0 1 0 1 0 0 2 0 2 6
Q
0 0 1
P 0 1 0
1 0 0
0 0 0
0 0 0
0 0 0
F 0 , G0 , E 0 , P + h e Q + k
E 0 [ , Q] = E [ , Q] , (2.a)
0
E [ , k] = I [ , h] , (2.b)
F 0 G0 = I , (2.c)
0 0
E = G D. (2.d)
Feofiloff cap. 2 Algoritmo de Gauss-Jordan 19
Q k
0 0 1 0
P 0 1 0 0
1 0 0 0
0 0 0 0
h 0 0 0 1
0 0 0 0
P M −P Q N −Q
0 0 0 0 0 1
0 0 0 0 1 0 P
0 0 0 1 0 0
1 0 0 0 0 0
0 1 0 0 0 0 M −P
0 0 1 0 0 0
G0 [ , M −P −h] = G [ , M −P −h] ,
Mas F [P, P ] G [P, P ] = I por força de (i2), (i4) e da primeira parte de (i5). 2
2.7 Conclusão
O algoritmo de Gauss-Jordan transforma qualquer matriz dada em uma ma-
triz escalonada equivalente. O algoritmo, juntamente com sua análise, constitui
prova do seguinte teorema:
3 2 1 4 5 6 7 8 9 10
4 3 2 5 6 7 8 9 73 1
5 6 3 4 7 9 8 10 1 2
1 5 4 7 5 10 9 6 2 3
32 6 5 8 9 10 9 2 7 4
8 7 6 9 10 5 2 3 4 5
9 8 7 11 3 2 1 4 5 8
Este é o vetor básico associado à base Q. É claro que (GA)x = Gb, donde vetor
F (GA)x = F (Gb) e portanto Ax = b.3 básico
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].
Feofiloff cap. 2 Algoritmo de Gauss-Jordan 24
que
gA = (GA) [h, ] = 0 enquanto gb = (Gb) [h] 6= 0 .
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 Gauss-
Jordan.
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 Gauss-
Jordan: 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 pi-
votaçã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 ma-
triz 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̈ , ] .
Feofiloff cap. 2 Algoritmo de Gauss-Jordan 25
x1 + x2 + x3 + 3x4 = 6
3x1 + 4x2 + x3 + 8x4 = 18
−x1 + x2 − 4x3 − 4x4 = −5
Introdução ao Simplex
26
Feofiloff cap. 3 Introdução ao Simplex 27
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 matriz
de índices se for de um dos três tipos definidos abaixo: simples solúvel, simples 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 justifica-
das 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.
Q n
0 0 1 ≥
P 0 1 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 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
≤ ≤ ≤ ≤ ≤ ≤ ≤ ≤ ≤ ≤ ≤ ≤ ≤ ≤ > h
k Q n
≤ 0 0 1 ≥
P ≤ 0 1 0 ≥
≤ 1 0 0 ≥
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
m < 0 0 0
1 99 0 0 99 0 0 99 88
0 99 0 0 99 0 1 99 88
0 0 0 0 0 0 0 0 0
0 1/2 0 0 1/2 1 0 1/2 0
0 −99 1 1 −99 0 0 −99 88
0 77 0 0 77 0 0 77 −66
1 99 0 99 99 0 0 99 88
0 −99 0 −99 −99 0 −99 −99 88
0 0 0 99 0 0 0 0 0
0 1/2 0 1/2 1/2 1 0 1/2 0
0 0 0 0 0 0 0 0 −1
−99 99 0 −99 99 0 0 99 −66
1 99 0 0 99 0 0 99 88
0 −99 0 −99 −99 0 1 99 88
0 0 0 0 0 0 0 0 0
0 1/2 0 −1/2 1/2 1 0 1/2 0
0 99 1 −99 99 0 0 99 88
0 77 0 −77 77 0 0 77 −66
f [P ] ≥ o ,
E [P, Q] é uma matriz de bijeção e E [M −P, Q] = O ,
equações
1 E [i, k]
E 0 [h, ] = E [h, ] e E 0 [i, ] = E [i, ] − E [h, ]
E [h, k] 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 n
0 0 1 ≥
P 0 1 0 ≥
1 0 0 ≥
0 0 0
0 0 0
0 0 0
m 0 0 0
1 1 5 −1 5
0 1 −1 1 4
0 −1 −3 −1 −8
0 −1 1 2 3
1 0 6 −2 1
0 1 −1 1 4
0 0 −4 0 −4
0 0 0 3 7
0 0 1 0 1
1/2 1 0 0 5/2
−1/2 0 0 1 5/2
3/2 0 0 0 −1/2
1
Dizer que α é negativo é o mesmo que dizer “α < 0”. Analogamente, α é positivo se α > 0.
Feofiloff cap. 3 Introdução ao Simplex 33
2 2 4 0 24
2 0 5 −1 −10
−1 1 −2 1 2
1 1 1 1 0
1 1 2 0 12
0 −2 1 −1 −34
0 2 0 1 14
0 0 −1 1 −12
1 1 2 0 12
0 2 −1 1 34
0 0 1 0 −20
0 −2 0 0 −46
2 2 4 0 24 2 2 4 −8 24
2 0 5 −1 10 2 0 5 −4 10
−1 1 −2 1 2 −1 1 −2 0 2
1 1 1 1 0 1 1 1 −8 0
1 1 2 0 12 1 1 2 −4 12
0 −2 1 −1 −14 0 −2 1 4 −14
0 2 0 1 14 0 2 0 −4 14
0 0 −1 1 −12 0 0 −1 −4 −12
1 0 0 −1/2 5 1 0 0 −2 5
0 1 0 1/2 7 0 1 0 −2 7
0 0 1 0 0 0 0 1 0 0
0 0 0 1 −12 0 0 0 −4 −12
3.3 Análise
Como já anunciamos acima, o Simplex gira em torno de duas propriedades
(compare com a seção 2.4:
f 0 [P +h] ≥ o , (3.a)
0
E [ , Q] = E [ , Q] , (3.b)
E 0 [ , k] = I [ , h] , (3.c)
f 0 [P ] ≥ o , (3.d)
0
E [ , Q−q] = E [ , Q−q] , (3.e)
E 0 [ , k] = I [ , p] , (3.f)
f [h] /E [h, k] ≥ 0 .
f [h]
f 0 [i] = f [i] − E [i, k]
E [h, k]
Feofiloff cap. 3 Introdução ao Simplex 35
Q k n
0 0 1 0 ≥
P 0 1 0 0 ≥
1 0 0 0 ≥
0 0 0 1 ≥ h
0 0 0 0
0 0 0 0
m 0 0 0 0
e f [i] ≥ 0 em virtude de (i0). Suponha agora que E [i, k] é positivo. Então f 0 [i] ≥
0 porque
f [i] f [h]
f 0 [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 0 [i] ≥ 0 para cada i em P + h . 2
para cada i em M − p . 2
Feofiloff cap. 3 Introdução ao Simplex 36
q k n
0 1 0 ≥
P 1 0 0 ≥
0 0 1 ≥ p
0 0 0
0 0 0
0 0 0
m 0 0 0
F̌ Ǧ = Ǧ F̌ = I e E 0 = Ǧ E .
Logo, E 0 [ , k] = I [ , p] . 2
3.4 Convergência
Nosso esboço do Simplex freqüentemente não converge, ou seja, freqüente-
mente não atinge um dos casos terminais (2, 3A ou 4). Enquanto estiver ocor-
rendo 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 ite-
ração, enquanto P não se alterar. A justificativa para esta política está na se-
guinte observação, a ser demonstrada no próximo capítulo: enquanto estiver
Feofiloff cap. 3 Introdução ao Simplex 37
1 2 10 2
0 1 12 2
0 −6 13 3
0 0 0 0
1/2 1 5 1
−1/2 0 7 1
3 0 43 9
0 0 0 0
1 2 10 2
0 1 12 2
0 −6 13 3
0 0 0 0
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 2 0 2 2 2 −2 2 0
2 1 0 −1 −2 0 2 1 0 −1 −2 0
2
Diremos que uma seqüência α1 , α2 , α3 , . . . é crescente se α1 ≤ α2 ≤ α3 ≤ · · · e decrescente
se α1 ≥ α2 ≥ α3 ≥ · · · .
Feofiloff cap. 3 Introdução ao Simplex 38
3.4 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 1 0 0 12
2 5 0 −1 0 1 0 10
−1 −3 1 1 0 0 1 2
−1 −2 −1 0 0 1 0 0
Heurística Simplex
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 ,
39
Feofiloff cap. 4 Heurística Simplex 40
1 2 2 0 1 −2 0 0 2 2 4 0 24
0 1 1 0 0 1 −1/2 0 1 1 2 0 12
0 0 2 0 0 0 1/2 0 2 0 5 −1 10
0 1 −1 1 0 −1 1 1 −1 1 −3 1 2
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 po-
lí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.
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 . k
Seja L∗ o conjunto de todos os p em L para os quais E [p, k] > 0. L∗
2
Ou seja, se M − m não é vazio.
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 L0 o conjunto L + h.
Escolha h0 em M − L0 , se possível distinto de m.
Comece nova iteração com L0 e h0 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 . k
Seja L∗ o conjunto de todos os p em L para os quais E [p, k] > 0. L∗
F 0 [ , h] = D[ , k] , F 0 [ , i] = F [ , i] ,
0
G [h, ] = αh G[h, ] , 0
G [i, ] = G[i, ] + αi G[h, ] ,
E 0 [h, ] = αh E [h, ] , E 0 [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 0 = F F̌ , G0 = ǦG e E 0 = ǦE ,
onde F̌ é a matriz elementar com coluna saliente h definida pela equação F̌
F̌ [ , h] = E [ , k] e Ǧ é a inversa de F̌ . Ǧ
3
Ver solução do exercício 4.2 no apêndice E, página 192.
Feofiloff cap. 4 Heurística Simplex 42
1 0 0 0 1 0 0 0 2 2 4 0 24
0 1 0 0 0 1 0 0 2 0 5 −1 10
0 0 1 0 0 0 1 0 −1 1 −2 1 2
0 0 0 1 0 0 0 1 1 1 1 1 0
2 0 0 0 1/2 0 0 0 1 1 2 0 12 L
2 1 0 0 −1 1 0 0 0 −2 1 −1 −14
−1 0 1 0 1/2 0 1 0 0 2 0 1 14
1 0 0 1 −1/2 0 0 1 0 0 −1 1 −12
3 2 1 4 5 6 7 8 10
4 3 2 5 6 7 −8 −9 11
5 6 3 4 7 −9 8 −10 9
1 −5 4 7 5 −10 9 6 8
9 8 7 11 3 2 1 4 0
4.3 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):
(i0) f [P ] ≥ o ,
(i1) E [P, Q] é de bijeção , E [M −P, Q] = O e E [L−P, ] = O ,
(i2) FG=I,
(i3) GD = E ,
(i4) G [ , M −P ] = I [ , M −P ] ,
onde f é o vetor E [ , n] .
P m Q n
0 0 0 0 0 0 1 ≥
0 0 0 0 P 0 1 0 ≥
0 0 0 0 1 0 0 ≥ L
1 0 0 0 0 0 0 0 0 0 0 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 m 0 0 0
Seja q é o único elemento de Q tal que E [p, q] = 1. Basta mostrar agora que no
fim do caso I.1A
f 0 [P 0 ] ≥ o , (4.a)
E0 [ , Q] = E [ , Q] e E0 [ , k] = I [ , h] , (4.b)
E0 0 0
[L −P , ]= E [L−P, ] , (4.c)
G0 [ , M −P 0 ] = G[ , M −P 0 ] , (4.d)
f 0 [P ] ≥ o , (4.e)
E 0 [ , Q−q] = E [ , Q−q] e E 0 [ , k] = I [ , q] , (4.f)
E0 [L−P, ]= E [L−P, ] , (4.g)
G0 [ , M −P ] = G[ , M −P ] , (4.h)
F 0 G0 = I e G0 D 0 = E 0 . (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 proprieda-
des 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 vir-
tude de (i2). Assim, ao devolver F e G, a heurística está se comportando como
prometeu.
G[ , M −P ] = I [ , M −P ] e
G[P, P ] = I [P, P ] ,
G[M −P, P ] = −D[M −P, Q] Je,
0 1 0 4 4 4 4 1
0 0 1 4 4 4 4 1
1 0 0 4 4 4 4 1
9 8 7 6 5 4 3 1
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 ca-
sos 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áti-
cos é mais freqüente do que se imagina, mas é mascarada pelo efeito dos erros de arredondamento
da aritmética ponto flutuante.
Feofiloff cap. 4 Heurística Simplex 46
1 0 0 0 0 0 1 1
0 1 0 1 −1/2 −3/2 1/2 0
0 0 1 9 −5/2 −11/2 1/2 0
0 0 0 24 9 57 −10 1
1 0 −2 −18 5 11 0 1
0 1 −1 −8 2 4 0 0
0 0 2 18 −5 −11 1 0
0 0 20 204 −41 −53 0 1
1 0 0 0 0 0 1 1
0 −5/2 1/2 2 0 1 −1 0
0 11/2 −3/2 −8 1 0 2 0
0 93 −15 −18 0 0 29 1
1 0 0 0 0 0 1 1
0 −5/4 1/4 1 0 1/2 −1/2 0
0 −9/2 1/2 0 1 4 −2 0
0 141/2 −21/2 0 0 9 20 1
1 0 0 0 0 0 1 1
0 1 0 1 −1/2 −3/2 1/2 0
0 −9 1 0 2 8 −4 0
0 −24 0 0 21 93 −22 1
1 0 0 0 0 0 1 1
0 1 0 1 −1/2 −3/2 1/2 0
0 0 1 9 −5/2 −11/2 1/2 0
0 0 0 24 9 57 −10 1
progresso nos demais casos? Não é difícil verificar que no caso I.1B
e no caso II.1B
f 0 [h] ≥ f [h] , (4.k)
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.
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 proprie-
dade (veja exercício 4.4, página 48): existe uma parte Q0 de N − n tal que
É 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 pri-
meira 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 > · · · .
Feofiloff cap. 4 Heurística Simplex 48
G0 [i, ] = G [i, ] − a [i] G [h, ] /a [h] e f 0 [i] = f [i] − a [i] f [h] /a [h] .
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 heu-
rística Simplex para o caso em que D tem a seguinte forma: existe uma
Feofiloff cap. 4 Heurística Simplex 49
Algoritmo Simplex
Para transformar a heurística Simplex (seção 4.2) num algoritmo é preciso intro-
duzir 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.)
xly
50
Feofiloff cap. 5 Algoritmo Simplex 51
x = −88 33 44 11
u = 0 11 −99 −88
y = −88 33 33 99
v = 0 0 0 0
z = −88 33 44 12
5.3 Algoritmo
Se acrescentarmos a regra lexicográfica à heurística Simplex (veja seção 4.2) ob-
teremos o seguinte
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 . k
Seja L∗ o conjunto de todos os p em L tais que E [p, k] > 0. L∗
Resta descrever os detalhes dos casos I.1A, I.1B e II.1B. O caso I.1A consiste
no seguinte:
5.4 Análise
O comportamento do algoritmo pode ser descrito pelas seguintes propriedades
(compare com as seções 4.3 e 4.4):
1
No entanto, a proposição “os elementos de Q precedem os demais elementos de N − n na
enumeração ∆” não é invariante!
Feofiloff cap. 5 Algoritmo Simplex 54
b c d e f g h a
1 0 0 0 0 0 1 1
0 1 0 1 −1/2 −3/2 1/2 0
0 0 1 9 −5/2 −11/2 1/2 0
0 0 0 24 9 57 −10 1
1 1 1
E[3,7] E [3, ] l E[2,7] E [2, ] l E[1,7] E [1, ]
1 0 −2 −18 5 11 0 1
0 1 −1 −8 2 4 0 0
0 0 2 18 −5 −11 1 0
0 0 20 204 −41 −53 0 1
1 1
E[2,6] E [2, ] l E[1,6] E [1, ]
1 1
E[2,5] E [2, ] l E[3,5] E [3, ]
1 −5/2 1/2 2 0 1 0 1
0 1/2 −1/2 −4 1 2 0 0
0 5/2 −1/2 −2 0 −1 1 0
0 41/2 −1/2 40 0 29 0 1
2 −5 1 4 0 2 0 2
1 −2 0 −2 1 3 0 1
1 0 0 0 0 0 1 1
1 18 0 42 0 30 0 2
E [i, k]
E 0 [i, ] = E [i, ] − E [p, ] = E [i, ] − E [i, k] E 0 [p, ] .
E [p, k]
Como E [i, ] e E 0 [p, ] são lexicograficamente positivos, também E 0 [i, ] é lexico-
graficamente positivo. Suponha, finalmente, que i é diferente de p e E [i, k] é
positivo. Por definição,
1 1
E 0 [i, ] = E [i, k] ( E [i, ] − E [p, ] ) .
E [i, k] E [p, k]
Portanto, E 0 [i, ] m 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 0 [i, ] m o ,
5.5 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 ca-
sos? A resposta a esta pergunta está nas seguintes observações, que dependem
crucialmente do invariante (i0).
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
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.
D [P, Q] Je Ġ [P, P ] = I ,
2|N |−1 .
i h g f e d c b a
1 1 0 0 0 0 0 0 5
4 0 1 1 0 0 0 0 25
8 0 4 0 1 1 0 0 125
16 0 8 0 4 0 1 1 625
8 0 4 0 2 0 1 0 0
b c d e f g h i a
1 1 0 0 0 0 0 0 5 L
0 −4 1 1 0 0 0 0 5
0 −8 4 0 1 1 0 0 85
0 −16 8 0 4 0 1 1 545
0 −8 4 0 2 0 1 0 −40
b d c e f g h i a
1 1 0 0 0 0 0 0 5 L
0 −4 1 1 0 0 0 0 5 L
0 8 0 −4 1 1 0 0 65
0 16 0 −8 4 0 1 1 505
0 8 0 −4 2 0 1 0 −60
1 1 0 0 0 0 0 0 5 L
4 0 1 1 0 0 0 0 25 L
−8 0 0 −4 1 1 0 0 25
−16 0 0 −8 4 0 1 1 425
−8 0 0 −4 2 0 1 0 −100
e b c f d g h i a
1 1 0 0 0 0 0 0 5 L
4 0 1 1 0 0 0 0 25 L
−8 0 0 −4 1 1 0 0 25 L
16 0 0 8 0 −4 1 1 325
8 0 0 4 0 −2 1 0 −150
1 1 0 0 0 0 0 0 5 L
0 −4 1 1 0 0 0 0 5 L
0 8 0 −4 1 1 0 0 65 L
0 −16 0 8 0 −4 1 1 245
0 −8 0 4 0 −2 1 0 −190
1 1 0 0 0 0 0 0 5 L
0 −4 1 1 0 0 0 0 5 L
0 −8 4 0 1 1 0 0 85 L
0 16 −8 0 0 −4 1 1 205
0 8 −4 0 0 −2 1 0 −210
1 1 0 0 0 0 0 0 5 L
4 0 1 1 0 0 0 0 25 L
8 0 4 0 1 1 0 0 125 L
−16 0 −8 0 0 −4 1 1 125
−8 0 −4 0 0 −2 1 0 −250
f b g c d h e i a
1 1 0 0 0 0 0 0 5 L
4 0 1 1 0 0 0 0 25 L
8 0 4 0 1 1 0 0 125 L
−16 0 −8 0 0 −4 1 1 125 L
8 0 4 0 0 2 0 −1 −375
1 1 0 0 0 0 0 0 5 L
4 0 1 1 0 0 0 0 25 L
8 0 4 0 1 1 0 0 125 L
−16 0 −8 0 0 −4 1 1 125 L
−8 0 −4 0 0 −2 1 0 −250
1 1 0 0 0 0 0 0 5 L
0 −4 1 1 0 0 0 0 5 L
0 −8 4 0 1 1 0 0 85 L
0 16 −8 0 0 −4 1 1 205 L
0 8 −4 0 0 −2 1 0 −210
1 1 0 0 0 0 0 0 5 L
0 −4 1 1 0 0 0 0 5 L
0 8 0 −4 1 1 0 0 65 L
0 −16 0 8 0 −4 1 1 245 L
0 −8 0 4 0 −2 1 0 −190
1 1 0 0 0 0 0 0 5 L
4 0 1 1 0 0 0 0 25 L
−8 0 0 −4 1 1 0 0 25 L
16 0 0 8 0 −4 1 1 325 L
8 0 0 4 0 −2 1 0 −150
1 1 0 0 0 0 0 0 5 L
4 0 1 1 0 0 0 0 25 L
−8 0 0 −4 1 1 0 0 25 L
−16 0 0 −8 4 0 1 1 425 L
−8 0 0 −4 2 0 1 0 −100
1 1 0 0 0 0 0 0 5 L
0 −4 1 1 0 0 0 0 5 L
0 8 0 −4 1 1 0 0 65 L
0 16 0 −8 4 0 1 1 505 L
0 8 0 −4 2 0 1 0 −60
1 1 0 0 0 0 0 0 5 L
0 −4 1 1 0 0 0 0 5 L
0 −8 4 0 1 1 0 0 85 L
0 −16 8 0 4 0 1 1 545 L
0 −8 4 0 2 0 1 0 −40
1 1 0 0 0 0 0 0 5 L
4 0 1 1 0 0 0 0 25 L
8 0 4 0 1 1 0 0 125 L
16 0 8 0 4 0 1 1 625 L
8 0 4 0 2 0 1 0 0
4mn .
2
As subtrações estão implícitas nas comparações lexicográficas.
Feofiloff cap. 5 Algoritmo Simplex 61
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 tam-
bé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.
Exercícios
5.1 Verifique que a ordem lexicográfica entre vetores sobre N relativa a qual-
quer enumeração de N é reflexiva (x l x), transitiva (se x l y e y l z
então x l z) e antisimétrica (se x l y e y l x então x = y).
Feofiloff cap. 5 Algoritmo Simplex 63
n − 1 + ··· + n−1
0 m−1 .
Capítulo 6
A, b, c
GA , Gb , c + gA
O algoritmo Simplex discutido nos capítulos anteriores opera sobre uma ma-
triz em que uma determinada coluna e uma determinada linha foram destaca-
das 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 ve-
tores. 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.
64
Feofiloff cap. 6 Forma tradicional do Simplex 65
0 0 0 1 ≥
0 0 1 0 ≥
A 0 1 0 0 ≥ b
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
c ≥ ≥ ≥ ≥ ≥ ≥ ≥ ≥ ≥ ≥ ≥ 0 0 0 0
≤ 0 0 0 1 ≥
≤ 0 0 1 0 ≥
A ≤ 0 1 0 0 ≥ b
≤ 1 0 0 0 ≥
0 0 0 0 0 0
0 0 0 0 0 0
c < 0 0 0 0
GA , Gb , c + gA
−1 1 1 0 0 2
1 2 0 1 0 10
3 −2 0 0 1 6
−3 0 1 0 0
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. 2
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) traduzi-
dos 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 A0 , b0 , c0 tais que
(i0) b0 [P ] ≥ o ,
(i1) A0 [P, Q] é de bijeção, A0 [M −P, Q] = O e c0 [Q] = o ,
(i2) F G = I ,
Feofiloff cap. 6 Forma tradicional do Simplex 67
(i3) A0 = GA, b0 = Gb e c0 = 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 ,
6.5 Conclusão
O algoritmo Simplex transforma qualquer sistema A, b, c em um sistema equi-
valente 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 dife-
rentes? 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 3 −1 1 0 0 10
2 3 −1 1 0 1 0 7
1 1 3 2 0 0 1 8
−3 −1 −5 −2 0 0 0
Parte II
Programação Linear
68
Capítulo 7
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 ma-
triz 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
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
Feofiloff cap. 7 Problema canônico primal 70
1 −1 −1 3 2
5 1 3 −8 44
1 −1 −4 5 −3
4 1 5 3
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.
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.
x [N −Q] = o e Ax = b .
cx = 0 .
Por outro lado, cx0 ≥ o para todo x0 em X(A, b), pois c ≥ o. Logo, x é solução
do problema CP(A, b, c).
1 9 9 9 9 9 9 0
0 −9 −9 −9 −9 −9 −9 1
0 0 0 0 0 0 0 −1
0 9 9 9 −9 −9 −9 1
0 0 0 0 0 0 0
9 9 9 9 9 0 0 0 1 12
9 9 9 9 9 0 1 0 0 13
9 9 9 9 9 0 0 1 0 14
9 9 9 9 9 1 0 0 0 15
0 0 0 0 0 0 0 0 0 0
8 8 8 8 0 0 0 0 0
0 0 0 0 0 15 13 14 12
9 9 9 9 9 −2 0 0 1 12
9 9 9 9 9 −3 0 1 0 13
9 9 9 9 9 −4 1 0 0 14
9 9 9 9 9 0 0 0 0 0
9 9 9 9 9 0 0 0 0 0
8 8 −8 −8 0 −8 0 0 0
0 0 0 0 0 0 14 13 12
0 0 0 0 0 1 4 3 2
x [N −Q] = o e Ax = b .
c (x + λx0 ) = λ c [k] ,
A0 = GA , b0 = Gb e c0 = c + gA .
Feofiloff cap. 7 Problema canônico primal 74
1 2 1 0 1 0 0 12
2 5 0 −1 0 1 0 10
−1 −3 1 1 0 0 1 2
0 1 −2 −1 0 1 0
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ú- terminologia
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 0 , G0 , g 0 são tais que F G = I , F 0 G0 = I e os sistemas
GA, Gb, c + gA e G0 A, G0 b, c + g 0 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 por-
tanto 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 ili-
mitado; (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.
Feofiloff cap. 7 Problema canônico primal 75
7.5 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:
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: encon-
trar números não-negativos x1 , . . , x6 que minimizem −12x1 −20x2 −18x3 −40x4
respeitadas as restrições
4 9 7 10 1 0 600
1 1 3 40 0 1 400
−12 −20 −18 −40 0 0
4/15 −1/15
−1/150 4/150
44/15 4/15
Exercícios
7.1 Suponha que para todo x em X(A, b) existe x0 em X(A, b) tal que cx0 < 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 ilimi-
tados?
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 x0 em X(A, b) tal que S(x0 ) ⊂ 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
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
Feofiloff cap. 8 Problema canônico dual 78
yAx = y (Ax) = yb ,
yAx = (yA) x ≤ cx ,
2 1 −1 −1 3 2
0 5 1 3 −8 44
−1 1 −1 −4 5 −3
4 1 5 3
11/18 1 −1 −1 3 2
5/6 5 1 3 −8 44
−7/9 1 −1 −4 5 −3
4 1 5 3
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.
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. 2
Diante desse lema, é razoável que todo vetor y 0 em Y (A, o) que satisfaça
a condição y 0 b > 0 seja chamado vetor de inviabilidade do problema primal. vetor de
CP(A, b, c). inviabilidade
primal
1 1/2 2 2 4 0 24
0 0 1 1 2 0 12
−1 −1 2 0 5 −1 −10
−1 −1 −1 1 −2 1 2
1 1 1 1
Lema 8.4 (da inviabilidade dual) Se cx0 < 0 para algum vetor x0 em
X(A, o) então o problema dual CD(A, c, b) é inviável e o problema pri-
mal CP(A, b, c) é ilimitado ou inviável.
Feofiloff cap. 8 Problema canônico dual 81
Esse lema justifica o uso do termo vetor de inviabilidade do problema dual vetor de
CD(A, c, b) para designar qualquer vetor x0 em X(A, o) tal que cx0 < 0. inviabilidade
dual
2 2 4 −8 24
1 1 2 −4 12
2 0 5 −4 10
−1 1 −2 0 2
1 1 1 −8
5 7 0 0
2 2 0 1
No caso 1.2 temos c + g0 A ≥ o e portanto −g0 está em Y (A, c). Assim, o par
−g0 , y 0 satisfaz o item (2) do enunciado do algoritmo.
No caso 2, o algoritmo devolve um vetor x em X(GA, Gb) e um vetor x0
em X(GA, o). Os vetores x e x0 também estão em X(A, b) e X(A, o) respectiva-
mente, pois G é inversível. Ademais,
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,
Feofiloff cap. 8 Problema canônico dual 84
X vazio X não-vazio
Y primal inviável primal ilimitado
vazio dual inviável dual inviável
Y primal inviável primal solúvel
não-vazio dual ilimitado dual solúvel
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 pro-
blema 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 (am-
bos 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).
x está em X(A, b) e
o par x, y tem folgas complementares (donde cx = yb).
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 0 em Y (A, o) tal que y 0 b > 0 então existe um vetor
y 00 em Y (A, o) tal que y 00 b ≥ 1. Se existe um vetor x0 em X(A, o) tal que
cx0 < 0 então existe x00 em X(A, o) tal que cx00 ≤ −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 é equiva-
lente à 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
Problema geral
minimizem a expressão c1 x1 + c2 x2 + c3 x3
sujeita às restrições x1 ≥ o
A11 x1 + A12 x2 + A13 x3 ≥ b1
A21 x1 + A22 x2 + A23 x3 = b2
A31 x1 + A32 x2 + A33 x3 ≤ b3
x3 ≤ 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 é for-
mado 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
Feofiloff cap. 9 Problema geral 88
9.2 Dualidade
Há uma fundamental relação de dualidade entre problemas de programação
linear. Por definição, o dual de um ppl cuja matriz é D é o ppl cuja matriz é −D,
e dual
ou seja, a transposta de D com sinal trocado. Assim, o dual do ppl descrito na
seção anterior é o ppl
maximizar a expressão y 1 b1 + y2 b2 + y 3 b3
sujeita às restrições y3 ≤ o
y1 A11 + y2 A21 + y3 A31 ≤ c1
y1 A12 + y2 A22 + y3 A32 = c2
y1 A13 + y2 A23 + y3 A33 ≥ c3
y1 ≥ 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 pro-
blema canônico dual CD(A21 , c1 , b2 ).
minimizar cx + dy
sujeita a Ax + By = f , l≤y≤u e x ≤ o.
minimizar cx maximizar yb
sujeito a x ≥ o e Ax ≥ b sujeito a y ≥ o e yA ≤ c
x1 ≥ o
x3 ≤ o
min c1 x1 + c2 x2 + c3 x3
max
y1 A11 y1 A12 y1 A13 y1 y 1 b1
+ + + +
y2 A21 y2 A22 y2 A23 y 2 b2
+ + + +
y3 y3 A31 y3 A32 y3 A33 y 3 b3
≤ ≤ = ≥ ≥
o c1 c2 c3 o
1
Note que aqui x1 , x2 e x3 são números e não vetores.
Feofiloff cap. 9 Problema geral 91
sob as restrições
15x1 + 16x2 + 17x3 + 18x4 ≤ 19
20x1 + 21x2 + 22x3 + 23x4 = 24
25x1 + 26x2 + 27x3 + 28x4 ≥ 29
x1 ≤ 0
x3 ≥ 0.
11 ≤ y1 15 + y2 20 + y3 25 , pois x1 ≤ 0,
12 = y1 16 + y2 21 + y3 26 , pois x2 não tem restrição de sinal ,
13 ≥ y1 17 + y2 22 + y3 27 , pois x3 ≥ 0,
14 = y1 18 + y2 23 + y3 28 , pois x4 não tem restrição de sinal .
Ax ≤ b , Dv = e e x ≥ o .
yA ≤ c , wD = f e y ≤ o.
Teorema 9.3 (da dualidade) Vale uma e apenas uma das seguintes afir-
mativas:
(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 redução
que os problemas P e D são canônicos. Para não tornar o texto ainda mais indi-
gesto, vamos nos limitar a ilustrar o processo de redução com alguns exemplos.
Faremos isso na próxima seção.
11 15 19 23
12 16 20 24
13 17 21 25
14 18 22
pode ser usado para resolver um ppl arbitrário. Os dois exemplos abaixo ilus-
tram o fenômeno.
Ax + Bz = b ,
Cx + Dz ≤ c ,
x≤o
(veja exemplo numérico na figura 9.5). Esse problema equivale ao seguinte pro-
blema 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.
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 .
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 mini-
mize 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 pro-
blema 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
Feofiloff cap. 9 Problema geral 96
O dual pode ser interpretado como segue. Um fabricante de cálcio em pó, car-
boidratos 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 0 e z 0 tais que y 0 A = o, y 0 B + z 0 ≥ o, z 0 ≥ o e
y 0 d + z 0 e < 0. Mostre que um par y 0 , z 0 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 x0 tal que Ax0 = o e cx0 > 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
Feofiloff cap. 9 Problema geral 98
99
Capítulo 10
Determinantes
é αει + βζη + γδθ − ηεγ − αζθ − βδι. A propriedade mais importante dos deter-
minantes é a “lei do produto”:
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
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 exem-
plo, 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) .
hh1 , h2 , . . , hm , k1 , k2 , . . , kn i
0 1 0 0
0 0 1 0
1 0 0 0
0 0 0 1
|M | − circ(J)
é par e negativa em caso contrário. A matriz identidade, por exemplo, é positiva; negativa
e toda matriz de transposição é negativa. O sinal de uma matriz de permutação
J será denotado por
sig(J) .
Por outro lado, de acordo com o lema 10.1, temos sig(T J) = −sig(J) e tam-
bém sig(T JK) = −sig(JK). Logo, sig(JK) = sig(J)sig(K), como queríamos
demonstrar. 2
uma
Q vez que essas Q duas expressões têm o mesmo valor. De fato, diag(AJ) =
i A [i, ] J [ , i] = i A [i, ϕi] , onde ϕ é a bijeção de M em M definidaQpela equa-
ção
Q J [ϕi, i] = Q1. Se denotarmos por ψ a inversa de ϕ teremos i A [i, ϕi] =
j A [ψj, j] = j J [j, ] A [ , j] = diag(JA).
α β γ 0 1 0
δ ε ζ 0 0 1
η θ ι 1 0 0
det(A) = 0 .
4 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.
Feofiloff cap. 10 Determinantes 105
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.
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) .
de permutação J ,
Q
diag(ABJ) = (AB)[i, ]J [ , i]
Qi Q
= i B [i, ]J [ , i] + αB [k, ]J [ , h] i6=h B [i, ]J [ , i]
Q
= diag(BJ) + αB̌ [h, ]J [ , h] i6=h B̌ [i, ]J [ , i]
= diag(BJ) + α diag(B̌J) ,
Como B̌ tem duas linhas iguais, a propriedade 10.5 garante que det(B̌) = 0.
Portanto, det(AB) = det(B). 2
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. k
Seja F̌ a matriz elementar com coluna saliente h definida pela equação F̌
F̌ [ , h] = A [ , k]
Ǧ [i, h] = αi ,
Seja A0 a matriz ǦA. Então A0 [h, ] = αh A [h, ] e A0 [i, ] = A [i, ] + αi A [h, ] para A0
cada i em M − h. Como A [h, Q] é nulo, temos
A0 [ , Q] = A [ , Q] .
Por outro lado, A0 [i, k] = Ǧ [i, ] A [ , k] = Ǧ [i, ] F̌ [ , h] = (ǦF̌ ) [i, h] = I [i, h] para cada
i em M , donde
A0 [ , k] = I [ , h] .
5
Publicado em , simultaneamente por Jacques P. M. Binet (–) e Augustin-Louis
Cauchy (–).
Feofiloff cap. 10 Determinantes 108
Segue daí que A0 [P +h, Q+k] é uma matriz de bijeção e A0 [M −P −h, Q+k] é nula.
Portanto, a simplicidadade de A0 é maior que a simplicidade de A. Podemos
pois supor, a título de hipótese de indução, que
det(A0 B) = det(A0 ) det(B) .
Como F̌ A0 B = AB e F̌ é elementar, o lema 10.7 garante que
det(AB) = F̌ [h, h] det(A0 B) = F̌ [h, h] det(A0 ) det(B) .
Como A0 = ǦA e Ǧ é elementar, o lema 10.7 garante que det(A0 ) =
Ǧ [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. 2
6
Da mesma forma que αδ e βγ estão presentes no produto de somas (α + β)(γ + δ).
Feofiloff cap. 10 Determinantes 109
α β γ
δ ε ζ
η θ ι
10.6 Conclusão
O determinante de uma matriz quadrada A é um número da forma σ − σ 0 , em
que σ e σ 0 são somas de produtos de elementos de A e cada produto tem exata-
mente 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) .
Exercícios
10.1 Mostre que sig(J)
e = sig(J) para toda matriz de permutação J .
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
indexação das linhas e colunas, ou seja, mostre que det(JAJ)
e = det(A)
para qualquer matriz de permutação J .
10.5 Dê exemplos de matrizes para as quais a delimitação 10.9 vale com igual-
dade. Dê exemplos de matrizes para as quais a delimitação de determi-
nantes 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 ) ,
Feofiloff cap. 10 Determinantes 110
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 compo-
nentes 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 ab-
soluto 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 es-
calonada. 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 δ-bijetora
M × N é δ-escalonada se a matriz δ −1 E é escalonada, ou seja, se existem partes δ-escalonada
P e Q de M e N respectivamente tais que
1
Referência a F. Chio [Chi53], conforme H. Eves [Eve80, sec.3.6]. Veja também Schrij-
ver [Sch86, p.34].
2
Referência a Gabriel Cramer (–).
111
Feofiloff cap. 11 Algoritmo de Gauss-Jordan-Chio 112
F 0 [ , h] = D[ , k] , F 0 [ , i] = F [ , i] ,
δh G[i, ] − δi G[h, ]
G0 [h, ] = G[h, ] , G0 [i, ] = ,
δ
δh E [i, ] − δi E [h, ]
E 0 [h, ] = E [h, ] , E 0 [i, ] = ,
δ
para cada i em M − h. (Veja exemplo numérico na figura 11.2.)
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 0 0
1 0 0 0 0 1 0 0 1 0 1
0 1 0 0 0 0 2 −1 1 0
0 0 1 0 0 5 5 0 0 5
0 0 0 1 0 0 3 1 2 0
0 0 0 0 1 0 0 −5 1 2
1 0 0 0 0 1 0 0 1 0 1
0 1 0 0 0 0 2 −1 1 0
−5 0 1 0 0 0 5 0 −5 5
0 0 0 1 0 0 3 1 2 0
0 0 0 0 1 0 0 −5 1 2
2 0 0 0 0 2 0 0 2 0 2
0 1 0 0 0 0 2 −1 1 0
−10 −5 2 0 0 0 0 5 −15 10
0 −3 0 2 0 0 0 5 1 0
0 0 0 0 2 0 0 −10 2 4
5 0 0 0 0 5 0 0 5 0 5
−5 0 1 0 0 0 5 0 −5 5
−10 −5 2 0 0 0 0 5 −15 10
25 5 −5 5 0 0 0 0 40 −25
−50 −25 10 0 5 0 0 0 −70 60
15 −5 5 −5 0 40 0 0 0 25 40
−15 5 3 5 0 0 40 0 0 15
−5 −25 1 15 0 0 0 40 0 5
25 5 −5 5 0 0 0 0 40 −25
−50 −130 10 70 40 0 0 0 0 130
δh 6= 0 , (11.a)
0 0
FG = δh I , (11.b)
0 0
E = G D, (11.c)
0 −1
E [ , Q] = δh δ E [ , Q] , (11.d)
E 0 [ , k] = δh I [ , h] , (11.e)
0 −1
G [ , M −P −h] = δh δ G[ , M −P −h] . (11.f)
P M −P Q N −Q
0 0 0 0 0 δ
0 0 0 P 0 δ 0
0 0 0 δ 0 0
δ 0 0 0 0 0
0 δ 0 M −P 0 0 0
0 0 δ 0 0 0
para cada i em M −h. Como E [h, Q] é nulo em virtude de (i3), temos a igualdade
desejada. De modo análogo, G0 [h, ] = G [h, ] e
δ 0 0 0 0 δ1 δ6 0 0 0 0 −δ1
0 δ 0 0 0 δ2 0 δ6 0 0 0 −δ2
0 0 δ 0 0 δ3 0 0 δ6 0 0 −δ3
0 0 0 δ 0 δ4 0 0 0 δ6 0 −δ4
0 0 0 0 δ δ5 0 0 0 0 δ6 −δ5
0 0 0 0 0 δ6 0 0 0 0 0 δ
F 0 [ , h] = D[ , k]
= (δ −1 F G)D[ , k]
= δ −1 F (E [ , k])
= δ −1 F (δh F̌ [ , h]) .
Em suma, F 0 = δh δ −1 F F̌ . Logo,
F 0 G0 = δh δ −1 (F F̌ )(ǦG)
= δh δ −1 F (F̌ Ǧ)G
= δh δ −1 F G
= δh I ,
em virtude de (i1). 2
F [ , M −P ] = I [ , M −P ] e F [ , P ] = D [ , Q] Je,
D [M, M ] = I e D [M, N ] = D .
(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 determinan-
tes 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 Dψ
matriz sobre M × M definida pelas equações
(Dψ ) [ , i] = D [ , ψi] .
Portanto, Dψ tem os mesmos componentes que D [ , ψM ] mas suas colunas são in-
dexadas por M . Diremos que Dψ é a submatriz de D definida por ψ. Definições
análogas valem para a matriz E. Eψ
3
Aqui, ψi denota o valor de ψ em i.
Feofiloff cap. 11 Algoritmo de Gauss-Jordan-Chio 117
M N
1 0 0 0 0 0
0 1 0 0 0 0
0 0 1 0 0 0
M 0 0 0 1 0 0
0 0 0 0 1 0
0 0 0 0 0 1
M −Q M ∩Q N ∩Q N −Q
0 0 0 0 0 δ
M −Q 0 0 0 0 δ 0
0 0 0 δ 0 0
δ 0 0 0 0 0
M ∩Q 0 δ 0 0 0 0
0 0 δ 0 0 0
Como Ǧ é uma matriz diagonal, det(Ǧ) = (δh /δ)m−1 . Isso prova a igualdade
desejada. 2
Feofiloff cap. 11 Algoritmo de Gauss-Jordan-Chio 118
ϕ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.
1 0 0 11 21 31 41
0 1 0 12 22 32 42
0 0 1 13 23 33 43
12 −11 0 0 10 20 30
−22 21 0 10 0 −10 −20
10 −20 10 0 0 0 0
21 11 0
22 12 0
23 13 1
21 0 0
22 1 0
23 0 1
21 11 41
22 12 42
23 13 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.
Feofiloff cap. 11 Algoritmo de Gauss-Jordan-Chio 120
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.
δ3 E [4, 4] − δ4 E [3, 4] 5 · 1 + 5 · 15
=
δ 2
3 2 1 4 5 6 7 8 9 10
4 3 2 5 6 7 8 9 73 1
5 6 3 4 7 9 8 10 1 2
1 5 4 7 5 10 9 6 2 3
32 6 5 8 9 10 9 2 7 4
8 7 6 9 10 5 2 3 4 5
9 8 7 11 3 2 1 4 5 8
4m2 n .
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 delimi-
tação polinomial foi originalmente demonstrada por Jack Edmonds [Edm67].
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.
Exercícios
11.1 Use o algoritmo de Gauss-Jordan-Chio para calcular o determinante da
matriz abaixo.
1 2 4 8
1 3 9 27
1 4 16 64
1 5 25 125
Algoritmo Simplex-Chio
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
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 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0
m ≥ ≥ ≥ ≥ ≥ ≥ ≥ ≥ ≥ ≥ 0 0 0
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 . k
Para cada p em M − m, seja δp o número E [p, k] . δp = 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 0 , G0 , E 0 o resultado da pivotação de F, G, E em torno de h, k.
Seja L0 o conjunto L + h.
Escolha h0 em M − L0 , se possível distinto de m.
Comece nova iteração com F 0 , G0 , E 0 , δh , L0 , h0
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 0 , G0 , E 0 o resultado da pivotação de F, G, E em torno de p, k.
Comece nova iteração com F 0 , G0 , E 0 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 L0 o conjunto L + h.
Escolha h0 em M − L0 , se possível distinto de m.
Comece nova iteração com L0 e h0 nos papéis de L e h.
A LTERNATIVA II: h é igual a m .
Feofiloff cap. 12 Algoritmo Simplex-Chio 126
12.2 Análise
A análise da heurística é análoga à do algoritmo de Gauss-Jordan-Chio.
−ω e +ω,
Q Q
onde ω = p q (1 + αpq ) e αpq é o valor absoluto de D [p, Qq] . A delimitação
P
permanece válida se ω for
Q P definido pelo produto de somas p (1 + q αpq ) ou
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 5 6 7 8 10
4 3 2 5 6 7 −8 −9 11
5 6 3 4 7 −9 8 −10 9
1 −5 4 7 5 −10 9 6 8
9 8 7 11 3 2 1 4 0
mn log2 ω .
12.4 Conclusão
Ao receber uma matriz inteira D e índices n e m de coluna e linha respectiva-
mente, 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 pro-
grama deve detectar overflow de operações aritméticas ou fazer aritmética
inteira com precisão ilimitada.
Capítulo 13
Ax∗ = 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
P válidas se
Q P o tamanho
P do sistema for definido pelas expressões i (1+
βi + j αij ) ou ( j i αij ) · ( i βi ).
129
Feofiloff cap. 13 Problemas com dados inteiros 130
Teorema 13.2 (dualidade para dados inteiros) Para qualquer matriz in-
teira 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 se-
guintes afirmações:
(1) existe um vetor inteiro x em X(A, δb) e um vetor inteiro y em
Y (A, δc) tais que cx = yb,
(2) existe um vetor inteiro x em X(A, δb) e um vetor inteiro x0 em
X(A, o) tal que cx0 ≤ −1,
(3) existe um vetor inteiro y em Y (A, δc) e um vetor inteiro y em
Y (A, o) tal que y 0 b ≥ +1,
(4) existe um vetor inteiro x0 em X(A, o) e um vetor inteiro y 0 em
Y (A, o) tais que cx0 ≤ −1 e y 0 b ≥ +1.
Ademais, cada componente de x, x0 , y e y 0 , bem como os números δ, cx,
yb, cx0 e y 0 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 131
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
Q continuaP válido se o tamanhoP doQsistema
P b, c for definido
A, P pelas expressões i (1 + βi + j αij ) · (1 + j γj ) ou j (γj +
α
i ij ) · ( β
i i ).
13.3 Conclusão
O algoritmo Simplex-Chio pode ser usado para resolver o par dual de proble-
mas 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/δ
Algoritmos Polinomiais
132
Capítulo 14
m (m+n) 2n ,
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 Yamnits-
ky-Levin, será discutido no próximo capítulo.
A existência de um algoritmo polinomial para programação linear foi ob-
jeto de especulação por algum tempo. O primeiro algoritmo desse tipo foi des-
crito 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 Sim-
plex, 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 pon-
tos interiores” [Kar84, Gon89, Gon92], que estão ganhado aceitação na prática.
133
Feofiloff cap. 14 Introdução aos algoritmos polinomiais 134
1
Mas as eventuais soluções do problema podem ter componentes fracionários.
Feofiloff cap. 14 Introdução aos algoritmos polinomiais 135
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 du-
alidade. 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 −xA
e ≤ −b ,
−xI ≤ o , −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).
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.
Feofiloff cap. 14 Introdução aos algoritmos polinomiais 136
y A O O O −b
x O Ã −Ã I c
c b −b o 0
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 A0 a matriz A [ , K] . Use o algoritmo de Gauss- A0
Jordan (capítulo 2) para determinar matrizes F e G tais que F G = I e
GA0 é escalonada. Seja P 0 a base de linhas e Q0 uma base de colunas de P0
GA0 . Seja w∗ o único vetor que satisfaz as equações Q0
w∗
w∗ (GA0 ) [ , Q0 ] = c [Q0 ] e w∗ [M −P 0 ] = o .
O vetor y ∗ = w∗ G está em Y (A, c). 2
3
Ou seja, nenhum superconjunto próprio de K tem a propriedade.
4
Mas o algoritmo A não fornece o vetor y.
Feofiloff cap. 14 Introdução aos algoritmos polinomiais 137
y A −A0
c −c0
(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
y ∗ A = w∗ [P 0 ] (GA) [P 0 , ] e yA = w [P 0 ] (GA) [P 0 , ] .
14.4 Redução do V ao PI
O problema PI (A0 , c0 ) consiste em encontrar um ponto interior do poliedro
Y (A0 , c0 ), ou seja, um vetor z tal que zA0 [ , j] < c0 [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ω , A0 = ξA e c0 = ξc + u ,
Y (ξA , ξc + u)
Suponha por um momento que vale a segunda alternativa. Então, por um lado,
onde a primeira desigualdade vale porque x0 não é nulo, uma vez que cx0 não é
nulo. Por outro lado,
ω 0 = ω(A0 ) ω(c0 )
≤ ξ mn ω(A) ξ n ω(c)
= ξ mn+n ω
= n mn+n ω mn+n+1 ,
lg ω 0 = (mn + n) lg n + (mn + n + 1) lg ω .
14.5 Conclusão
Este capítulo mostrou como um algoritmo para o problema do ponto inte-
rior, 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 pro-
blema V, seguida de uma redução ao problema PI . Se o algoritmo para o
problema PI (A0 , c0 ) tiver complexidade limitada por um polinômio em m(A0 ),
n(A0 ) e lg ω(A0 , c0 ) então a complexidade do algoritmo resultante para o pro-
blema 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 Yamnits-
ky-Levin (veja próximo capítulo) para o problema PI (A0 , c0 ) é limitada pelo po-
linômio
70 (m0 + 1)4 (m0 + n0 + 1) lg ω 0 ,
70 m6 n lg ω e 70 m5 n2 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(A0 ) componentes não-nulos.
Capítulo 15
Algoritmo de Yamnitsky-Levin
141
Feofiloff cap. 15 Algoritmo de Yamnitsky-Levin 142
λ 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 ]. [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 M+0
T
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 abso- volume
luto 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 0 é a matriz do tetraedro gerado por uma permutação t00 , . . , t0m
de t0 , . . , tm então existe uma matriz de permutação J tal que T 0 = JT ; como
det(T 0 ) = sig(J) det(T ) = ± det(T ), temos absdet(T 0 ) = 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.
Feofiloff cap. 15 Algoritmo de Yamnitsky-Levin 143
−4 −4 −4 1 −4 −4 −4
20 −4 −4 1 20 −4 −4
−4 20 −4 1 −4 20 −4
−4 −4 20 1 −4 −4 20
T̄ [i, ] = ti − t0 .
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,
a ≥ o e a ≥ A [i, ]
ζ > 0.
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 α ≤ δ ≤ β .
Feofiloff cap. 15 Algoritmo de Yamnitsky-Levin 146
zi A = z0 A + A [i, ] ≤ z0 A + a ≤ δc
ζ∗ ≥ 1 , z ∗ A + ζ ∗ a ≤ δc , 1 ≤ δ ≤ 4ω̇ e |z ∗ | ≤ 8ω̇ ,
onde ω̇ = ω(A)ω(a)ω(c).
É claro que A0 é definida sobre M+0 × N+0; a notação está sendo ajustada de
modo que 0 não esteja em N . Sejam b0 e c0 os vetores definidos por
b0 [M ] = o , b0 [0] = 1 , c0 [N ] = c e c0 [0] = 0 .
y 0 A0 ≤ δc0 , A0 x0 = δb0 , x0 ≥ o , y 0 b0 = c0 x0 ,
|y 0 | ≤ 4ω̇ , |x0 | ≤ 4ω̇ ,
y 0 A0 ≤ δc0 , y 00 A00 ≤ o , y 00 b0 ≥ 1 ,
|y 0 | ≤ 4ω̇ , |y 00 | ≤ 4ω̇ .
ζ∗ ≥ 1
ζ ∗ = y 0 [0] = y 0 b0 = c0 x0 ≥ z 0 b0 = z 0 [0] = ζ .
ζ ∗ ≥ y 00 [0] = y 00 b0 ≥ 1 e |z ∗ | ≤ |y 0 | + |y 00 | ≤ 8ω̇ .
15.4 Algoritmo
O objetivo do algoritmo é encontrar um ponto interior do poliedro Y (A, c). O al-
goritmo 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 é de-
formado 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).
Ajuste a notação de modo que M = {1, . . , m}. Adote a abreviatura ω para m≥2
o tamanho do sistema A, c e a abreviatura ω̈ para a expressão 4ω 2 . Em suma,
ω = ω(A) ω(c) e ω̈ = 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 ). t?0
Para i = 1, . . , m, seja t?i o vetor t?i
C ASO 1: θ ≥ 1/ω̈ m .
1
Seja t o vetor m+1 (t0 + · · · + tm ). t
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. h
3
Para efeito desta descrição informal, suponha que o poliedro é limitado (veja exercício 15.4,
página 159).
Feofiloff cap. 15 Algoritmo de Yamnitsky-Levin 149
1
Para i = 0, 1, . . , m, seja ρi o número 1 − πi .
m2 π h
Sejam t00 , . . , t0m os vetores definidos pelas equações t0h = th
1 1
e t0i = ti + (1 − ) th para cada i distinto de h.
ρi ρi
ρ
Seja θ0 o número Q h θ .
i ρi
Comece nova iteração com t00 , . . , t0m e θ0 nos papéis de t0 , . . , tm e θ.
C ASO 2: θ < 1/ω̈ m .
Pare sem nada devolver. 2
O tetraedro gerado por t?0 , . . , t?m é tão grande que contém todos os even-
tuais 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 t00 , . . , t0m deixa fixo o vértice th do te-
traedro e multiplica por 1/ρi a aresta que liga os vértices ti e th .
CadaQρ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 θ0 do novo
tetraedro é estritamente menor que θ.
1 1
Ǧ [ , i] = I [ , i] , Ǧ [i, h] = 1 − , Ǧ [h, h] = 1 ,
ρi ρi
onde as duas primeiras equações valem para cada i distinto de h. (Veja a fi-
gura 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 0 = ǦT (15.c)
ρ0 0 0 0 0 1 − ρ0 1/ρ0 0 0 0 0 1 − 1/ρ0
0 ρ1 0 0 0 1 − ρ1 0 1/ρ1 0 0 0 1 − 1/ρ1
0 0 ρ2 0 0 1 − ρ2 0 0 1/ρ2 0 0 1 − 1/ρ2
0 0 0 ρ3 0 1 − ρ3 0 0 0 1/ρ3 0 1 − 1/ρ3
0 0 0 0 ρ4 1 − ρ4 0 0 0 0 1/ρ4 1 − 1/ρ4
0 0 0 0 0 1 0 0 0 0 0 1
15.5 Invariantes
Para compreender o algoritmo basta observar as seguintes propriedades invari-
antes
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
P πi = (t − ti )A [ , P
k] . Essa última expressão é igual a (m+1)tA [ , k] −
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 .
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 m≥2
ρi > 0 (15.g)
P P
para
P todo i. Finalmente, convém calcular ρi . Como ρi = (m + 1) +
2
P
πi /(m πh ) e πi = 0, temos
P
ρi = m + 1 . (15.h)
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.
Feofiloff cap. 15 Algoritmo de Yamnitsky-Levin 152
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,
para todo j em M e
P
j zi [j] /δ ≤ m(2ω̈ + 1)/δ ≤ m(2ω̈ + 1) ≤ 4mω̈ .
Diremos que esse número é o fator de contração da iteração e mostraremos que contração
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 .
(σσk ) εk−1 ≥ (σ + σk − ε) εk
= (σ0 + · · · + σk−1 − (k − 1)ε + σk − ε) εk
= (σ0 + · · · + σk − kε) εk .
ρi ≥ (1 + 1/m) (1 − 1/m2 )m .
Q
m ϕ lg ϕ ψ
2 9/8 0.16992 · · · 0.055555 · · ·
3 256/243 0.07518 · · · 0.031250 · · ·
4 16875/16384 0.04259 · · · 0.020000 · · ·
5 1990656/1953125 0.02745 · · · 0.013888 · · ·
6 367653125/362797056 0.01918 · · · 0.010204 · · ·
1 m 1 1
ϕ = (1 − ) (1 − )−1 ψ=
m2 m 2(m + 1)2
Observe agora que 1/m2 e 1/m estão entre 0 e 1, uma vez que m ≥ 2. Portanto, m≥2
o logaritmo da delimitação 15.9 produz as desigualdades
1 1
m ln 1 − 2
− ln 1 − ≥
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
= 2
1− + 3
1− 2 + 4
1 − 3 + ···
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
15.11 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 arit-
mética; esse custo é considerável, pois os números envolvidos podem ter nu-
meradores 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 ω.
C ASO 1: θ ≥ ω̈ −1 .
Seja t o número 12 t0 + 12 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 t00 e t01 da seguinte maneira:
se π0 ≥ 0 então t00 = t0 e t01 = t senão t01 = t1 e t00 = t.
Seja θ0 o número θ/2.
Comece nova iteração com t00 , t01 e θ0 nos papéis de t0 , t1 e θ.
Feofiloff cap. 15 Algoritmo de Yamnitsky-Levin 158
C ASO 2: θ < ω̈ −1 .
Pare sem nada devolver. 2
λt0 + (1 − λ)t1 = y .
É preciso mostrar que existe λ0 entre 0 e 1 tal que y = λ0 t00 + (1 − λ0 )t01 . Como
estamos no caso 1.2, temos ta [k] ≥ c [k] . Como ya [k] ≤ c [k] , vale um das alterna-
tivas:
t0 a [k] ≤ c [k] ≤ t1 a [k] ou t0 a [k] ≥ c [k] ≥ t1 a [k] .
0 ≤ λ0 ≤ 1 .
z 0 + 1 ≤ z1 , z0 a ≤ δc e z1 a ≤ δc ,
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
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 refe-
rir ao primeiro algoritmo como Simplex Primal. 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 desigual-
dade 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.
161
Feofiloff ap. A Simplex Dual 162
k Q n
≤ 0 0 1
≤ 0 1 0
≤ 1 0 0
0 0 0 0
0 0 0 0
0 0 0 0
m < 0 0 0
≥ ≥ ≥ ≥ ≥ ≥ ≥ ≥ ≥ ≥ ≥ ≥ ≥ < h
m ≥ ≥ ≥ ≥ ≥ ≥ ≥ ≥ ≥ ≥ ≥ ≥ ≥
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. 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
Q n
0 0 1
P 0 1 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 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
m 0 0 0 ≥ ≥ ≥ ≥ ≥ ≥ ≥ ≥ ≥ ≥
f [k]
f0 = f − E [p, ] .
E [p, k]
É fácil verificar que f 0 [Q0 ] é 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 0 [q] ≥ f [q] . De modo mais geral, para cada j em N −n, temos f 0 [j] ≥ f [j] se
E [p, j] ≥ 0 e f 0 [j] ≤ f [j] em caso contrário. Portanto, para garantir f 0 [N −n] ≥ o
é necessário e suficiente que k satisfaça a condição
f [k]
f [j] ≥ E [p, j] (A.b)
E [p, k]
Feofiloff ap. A Simplex Dual 164
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 0 não
é necessariamente “mais simples” que E , uma vez que E 0 [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 1 0 0 −5
4 1 2 0 1 0 11
3 4 −5 0 0 1 8
3 1 0 0 0 0 0
−2 1 −1 −1 0 0 5
6 0 3 1 1 0 6
11 0 −1 4 0 1 −12
5 0 1 1 0 0 −5
−13 1 0 −5 0 −1 17
39 0 0 13 1 3 −30
−11 0 1 −4 0 −1 12
16 0 0 5 0 1 −17
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 0 , G0 , E 0 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 0 , G0 e E 0
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). 2
f [k]
f 0 [n] = f [n] − E [p, n] ≤ f [n] ,
E [p, k]
sendo f 0 = E 0 [m, ] , pois E [p, n] e E [p, k] são negativos e f [k] ≥ 0. Portanto, numa f0
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.
Feofiloff ap. A Simplex Dual 166
1 0 0 0 −6 1 2 4 1 0 0 14
0 1 0 0 3 −2 −1 −5 0 1 0 −25
0 0 1 0 −2 1 0 2 0 0 1 14
0 0 0 1 5 3 3 6 0 0 0 0
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. Es-
creva e analise o algoritmo Simplex Dual com regra de Bland.
Apêndice B
Análise de sensibilidade
É 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 dife-
rente č. 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 170
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.
β G [p, m] ≥ −G [p, ] b
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̌.
Fato Se γ ≥ (yA−c) [n] então o sistema GA, Gb, č−yA é simples solúvel
com base de colunas Q.
Feofiloff ap. B Análise de sensibilidade 171
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 m
de n. Seja m o único elemento de P tal que (GA) [m, n] = 1. m
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)
Segue daí e de (B.b) que o sistema GA, Gb, č − y̌A é simples e tem base de colu-
nas Q. 2
É ó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.
Feofiloff ap. B Análise de sensibilidade 172
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 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 ,
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 9 7 10 1 0 600
1 1 3 40 0 1 400
−12 −20 −18 −40 0 0
4/15 −1/15
−1/150 4/150
−44/15 −4/15
4 9 7 10 1 0 β + 600
1 1 3 40 0 1 400
−12 −20 −18 −40 0 0
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:
1 1
x1 = 3 400 , x2 = x3 = 0 , x4 = 3 20 , x5 = x6 = 0 . (B.c)
1 1
x̌1 = 3 400 + 15 4β , x̌2 = x̌3 = 0 ,
1 1
x̌4 = 3 20 − 150 β , x̌5 = x̌6 = 0 .
4 9 7 10 1 0 600
1 1 3 40 0 1 400
γ − 12 −20 −18 −40 0 0
4/15 −1/15
−1/150 4/150
4γ/15 − 44/15 −γ/15 − 4/15
É fácil verificar que o conjunto B é convexo, ou seja, que para todo par b1 , b2 conjunto
de elementos de B e todo par λ1 , λ2 de números não-negativos, se λ1 + λ2 = 1 convexo
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 b0 o vetor λ1 b1 + λ2 b2 e x0 o vetor λ1 x1 + λ2 x2 . Então
x0 ≥ o e Ax0 = λ1 Ax1 + λ2 Ax2 = λ1 b1 + λ2 b2 = b0 , donde x0 está em X(A, b0 ).
A existência de um tal x0 mostra que b0 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.
Por definição, ϕ(b, c) = maxy yb para y variando em Y (A, c). Mas é possível
dizer mais: existe uma parte finita Y 0 de Y (A, c) tal que ϕ(b, c) = maxy yb para
y variando em Y 0 .
ϕ(b, c) = max { y1 b, y2 b, . . , yk b }
para todo b em B.
cxb = maxQ yQ b ,
x [N −Q] = o e GQ Ax = GQ b .
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.
Feofiloff ap. B Análise de sensibilidade 177
178
Feofiloff ap. C Poliedro canônico primal 179
Resta mostrar que as duas alternativas não podem ser simultaneamente ver-
dadeiras. 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. 2
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
P que os elementos de Z são z1 , . . , zk e considere
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 ,
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). 2
C.3 Vértices
A folga, ou suporte, de um elemento x de X(A, b) é o conjunto de todos os folga
índices j em N para os quais x [j] > 0. A folga de x será denotada por suporte
S(x) .
Um vetor x em X(A, b) é básico se sua folga S(x) é minimal, ou seja, se não vetor básico
existe x0 em X(A, b) tal que S(x0 ) ⊂ 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 1 0 1 0 9
0 0 1 0 −3 0 1 2 8
0 1 0 0 −4 7 −1 3 7
1 0 0 0 3 6 1 1 6
6 7 8 9 0 0 0 0
5 8 7 8 0 0 1 0
0 0 8 9 0 1 0 0
Nossa definição de vetores básicos tem um caráter “intrínseco”: ela não de-
pende 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.
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
Au = o , u [S] 6= o e 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. 2
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).
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 satis-
fató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).
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 λ0 tal
que x + λ0 u está em X(A, b) e S(x + λ0 u) ⊂ S(x). A partir daí, nossa hipótese
de indução garante que x + λ0 u é uma combinação convexa de vértices.
0
Como x é combinação convexa de x − λu e x + λ0 u (de fato, x = λ+λ λ
0 (x −
λ 0
λu) + λ+λ0 (x + λ u)), e esses dois vetores são combinações convexas de vértices,
também x é combinação convexa de vértices. 2
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).
Mas (vA) [N −K] 6= o, uma vez que vA = (GA) [i, ] 6= o. Assim, vale a alterna-
tiva (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 ,
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 ,
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.
Feofiloff ap. D Poliedro canônico dual 187
S(y) .
uma vez que (yA) [k] < c [k] enquanto (y 0 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
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]
λ ≤ (D.a)
(vA) [j]
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. 2
Feofiloff ap. D Poliedro canônico dual 188
Uma face minimal de Y (A, b) é o conjunto de todos os vetores básicos que face minimal
têm uma mesma folga. Assim, dois vetores básicos, digamos z e z 0 , pertencem
à mesma face minimal se e só se S(z) = S(z 0 ). O corolário D.4 mostra que z e
z 0 estão na mesma face minimal se e só se zA = z 0 A. Toda face minimal é um
conjunto afim, no seguinte sentido.
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 vértice
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 0 A implica
em z = z 0 , e portanto todo vetor básico é um vértice.
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).
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 pro-
blema CD(A, c, b).
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 0 . De acordo com a proposição D.5, o vetor
λz + (1 − λ)z 0 também está em Y (A, b), qualquer que seja λ. Seja i um índice tal
que z [i] 6= z 0 [i] . Como
(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 λ0 tal
que y − λ0 v está em Y (A, c) e S(y − λ0 v) ⊂ S(y). A partir daí, nossa hipótese de
indução garante que y − λ0 v é uma combinação convexa de vértices.
Como y é combinação convexa de y + λv e y − λ0 v, e esses dois vetores são
combinações convexas de vértices, também y é combinação convexa de vérti-
ces. 2
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 191
Exercícios resolvidos
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]]
E [P 0 , Q2 ] · x = o e x [q2 ] = 1 . (E.b)
E [P −P 0 , q2 ] = o . (E.c)
GD2 x = o , (E.d)
G2 D2 x = o .
|Q2 | ≤ |Q1 | .
(c − gA) [Q] = o ,
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.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 índi-
ces h e k e executa uma pivotação de G, E em torno de h, k.
q q̇ n
h 1 > ≥
m 0
Exercícios
E.1 Aplique a heurística Simplex às matrizes descritas abaixo.
2 2 2 2 2 0 2 2 2 −2 2 0
2 1 0 −1 −2 0 2 1 0 −1 −2 0
E.2 Mostre como eliminar o processo iterativo dentro do caso 3 mediante uma
escolha criteriosa de k.
Referências Bibliográficas
[Bla77] R. Bland. New finite pivoting rules for the simplex method. Mathe-
matics of Operations Research, 2:103–107, 1977. 62
[Chi53] F. Chio. Mémoire sur les fonctions connues sous le nom de résultantes
ou de dèterminants. Turin, 1853. 111, 117
199
Feofiloff Referências Bibliográficas 200
base, 65 Dantzig, 69
de colunas, 13, 27 decrescente, 37, 47
de linhas, 13, 27 delimitação do determinante
de matriz escalonada, 13 produto de produtos, 120
de matriz simples, 27 produto de somas, 108, 119
Beale, 49 det( ), 103
bijeção (matriz de), 7 determinante, 103
202
Feofiloff Índice Remissivo 203
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
Alfabeto grego
α A alfa ι I iota ρ P rô
β B beta κ K kapa σ Σ sigma
γ Γ gama λ Λ lambda τ T tau
δ ∆ delta µ M mü υ Υ upsilon
ε E epsilon ν N nü ϕ Φ fi
ζ Z zeta ξ Ξ ksi χ X qui
η H eta o O ômicron ψ Ψ psi
θ Θ téta π Π pi ω Ω ômega