• Nenhum resultado encontrado

UM PEQUENO ESTUDO SOBRE OTIMIZAÇÃO LINEAR

N/A
N/A
Protected

Academic year: 2021

Share "UM PEQUENO ESTUDO SOBRE OTIMIZAÇÃO LINEAR"

Copied!
51
0
0

Texto

(1)

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

(2)

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

(3)

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.

(4)
(5)

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.

(6)

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

(7)

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

(8)

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

(9)

viii

LISTA DE FIGURAS

(10)

ix

LISTA DE TABELAS

(11)

x

LISTA DE ABREVIATURAS E SIGLAS

PL Programação Linear

(12)

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.

(13)

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

(14)

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.

(15)

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 é,

(16)

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).

(17)

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 bRm e cRn, 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.

(18)

c) O vetor cRn é denominado vetor custo.

d) O conjuntoX =

{

xRn;Ax=b,x≥0

}

é chamado conjunto viável. Um ponto xX é denominado ponto viável.

e) Quando existe, o número v(P) = min{cTx; xX} é denominado o valor ótimo ou custo

ótimo. O conjunto X(P)= {xX; cTx = v(P) } é chamado conjunto de soluções ótimas e

um ponto xX P( ) é denominado solução ótima ou minimizador ou ponto de mínimo. f) Quando existe uma sequência (xk), tal que xkX 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 bR é o vetor [2] e o vetor cR2 é 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: xX ,

basta trocarmos o valor da função objetivo, a saber:

minimizar - cTx

(19)

Nesse caso, o valor ótimo será max

{

c x xT ; ∈X

}

= −min

{

c x xT ; ∈X

}

, pois, sendo x* uma

soluçã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, xjR, 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 aRn, 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

(20)

(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.

(21)

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 xX é 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.

(22)

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 yRm é denominado variável dual e sRn é 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 um

ponto

( )

y,sS é denominado ponto viável.

(c) O número v(D) = max{bTy;

( )

y,sS}, quando existe, é denominado o valor ótimo ou

custo ótimo.

(d) O conjunto S(D) = {

( )

y,sS; bTy = v(D)} é chamado conjunto de soluções ótimas e um ponto

( )

y s, ∈S D( ) é denominado solução ótima.

(23)

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 xX e

( )

y,sS quaisquer.

Então cTxbTy.

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

(24)

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.

(25)

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 xaRm é 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 problema

inviável se, e somente se, xˆa ≠0.

(26)

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 denotada

por n m

R z∈ + .

Se alguma variável artificial na solução ótima de

( )

P1 é variável básica,

(27)

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 =Iii ;

{ }

*: * N N b I =Ii . 0 :=/ J Saída: * : B B I =I ; * : N N I =IJ; * : ( ) B I B = B ; B B z x := , xN :=0 (0 é um vetor em Rnm).

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 xRncomposta 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

(28)

onde B é uma matriz base m m× e N é uma matriz não base m×

(

nm

)

. Denotamos IB o conjunto de índices base associados às variáveis básicas e I o conjunto de índices não base N

associados à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 Nxx =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,

(29)

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,...,nm

}

, lIN, i

{

1,...,m

}

e kiIB, denotamos d

( )

lRm, a solução única do sistema

( )

l Nj Al

Bd

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 hIN, 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 kiIB. 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

(30)

O teorema acima nos responde à pergunta de como escolher novas variáveis básicas e não básicas: basta escolher algum índice lIN com sl <0, tal que x é a nova variável l

básica, e escolher algum índice kiIB 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

(31)

eliminando todas as variáveis artificiais. Caso contrário, certificamos problema inviável.

k := 0. REPITA

Calcule o vetor multiplicador simplex yRm,

. k B T k y c B =

Calcule o vetor custo reduzido sRn 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+ = Nkq.

Atualize a matriz base:

(

)

T q k h k k B A A e B q − + = +1: ,

onde eqRm é um vetor de zeros com valor um na posição q = 1,...,m.

