programação linear método simplex

23
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

Upload: eliza

Post on 13-Jan-2016

145 views

Category:

Documents


0 download

DESCRIPTION

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 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Programação Linear Método Simplex

Programação LinearMétodo Simplex

Profa. Sandra de AmoDisciplina: Análise de Algoritmos

Pós-graduação em Ciência da Computação

Page 2: Programação Linear Método Simplex

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

Page 3: Programação Linear Método Simplex

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

Função objetivo:

m = 3

n = 2

Page 4: Programação Linear Método Simplex

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

Page 5: Programação Linear Método Simplex

Espaço das soluções Limitado: polígono convexo ou Ilimitado ou Impossível

Problema da Programação Linear Inteira:

NP-completo

Page 6: Programação Linear Método Simplex

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.

Page 7: Programação Linear Método Simplex

Exemplo

Page 8: Programação Linear Método Simplex

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 (x1,…,xn,y) tais que y = f(x1,…,xn), f = função

objetivo, representam um hiperplano deslocando-se no espaço quando este hiperplano deslocante encontra um ponto P

onde onde todos os outros pontos da região ficam abaixo do hiperplano, este será o valor optimal.

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.

Page 9: Programação Linear Método Simplex

Outro exemploVariáveis : x1, x2, x3

Restrições : total = 4 + 3

Função objetivo

Page 10: Programação Linear Método Simplex

Questões importantes1) Como determinar se um ponto é um vértice ?

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

Page 11: Programação Linear Método Simplex

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.

Page 12: Programação Linear Método Simplex

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 !

Page 13: Programação Linear Método Simplex

Exemplo

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

Page 14: Programação Linear Método Simplex

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

Page 15: Programação Linear Método Simplex

Algoritmo Simplex1) V = (0,0,...0)

2) Enquanto V não é optimal faça1) Determina vértice vizinho V’ para onde se mover

2) V = V’

Page 16: Programação Linear Método Simplex

Como testar se O é optimal ? f(x1,...,xn) = c1x1 + ... + cnxn f(0,...0) = 0 Se f(0,...,0) = max{c1x1 + ... + cnxn}então

ci ≤ 0, para todo i = 1,...,n 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: xj ≥ 0 (para i ≠ j) e E

Page 17: Programação Linear Método Simplex

Exemplo

Origem (0,0) não é otimal

Escolhemos a direção x2 para caminharOs 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

Page 18: Programação Linear Método Simplex

Como transformar um vértice na origemSejam E1,...,En as n inequações que

determinam um vértice u:

Ei: ai1x1 + ai2x2 + ... ain xn ≤ bi (para i = 1,...,n)

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

yi = bi – (ai1x1 + ai2x2 + ... ain xn)

yi ≥ 0 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

Page 19: Programação Linear Método Simplex

Programa transformado Restrições são transformadas em inequações nas novas

coordenadas Acrescenta-se as restrições yi ≥ 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

Page 20: Programação Linear Método Simplex

ExemploPrograma original Programa transformado

Page 21: Programação Linear Método Simplex

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

Page 22: Programação Linear Método Simplex

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 !

Page 23: Programação Linear Método Simplex

Histórico 1979: Leonid Khachiyan propôs o algoritmo Elipsoid que

resolve PL em tempo polinomial. 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.