NOTAS DE AULA 1 METAHEURÍSTICA 13/10/2016 Metaheurística: São técnicas de soluções que gerenciam uma interação entre técnicas de busca local e as estratégias de nível superior para criar um processo de otimização com capacidade de sair de soluções ótimas locais e realizar uma busca robusta através do espaço de busca. (Glover, ) 1. INTRODUÇÃO A maioria dos problemas realísticos não se é possível encontrar a configuração ótima com esforços computacionais razoáveis de sistemas de grande porte. Um problema de otimização (matemática) pode ser representado da seguinte forma: otimizar um objetivo { s. a um conjunto de restrições Quando é possível representar este problema usando relações matemáticas, então (1) assume a seguinte forma: min f(x) { s. a x S OBS. (1) Se a função objetivo e o conjunto de restrições são lineares temos um Problema de Programação Linear (PL) e se tivermos a f.o. e/ou restrições não lineares, temos um problema de Programação Não Linear (PNL). (2) Existe um tipo de problema muito especial: O PROBLEMA COMBINATORIAL, cujas variáveis de decisão são inteiras. x S Z n. (3) Existe um tipo de problema denominado combinatorial misto, em que algumas variáveis assumem valores inteiros x S Z n e outras valores contínuos (x S R n ). (PNLIM) (4) Os problemas combinatoriais apresentam o fenômeno da explosão combinatorial que significa que quando cresce o número de variáveis do problema então o número de configurações factíveis e o esforço computacional cresce de maneira exponencial. EXEMPLOS DE PROBLEMAS COMBINATORIAIS: O PROBLEMA DA MOCHILA BINÁRIO (knapsack problem 0-1) (I) (II) Em uma casa há um conjunto de n produtos diferentes em que cada produto tem volume a j conhecido e um valor c j conhecido. Uma pessoa pode levar todos os produtos que desejar, mas para levar os produtos ela pode usar somente uma mochila de volume b
Formular um problema de otimização matemática que permita o mochileiro decidir quais produtos deve levar na mochila para ter o máximo lucro. Seja x j a variável de decisão binária: Se x j = 1 o mochileiro leva o produto j. Se x j = 0 o mochileiro não leva o produto j. max z(x) = c x s. a. ax b, x {0,1} n max z(x) = c j x j j=1 s. a. a j x j b, j = 1,2,, n e x {0,1}, Sendo c j o preço do produto j e a j o volume do produto j. Um exemplo típico: max z(x) = 6x 1 + 6x 2 + 6x 3 + 10x 4 + 10x 5 s. a. 6x 1 + 6x 2 + 3x 3 + 2x 4 + 2x 5 10 x j {0,1} COMPLEXIDADE COMPUTACIONAL - EXPLORAÇÃO EXAUSTIVA Exemplo: O problema da mochila: Se o problema tiver 3 variáveis com x {0,1} então existem 8 soluções candidatas (algumas factíveis e outras infactíveis) x = x 1 x 2 x 3
Há 8 maneiras diferentes: Assim, um problema da mochila com n variáveis há 2 n candidatas. Supondo que existe um computador que pode ordenar e avaliar a função objetivo de um milhão de soluções candidatas por segundo. Para n=20 temos 2 20 = 1.048.576 soluções candidatas. Estes tipos de problemas o esforço computacional cresce de maneira exponencial com o tamanho do problema. NP (non polinomial) e alguns especiais são chamados de NP-completos. 2. HEURÍSTICAS As heurísticas são técnicas de otimização que permitem encontrar soluções de boa qualidade. Na década de 1960 e 1970, as heurísticas foram as técnicas de otimização mais utilizadas para resolver problemas complexos do campo de otimização matemática, em especial para aqueles problemas não lineares, discretos e não convexos. A maioria das heurística encontram soluções de boa qualidade de problemas altamente complexos em tempos relativamente rápidos, geralmente fáceis de entender e de implementar computacionalmente. No entanto, geralmente ela não consegue encontrar a solução ótima global de um problema complexo de grande porte. Um problema pode ser considerado complexo, quando há dificuldade de encontrar a solução ótima global, devido à característica de explosão combinatorial e/ou porque apresenta uma modelagem complexa (variáveis inteiras ou discretas, função objetivo não linear e não diferenciável, restrições não lineares, região factível não convexa, etc.) É interessante se utilizar técnicas heurísticas de otimização quando: 1) Quando não há um método exato de otimização para se resolver o problema; 2) Quando a solução ótima não é muito importante do ponto de vista prático. 3) Quando os dados usados apresentam muitas incertezas (como acontece nos problemas de planejamento.) 4) Quando existe limitação do tempo de processamento computacional e pouca memória do computador ou que tem que dar respostas em tempo real.
5) Quando se pretende encontrar uma boa solução inicial para ser usada como ponto de partida na aplicação de uma técnica de otimização mais sofisticada. Há vários tipos de algoritmos ou técnicas heurísticas de otimização, no entanto, limitaremos a apresentar o AHC (Algoritmo Heurístico Construtivo) e o Algoritmo de Busca Através da Vizinhança. 2.1 ALGORITMO HEURÍSTICO CONSTRUTIVO (AHC) Este tipo de heurística é uma das técnicas heurísticas de otimização mais usadas para resolver problemas complexos isoladamente ou integrado a metaheurística mais sofisticadas. O AHC é uma técnica de otimização que, em um processo passo a passo, gera uma solução geralmente de boa qualidade de um problema complexo. Em cada passo o AHC escolhe um componente individual da solução que está sendo construída e no último passo termina de gerar uma solução (configuração) factível. A diferença fundamental dos AHCs é que eles utilizam um indicador de sensibilidade. O mais popular é o tipo guloso (greedy), que utiliza a estratégia de em cada passo aquela solução (configuração) que produz o máximo benefício em cada passo. De forma genérica o AHC procede da seguinte maneira: 1- Armazena os dados do problema e escolhe o indicador de sensibilidade que será utilizado. Passo a passo, escolhe-se um componente individual que será incorporado a solução. Geralmente a solução inicia sem componentes. 2- Verificar se a solução em construção já representa uma solução factível. Se factível pare o processo e a solução factível procurada foi encontrada. Caso contrário ir ao passo 3. 3- Usando a solução em construção, resolver o problema que permite identificar o indicador de sensibilidade de todos os componentes do problema que ainda não foram incorporadas na solução em construção. 4- Usando os indicadores de sensibilidade encontrados no passo anterior identificar o elemento que deve ser incorporado na solução em construção. Adicionar o componente que deve ser incorporado na solução em construção e voltar ao passo 2.
Exemplo: PROBLEMA DO CAIXEIRO VIAJANTE (Salesman Traveling) Existe um conjunto de n cidades (nós), V = {1,2,3,, n} e um conjunto de caminhos (arcos) ligando cada uma das cidades, caminho (i, j) A. c ij é a distância para ir da cidade i para a cidade j. (c ij não necessariamente é igual a c ji ). O caixeiro deve realizar um tour (roteiro ou percurso) começando na cidade (1) e visitar todas as cidades uma única vez e retornar a cidade de origem (1). Este problema é um problema de programação linear binária, com um número grande de restrições. Formule um modelo matemático que permita encontrar o tour de distância mínima. Seja x ij = { 1 se o percurso é realizado de i para j. 0 se o percurso não é realizado de i para j. i j Supondo que exista caminho para todas as cidades: x ij {0,1}, i = 1,, n e j = 1,, n min z(x) = c ij x ij n (i,j) A Restrições: Pode-se chegar em cada cidade de uma única cidade anterior (uma cidade é visitada uma única vez.) A partir da cidade i pode se passar para uma única cidade. Não pode ter subtours. Seja o problema do caixeiro viajante com n = 6, com caminhos existentes entre todas as cidades. AHC Simples: 1) Escolher a cidade inicial de forma aleatória.
2) Utilizar como indicador de sensibilidade a distância mais próxima. Assim se o caixeiro encontra-se na cidade p então se calcula a distância da cidade p para todas as cidades ainda não visitadas e a próxima cidade que será visitada será a que é a que tiver menor distância. Portanto, a cada passo se escolhe uma aresta do grafo que no final deve gerar um tour. Exemplo de um caixeiro viajante com 6 cidades. x 11 x 12 x 13 x 14 x 15 x 16 x 21 x 22 x 23 x 24 x 25 x 26 x 31 x 32 x 33 x 34 x 35 x 36 x 41 x 42 x 43 x 44 x 45 x 46 x 51 x 52 x 53 x 54 x 55 x 56 x 61 x 62 x 63 x 64 x 65 x 66 36 variáveis binárias. Do exemplo da mochila apresentado anteriormente, aplicar uma heurística construtiva para gerar uma solução (configuração) max z(x) = 6x 1 + 6x 2 + 6x 3 + 10x 4 + 10x 5 s. a. 6x 1 + 6x 2 + 3x 3 + 4x 4 + 2x 5 10 x j {0,1} Algoritmo guloso simples: Escolher em cada passo o produto que apresenta o melhor coeficiente custo/volume. c = [6 6 6 10 10], V = [6 6 3 4 2] produto coeficiente prioridade 1 1 4 2 1 5 3 2 3 4 2,5 2 5 5 1 Adicionando o produto x 5 : f.o.=10 recurso disponível=8 Adicionando o produto x 4 : f.o.=20 recurso disponível=4
Adicionando o produto x 3 : f.o.=26 recurso disponível=1 Solução: z(x) = 26 { x 3 = x 4 = x 5 = 1 x 1 = x 2 = 0 Proposto: Resolver o problema do caixeiro viajante com 6 cidades e escolher uma inicial aleatoriamente e, em cada passo, escolher a cidade mais próxima até terminar o tour. Considere que a distância (horizontal e vertical) entre duas cidades consecutivas é 1 km e que existe caminho entre todas as cidades. 2.2 MÉTODO DE BUSCA ATRAVÉS DA VIZINHANÇA Estes métodos partem de uma solução inicial factível (ou às vezes pode ser infactível) e utilizando um processo de transição adequado passa para uma outra solução vizinha da solução corrente. Este processo é repetido passando de uma solução (configuração) para outra solução (configuração) vizinha até que o critério de parada seja satisfeito. Durante o processo sempre há a solução corrente e a solução incumbente que é a melhor solução encontrada durante o processo e finalmente representa a resposta do algoritmo. x: configuração corrente x : configuração candidata x x x deve ser vizinho de x. Então deve-se definir o que é vizinho de x. Toda configuração x N(x) é chamado de vizinho de x se a configuração x N(x) pode ser obtido por meio de uma operação elementar que é definido através de regras específicas, que vai definir o o número de elementos de N(x). Por exemplo o problema da mochila com n = 5. Configuração corrente x = [1 0 0 1 1] Definição da vizinhança N(x): 1 km São todos os elementos de N(x) todas as configurações que são obtidas a partir de x através de uma das seguintes operações elementares: i) Mudando uma posição de 0 para 1. ii) Mudando uma posição de 1 para 0.
iii) Trocando de valor duas posições (uma posição passa de 0 para 1 e outra de 1 para 0 simultaneamente). Assim para se utilizar os métodos de busca através de vizinhanças deve se definir qual a estratégia de vizinhança se vai utilizar para se obter a próxima configuração. REFERÊNCIAS BIBLIOGRÁFICAS Notas de aula da disciplina de Metaheurística do Programa de Pós Graduação em Engenharia Elétrica da UNESP Prof. Rubén Augusto Romero Lázaro.