• Nenhum resultado encontrado

Optimiza¸c˜ ao Uni-objectivo

2.1.5 Complexidade dos Problemas

        

∇gj(x)Tt = 0 para todo o j = 1, . . . , m e j ∈ R(x) com λ > 0 ∇gj(x)Tt ≥ 0 para todo o j = 1, . . . , m e j ∈ R(x) com λ = 0 ∇hi(x)Tt = 0 para todo o i = m + 1, . . . , m + p

. (2.1.11)

As condi¸c˜oes suficientes de segunda ordem n˜ao exigem que x seja ponto regular. Teorema 2.1.6. (Condi¸c˜oes Suficientes de Segunda Ordem) Seja x um ponto admiss´ıvel para o qual existe um vector de multiplicadores de Lagrange λ que verifica as condi¸c˜oes de Karush-Kuhn-Tucker, se

tT2

xxL(x, λ)t > 0 para todo o t que verifica as condi¸c˜oes (2.1.11) e t 6= 0 (2.1.12) ent˜ao x ´e um m´ınimo local forte.

2.1.5 Complexidade dos Problemas

A classifica¸c˜ao da complexidade computacional dos problemas tem sido alvo de investiga¸c˜ao e faz parte da chamada Teoria da Complexidade [GJ79]. A distin¸c˜ao entre problemas ”f´aceis” ou trat´aveis e problemas ”dif´ıceis” ou intrat´aveis reveste-se de grande importˆancia dada a natureza de um grande n´umero de problemas de engenharia. Neste contexto, um problema pode ser caracterizado pela:

• descri¸c˜ao de todos os seus parˆametros;

• defini¸c˜ao das propriedades que a solu¸c˜ao deve satisfazer.

Uma instˆancia de um problema ´e obtida pela especifica¸c˜ao de valores particulares para todos os parˆametros do problema. Os algoritmos s˜ao procedimentos para resolver proble-mas. Em geral, existe interesse em encontrar o algoritmo mais ”eficiente” para resolver um problema. A no¸c˜ao de eficiˆencia envolve todos os recursos necess´arios `a execu¸c˜ao do algo-ritmo. Em geral, entende-se pelo algoritmo mais ”eficiente” aquele que ´e mais r´apido. Os

requisitos de tempo de um algoritmo s˜ao expressos em termos do tamanho de uma instˆancia de um problema, que pretende reflectir a quantidade de dados de entrada necess´arios para descrever essa instˆancia. A fun¸c˜ao complexidade de tempo para um algoritmo expressa os seus requisitos de tempo dando, para cada poss´ıvel quantidade de dados de entrada, a maior quantidade de tempo necess´aria pelo algoritmo para resolver uma instˆancia do problema desse tamanho.

Uma fun¸c˜ao a(n) ´e O(b(n)) quando existe uma constante c tal que |a(n)| ≤ c|b(n)| para todo o n ≥ 0. Um algoritmo de tempo polinomial ´e um cuja fun¸c˜ao complexidade de tempo ´e O(p(n)) para algum polin´omio p(n) e onde n ´e a quantidade de dados de entrada. Qualquer algoritmo cuja fun¸c˜ao complexidade de tempo n˜ao ´e limitada pela anterior ´e chamado de algoritmo de tempo exponencial (esta defini¸c˜ao inclui certas fun¸c˜oes complexidade de tempo n˜ao polinomiais e que n˜ao s˜ao normalmente encaradas como fun¸c˜oes exponenciais). Esta distin¸c˜ao entre algoritmos tem particular importˆancia quando se procura a solu¸c˜ao de instˆancias de problemas de grande dimens˜ao. O tempo de execu¸c˜ao de um algoritmo com uma fun¸c˜ao complexidade exponencial cresce muito mais `a medida que o tamanho da instˆancia do problema aumenta, do que um com uma fun¸c˜ao complexidade polinomial. Por este motivo, os algoritmos com fun¸c˜ao complexidade de tempo polinomial s˜ao prefer´ıveis aos com fun¸c˜ao complexidade de tempo exponencial.

