Slides - Sandra de Amo

Download Report

Transcript Slides - Sandra de Amo

Programação Linear Método Simplex

Profa. Sandra de Amo

Disciplina: Análise de Algoritmos Pós-graduação em Ciência da Computação

Programação Linear

 Variáveis : x1, …, xn  Restrições : conjunto de inequações lineares em x1, …, x  Função objetivo : função linear nas variáveis x1, …, xn  Objetivo: encontrar os valores de x1,…,xn:  Verificando todas as restrições  Maximizando (ou minimizando) a função objetivo

Exemplo

  Variáveis: x1, x2 Restrições: m+n inequações

m = 3 n = 2

Função objetivo:

Espaço das Soluções: n-dimensional

Espaço das soluções

 Limitado: polígono convexo   ou Ilimitado ou Impossível Problema da Programação Linear Inteira : NP-completo

Idéia do método simplex

    Partir de um vértice Caminhar para o vértice vizinho que “melhora” o valor da função objetivo Caso encontre um vértice onde todos os vizinhos tem valor igual ou pior para a função objetivo, páre. Retorna o valor deste vértice.

Exemplo

Por que o método funciona ?

  Espaço das soluções é região convexa no espaço, dilimitada por hiperplanos n-1 dimensionais.

Os pontos (x 1 ,…,x n ,y) tais que y = f(x 1 ,…,x n ), f = função objetivo,    representam um hiperplano deslocando-se no espaço quando este hiperplano deslocante encontra um ponto do hiperplano, este será o valor optimal.

P

onde onde todos os outros pontos da região ficam abaixo Se os vértices vizinhos de P ficam abaixo do hiperplano passando por P, então todos os pontos da região também ficam abaixo do hiperplano,

já que a região é convexa

.

Outro exemplo

Variáveis : x1, x2, x3 Restrições : total = 4 + 3 Função objetivo

1)

Questões importantes

Como determinar se um ponto é um vértice ?

1) Como determinar se dois vértices são vizinhos ?

Vértices

   Cada inequação representando uma restrição corresponde a uma região n-dimensional no espaço n-dimensional das soluções A equação correspondente representa a

fronteira

desta região, um hiperplano (dimensão n-1).

 Chamamos tais equações de “

equações fronteira

” Um vértice é o único ponto onde

algum

subconjunto de hiperplanos se encontram.

Definição de vértice e vértices vizinhos

     Seja n = número de variáveis Um vértice é a solução de

n equações fronteira

.

Dois vértices são vizinhos se têm em comum

n-1

de suas respectivas equações fronteira.

Pergunta: quantos vizinhos pode ter um vértice (em termos de m e n ?) Resposta: m.n vizinhos !

Exemplo

Vertice B = 2 + 3 + 4 ou = 2 + 4 + 5

Hipóteses

    Origem O= (0,0,...0) está no espaço das soluções Um vértice V é gerado por um único subconjunto de n inequações.

Sempre podemos supor que o objetivo é maximar a função objetivo pois:  min {f(x1,...,xn)} = max {– f(x1,...,xn)} Se O está no espaço das soluções então  O é um vértice pois é solução de n inequações x1 ≥ 0,..., xn ≥ 0

Algoritmo Simplex

1) 2) V = (0,0,...0) 1) 2) Enquanto V não é optimal faça Determina

vértice vizinho

V’ para onde se mover V = V’

 

Como testar se O é optimal ?

f(x1,...,xn) = c 1 x 1 f(0,...0) = 0 + ... + c n x n Se f(0,...,0) = max{c 1 x 1  + ... + c

ci ≤ 0, para todo i = 1,...,n

n x n }então Logo,

se um dos ci é positivo

, O

não é otimal

.

  Se O não é otimal,

em quais das direções caminhar para aumentar o valor de f(0,...0) = 0

?

 Basta escolher uma direção i onde

ci > 0

.

Até onde podemos caminhar nesta direção ?

   Até que o ponto que se desloca (0,0,...0, c , 0,...0) torna-se solução de uma das

equações “fronteira”. Seja E esta equação .

Este é o próximo vértice V a ser testado.

V é solução de n equações fronteira: x j ≥ 0 (para i ≠ j) e E

Exemplo

Origem (0,0) não é otimal Escolhemos a direção x2 para caminhar Os pontos deste “caminho” são do tipo: (0,x2) A primeira inequação que é violada com o crescimento de x2 é (3) já que: (1) x2 ≥ - 4 (2) x2 ≤ 4.5

(3) x2 ≤ 3

Como transformar um vértice na origem

Sejam E

1

,...,E

n

as n inequações que determinam um vértice

u

: E

i

: a

i

1 x1 + a

i

2 x2 + ... a

i

n 1,...,n) xn ≤ b

i

(para i = y

i

= a distância de qualquer ponto da região ao hiperplano E

i

y

i

= b

i

y

i ≥ 0

– (a

i

1 x1 + a

i

2 x2 + ... a

i

n xn)

Transformar variáveis x1,...,xn nas variáveis y1,..., yn Escrever x1,...,xn em função de y1,...,yn A origem deste novo sistema é (y1,...,yn) onde yi=0 para todo i = 1,...,n = vértice u

Programa transformado

    Restrições são transformadas em inequações nas novas coordenadas Acrescenta-se as restrições y

i ≥

0, para i = 1,...,n A origem do novo programa é o vértice u A nova função objetivo é:  Max(G) onde G é obtida substituindo as antigas coordenadas x1,...,xn por suas expressões envolvendo as novas y1,...,yn

Exemplo

Programa original Programa transformado

 

Complexidade de Simplex

Simplex executa no pior dos casos k iterações, uma para cada vértice do poliedro fronteira O número de vértices é  De fato: n = número de variáveis n + m = número de inequações (m restrições + as restrições xi >= 0) Cada vértice corresponde a um conjunto de n inequações Logo: número de vértices = número de subconjuntos de tamanho n em um conjunto de tamanho n+m   Existem exemplos de programas onde todos os vértices são testados Logo:

complexidade de Simplex é exponencial

Discussão

      Simplex é um

método exponencial

Somente em casos raros o pior caso é atingido Na maioria dos casos, Simplex não verifica todos os vértices e finaliza rapidamente.

Programação Linear inteira é NP-completo Será que Programação Linear (real) é polinomial ?

Por muito tempo pensou-se que não !

   

Histórico

1979: Leonid Khachiyan propôs o algoritmo

Elipsoid

resolve PL em tempo polinomial.

que Paradoxo:

Elipsoid

, embora polinomial, na prática é menos eficiente do que

Simplex

1984: Narendra Kamarkar propôs o

algoritmo de Karmarkar

que resolve PL em tempo polinomial e é eficiente na prática.

 Diferente de simplex, o algoritmo alcança o máximo atravessando o

interior

do poliedro através de um caminho especial.

 Chamado: Método do “ponto interior” Códigos super rápidos atuais são baseados em simplex combinado com o método do ponto interior de Karmarkar.