(32)

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.

(33)

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.

(34)

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

(35)

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 =

{

dD tam d; ( )=n

}

. A complexidade média de um

algoritmo 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:

(36)

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 dR 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:

(37)

... 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

(38)

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: NR+.

a) Dizemos que f(n) = O(g(n)) quando existem uma constante c > 0 e um natural n , tais 0 que, para todonn0, 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 todonn0, 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 todonn0, 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.

(39)

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).

(40)

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−εxjxj ≥ε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

(41)

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 cada

j = 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

xe x = , o que é absurdo. Se j > 1, então pela terceira restrição de (4.2) obtemos

1

j j

xx e pela quarta restrição obtemos xjxj1= ⇔1 2εxj1=1. Pela segunda e quarta restrições de (4.2) temos que xj1≤1. Como 1

2

ε < , temos também que 2ε <1. Portanto a igualdade xj1=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

(42)

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 dS, mas dS'; então xdS >xdS'. Além disso, se S'= −S { }d ,

'

1 .

S S

d d

x = −x

Demonstração Uma vez que dS, temos que sd =0 e a quarta restrição de (4.2) fornece

1 1 S S d d x = −

ε

x . Temos que xdS1≤1 e 1 2 ε < , logo 1 2 S d

x > . Por outro lado, dS', logo temos

0

d

r = e a terceira restrição em (4.2) fornece ' '1 1

2

S S

d d

xx < . Portanto, xdS >xdS'. Passemos agora à segunda parte. Notemos que se S=S'∪{ }d , então xdS1=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

xx ≤ ≤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 1

certamente 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. Pela

hipó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

(43)

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.

(44)

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: SR. O problema geral de

otimização combinatória é o seguinte problema de Otimização:

( )

OC minimizar f x( )

sujeito a: xS.

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 xD é um limitante inferior para f sobre S quando, para todo xS ,

( ) ( )

f xf x .

(b) Um ponto xD é 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 xS, f(x*) < f(x).

(d) Um ponto xD é um limitante superior para f sobre S, quando para todo xS ,

( ) ( )

f xf x .

(e) Um ponto xD é o supremo (sup) para f sobre S, quando x é o menor limitante superior para f sobre S.

(45)

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 xS 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 xS, 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 xS. Escolha x*S tal que f(x*) < f(x), para todo

xS.

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 bRm e cRn, o problema de programação linear inteira é o seguinte problema de otimização, usualmente denominado problema primal:

( )

0 . T n P minimizar c x sujeito a: Ax b x x Z ≤ ≥ ∈

Referências

Documentos relacionados

RESULTADO DA ANÁLISE: Questão Anulada. JUSTIFICATIVA: Prezados Candidatos, em resposta aos recursos interpostos para esta questão, temos a esclarecer que a mesma será anulada, tendo

Outros estudiosos também citados pelo musicólogo Carlos Sandroni, como Simha Arom e Gehrard Kubik, ao investigar a rítmica da música africana - onde há “liberdade das

O score de Framingham que estima o risco absoluto de um indivíduo desenvolver em dez anos DAC primária, clinicamente manifesta, utiliza variáveis clínicas e laboratoriais

Dois dos objetivos alcançados, vistos como legados dos JMMs, sendo um material e outro socioeducacional, mereceram especial atenção para efeitos deste estudo, pelo fato de

Lisboeta de nascimento e com dupla formação em música clássica e jazz na Escola Superior de Música de Lisboa, na Escola de Jazz Luiz Villas-Boas e no Conservatoire Superieur

A decisão, no senso estrito, representa um processo complexo que tem início com o reconhecimento de uma necessidade de mudança e termina com a escolha e

Estas singularidades reforçam-se pelas funcionalidades que o Poema assume, pois se pelo seu conteúdo podemos estar face a uma interpretação da História das

Desta forma, a partir do presente trabalho foi possível compreender o surgimento das áreas de risco a escorregamento e sua relação com o crescimento urbano na BHCT