Um problema diz-se ter classe de complexidade polinomial (Classe P) se existir um algoritmo determin´ıstico para o resolver que seja polinomial, i.e., que tenha fun¸c˜ao com-plexidade de tempo polinomial. Estes problemas s˜ao, em geral, trat´aveis. Os problemas que n˜ao pertencem a esta classe s˜ao referidos como pertencendo `a Classe n˜ao-P. Para estes problemas n˜ao existem algoritmos determin´ısticos que os resolvam em tempo poli-nomial. Uma outra classe de problemas ´e a classe n˜ao determin´ıstica polinomial (Classe NP). Para um problema desta classe (em geral, designado NP-dif´ıcil) embora n˜ao exista necessariamente um algoritmo determin´ıstico que o resolva em tempo polinomial, a

ve-rifica¸c˜ao de uma solu¸c˜ao pode ser feita em tempo polinomial. Qualquer problema da classe P pertence necessariamente `a classe NP. A classe NP ´e, em geral, caracterizada em termos de algoritmos n˜ao determin´ısticos. Estes algoritmos podem ser vistos como consistindo em duas fases: uma fase de ”adivinha¸c˜ao” de solu¸c˜oes (guessing) seguida de outra de verifica¸c˜ao das solu¸c˜oes. Para um problema da classe NP somente um algoritmo n˜ao determin´ıstico o poder´a resolver em tempo polinomial. Uma sub-classe importante dos problemas NP-dif´ıceis s˜ao os chamados problemas NP-completos. Qualquer algoritmo que resolva um problema NP-completo pode ser traduzido para resolver um qualquer problema NP-dif´ıcil. Se qualquer problema NP ´e intrat´avel, ent˜ao assim o s˜ao todos os problemas completos. Existe um conjunto de problemas que se demonstrou serem problemas NP-completos [GJ79]. Em geral, os problemas de PIMNL pertencem `a classe NP pelo que n˜ao s˜ao conhecidos algoritmos determin´ısticos capazes de os resolver em tempo polinomial.

2.2 Computa¸c˜ao Evolucion´aria

O termo Computa¸c˜ao Evolucion´aria (CE) ´e utilizado em geral para referir uma classe de t´ecnicas computacionais inspiradas nos princ´ıpios da evolu¸c˜ao natural. Os primeiros Algoritmos Evolucion´arios (AEs) surgiram nos finais da d´ecada de 60 do s´eculo XX. Na Alemanha, foram desenvolvidas por Rechenberg [Rec73] as Estrat´egias Evolutivas (EEs). Na mesma ´epoca, nos Estados Unidos da Am´erica, surgiram os Algoritmos Gen´eticos (AGs) concebidos por Holland [Hol75]. Cada uma destas abordagens surgiu de forma independente e apresenta caracter´ısticas muito pr´oprias. No entanto, ambas s˜ao inspiradas nos mesmos princ´ıpios da evolu¸c˜ao natural.

As EEs foram desenvolvidas com o objectivo de serem aplicadas a problemas de enge-nharia. As EEs revelaram-se algoritmos de optimiza¸c˜ao robustos e eficientes, n˜ao exigindo, ao contr´ario de outros algoritmos de optimiza¸c˜ao, nenhuma condi¸c˜ao relativa `a

continui-dade e convexicontinui-dade do espa¸co de procura [Sch95].

Os AGs surgiram como algoritmos de procura aplicados a problemas de optimiza¸c˜ao. No entanto, os AGs foram desenvolvidos tendo como objectivos: o bom desempenho em optimiza¸c˜ao global e, por outro lado, a robustez no sentido de serem aplic´aveis a uma grande variedade de problemas de optimiza¸c˜ao [Gol89].

Para al´em destas duas abordagens evolucion´arias, na mesma ´epoca, surgiu, nos Estados Unidos da Am´erica, a Programa¸c˜ao Evolucion´aria (PE) desenvolvida por Fogel [FOW66]. A PE foi originalmente desenvolvida no contexto da Inteligˆencia Artificial e aplicada a espa¸cos de procura discretos. No entanto, a sua aplica¸c˜ao a problemas de optimiza¸c˜ao com vari´aveis reais s´o surgiu mais tarde. Esta recente extens˜ao da PE partilha algumas das caracter´ısticas das EEs, apesar das aplica¸c˜oes em optimiza¸c˜ao serem em menor n´umero. Por este motivo, a PE n˜ao ser´a alvo de estudo aprofundado nesta disserta¸c˜ao.

A Programa¸c˜ao Gen´etica (PG) consiste na utiliza¸c˜ao de AGs para desenvolver progra-mas eficientes na resolu¸c˜ao de uma dada tarefa [Koz92]. Logo, na PG, em vez de vari´aveis de decis˜ao, um programa representa um procedimento para resolver uma dada tarefa. No entanto, no contexto espec´ıfico da PG, diversos mecanismos avan¸cados foram desenvol-vidos com vista a aumentar o desempenho destes algoritmos na obten¸c˜ao de programas eficientes.

Mais recentemente, novos algoritmos inspirados na natureza foram propostos, tais como, o algoritmo das Col´onias de Formigas de Dorigo, Maniezzo e Colorni [DMC96] e o Particle Swarm Algorithm de Kennedy e Eberhart [KE95].

Cada uma destas abordagens surgiu de forma independente e apresenta caracter´ısticas muito pr´oprias. No entanto, todas elas s˜ao inspiradas nos mesmos princ´ıpios da evolu¸c˜ao natural e as diferentes t´ecnicas que implementam, no seu todo, constituem a Computa¸c˜ao Evolucion´aria.

Documentos relacionados