Considere a função f(x). Para algum x a f (x) pode não existir. Suponha que se queira resolver o seguinte PPNL: Max f(x) s. a a x b Pode ser que f (x) não exista ou que seja difícil resolver a equação f (x) = 0. Em qualquer caso os métodos anteriores podem não funcionar para essas situações. Nesta seção será discutido como resolver o PPNL se f(x) for uma função unimodal. Uma função é unimodal no intervalo [a, b] se para algum ponto x 0 no intervalo [a, b], f(x) é estritamente crescente em [a, x 0 ] e estritamente decrescente [x 0,b]. Se f(x) é unimodal em [a, b] então ela terá somente um máximo local x 0 no intervalo [a; b] e esse valor resolverá o PPNL. Sem informações adicionais só podemos dizer que a solução ótima para o problema é algum ponto no intervalo [a, b]. 1
Caso 1: f(x 1 ) < f(x 2 ) Avaliando f(x) nos pontos x 1 e x 2 (supondo x 1 < x 2 ) em [a, b], pode-se reduzir o tamanho do intervalo na qual a solução do problema deve estar. Após avaliar f(x 1 ) e f(x 2 ) um dos próximos dois casos deve ocorrer. Em cada caso, pode-se mostrar que a solução ótima vai estar em um subintervalo de [a, b]. Uma vez que f(x) está aumentando, ao menos em uma parte do intervalo [x 1, x 2 ] pode-se concluir que a que a solução ótima do problema não pode ocorrer em [a, x 1 ]. Assim, x 0 (x 1, b]. f(x) f(x) a x x x 1 0 2 b x a x 1 x 2 x 0 b x Caso 2: f(x 1 ) f(x 2 ) Nesse caso, f(x) começa a decrescer antes de x alcançar x 2. Assim x 0 [a, x 2 ). f(x) a x 1 x 0 x 2 b x f(x) a x 0 x 1 x 2 b x O intervalo onde x 0 deve estar, que pode ser [a; x 2 ) ou (x 1 ; b], é denominado deintervalo de incerteza. Muitos algoritmos utilizam essa idéia para reduzir o intervalo de incerteza. Muitos desses algoritmos funcionam da seguinte forma. Passoum: Inicie com a região de incerteza de x sendo [a; b]. Avalie f(x) em dois pontos escolhidos x 1 e x 2. Passo dois: Determine qual dos dosi casos se aplica e reduza o intervalo de incerteza. Passotrês: Avalie f(x) em dois novos pontos (o algoritmo especifica como os dois novos pontos são escolhidos). Um desses algoritmos éométododaseçãoáurea. Seja r a única raiz positiva da equação do segundo grau r 2 + r = 1. Resolvendo-a, tem-se: 1/ 2 5 1 r = = 0,6180 2 A procura inicia avaliando f(x) nos pontos x 1 e x 2 onde x 1 = b r(b a) e x 2 = a + r(b a). 2
Localização de x 1 e x 2 no método de otimização pela seção áurea. r(b a) a x 1 x 2 b r(b a) Da figura pode-se ver que para encontrar x 1, move-se uma fração r do intervalo a partir do extremo direito e na direção do extremo esquerdo. Para encontrar x 2 move-se uma fração r do intervalo a partir do extremo esquerdo e na direção do extremo direito. Então o método da seção áurea gera dois novos pontos no qual f(x) deve ser avaliada. Cada vez que f(x) é avaliada nos dois pontos e o II (Intervalo de Incerteza) é reduzido, diremos que uma iteração do método da Seção Áurea foi completada. L k Define-se: = tamanho do intervalo de incerteza após k iterações do algoritmo ter sido completadas. I k = intervalo de incerteza após k iterações terem sido completadas. A cada iteração a f(x) deve ser avaliada em apenas um dos dois novos pontos. É fácil ver que: L 2 = rl 1 = r 2 (b a) e que de forma geral: L k = rl k-1 leva a: L k =r k (b a). Assim se quisermos que um intervalo de incerteza final tenha um tamanho menor que um ε especificado, será necessário executar k iterações do método da seção áurea de modo que: r k (b a) < ε 3
Determine quantas iterações serão necessárias, utilizando o método da seção áurea, para que o tamanho do intervalo [-3; 7] seja reduzido a um valor menor do que 0,0001 = 10-4. Tem-se: a = -3, b = 7 e ε = 0,0001 =10-4. Então: r k (b a) < ε ln[r k (b a)] < ln(ε) ln(r k )+ln(b-a) < ln(ε) k.ln(r) < ln(ε) - ln(b-a) k [ln(ε) - ln(b-a)]/ln(r) k [ln(0,0001) ln(7-(-3))]/ln(r) k [ln(0,0001) ln(10)]/ln(r) k [-9,210340 2,302585]/ln(r) k -11,512925/-0,481212 Utilize o método para resolver: max -x 2 + 1 s. a -1 x ¾, com o tamanho final do intervalo de incerteza sendo menor do que 1/4. k 23,92 ou k 24 Aqui a = -1 e b = 0,75, então b a = 1,75. Para determinar o número de iterações que deve ser feito, deve-se resolver: 1,75.r k < 1/4 ou r k < 1/7 k.ln(r) < ln(1/7) k > ln(1/7)/ln(r) k 5 Assim serão necessárias onze iterações. Determinar inicialmente x 1 e x 2 : x 1 = 0,75 r.1,75 = -0,3316 x 2 = -1 + r.1,75 = 0,0816 Então: f(x 1 ) = f(-0,3316) = 0,8901. f(x 2 ) = f(0,0816) = 0,9933. Como f(x 1 ) < f(x 2 ), o novo intervalo de incerteza é I 1 = [x 1 ; b] = [-0,3316; 0,75] 4
L 1 = 0,7500 (-0,3316) = 1,0816 Determina-se, agora os dois novos pontos x 3 e x 4 : x 3 = x 1 = -0,3316 x 4 = -0,3316 + r.1,0816 = 0,3369 Agora f(x 3 ) = f(x 1 ) = f(-0,3316) = 0,8901 e f(x 4 ) = f(0,3369) = 0,8865. Como f(x 3 ) < f(x 4 ), então o novo intervalo de incerteza é I 2 = [-0,3316; x 4 ] = [-0,3316; 0,3369) e x 6 será igual a x 3. Também L 2 = 0,3369 (-0,3316) = 0,6684. Então: x 5 = 0,3369 r.0,6684 = -0,0762 x 6 = x 3 = 0,0816 Note que f(x 5 ) = 0,9942 e f(x 6 ) = f(x 3 ) = = 0,9933. Como f(x 5 ) > f(x 6 ) então o novo intervalo de incerteza é I 3 = [-0,3316; x 6 ) = [-0,3315, 0,0816). L 3 = 0,0815 + 0,3315 = 0,4130. Agora: x 7 = 0,0816 r.0,4130 = -0,1738 x 8 = x 5 = -0,0762. f(x 8 ) = f(-0,0762) = 0,9942. f(x 7 ) = f(-0,1738) = 0,9698 e como f(x 8 ) > f(x 7 ), o novo II é I 4 = [x 7 ; 0,0815] = [-0,1738, 0,0816]. L 4 = 0,0815 + 0,1637 = 0,2552. Também x 9 = x 8 e finalmente: x 9 = x 8 = -0,0762. x 10 = -0,1737 + r.0,2552 = -0,016. Agora f(x 9 ) = f(x 8 ) = f(-0,0762 ) = 1,0000 e f(x 10 ) = f(-0,016 ) = 0,9997. Como f(x 10 ) < f(x 9 ) o novo II é I 5 = (x 9 ; 0,0815] = [-0,0762, 0,0816]. L 5 = 0,0815 + 0,0762 = 0,1577 < 0,25, conforme especificado. Assim determinou-se, que: max x 2 + 1 s. a -1 x ¾, deve estar dentro do intervalo (-0,0762; 0,0815]. Na realidade o valor mínimo, que é 1,00, ocorre no ponto x 0 = 0. 5
=B3-$G$3*(B3-A3) =A3+$G$3*(B3-A3) Utilizando a Planilha para implementar o método da seção áurea. A B C D E F G pei pdi pe pd f(pe) f(pd) r -1 0,7500-0,3316 0,08156-1,1099-1,0067 0,61803-0,3316 0,7500 0,0816 0,3369-1,0067-1,1135-0,3316 0,3369-0,0762 0,0816-1,0058-1,0067-0,3316 0,0816-0,1738-0,0762-1,0302-1,0058-0,1738 0,0816-0,0762-0,0160-1,0058-1,0003 =SE(E3<F3;B3;D3) =SE(E3<F3;C3+$G$3*(B3-C3);C3) -0,0762 0,0816-0,0160 0,0213-1,0003-1,0005 =SE(E3<F3;C3;A3) =SE(E3<F3;D3;D3-$G$3*(D3-A3)) OBS.: O método da seção áurea pode ser aplicado a problemas de minimização pela multiplicação da FO por -1. Deve-se assumir que a FO modificada seja unimodal. Embora o método da seção áurea seja um procedimento simples ele pode demorar para convergir para a solução ótima. Um método que pode ser utilizado em alguns casos é o de Newton. A idéia do método de Newton é aproximar a f(x) por meio de um função quadrática e maximizar ou minimizar a função aproximada para obter uma solução experimental. Essa função quadrática é obtidas truncando-se a série de Taylor após o termo da segunda derivada. 6
Particularmente fazendo-se x i+1 seja a Assim: solução experimental gerada na iteração i para iniciar a iteração i + 1 (onde x 1 é a solução experimental inicial fornecida pelo usuário para começar a iteração 1). f(x i+1 ) f(x i ) + f (x i )(x i+1 x i ) + 0,5f (x i )(x i+1 x i ) 2 Tendo fixado x i no início da iteração i, f(x i ), f (x i ) e f (x i ) também são constantes. Assim a função do lado direito é uma função quadrática de x i+1. Essa função quadrática pode agora ser otimizada da forma usual, isto é, derivando e igualando a derivada a zero e resolvendo para x i+1. Convém lembrar que estamos supondo que a f(x) seja convexa (côncava) e portanto a solução encontrada será um ótimo global. A primeira derivada é: f (x i+1 ) f (x i ) + f (x i )(x i+1 x i ). Igualando esse resultado a zero, tem-se: f (x i ) + f (x i )(x i+1 x i ) = 0 Resolvendo para x 1+1 vem: x i+1 =x i f (x i )/f (x i ) Essa a expressão básica a cada iteração para calcular a próxima solução experimental x i+1, após termos obtido a solução x i. Essa expressão é utilizada para minimizar (maximizar) uma função convexa (côncava). O critério de parada é x i x i+1 tão pequeno quanto se queira. ALGORITMO do Método de Newton 1. Fixe o valor de parada: ε. Determine uma solução inicial x i e faça i = 1; 2. Calcule f (x i ) e f (x i ); 3. Faça: x i+1 = x i f (x i )/f (x i ); 4. Se x i+1 x i < ε. Pare, senão faça i i + 1. 7
Determine o ponto de máximo da função: f(x) = 12x 3x 4 2x 6 Tem-se: f (x) = 12 12x 3 12x 5 = 12(1 x 3 x 5 ) f (x) = -36x 2 60x 4 = -12(3x 2 + 5x 4 ) Então: x i+1 = x i f (x i )/f (x i ) será: x i+1 = x i + (1 x 3 x 5 )/(3x 2 + 5x 4 ) Escolhendo x 1 = 1, teremos: Iteração x i f(x i ) f'(x i ) f"(x i ) x i+1 x i+1 - x i 1 1,000 7-12 -96 0,8750 0,12500 2 0,8750 7,8439-2,1940-62,733 0,8400 0,03497 3 0,8400 7,8838-0,1325-55,279 0,8376 0,00240 4 0,8376 7,8839-0,0006-54,795 0,8376 0,00001 5 0,8376 7,8839 0,0000-54,793 0,8376 Ótimo Escolha em vetor inicial x 0 como no método do Gradiente. Vetores x 1, x 2, x 3,..., são, então determinados iterativamente por: x i+1 x i H(x i ) -1 f(x i ) A regra de parada é a mesma do método do Gradiente. Maximize: Com uma tolerância de 0,05 e ponto inicial x 0 = (6,597, 5,891), onde f(x 0 ) = -36,58. 2 2 f(x, y) = (x 5 ) (y π) 10 O vetor Gradiente, a matriz Hessiana e a inversa da Hessiana para essa função objetivo são: 2(x 5) f(x, y ) = 2(y π) 05, 1 H (x, y) = 0 0 05, 2 H(x, y) = 0 0 2 8
O vetor Gradiente no ponto x 0 dado vale: 26597 (, 5) 8722, f(x0) = = 25891 (, π) 5499, Então: x 1 = x 0 H(x 0 ) -1 f(x 0 ) = 6597, 05, 0 8722, 2236, = 5891, 0 05, 5499, 3142, Com f(x 1 ) = -10,00 Como f(x 1 ) f(x 0 ) = -10,00 (-36,58) = 26,58 > 0,05, é necessário continuar. 22236 (, 5) 00001, f(x1) = = 23142 (, π) 00008, Então: x 2 = x 1 H(x 1 ) -1 f(x 1 ) = 2236, 05, 0 00001, 2236, = 3142, 0 05, 00008, 3142, Como f(x 2 ) f(x 1 ) = -10,00 (-10,00) = 0 < 0,05, nós tomamos x* = (2,236, 3,142) como o ponto ótimo com f(x * ) = -10,00 Suponha que se queira resolver o seguinte PPNL: Max z = f(x 1, x 2,..., x n ) s. a (x 1, x 2,..., x n ) R n Pela discussão anterior se f(x 1, x 2,..., x n ) é uma função côncava, então a solução ótima (se existir) vai ocorrer num ponto estacionário x, satisfazendo as seguintes condições: f(x) f(x) f(x) = =... = = 0 x1 x2 xn Em algumas situações é fácil encontrar os pontos estacionários, mas em outras pode ser bem difícil. Aqui será apresentado o método da maior subida, que pode ser utilizado para se determinar os pontos estacionários de uma função. 9
Considere a função f(x 1, x 2,..., x n ) para a qual todas as derivadas parciais existem em todos os pontos. O vetor gradiente de f(x 1, x 2,..., x n ), representado por f(x) f(x) f(x) f(x) =,,..., x1 x2 xn f(x), é dado por: O método do Gradiente termina quando o vetor gradiente torna-se nulo, sendo que esta é apenas a condição necessária, mas não suficiente. O ponto será necessariamente ótima se a função sendo otimizada for côncava ou convexa. Para cada vetor x, o vetor x x é denominado de versão normalizada de x. Assim qualquer direção no R n será descrita pelo vetor normalizado que define a direção. f(x) Portanto, f(x) define a direção. f(x) Convém lembrar que uma solução ótima v, para o PPNL deve satisfazer f (v) = 0. Suponha agora que estamos no ponto v 0 e que desejamos encontrar o ponto v que resolva o PPNL. Na tentativa de encontrar v, parece razoável movimentar-se para além do ponto v 0 numa direção que maximiza a taxa (pelo menos localmente) na qual f(x 1, x 2,..., x n ) aumenta. OLema1mostracomoseguir: Suponha que estamos no ponto v e queremos nos mover a uma distância δ na direção d. Então para um dado δ, o aumento máximo da f(x 1, x 2,..., x n ) irá ocorrer se f(x) f(x) escolhermos: d =. Em resumo se queremos avançar na direção do ponto de máximo tão rapidamente quanto possível devemos andar na direção de f(x). É possível agora descrever o método da maior inclinação. 10
Iniciar com qualquer ponto v 0 e mover-se na direção de f(v 0 ); Para tal fixar um valor não-negativo t; Mover-se para o ponto v 1 = v 0 + t f(v 0 ); O crescimento máximo de f(x 1, x 2,..., x n ) será obtido pelo valor t 0 que resolver o seguinte problema de otimização unidimensional max f(v 0 + t 0 f(v 0 )) s. a t 0 0, que pode ser resolvido pelos procedimentos já vistos inclusive pelo método da Secção Áurea ou de Newton. Utilize o método da maior inclinação para aproximar a solução de: Max f(x 1, x 2 ) = -(x 1 3) 2 (x 2 2) 2 s. a (x 1, x 2 ) R 2 Vamos escolher um ponto arbitrário qualquer, por exemplo, (1, 1). Como f(x 1, x 2 ) = (-2x 1 + 6, -2x 2 + 4), tem-se que f(1, 1) = (4, 2). Assim deve-se escolher t 0 que vai maximizar f(v 1 ) = f[(1, 1) + t 0 (4, 2)] = f(1 +4t 0, 1 + 2t 0 ) = = -(-2 + 4t 0 ) 2 (-1 + 2t 0 ) 2. Fazendo f (t 0 ) = 0, obtém-se: -8(-2 + 4t 0 ) 4(-1 + 2t 0 ) = 0 20 40t 0 = 0 t 0 = 0,5. O novo ponto, será então: v 1 = (1, 1) + 0,5(4, 2) = (3, 2). Agora f(3, 2) = (0, 0) e o algoritmo pode terminar. Uma vez que f(x 1, x 2 ) é uma função côncava, a solução ótima do PPNL foi encontrada. 11
Encontre os pontos x 1, x 2, x 3 e x 4 a partir do ponto x 0 = (1, 1) pelo método da maior inclinação para resolver o problema: Max f(x, y) = 4x + 6y 2x 2 2xy 2y 2 s. a (x, y) R 2 BERTSEKAS, Dimitri P. Nonlinear Programming. Belmont (MA): Athena Scientific, 1995. TAHA, Hamdy. Pesquisa Operacional. São Paulo (SP):PearsonEducationdoBrasil,2008.8 a ed. WINSTON, Wayne L. Operations Research: Applications and Algorithms. Belmont (CA): DuxburyPress,1994.3 a ed. 12