UNIVERSIDADE CATÓLICA DE GOIÁS DEPARTAMENTO DE COMPUTAÇÃO
BACHARELADO EM CIÊNCIA DA COMPUTAÇÃO
UM PEQUENO ESTUDO SOBRE OTIMIZAÇÃO LINEAR
MAURÍCIO PEREIRA DE OLIVEIRA
i UNIVERSIDADE CATÓLICA DE GOIÁS
DEPARTAMENTO DE COMPUTAÇÃO
BACHARELADO EM CIÊNCIA DA COMPUTAÇÃO
UM PEQUENO ESTUDO SOBRE OTIMIZAÇÃO LINEAR
Trabalho de Conclusão de Curso apresentado por Maurício Pereira de Oliveira à Universidade Católica de Goiás, como requisito parcial para obtenção do título de Bacharel em Ciência da Computação aprovado em 26/06/2009 pela Banca Examinadora:
Professor Marco Antonio F. Menezes, Dr. UCG – Orientador Professor Jeová Martins Ribeiro, Esp. UCG
Professora Bercholina Honorato Alves, Ma. UCG
ii
UM PEQUENO ESTUDO SOBRE OTIMIZAÇÃO LINEAR
MAURÍCIO PEREIRA DE OLIVEIRA
Trabalho de Conclusão de Curso apresentado por Maurício Pereira de Oliveira à Universidade Católica de Goiás – Departamento de Computação, como parte dos requisitos para obtenção do título de Bacharel em Ciência da Computação.
_____________________________ _________________________________ Professor Marco A. F. Menezes, Dr. Professor Jeová Martins Ribeiro, Esp.
iv
AGRADECIMENTOS
À minha mãe e meus irmãos pelo apoio e incentivo que serviram de estímulo para que eu pudesse alcançar meus objetivos.
v
RESUMO
O objetivo deste trabalho é realizar um estudo sobre otimização linear. Os problemas de programação linear, programação linear inteira e programação linear inteira 0-1 são apresentados. O método simplex, devido a Dantzig, resolve o problema de programação linear; mas o fato de um algoritmo resolver um problema não significa que seja viável na prática, por isso a importância de se estudar complexidade de algoritmos. Foi usado o problema de Klee e Minty, além de três lemas e um teorema, conforme Papadimitriou e Steiglitz, para demonstrar que no pior caso, o método simplex tem complexidade de tempo exponencial.
Palavras-chave: otimização, otimização linear, programação linear, programação linear
vi
ABSTRACT
The goal of this work is to make a study about linear optimization. The linear programming, integer linear programming and 0-1 integer linear programming problems are presented. The simplex method, due to Dantzig, solves the linear programming problem; but the fact that an algorithm solving a problem, not mean that it is feasible in practice, so the importance of studying complexity of algorithms. Was used the problem of Klee and Minty, and three slogans and one theorem, according with Papadimitriou and Steiglitz, to show that in the worst case, the simplex method has exponential time complexity.
Keywords: optimization, linear optimization, linear programming, integer linear
vii UM PEQUENO ESTUDO SOBRE OTIMIZAÇÃO LINEAR
SUMÁRIO
LISTA DE FIGURAS ... viii
LISTA DE TABELAS ... ix
LISTA DE ABREVIATURAS E SIGLAS ... x
INTRODUÇÃO ... 1
UM POUCO SOBRE MODELAGEM ... 2
2.1 O Processo da modelagem ... 2
2.2 Um problema de designação... 3
2.2.1 O problema ... 3
2.2.2 Um modelo ... 4
INTRODUÇÃO À PROGRAMAÇÃO LINEAR ... 6
3.1 O problema primal ... 6
3.2 O problema dual ... 11
3.3 O método simplex ... 12
3.3.1 Algoritmo mestre ... 13
3.3.2 Fase 1 ... 14
3.3.3 Transição da fase 1 para a fase 2 ... 15
3.3.4 Fase 2 ... 16
COMPLEXIDADE DE ALGORITMOS ... 22
4.1 Introdução à complexidade de algoritmos ... 22
4.1.1 Complexidade média ... 24
4.1.2 Complexidade pessimista ... 24
4.2 Análise assintótica ... 26
4.3 Complexidade do algoritmo simplex ... 28
UMA INTRODUÇÃO À PROGRAMAÇÃO LINEAR INTEIRA ... 33
5.1 O problema de otimização combinatória ... 33
5.2 Os problemas de programação linear inteira ... 34
CONCLUSÕES ... 38
viii
LISTA DE FIGURAS
ix
LISTA DE TABELAS
x
LISTA DE ABREVIATURAS E SIGLAS
PL Programação Linear
UM PEQUENO ESTUDO SOBRE OTIMIZAÇÃO LINEAR
CAPÍTULO I INTRODUÇÃO
A otimização é uma subárea interdisciplinar. Ela pode ser vista como uma área da Matemática Aplicada, em Matemática; uma área da Pesquisa Operacional, em Engenharias; ou ainda uma área da Matemática Computacional, em Computação.
Como o próprio nome sugere, a otimização visa encontrar, quando existir, a melhor solução (ou as melhores soluções) para um problema. O problema de otimização consiste em encontrar, se possível, os minimizadores (ou maximizadores) de uma função em uma determinada região.
O objetivo deste trabalho é apresentar um estudo sobre uma área da otimização, a otimização linear. Um problema de otimização é um problema de otimização linear quando as funções envolvidas são lineares.
No capítulo 2, será apresentado o processo de modelagem de problemas, e o passo da formulação será exemplificado com um problema de programação linear inteira 0-1.
No capítulo 3, estudaremos os fundamentos da programação linear e o método simplex, devido a Dantzig.
No capítulo 4, faremos uma introdução à complexidade de algoritmos e verificaremos que, no pior caso, o método simplex tem complexidade de tempo exponencial, utilizando o problema de Klee e Minty, além de três lemas e um teorema conforme Papadimitriou e Steiglitz.
No capítulo 5, definiremos os problemas de programação linear inteira e programação linear inteira 0-1.
No capítulo 6 são apresentadas as conclusões deste trabalho.
CAPÍTULO II
UM POUCO SOBRE MODELAGEM
Nosso objetivo neste capítulo é estudar o processo de modelagem de problemas. Um modelo é uma representação simplificada da realidade. Modelos são ferramentas úteis para uma melhor visualização e entendimento de problemas reais.
Como referência para o estudo de modelagem sugerimos Goldbarg e Luna [6].
2.1 O Processo da modelagem
No processo de tradução da realidade para um determinado modelo, é muito difícil considerar todos os elementos envolvidos no problema. Mas, como o objetivo da modelagem é tornar a visão da realidade o mais simples e clara possível, devemos considerar apenas os aspectos significativos, definidos de acordo com o enfoque e contexto do problema tratado. O modelo deve ser tal que as conclusões obtidas através de sua análise e/ou operações seja estendida à realidade. A compreensão e definição do problema são de grande relevância para o processo de modelagem.
O processo de modelagem se divide em alguns passos, conforme a Figura 2.1 (veja Ravindran, Phillips e Solberg [11]).
Figura 2.1 – O processo da modelagem.
O passo da formulação consiste em traduzir a realidade empírica para sentenças lógicas e dados objetivos, a fim de obter um modelo matemático. Essa tradução está sujeita a erros e falhas de comunicação. Não existem técnicas precisas para conseguir um modelo
adequado, por isso é importante a capacidade de síntese, capacidade de análise, intuição, experiência, criatividade, além de outros fatores cognitivos.
O próximo passo é a dedução do modelo. Nesta etapa buscamos analisar e resolver o modelo através de algoritmos específicos. Geralmente, são usados métodos numéricos e programas de computador nesta fase.
Em seguida, é feita uma interpretação de uma solução do modelo para uma solução do sistema real representado. Esta fase envolve o julgamento humano, sendo que o uso da experiência e bom senso são de significativa relevância. Se a solução do modelo não for compatível com a realidade, ou seja, se o modelo não for validado, é necessário reformular o mesmo. A reformulação será repetida até que uma solução adequada para o sistema real seja encontrada.
Depois de validado, o modelo poderá contribuir para a tomada de decisões.
A otimização é uma subárea interdisciplinar. Ela pode ser vista como uma área da Matemática Aplicada, em Matemática; uma área da Pesquisa Operacional, em Engenharias; ou ainda uma área da Matemática Computacional, em Computação.
Como o próprio nome sugere, a otimização visa encontrar , quando existir, a melhor solução (ou as melhores soluções) para um problema. O problema de otimização consiste em encontrar, se possível, os minimizadores (ou maximizadores) de uma função em uma determinada região.
A seguir estudaremos o passo da formulação para um problema específico.
2.2 Um problema de designação
Com base em Fang e Puthenpura [4], extraímos o seguinte problema de otimização.
2.2.1 O problema
Cinco pessoas (A, B, C, D, E) estão designadas para trabalhar em cinco projetos diferentes (1, 2, 3, 4, 5). A Tabela 2.1 mostra quanto tempo (em dias) uma determinada pessoa consegue finalizar um projeto específico.
Tabela 2.1 – Dados gerais do problema. Pessoas Projetos 1 2 3 4 5 A 5 5 7 4 8 B 6 5 8 3 7 C 6 8 9 5 10 D 7 6 6 3 6 E 6 7 10 6 11 2.2.2 Um modelo
Neste caso definimos xij, i = 1,2,...,5 (i = 1, pessoa A e assim por diante) e j = 1,2,..,5,
os projetos pelas quais essas pessoas podem ser designadas responsáveis. A variável xij pode
ser definida como:
1, se a pessoa i for designada para o projeto j
0, caso contrário.
Nosso interesse agora é o de minimizar o custo para a execução dos projetos. Assim, utilizamos os dados da Tabela 2.1 para construir o valor da função objetivo, a saber:
60( 5x11 + 5x12 + 7x13 + 4x14 + 8x15 + 6x21 + 5x22 + 8x23 + 3x24 + 7x25 + 6x31 + 8x32 + 9x33 + 5x34 + 10x35 + 7x41 + 6x42 + 6x43 + 3x44 + 6x45 + 6x51 + 7x52 + 10x53 + 6x54 + 11x55 ).
Nosso objetivo de minimização está sujeito a algumas restrições. Sabemos que cada pessoa é designada para realizar um único projeto, isto é,
∑
= 5 1 j xij = 1, i = 1, 2, ..., 5,e que cada projeto só poderá ser realizado por um única pessoa, isto é,
Portanto, o nosso modelo matemático que tenta traduzir uma particular realidade do problema clássico de designação (assignment problem, em inglês), é dado pelo problema de otimização
minimizar 60( 5x11 + 5x12 + 7x13 + 4x14 + 8x15 + 6x21 + 5x22 + 8x23 + 3x24 + 7x25 + 6x31 + 8x32 + 9x33 + 5x34 + 10x35 + 7x41 + 6x42 + 6x43 + 3x44 + 6x45 + 6x51 + 7x52 + 10x53 + 6x54 + 11x55 ). Sujeito a:
∑
= 5 1 j xij = 1, i = 1, 2, ..., 5∑
= 5 1 i xij = 1, j = 1, 2, ..., 5 xij∈{ }
0,1 , i = 1, 2, ..., 5 e j = 1, 2, ..., 5.O modelo obtido nesta seção envolve apenas funções lineares cujas variáveis de decisão podem assumir somente valores inteiros (mais especificamente, 0 ou 1).
CAPÍTULO III
INTRODUÇÃO À PROGRAMAÇÃO LINEAR
Neste capítulo estamos interessados no estudo dos fundamentos da programação linear (PL), em seus formatos primal e dual, e na solução de problemas de PL com o uso do método simplex. Primeiramente, apresentaremos o problema de programação linear (PPL) em seu formato padrão, no sentido de que qualquer PPL pode ser convertido para esse formato. Ainda, caracterizaremos o conjunto viável como um poliedro com pelo menos um ponto extremo quando não vazio e enunciando o Teorema Fundamental da Programação Linear. Caracterizaremos, também, o conjunto de soluções ótimas como um poliedro com uma única ou uma infinidade de soluções ótimas quando não vazio. Em seguida, definiremos o problema de PL dual, para o PPL primal no formato padrão. Por fim, estudaremos o método simplex, devido a Dantzig [3], e sua convergência quando usada a regra de Bland [1].
Neste capítulo inspiramos fortemente em Menezes [8].
3.1 O problema primal
Dizemos que um problema de otimização é um problema de programação linear quando as funções envolvidas são lineares e contínuas (as variáveis assumem valores reais).
Consideremos os números inteiros m e n, tais que n > m > 0. Dada uma matriz real A,
n
m× e os vetores b∈Rm e c∈Rn, o problema de programação linear no formato padrão é o seguinte problema de otimização:
( )
0. T P minimizar c x sujeito a: Ax b x = ≥Seguem-se as seguintes definições acerca do problema (P).
Definição 3.1 Considere o PPL (P)
a) A função linear xacTx é chamada função objetivo e c x é denominado o valor da T função objetivo.
c) O vetor c∈Rn é denominado vetor custo.
d) O conjuntoX =
{
x∈Rn;Ax=b,x≥0}
é chamado conjunto viável. Um ponto x∈X é denominado ponto viável.e) Quando existe, o número v(P) = min{cTx; x∈X} é denominado o valor ótimo ou custo
ótimo. O conjunto X(P)= {x∈X; cTx = v(P) } é chamado conjunto de soluções ótimas e
um ponto x∈X P( ) é denominado solução ótima ou minimizador ou ponto de mínimo. f) Quando existe uma sequência (xk), tal que xk∈X e cTxk →−∞ quando k→∞, dizemos
que (P) é um problema ilimitado.
g) O problema (P) é denominado problema inviável quando X é vazio.
O PPL consiste em encontrar, se existir, uma solução ótima, conforme item e) da Definição 3.1. Caso não exista solução ótima, devemos certificar se o PPL é um problema inviável ou ilimitado.
Exemplo 3.1 Consideremos o PPL no formato padrão, a saber
minimizar −x1
sujeito a: x1+x2 =2
x x1, 2 ≥0.
A matriz A, 1 x 2, é a matriz [1 1], o vetor b∈R é o vetor [2] e o vetor c∈R2 é o vetor [ -1 0]T. O valor da função objetivo é –x1.
Quando definimos o problema (P), dissemos que ele estava no formato padrão, ou seja, o primeiro grupo de restrições envolve apenas igualdades, todas as variáveis do modelo são não negativas e queremos minimizar o valor da função objetivo.
A seguir, mostraremos como reduzir um PPL qualquer ao formato padrão. Na ocorrência de
maximizar cTx sujeito a: x∈X ,
basta trocarmos o valor da função objetivo, a saber:
minimizar - cTx
Nesse caso, o valor ótimo será max
{
c x xT ; ∈X}
= −min{
−c x xT ; ∈X}
, pois, sendo x* umasolução ótima do problema max
{
c x xT ; ∈X}
, cTx* = -(-cTx*).Consideremos i = 1, ..., m. Na ocorrência de desigualdades do tipo
1 n ij j j a x =
∑
≤ bi ou 1 n ij j j a x =∑
≥ bi,basta tomarmos xn+i≥0, tal que
1 n ij j j a x =
∑
+ xn+i = bi ou 1 n ij j j a x =∑
- xn+i = bi,respectivamente, convertendo assim, as desigualdades em igualdades. xn+i é denominada
variável de folga quando adicionada à restrição; quando subtraída, é denominada variável de excesso.
Consideremos j = 1, ..., n. Dados números reais lj e uj, com lj ≠0. Na ocorrência de
variáveis do tipo xj ≥ lj ou xj ≤ uj, podemos considerá-las restrições do tipo ≥ ou ≤,
respectivamente.
Ainda considerando j = 1, ..., n, na ocorrência de variáveis livres, ou seja, xj ∈R, basta
realizarmos uma mudança de variáveis, definindo ˆ
j j j
x = −x x , com xj ≥ 0 e ˆxj ≥ 0.
Em nenhum dos casos consideramos desigualdades estritas (dos tipos > ou <). Seguem-se algumas definições acerca da geometria da programação linear.
Definição 3.2 Sejam dados um vetor não nulo a∈Rn, denominado vetor normal, e um escalar δ∈R. (a)O conjunto
{
∈ =δ
}
= x R a x H n; T é denominado um hiperplano; (b)Os conjuntos{
∈ ≤δ}
= x R a x Hl n; T e{
∈ ≥δ}
= x R a x Hu n; T(c)Um poliedro convexo fechado ou, simplesmente, poliedro é um conjunto formado pela interseção de um número finito de semiespaços fechados.
Pela definição de poliedro, nota-se que o conjunto vazio é um poliedro.
Depois de definirmos poliedro, nosso objetivo agora é caracterizar o conjunto viável como um poliedro com pelo menos um ponto extremo quando não vazio. A seguir, definiremos solução básica viável.
Definição 3.3 Consideremos o problema (P) tal que A tenha posto completo, ou seja,
posto(A) = m.
(a) Uma matriz quadrada B, m x m, obtida de A, com m vetores coluna linearmente independentes, denomina-se matriz base de A. Uma matriz N, m x (n-m), obtida com os n-m vetores coluna de A denomina-se matriz não base.
(b) Considere a matriz base B. O conjunto de índices correspondentes a B, que são os índices das colunas de A que compõem B, é chamado conjunto de índices base e denotado por IB. Os demais n-m índices compõem o conjunto de índices não base, denotado por IN.
(c) Considere uma matriz base B, m x m. As variáveis correspondentes a B, no sistema Ax=b, chamam-se variáveis básicas. O vetor de variáveis básicas é denotado por xB. (d) Considere uma matriz não base N, m x (n-m). As variáveis correspondentes a N, no
sistema Ax = b, chamam-se variáveis não básicas. Denotamos o vetor de variáveis não básicas por xN.
(e) Uma solução básica onde as variáveis são não negativas denomina-se solução básica viável.
(f) Uma solução básica viável onde existe ao menos uma variável básica nula denomina-se solução básica viável degenerada.
Suponhamos que IB seja o conjunto {1, ..., m} e as variáveis básicas sejam x1, ..., xm, e
ainda que IN seja o conjunto {m + 1, ..., n} e as variáveis não básicas sejam xm+1, ..., xn.
Para xN = 0, xB B b1 −
= , e x é uma solução básica. Se xB =B b−1 ≥0, para xN = 0, então x é
uma solução básica viável. Caso exista alguma coordenada de xB igual a 0, para xN = 0, e
1 0
B
x =B b− ≥ , então x é uma solução básica viável degenerada.
O próximo teorema estabelece uma relação entre pontos extremos de um poliedro e soluções básicas viáveis.
Teorema 3.1 Consideremos o PPL (P). Um ponto viável x∈X é um ponto extremo, se e somente se, x é uma solução básica viável.
Conforme o Teorema 3.1, podemos obter pontos extremos através do cálculo de soluções básicas viáveis. Além disso, devemos observar que a correspondência entre pontos extremos e soluções básicas viáveis não é em geral um-a-um.
O número de pontos extremos em qualquer conjunto viável de um PPL é finito, como enunciado a seguir.
Corolário 3.1 Consideremos o PPL (P). O conjunto de soluções viáveis tem um número finito
de pontos extremos.
O próximo resultado caracteriza o conjunto viável através da formalização de sua geometria.
Teorema 3.2 Considere o PPL (P). O conjunto viável X é um poliedro com ao menos um
ponto extremo quando não vazio. Além disso, o número de pontos extremos é finito.
Finalmente estamos prontos para enunciar o teorema fundamental da PL.
Teorema 3.3 Consideremos o PPL (P). Se (P) admite solução ótima, então uma solução
ótima é atingida em ao menos um ponto extremo do conjunto viável.
Teorema 3.4 Consideremos o PPL (P). O conjunto de soluções ótimas é um poliedro e,
quando não vazio, possui uma única ou uma infinidade de soluções ótimas.
Na próxima seção trataremos do problema de programação linear dual para o PPL primal (P) no formato padrão.
3.2 O problema dual
O problema de programação linear denominado o dual do problema (P), é o seguinte problema de otimização:
(D) maximizar bTy sujeito a: ATy+s=c
s≥0,
onde o vetor y∈Rm é denominado variável dual e s∈Rn é um vetor com componentes não negativas denominado folga dual.
Seguem-se algumas definições acerca do problema (D).
Definição 3.4 Consideremos o problema (D).
(a) A função linear yabTy é chamada função objetivo dual ou simplesmente função objetivo.
(b) O conjunto S =
{
( )
y s, ∈Rm×Rn;A yT + =s c s, ≥0}
é denominado conjunto viável e umponto
( )
y,s ∈S é denominado ponto viável.(c) O número v(D) = max{bTy;
( )
y,s ∈S}, quando existe, é denominado o valor ótimo oucusto ótimo.
(d) O conjunto S(D) = {
( )
y,s ∈S; bTy = v(D)} é chamado conjunto de soluções ótimas e um ponto( )
y s, ∈S D( ) é denominado solução ótima.O próximo teorema, Teorema de Dualidade Fraco, relaciona os problemas primal e dual através de pontos viáveis.
Teorema 3.5 Consideremos os problemas (P) e (D). Suponha x∈X e
( )
y,s ∈S quaisquer.Então cTx≥bTy.
O próximo teorema, Teorema de Dualidade, relaciona os problemas primal e dual entre si.
Teorema 3.6 Considere os problemas primal (P) e dual (D). Uma, e somente uma, das
seguintes afirmações é correta:
(a) Se o problema (P) tem uma solução ótima, então o problema (D) também tem uma
solução ótima e os valores das funções objetivos de ambos são iguais. Se o problema (D)
tem uma solução ótima, então o problema (P) também tem uma solução ótima e os
valores das funções objetivo de ambos são iguais.
(b) Se (P) é um problema ilimitado, então (D) é um problema inviável. Se (D) é um problema
ilimitado, então (P) é um problema inviável.
A seguir, apresentaremos o Teorema de Dualidade Forte, que relaciona os problemas primal (P) e dual (D) através de soluções ótimas.
Teorema 3.7 Suponha que os problemas (P) e (D) têm soluções viáveis. Então, ambos têm
soluções ótimas x* ∈ X(P) e (y*, s*) ∈ S(D) e, necessariamente, cTx* - bTy* = (x*)Ts* = 0.
Na próxima seção estudaremos o método simplex, utilizado na solução de problemas de PL.
3.3 O método simplex
algoritmo resolve um problema quando para qualquer entrada, a saída correspondente está correta.
Nesta seção, estamos interessados na solução de problemas de PL através do método simplex, devido a Dantzig [3].
3.3.1 Algoritmo mestre
Consideremos o PPL (P) no formato padrão, a saber:
( )
0, T P minimizar c x sujeito a: Ax b x = ≥onde são dados uma matriz real m n
R A∈ × e vetores m R b∈ e n R c∈ , com 0<m<n.
Consideremos a matriz A de posto completo e o vetor do lado direito b ≥ 0. Caso exista alguma coordenada de b negativa, basta multiplicar a equação correspondente por menos um. No caso de m = n, basta resolver um sistema de equações lineares algébricas.
A idéia do método simplex consiste em caminhar pela fronteira de um conjunto poliedral de um PPL (P), através de pontos extremos adjacentes sucessivos com valores da função objetivo estritamente decrescentes.
A seguir, tentamos exprimir as idéias do método simplex através de um algoritmo denominado de algoritmo mestre.
Algoritmo 3.1 Algoritmo mestre.
Dados: x solução básica viável inicial associada a uma matriz base inicial 0 B . 0 k := 0.
REPITA
Escolha, se possível, uma nova variável básica daquelas variáveis não básicas. Escolha, se possível, uma nova variável não básica daquelas variáveis básicas. Atualize Bk+1 e xk+1.
A partir deste ponto construiremos o algoritmo simplex baseado neste algoritmo mestre. A primeira pergunta que surge é: como determinaremos uma solução básica viável inicial? Esse problema é denominado fase 1 ou problema de viabilidade, e consiste em encontrar um ponto viável inicial.
3.3.2 Fase 1
Consideremos o PPL (P). Para o método simplex, o problema fase 1 tem a seguinte forma:
( )
P1 minimizar a T x e sujeito a: Ax+xa =b x≥0,xa ≥0,onde xa∈Rm é um vetor de variáveis chamadas variáveis artificiais e e é um vetor de uns em m
R .
Uma vez que b ≥ 0, para o problema (P1),
m n a R b x x + ∈ = 0
é uma solução básica viável associada a uma matriz base, dada pela matriz identidade I,
m m× .
O próximo resultado garante a existência de uma solução ótima para o problema (P1), ou seja, garante que (P1) jamais será um problema ilimitado ou inviável.
Teorema 3.8 O problema (P1) admite solução ótima.
O próximo resultado é um critério de inviabilidade para o PPL original (P).
Teorema 3.9 Considere ˆT, ˆT T a
x x
uma solução ótima de
( )
P1 . Então, (P) é um problemainviável se, e somente se, xˆa ≠0.
O problema fase 1 foi construído de tal modo que uma solução básica viável inicial está disponível e, pelo Teorema 3.8, possui uma solução ótima. Pelo Teorema 3.9, obtemos uma solução básica viável inicial para a próxima fase, ou certificamos que (P) é um problema inviável. Esse último caso ocorre quando o vetor de variáveis artificiais ˆx , em qualquer a
solução ótima de (P1), é não nulo, ou seja, quando o valor ótimo para o problema (P1) é estritamente positivo.
A seguir, mostraremos como é feita a transição da fase 1 para a fase 2.
3.3.3 Transição da fase 1 para a fase 2
Supondo que o problema original (P) não é um problema inviável, devemos fornecer uma solução básica viável inicial para o problema fase 2, isto é, o problema original (P).
No caso mais simples, quando todas as variáveis artificiais são variáveis não básicas na solução ótima para o problema (P1), então basta eliminar as variáveis artificiais.
Já no caso mais delicado, quando algumas das variáveis artificiais, nulas na solução ótima para (P1), são variáveis básicas, devemos substituir estas variáveis por variáveis não básicas e não artificiais.
A seguir, apresentaremos o procedimento para a transição da fase 1 para a fase 2, especificando a troca de variáveis artificiais básicas em
* B
I pelas variáveis não básicas, não artificiais, em
* N
I .
Procedimento 3.1 Fase 1 para a fase 2.
Dados: uma matriz aumentada A=
[
A I]
, uma matriz base B*, conjuntos de índices base* B
I , não base
* N
I , J =
{
n+1,...,n+m}
, e uma solução ótima para( )
P1 denotadapor n m
R z∈ + .
Se alguma variável artificial na solução ótima de
( )
P1 é variável básica,Para i=1:m Se
( )
* B i
z é uma variável artificial, Encontre * 1: N j= I , tal que Dij ≠0. Tome
( )
*( )
* : ; : b N j nb B i i = I i = I ;{ } { }
*: * B B b nb I =I ∪ i − i ;{ }
*: * N N b I =I − i . 0 :=/ J Saída: * : B B I =I ; * : N N I =I −J; * : ( ) B I B = B∗ ; B B z x := , xN :=0 (0 é um vetor em Rn−m).A saída deste procedimento fornece para a próxima fase conjuntos de índices base IB e
não base IN, uma matriz base B e uma solução básica viável inicial x∈Rncomposta de um
vetor de variáveis básicas xB e um vetor de variáveis não básicas xN..
Na próxima subseção estudaremos a fase 2 e enunciaremos o algoritmo simplex de duas fases utilizando a regra de Bland [1].
3.3.4 Fase 2
Consideremos o PPL (P). Supondo que a fase 1 foi concluída, que o problema original (P) não é inviável e que já eliminamos todas as variáveis artificiais, partimos de uma solução básica viável e devemos escolher qual variável básica passará a variável não básica.
Consideremos o problema original (P). Por definição,
b B xB
1
ˆ = − e xˆN =0.
Por conveniência, particionamos a matriz A, de posto completo, e o vetor custo c como
onde B é uma matriz base m m× e N é uma matriz não base m×
(
n−m)
. Denotamos IB o conjunto de índices base associados às variáveis básicas e I o conjunto de índices não base Nassociados às variáveis não básicas.
Todo ponto viável x para (P) pode ser rearranjado como
= B N x x x . Desenvolvendo Ax=b, 1 1 N B B N B N Ax= ⇔b Nx +Bx = ⇔b Bx = −b Nx ⇔x =B b− −B Nx− . (3.1)
Desenvolvendo cTx e usando a última igualdade, obtemos
(
−)
= +(
−)
⇔ + = + = − − − − N T B T N T B N T B N T N B T B N T N T x N B c c b B c Nx B b B c x c x c x c x c 1 1 1 1(
)
− + = ⇔ − − B N T B T N T B T x x c N B c b B c x c 0 1 1 , (3.2)onde 0∈Rmdenota um vetor de zeros. Definição 3.4 Dizemos que o vetor
(
)
− = − 0 1 B T N B N c c s ,é denominado vetor custo reduzido.
O vetor custo reduzido é o vetor das taxas de redução no valor da função objetivo com respeito à mudança na variável básica.
O próximo teorema nos fornece uma condição suficiente para verificar se uma solução básica viável é uma solução ótima.
Teorema 3.10 Se xˆ é uma solução básica viável com vetor custo reduzido não negativo,
então xˆ é uma solução ótima para o problema
( )
P .Este resultado quer dizer que se s < 0 é possível melhorar o valor da função objetivo,
A fim de simplificarmos a notação para o desenvolvimento do método simplex, a partir deste ponto excluiremos a matriz N da implementação e trabalharemos com os conjuntos de índices base e não base.
Notação: Referindo-nos à matriz A particionada pela matriz base B e pela matriz não base N, para jl∈
{
1,...,n−m}
, l∈IN, i∈{
1,...,m}
e ki∈IB, denotamos d( )
l ∈Rm, a solução única do sistema( )
l Nj AlBd
l =
= .
Além disso, denotamos
( )
l R di ∈ ,para cada i∈
{
1,...,m}
, a coordenada i do vetor d l( )
associada à coluna kida matriz A.Com o próximo resultado, é possível verificar se um PPL é um problema ilimitado.
Teorema 3.11 Consideremos o PPL
( )
P . Seja dada uma solução básica viável xˆ associada a uma matriz base B. Se sh <0 e d( )
h ≤0, para algum h∈IN, então( )
P é um problema ilimitado.O próximo teorema fornece um critério de possível melhoria para o valor da função objetivo do problema (P).
Teorema 3.12 Consideremos o problema de PL
( )
P . Seja dada uma solução básica viável xˆassociada a uma matriz base B, e uma matriz não base N. Consideremos sh <0, para algum
N
I
h∈ , tal que existe di
( )
h >0 ao menos para algum ki∈IB. Ainda, considere( )
1,...,( )
( )
ˆ ˆ min ; 0, q i k k i i B i m q i x x d h k I d h = d h = > ∈ . (3.3) Então, fazendo xh xk dq( )
h q ˆ= a nova variável básica, anulamos
q
k
O teorema acima nos responde à pergunta de como escolher novas variáveis básicas e não básicas: basta escolher algum índice l∈IN com sl <0, tal que x é a nova variável l
básica, e escolher algum índice ki∈IB satisfazendo (3.3) tal que xki é a nova variável não
básica.
O algoritmo simplex ainda não está completo. Isso porque durante a aplicação do método simplex pode ocorrer um fenômeno denominado ciclagem, que consiste em voltarmos para a mesma matriz base após um certo número de iterações, quando existe uma solução básica viável degenerada.
A fim de contornar esse problema e garantir a convergência do método simplex, utilizaremos uma mesma regra que decide quem vai entrar e sair da base: a regra de Bland [1], também conhecida como regra do menor índice. Segundo essa regra, a mudança na base deve ser feita da seguinte forma:
(i) entre todos os candidatos a entrar na base, selecione a variável xh tendo o menor índice, isto é, encontre
{
}
min ; 0 N l l I h l s ∈ = < ;(ii) entre todos os candidatos a sair da base, selecione a variável
q k
x
tendo o menor índice, isto é, encontre 0 0 0 0 1,... min ; min ; ( ) 0, ( ) ( ) i i k i Bk k k k k q k I i i m i i B i i x x k k d h k I d h d h ∈ = = = > ∈ .O elemento dq(h) é denominado pivô. Para o formato original (tabular) do método simplex, que não será abordado nesse trabalho, a q-ésima linha é denominada linha pivô e a h-ésima coluna é denominada coluna pivô.
Agora estamos prontos para enunciar o algoritmo simplex revisado fases 1 e 2 para o PPL (P) com uma técnica anti-ciclagem, a regra de Bland. Se necessário, usaremos o Procedimento 3.1 para a transição da fase 1 para a fase 2.
Algoritmo 3.2 Simplex Fases 1 e 2.
Fase 1: obtemos uma solução básica viável x0 associada a uma matriz base inicial B , 0
um conjunto de índices base
0
B
I e um conjunto de índices não base
0
N
eliminando todas as variáveis artificiais. Caso contrário, certificamos problema inviável.
k := 0. REPITA
Calcule o vetor multiplicador simplex y∈Rm,
. k B T k y c B =
Calcule o vetor custo reduzido s∈Rn tal que,
0 = l s , para todo k B I l∈ e l T l l c y A s = − , para todo k N I l∈ . Se s≥0
então x é uma solução ótima; k senão
Entrada na base: calcule o novo índice base
{
}
min ; 0 Nk l l I h l s ∈ = < .Calcule o vetor direção d(h)∈Rm,
h
kd h A
B ( )= . Se d(h)≤0
então problema ilimitado; senão
Saída da base: calcule o novo índice não base
∈ > = = = ∈ k i i k B i B i i i k k m i i k k i I k q d h k I h d x h d x k k ; ( ) 0, ) ( min ) ( ; min ,... 1 0 0 0 0 . Atualize os índices base e não base, respectivamente,
} { } { : 1 B q B I h k I k k+ = ∪ − ; } { } { : 1 I k h INk+ = Nk ∪ q − .
Atualize a matriz base:
(
)
T q k h k k B A A e B q − + = +1: ,onde eq∈Rm é um vetor de zeros com valor um na posição q = 1,...,m.
b x Bk Bk k = + + + 1 1 1 ; 0 : 1 = + k kq x . 1 :=k+ k . ATÉ QUE (s≥0) ou (d(h)≤0).
O próximo resultado garante a convergência do Algoritmo 3.2.
Teorema 3.13 O algoritmo simplex revisado fases 1 e 2, com a regra de Bland, converge.
CAPÍTULO IV
COMPLEXIDADE DE ALGORITMOS
Algoritmos são a base da computação. Eles consistem em um conjunto de regras claras, onde, dada uma entrada, uma seqüência de operações é executada culminando com uma saída correspondente.
Dizemos que um algoritmo resolve um problema corretamente quando, para qualquer entrada, a saída correspondente está correta. Porém, o fato de um algoritmo resolver um dado problema não significa que seja viável na prática, pois recursos como espaço e tempo são requeridos. Um algoritmo pode se tornar inútil caso necessite de uma quantidade excessiva de recursos para sua execução.
Neste capítulo, faremos uma introdução à complexidade de algoritmos e estudaremos a complexidade do método simplex no pior caso. Inspiramos fortemente em Toscani e Veloso [13], e em Papadimitriou e Steiglitz [10].
4.1 Introdução à complexidade de algoritmos
A complexidade de um algoritmo representa o esforço computacional para executá-lo. Esse esforço pode ser medido levando em consideração fatores como tempo e espaço, que se referem, respectivamente, à velocidade e a quantidade de memória requerida para a execução do algoritmo.
Para determinar a complexidade de um algoritmo, poderíamos analisar o esforço requerido para sua execução em um computador específico. Entretanto, características da máquina e/ou da implementação podem influenciar na análise do algoritmo. Assim, uma alternativa é fazer uma análise do algoritmo independente de implementação.
Quando usamos o tempo de execução de um algoritmo como medida de desempenho do mesmo, estamos falando em complexidade de tempo, já quando usamos a quantidade de memória requerida como medida de desempenho do algoritmo trata-se de complexidade de
espaço. Nesse texto, daremos mais atenção à complexidade de tempo.
A quantidade de trabalho requerida para execução de um algoritmo pode ser medida em função da quantidade de vezes que uma determinada operação é executada. Chamaremos essa operação de operação fundamental. Por exemplo, para um algoritmo de ordenação de um vetor, poderemos usar como operação fundamental a comparação entre os elementos quanto à ordem. Em alguns casos, pode-se escolher mais de uma operação fundamental e adotar pesos diferentes para elas.
Vejamos um exemplo para ilustrar essas idéias.
Exemplo 4.1 Segue-se um procedimento para determinar o maior dentre os elementos de um
vetor.
Procedimento 4.1 Máximo de um vetor
Entrada: vet: vetor[1...n].
Saída: max = valor máximo em vet. max ← vet[1];
para i=2:n se max < vet[i]
então max ← vet[i]; fim se
fim para retorna(max); fim Procedimento
A medida de desempenho de um algoritmo é muito parcial, uma vez que é medida em função de uma entrada específica. Há casos, em que até mesmo entradas de um mesmo tamanho, resultam em desempenhos diferentes, como por exemplo, em um algoritmo para busca de um elemento em um vetor, onde o elemento pode ser encontrado em qualquer posição, e o número de comparações efetuadas será o número da posição em que o elemento buscado se encontra.
A fim de fornecer uma avaliação mais genérica acerca de um dado algoritmo, desejamos associar a quantidade de trabalho requerida por um algoritmo à cada tamanho de entrada, e não à uma entrada específica.
Como já dissemos, um algoritmo pode apresentar desempenhos distintos para entradas do mesmo tamanho. Nesse ponto surge uma questão: qual medida de desempenho escolher para avaliação do algoritmo? Para responder a essa pergunta, poderemos adotar alguns critérios, como por exemplo, tomar o valor máximo ou médio dentre os desempenhos.
4.1.1 Complexidade média
A complexidade média ou esperada de um algoritmo é a média dos desempenhos do algoritmo sobre cada entrada de tamanho n usando como peso a probabilidade de ocorrência de cada entrada.
Sejam D o conjunto dos dados de entrada para um algoritmo a e D o conjunto de n
entradas de tamanho n, tal que Dn =
{
d∈D tam d; ( )=n}
. A complexidade média de umalgoritmo a (que denotaremos por cM[a]), será
[ ]
( )
[
( ). [ ]( )]
n M d D c a n prob d desemp a d ∈ =∑
,onde prob(d) é a probabilidade de ocorrência da entrada d no conjunto D e desemp[a](d) é o n
desempenho do algoritmo a quando executado sobre a entrada d.
Consideremos um algoritmo a com 100 entradas de tamanho 10, onde cada uma das entradas tem a mesma probabilidade de ocorrência e cada entrada di apresenta o desempenho ri, i = 1, ..., 100. Nesse caso teremos:
A complexidade pessimista (pior caso) de um algoritmo a corresponde ao valor máximo entre os seus desempenhos sobre as entradas de tamanho n, a saber
[ ]
( )
max{
[ ]( ) ;}
P n
c a n = desemp a d ∈R d+ ∈D .
Para ilustrar esse conceito, segue-se um exemplo de um algoritmo de busca sequencial de um elemento em um vetor.
Exemplo 4.2 Busca Sequencial
O problema consiste em procurar por um valor (chave) ch em um vetor vet com n elementos para determinar se ch encontra-se em vet ou não. Para isso, usaremos uma variável booleana achou que será verdadeira caso ch exista em vet, ou falsa caso contrário. Segue-se o procedimento.
Procedimento 4.2 Busca Sequencial
Entrada: ch: Valor, vet: Vetor[1 ... n] de Valor.
Saída: achou e pos (achou=V caso ch exista em vet, achou=F caso ch não exista em vet e vet[pos]=ch).
i ← 0; achou ← F; repita
i ←i + 1;
se vet[i] = ch então achou ← V fim se até que achou ou i = n;
se achou então pos ← i fim se retorna(achou, pos);
fim Procedimento.
Adotaremos como operação fundamental a comparação de igualdade entre a chave e o elemento corrente do vetor (se vet[i] = ch). Essa comparação é executada até encontrar um elemento com valor igual ao de ch ou os elementos de vet se esgotarem sem encontrar a chave. Portanto é fácil verificar que:
... se ch encontra-se na k-ésima posição de vet, serão realizadas k comparações; ... se ch encontra-se na n-ésima posição de vet (ou não existe em vet), serão realizadas n comparações.
Portanto, no pior caso, a operação fundamental será executada n vezes, ou seja, a complexidade pessimista para o algoritmo Busca Sequencial é
[ ]( ) .
P
c Busca Sequencial n =n
Considerando que a probabilidade de ter um valor igual ao da chave seja a mesma para todos os elementos do vetor, a complexidade média será:
(
)
1 1 [ ]( ) . 1 2 ... . 2 M n c Busca Sequencial n n n + = + + + =Estudando complexidade, uma questão que surge é como escolher o melhor algoritmo para um determinado problema. Um dos critérios mais utilizados é o comportamento assintótico do algoritmo, ou seja, o comportamento do algoritmo sobre entradas de tamanho grande.
4.2 Análise assintótica
Analisando a expressão 4n, vemos que ela cresce mais rapidamente do que n, mas com uma razão constante igual a 4. Essa situação é similar à que ocorre em uma mudança de escala, como de centímetros para metros por exemplo. Portanto, vamos simplificar 4n para n.
Geralmente, o cálculo da complexidade de um algoritmo concentra-se na ordem de magnitude da expressão que representa o número de vezes que a operação fundamental (ou operações fundamentais, levando em consideração o peso de cada uma) é executada.
A seguir, definiremos as notações assintóticas mais comumente utilizadas para comparação do comportamento assintótico de funções que representam a complexidade de um algoritmo.
Definição 4.1 Sejam f e g funções tais que f, g: N→R+.
a) Dizemos que f(n) = O(g(n)) quando existem uma constante c > 0 e um natural n , tais 0 que, para todon≥n0, f(n) < c.g(n), isto é, g(n) cresce mais rapidamente que f(n) e
permanece acima a partir de certo ponto.
b) Dizemos que f(n) = Ω(g(n)) quando existem uma constante d >0 e um natural n , tais 0 que, para todon≥n0, g(n) < d.f(n), isto é, f(n) cresce mais rapidamente que g(n) e permanece acima a partir de certo ponto.
c) Dizemos que f(n) = Θ(g(n)) quando existem constantes c, d >0 e um natural n , tais que, 0
para todon≥n0, c.g(n) < f(n) < d.g(n).
Podemos denotar “f(n) = O(g(n))” também por “f(n) é O(g(n))”, ocorrendo o mesmo com as outras notações.
A letra grega O chama-se ômicron (‘o’ pequeno). Se f(n) = O(g(n)), podemos dizer também “f(n) é ômicron de (g(n))” ou “f(n) é pequeno para (g(n))”.
A letra grega Ω chama-se ômega (‘o’ grande). Se f(n) = Ω(g(n)), podemos dizer também “f(n) é ômega de (g(n))” ou “f(n) é grande para (g(n))”.
Notemos que a ordem Θ é um caso particular das ordens O e Ω, pois se f(n) é
Θ(g(n)), f(n) também é O(g(n)) e Ω(g(n)). Portanto, Θ é uma relação de equivalência, isto é, se f(n) = Θ(g(n)), então f(n) e g(n) têm o mesmo comportamento assintótico.
Algoritmos de ordem O(1), O(n), O(n2) são ditos polinomiais, isto é, têm complexidades limitadas por polinômios. Já algoritmos de ordem Ω(2n), Ω(3n) são ditos exponenciais, pois não têm complexidades limitadas por polinômios. Diremos que um algoritmo é “bom” se este tiver complexidade de tempo polinomial.
Na próxima seção, veremos que o algoritmo simplex não é um algoritmo com complexidade de tempo polinomial no seu pior caso.
4.3 Complexidade do algoritmo simplex
Nosso objetivo nesta seção é demonstrar que a complexidade de tempo do método simplex no pior caso não é polinomial. Para isto, nos basearemos no problema de Klee e Minty [7].
Para mostrarmos que o algoritmo simplex não é um algoritmo polinomial basta encontrarmos uma família de instâncias para a qual ele faz um número exponencial (no tamanho do problema de PL) de mudanças na base, isto é, desejamos encontrar uma sequência exponencial de soluções básicas viáveis 1 2
, , ..., k
x x x tais que i
x e i 1
x+ são adjacentes e satisfazem c xT i+1<c xT i, i=1, ...,k−1.
Como vimos no capítulo anterior, as sbv’s de um problema de PL correspondem aos pontos extremos do poliedro que representa o conjunto de soluções viáveis. Além disso, sbv’s não degeneradas adjacentes de um problema de PL correspondem a pontos extremos unidos por um segmento de reta (face unidimensional) do poliedro. Por exemplo, (0, 0, 1) e (0, 1, 1) na Figura 4.1 (a) são adjacentes.
Suponhamos que a direção de diminuição do vetor custo é para cima. Desejamos descobrir uma sequência exponencial de pontos extremos que são um adjacente ao próximo, e cada ponto extremo forneça um valor para a função objetivo melhor do que o ponto extremo anterior na sequência.
Precisaremos então de um poliedro que tenha um número exponencial de pontos extremos no tamanho do PPL. Tomaremos como exemplo o cubo
0≤xj ≤1, j=1, 2, 3, mostrado na Figura 4.1 (a).
0≤xj ≤1, j=1, 2, ...., ,d
possui 2d faces, sendo uma para cada inequação, e 2d vértices, sendo um para cada disposição do conjunto { ,x x1 2, ....,xd}, para xj∈{0, 1}, j=1, 2, ...., .d
Agora, iremos construir um poliedro similar ao cubo, definido pelas seguintes inequações: 1≥ ≥x1
ε
1 1 1−εxj− ≥xj ≥εxj−, j=2, 3, ..., ,d (4.1) onde 0 1 2 ε < < . (a) (b)Figura 4.1 – Cubo de Klee e Minty.
O poliedro (4.1) é uma perturbação do cubo d-dimensional. Um exemplo tridimensional (para d = 3) é apresentado na Figura 4.1 (b). Nessa figura também é apresentada uma “longa” sequência de vértices adjacentes diminuindo o custo, ou seja, melhorando o valor da função objetivo. Nosso objetivo aqui é demonstrar a existência dessa sequência.
Passaremos agora (4.1) para o formato padrão. Para isso, adicionaremos d variáveis de folga e d variáveis de excesso, obtendo m = 2d e n = 3d. Nosso objetivo será maximizar xd
1 1 1 1 1 1 1 0 1, 2, ..., , , 0, 1, ..., . d j j j j j j j j j minimizar x sujeito a: x r x s x x r x x s j d x r s j d
ε
ε
ε
− − − − = + = − − = + + = = ≥ = (4.2)O próximo lema caracteriza o conjunto de soluções básicas viáveis de (4.2); conforme Papadimitriou e Steiglitz [10].
Lema 4.1 O conjunto das variáveis básicas de (4.2) é um subconjunto de
{
x1, ...,xd, ,...,r1 r sd, 1,...,sd}
contendo todos os x’s e exatamente um dos rj, sj, para cadaj = 1, ..., d. Além disso, todas as sbv’s são não degeneradas.
Demonstração Lembremos que 0 1 2
ε
< < . Como x1≥ε e xj+1≥εxj, j = 1, ..., d – 1, sempre
teremos em qualquer solução viável xj >0, j = 1, ..., d. Então, todas as bases viáveis de (4.2) devem conter as d colunas correspondentes aos x’s.
Suporemos agora que rj =sj =0 para algum j. Se j = 1, então teríamos
1 1 1
x =ε e x = , o que é absurdo. Se j > 1, então pela terceira restrição de (4.2) obtemos
1
j j
x =εx − e pela quarta restrição obtemos xj+εxj−1= ⇔1 2εxj−1=1. Pela segunda e quarta restrições de (4.2) temos que xj−1≤1. Como 1
2
ε < , temos também que 2ε <1. Portanto a igualdade 2εxj−1=1 é impossível. Logo, concluímos que qualquer base viável deve conter uma das colunas correspondentes r e j s para cada j = 1, ..., d, obtendo assim j m = 2d colunas básicas. Notemos também que tais sbv’s não podem ter componentes com o valor igual a zero, e, portanto elas são todas não degeneradas. □
Denotaremos uma sbv de (4.2) por xS, onde S é o subconjunto de {1, ..., d} que
Os próximos lemas nos serão úteis na demonstração de que o método simplex leva tempo exponencial para resolver o PPL (4.2); conforme Papadimitriou e Steiglitz [10].
Lema 4.2 Suponhamos que d∈S, mas d∉S'; então xdS >xdS'. Além disso, se S'= −S { }d ,
'
1 .
S S
d d
x = −x
Demonstração Uma vez que d∈S, temos que sd =0 e a quarta restrição de (4.2) fornece
1 1 S S d d x = −
ε
x − . Temos que xdS−1≤1 e 1 2 ε < , logo 1 2 S dx > . Por outro lado, d∉S', logo temos
0
d
r = e a terceira restrição em (4.2) fornece ' '1 1
2
S S
d d
x =εx − < . Portanto, xdS >xdS'. Passemos agora à segunda parte. Notemos que se S=S'∪{ }d , então xdS−1=xdS−'1. Temos então
' '
1 1 1
S S S S
d d d d
x =
ε
x − =ε
x − = −x . □Lema 4.3 Sejam os subconjuntos de {1, ..., d} enumerados de tal modo que
1 2 ... S2d.
S S
d d d
x ≤x ≤ ≤x Então as inequações são estritas, e as sbv’s Sj
x e Sj 1
x + são adjacentes
para j = 1, ..., 2d−1.
Demonstração Usaremos aqui indução sobre d. Para d = 1 temos duas sbv’s:
(
x r s1, ,1 1) (
=ε
, 0, 1−ε
)
e(
x r s1, ,1 1) (
= 1, 1−ε
, 0)
. As duas sbv’s possuem x diferentes e elas 1certamente são adjacentes. Para o passo da indução, suponhamos que o lema é estabelecido para o cubo d-dimensional, e sejam S1, ...,S a enumeração apropriada. Notemos que 2d
1, ..., 2d
S S são também subconjuntos de {1, ..., d + 1}, e que Sj1 Sj
d d
x + =
ε
x , j = 1, ..., 2d. Pelahipótese de indução temos que 1 2 2
1 1 ... 1. d S S S d d d x + <x + < <x + Consideremos os subconjuntos restantes de {1, ..., d + 1}, S′ =j Sj ∪ +{d 1}, j = 1, ..., 2d. Temos, pelo Lema 4.2, que
Pela hipótese de indução Sj
x e Sj 1
x + são adjacentes, e então Sj
x ′ e Sj 1
x ′+ também o são. Além
disso, xS2d e xS2d′ são adjacentes também, desde que a última base resulte da anterior
adicionando rd+1 e retirando sd+1. □
Agora estamos prontos para demonstrar o principal resultado desta seção; conforme Papadimitriou e Steiglitz [10].
Teorema 4.1 Para todo d > 1 há um PPL com 2d equações, 3d variáveis, e coeficientes
inteiros com valor absoluto limitado por 4, tal que o algoritmo simplex pode levar 2d−1
iterações para encontrar a solução ótima.
Demonstração Tomemos 1 4
ε = e multipliquemos todas as equações de (4.2) por 4, de modo
que todos os coeficientes são inteiros. Uma vez que o objetivo de (4.2) é maximizar xd, o Lema 4.3 garante a existência de uma sequência exponencial de sbv’s adjacentes com valor para xd crescente. Finalizamos a demonstração. □
Tratamos nesta seção do comportamento do método simplex no pior caso, e não nos atentamos ao comportamento médio, que representa a complexidade média assintótica. Por isso, deve ser enfatizado que o número de iterações requeridas para encontrar a solução ótima de um PPL na prática usando o método simplex geralmente é menor do que o número de iterações requeridas no exemplo de Klee e Minty.
CAPÍTULO V
UMA INTRODUÇÃO À PROGRAMAÇÃO LINEAR INTEIRA
Nosso objetivo neste capítulo é definir o problema de programação linear inteira (PLI) e o problema de programação linear inteira 0-1.
5.1 O problema de otimização combinatória
O problema de otimização consiste em encontrar, se possível, os minimizadores (ou os maximizadores) de uma função definida em uma determinada região.
Denotamos R o conjunto dos números reais e Z o conjunto dos números inteiros. Sejam S um conjunto finito e f uma função definida por f: S→R. O problema geral de
otimização combinatória é o seguinte problema de Otimização:
( )
OC minimizar f x( )sujeito a: x∈S.
O problema (OC) sugere algumas definições que enunciaremos agora.
Definição 5.1 Considere o problema (OC). Seja dado um conjunto D tal que S ⊂ D.
(a) Um ponto x∈D é um limitante inferior para f sobre S quando, para todo x∈S ,
( ) ( )
f x ≤ f x .
(b) Um ponto x∈D é o ínfimo (inf) para f sobre S, quando x é o maior limitante inferior para f sobre S.
(c) Um ponto x*∈Sé um minimizador global de f em S quando, para todo x∈S, f(x*) < f(x).
(d) Um ponto x∈D é um limitante superior para f sobre S, quando para todo x∈S ,
( ) ( )
f x ≥ f x .
(e) Um ponto x∈D é o supremo (sup) para f sobre S, quando x é o menor limitante superior para f sobre S.
Proposição 5.1 Considere o problema (OC). Então,
{
}
{
}
max f x x( ); ∈S = −min −f x x( ); ∈S .
Demonstração Seja x*∈S um maximizador global do problema
{
}
max f x x( ); ∈S .
Para todo x∈S temos, pela definição de x*, max{f(x)} = f(x*) > f(x), que é equivalente a, ( )
f x
− ≥ −f(x*) = min
{
−f x( )}
. Portanto, para todo x∈S, max{ ( )}f x = −min{
−f x( )}
, finalizando a demonstração. □Agora, enunciamos o algoritmo fundamental da otimização combinatória. Considere o problema (OC). Avalie f(x), para todo x∈S. Escolha x*∈S tal que f(x*) < f(x), para todo
x∈S.
Na próxima seção vamos enunciar o problema de programação linear inteira que é um problema de otimização combinatória mais modesto. Daí, veremos a dificuldade de implementar esse algoritmo fundamental mesmo com o desempenho dos computadores atuais.
5.2 Os problemas de programação linear inteira
Consideremos os números inteiros m e n, tais que n > m > 0. Dados uma matriz numérica com coeficientes reais A, m×n, e vetores b∈Rm e c∈Rn, o problema de programação linear inteira é o seguinte problema de otimização, usualmente denominado problema primal: