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.