Análise e Síntese de Algoritmos Programação Linear CLRS, Cap. 29 Contexto • Algoritmos em Grafos (CLRS, Cap. 22-26) – ... – Fluxos máximos em grafos (CLRS, Cap. 26) • • • • • • • Programação Linear (CLRS, Cap. 29) Fluxos de Custo Mínimo (S, Cap. 22) Programação Dinâmica (CLRS, Cap. 15) Algoritmos Greedy (CLRS, Cap. 16) Emparelhamento de Caracteres (CLRS, Cap. 32) Completude NP (CLRS, Cap. 34) Algoritmos de Aproximação (CLRS, Cap. 35) 2003/2004 Análise e Síntese de Algoritmos 2 Resumo • • • • • • Motivação Formas Standard e Slack Formulação de Problemas O Algoritmo Simplex Soluções Exequíveis Iniciais Dualidade 2003/2004 Análise e Síntese de Algoritmos 3 Exemplo Urbanos Suburbanos Campo Estradas -2 5 3 Liberalização droga 8 2 -5 Subsídios agricultura 0 0 10 Imposto sobre gasolina 10 0 -2 • Queremos ganhar pelo menos 50% dos votos (100.000 urbanos, 200.000 suburbanos e 50.000 rurais) • Entrada representa o número de votos (em milhares) ganhos por cada 1000 Euros gastos em campanhas 2003/2004 Análise e Síntese de Algoritmos 4 Exemplo Urbanos Suburbanos Campo Estradas -2 5 3 Liberalização droga 8 2 -5 Subsídios agricultura 0 0 10 Imposto sobre gasolina 10 0 -2 x1 = estradas; x2 = droga; x3 = subsídios; x4 = Imposto minimizar 4 x i 1 i sujeito a 2 x1 8 x2 0 x3 10x4 2003/2004 50 5 x1 2 x2 0 x3 0 x4 100 3x1 5 x2 10x3 2 x4 x1 , x2 , x3 , x4 25 0 Análise e Síntese de Algoritmos 5 Formulação Geral • Programação Linear (LP): – Optimizar (minimizar ou maximizar) função linear sujeita a conjunto de restrições lineares – Função linear: n f x1 , x2 ,, x n c j x j j 1 – Restrições lineares: n g j x1 , x2 ,, x n aij x j bi j 1 2003/2004 Análise e Síntese de Algoritmos 6 Perspectiva sobre LP • Qualquer solução do conjunto de restrições designa-se por solução exequível – Cada solução exequível corresponde a um valor da função objectivo (ou de custo) • O conjunto de soluções exequíveis é designado por região exequível • A região exequível é um conjunto convexo no espaço ndimensional • Conjunto convexo S: qualquer ponto de segmento que liga dois pontos em S está também em S • S é designado por simplex • Exemplo 2003/2004 Análise e Síntese de Algoritmos 7 Perspectiva sobre LP • Utilização de representações canónicas: – Formas standard e slack • Algoritmos: – Algoritmo Simplex • Exponencial no pior caso; eficiente na prática e muito utilizado – Algoritmo da Elipsóide • Polinomial; normalmente ineficiente – Métodos de Ponto Interior • Polinomiais; eficientes na prática, competitivos com Simplex 2003/2004 Análise e Síntese de Algoritmos 8 Forma Standard função objectivo maximizar sujeit o a restrições n j 1 n j 1 cjxj aij x j bi xj 0 i 1,2, , m j 1,2, , n • Todos os valores cj, aij, bi são valores reais • Representação matricial: maximizar c T x sujeit o a Ax b x0 – Em que A = (aij), b = (bi) e c = (cj) e x = (xj) 2003/2004 Análise e Síntese de Algoritmos 9 Forma Standard • Noções a reter: – – – – – Solução exequível Solução não exequível Valor da função objectivo: valor objectivo Valor máximo/mínimo: valor objectivo óptimo LP sem soluções exequíveis diz-se não exequível; caso contrário diz-se exequível – LP exequível, mas sem solução óptima, diz-se não limitado 2003/2004 Análise e Síntese de Algoritmos 10 Conversão para Forma Standard • Problemas: – – – – 2003/2004 Minimização em vez de maximização Variáveis sem restrição de serem não negativas Restrições com igualdade Restricões com Análise e Síntese de Algoritmos 11 Conversão para Forma Standard • Soluções: – Minimização vs. Maximização: • Multiplicar coeficientes por -1 – Variáveis sem restrição de serem não negativas: • Substituir xi por duas variáveis xi1 e por xi2, e multiplicar coeficientes de xi2 por –1 – Restrições com igualdade: • Introduzir duas restrições, uma com e outra com – Restrições com : • Multiplicar restrição por –1 • Exemplo 2003/2004 Análise e Síntese de Algoritmos 12 Conversão para Forma Slack • Objectivo é trabalhar apenas com igualdades – Todas as restrições, excepto as restrições das variáveis serem não negativas, são igualdades • Para cada restrição introduzir uma nova variável s s bi j 1 aij x j n s0 – s: variável de slack • Conversão de forma standard para forma slack: xn i bi j 1 aij x j xn i 0 n • Exemplo 2003/2004 Análise e Síntese de Algoritmos 13 Forma Slack xni bi j 1 aij x j n • Nas expressões: – Variáveis expressas em função de outras variáveis designam-se por variáveis básicas – As variáveis que definem as variáveis básicas designam-se por variáveis não-básicas • Definir: z j 1 c j x j n • Exemplo 2003/2004 Análise e Síntese de Algoritmos 14 Forma Slack • N: – Conjunto de índices das variáveis não básicas, |N| = n • B: – Conjunto de índices das variáveis básicas, |B| = m • Obs: N B 1,2,, n m • Forma slack descrita por: (N, B, A, b, c, v) – v: constante na função objectivo 2003/2004 Análise e Síntese de Algoritmos 15 Formulação de Problemas de LP • Fluxos de Custo Mínimo: minimizar z x c x i,j E sujeit o a : j: i , j E xij ij ij x j: j ,i E ji bi i V 0 xij uij i, j E – Caminhos Mais Curtos – Fluxo Máximo – ... 2003/2004 Análise e Síntese de Algoritmos 16 Outras Formulações • Caminhos Mais Curtos – Entre s e t: maximizar d t sujeito a d v d u wu, v u, v E d s 0 • Fluxo Máximo: f s, v maximizar vV sujeito a f u, v cu, v f u, v f v, u f u, v 0 u , v V u , v V u V s, t vV 2003/2004 Análise e Síntese de Algoritmos 17 O Algoritmo Simplex • Definições • Pivots – Exemplo • O algoritmo simplex • Soluções exequíveis iniciais • Dualidade 2003/2004 Análise e Síntese de Algoritmos 18 Forma Slack xni bi j 1 aij x j n • Nas expressões: – Variáveis expressas em função de outras variáveis designam-se por variáveis básicas – As variáveis que definem as variáveis básicas designam-se por variáveis não-básicas • Definir: z j 1 c j x j n • Forma slack descrita por: (N, B, A, b, c, v) – N: varáveis não básicas; |N| = n – B: variáveis básicas; |B| = m – v: constante na função objectivo 2003/2004 Análise e Síntese de Algoritmos 19 Pivots • Exemplo • Escolher variável não básica xe para passar a básica – Variável de entrada • Escolher variável básica xl para passar a não básica – Variável de saída • Calcular nova forma slack do problema – N ' N xe xl – B' B xl xe – N ' , B' , A, b, c, v 2003/2004 Análise e Síntese de Algoritmos 20 O Algoritmo Simplex • Calcular forma slack inicial – Para a qual solução básica inicial é exequível – Caso contrário reporta problema não exequível (retorna “unfeasible”) e termina • Enquanto existir ce > 0 (i.e. valor de z pode aumentar) – xe define variável de entrada (i.e. nova variável básica) – Seleccionar xl • xl corresponde a linha i que minimiza bi / aie, para aie > 0 • Se aie < 0 para todo o i, retornar ‘ unbounded’ – Aplicar pivoting com (N, B, A, b, c, v, l, e) 2003/2004 Análise e Síntese de Algoritmos 21 O Algoritmo Simplex • Para valores i em B – Atribuir valor bi – Caso contrário atribuir valor 0 • i.e. variáveis em N • Exemplos 2003/2004 Análise e Síntese de Algoritmos 22 Solução Exequível Inicial • Um programa linear pode ser exequível, mas solução básica inicial pode não ser exequível • Exemplo 2003/2004 Análise e Síntese de Algoritmos 23 Solução Exequível Inicial • Seja L um programa linear na forma standard, e seja Laux definido da forma seguinte: x0 maximize subject to n aij x j x0 bi i 1,2,, m xj 0 j 0,1,2,, n j 1 • Então L é exequível se e só o valor objectivo óptimo de Laux é 0 – Se L tem solução, então Laux tem solução com x0 = 0, o valor óptimo – Se o valor óptimo de x0 é 0, então solução é solução para L 2003/2004 Análise e Síntese de Algoritmos 24 Solução Exequível Inicial • A partir de L construir Laux se solução básica inicial não for exequível • Determinar indíce l com menor bi – Aplicar pivot com e = 0 • A solução básica calculada é exequível para Laux • Aplicar passos do Simplex para calcular solução óptima – Se solução óptima verifica x0 = 0 retornar solução calculada, sem x0 – Caso contrário L não é exequível • Exemplo 2003/2004 Análise e Síntese de Algoritmos 25 Solução Exequível Inicial • Após a primeira aplicação de pivot, a solução básica é exequível para Laux – Prova 2003/2004 Análise e Síntese de Algoritmos 26 Simplex: Resultados Formais • Dado um programa linear (A, b, c): – Se o algoritmo Simplex retorna uma solução, a solução é exequível – Se o algoritmo Simplex retorna ‘unbounded’, o programa é não limitado • Dado um programa linear (A, b, c) na forma standard, e B um conjunto de variáveis básicas, a forma slack é única 2003/2004 Análise e Síntese de Algoritmos 27 Simplex: Resultados Formais • Variação do valor da função objectivo após pivoting: – Valor da função objectivo não pode diminuir • Variável escolhida tem coeficiente positivo • Valor da variável é não negativo, pelo que novo valor da função de custo não pode diminuir – Valor da função objectivo pode não aumentar • Degenerescência – Mas é sempre possível assegurar que algoritmo termina 2003/2004 Análise e Síntese de Algoritmos 28 Simplex: Resultados Formais • O Simplex está em ciclo se existem formas slack idênticas para duas iterações do algoritmo n m • Se o algoritmo Simplex não termina após Cmnm m iterações, então o algoritmo está em ciclo – Cada conjunto B determina unicamente a forma slack – Existem n+m variáveis e |B| = m • Número de modos de escolher B: Cmnm – Número de formas slack distintas: Cmnm – Se algoritmo executar mais de Cmnm iterações, então está em ciclo • Eliminar ciclos: – Regra de Bland: desempates na escolha de variáveis através da escolha da variável com o menor indíce 2003/2004 Análise e Síntese de Algoritmos 29 Dualidade • Conceito essencial em optimização – Normalmente associado com existência de algoritmos polinomiais – E.g., fluxo máximo corte mínimo • Programa linear dual: minimizar sujeito a m by i 1 i i m a y i 1 ij i cj yi 0 j 1,2,, n i 1,2,, m • Programa primal: formulação original • Exemplo 2003/2004 Análise e Síntese de Algoritmos 30 Dualidade Fraca em Programação Linear • Seja x uma qualquer solução exequível do programa primal e seja y uma qualquer solução exequível do programa dual. Nestas condições: n m j 1 i 1 c j x j bi yi – Prova 2003/2004 Análise e Síntese de Algoritmos 31 Dualidade em Programação Linear • Seja x uma qualquer solução pelo algoritmo Simplex, e sejam N e B os conjuntos de variáveis para a forma slack final. Seja c’ o vector dos coeficientes da forma slack final e seja yi = -cn+i para (n+i)N; 0 caso contrário. Nestas condições: – x é solução óptima para o programa primal – y é a solução óptima para o programa dual n m – e, c j x j bi yi j 1 i 1 • Exemplo 2003/2004 Análise e Síntese de Algoritmos 32 Teorema Fundamental da Programação Linear • Qualquer programa linear na forma standard: – Ou tem solução óptima com valor finito, – Ou não é exequível, – Ou não é limitado. Se L não é exequível, o algoritmo Simplex retorna “infeasible” Se L não é limitado, o algoritmo Simplex retorna “unbounded” Caso contrário, o algoritmo Simplex retorna uma solução óptima com um valor objectivo finito 2003/2004 Análise e Síntese de Algoritmos 33 Exemplos Adicionais • Algoritmo Simplex • Solução exequível inicial • Dualidade • Fluxo máximo com o Simplex 2003/2004 Análise e Síntese de Algoritmos 34 Revisão • Programação Linear – Algoritmo Simplex • A seguir: – Fluxos de Custo Mínimo 2003/2004 Análise e Síntese de Algoritmos (S, Cap. 22) 35