• Nenhum resultado encontrado

3.4 GRASP, Simulated Annealing e Colônia de Formigas

3.4.1 GRASP

O GRASP (greedy randomized adaptative search procedure) é uma metaheurística multi-início (multi-start) utilizada para a solução de problemas de otimização combina- tória. É considerada uma heurística semi-gulosa que adiciona variabilidade na heurística gulosa (FEO; RESENDE, 1989, 1995), e consiste em um processo iterativo, sendo que cada

iteração consiste em duas fases: (i) uma fase construtiva, e (ii) uma fase de busca lo- cal. Na fase construtiva cria uma solução inicial viável para o problema, enquanto que a vizinhança da solução é explorada até que um ótimo local seja encontrado pela busca local.

No pseudocódigo 3.4.1 são descritos de forma genérica os passos básicos da metaheu- rística GRASP. A primeira etapa consiste na leitura dos dados de entrada do problema a

3.4 GRASP, Simulated Annealing e Colônia de Formigas 40

ser resolvido. Em seguida o procedimento entra no seu loop principal, que consiste a cada iteração criar uma solução inicial aleatória tendo como parâmetro a semente para a ge- ração de números aleatórios. A solução inicial gerada é utilizada para a realização de um procedimento de busca local, na tentativa de obtenção de soluções de melhor qualidade para o problema. A solução obtida após o procedimento de melhoria é comparada com a melhor solução alcançada até o momento, e a melhor solução é atualizada caso a nova solução obtida possua um melhor valor da função objetivo.

Pseudocódigo 3.4.1: Metaheurística GRASP(M ax_iteracoes, Semente)

Realiza a leitura dos dados de entrada Para k = 1, . . . , M ax_iteracoes Faça        Solucao ← Construcao_gulosa_aleatoria(Seed) Solucao ← Busca_local(Solucao) Atualiza_solucao(Solucao, M elhor_solucao) Retorno (M elhor_solucao)

Na criação da solução inicial, elementos candidatos são todos os que podem ser incor- porados na solução parcial em construção sem violar nenhuma restrição do problema. A definição do próximo elemento a ser incorporado na solução é determinada pela avaliação de todos os elementos candidatos de acordo com uma função de avaliação gulosa. Essa função gulosa geralmente representa o aumento incremental na função de custo devido a incorporação desse elemento na solução em construção. A avaliação do elemento por essa função leva à criação de uma lista restrita de candidatos, ou Restricted Candidate List (RCL), formada pelos melhores elementos, isto é, todos aqueles cuja incorporação na solução parcial resulte em um menor custo incremental (esse é o aspecto guloso da heurística).

O elemento a ser incorporado na solução parcial é aleatoriamente selecionado dentre os contidos na lista restrita, sendo esse o aspecto probabilístico da heurística. Uma vez que o elemento é selecionado e incorporado na solução parcial, a lista de candidatos é atualizada e os custos incrementais são reavaliados. Esse é o aspecto adaptativo da heurística. Essa estratégia é similar à heurística semi-gulosa proposta por Hart e Shogan (1987), que também possui uma abordagem multi-início baseada em construções gulosas aleatórias, porém sem a utilização de busca local. As soluções geradas pelo procedimento guloso aleatório não são necessariamente ótimas, mesmo para problemas em que a vizinhança é simples e fácil de ser explorada. A busca local consiste em iterativamente buscar soluções

3.4 GRASP, Simulated Annealing e Colônia de Formigas 41

de melhor qualidade na vizinhança da solução corrente, e o procedimento termina quando não for mais possível obter soluções de melhor qualidade na vizinhança.

Hart e Shogan (1987) e Feo e Resende (1989) propuseram duas formas de criação de uma lista restrita, sendo a primeira delas baseada na cardinalidade, ou seja, as primeiras k melhores soluções são consideradas, e outra baseada no valor da função objetivo das soluções gulosas geradas. Em um esquema baseado em valor para a criação da lista restrita, em vez da cardinalidade, todos os candidatos são inseridos na lista restrita se estiverem dentro de uma faixa α% do valor guloso, onde α ∈ [0, 100]. Um esquema menos tendencioso foi proposto em Resende et al. (2000), em que os elementos inseridos na lista restrita são todos os quais o valor da função objetivo estiver entre α(cmax− cmin) do valor

guloso, onde cmax = max{c(e)|e ∈ C} e cmin = min{c(e)|e ∈ C}, onde C é o conjunto de

soluções gulosas candidatas criadas. Para um problema de minimização, a lista restrita é composta por todas as soluções em que RCL = {e ∈ C|c(e) ≤ cmin+ α(cmax− cmin)}. É

interessante ressaltar que se α = 0, a heurística semi-gulosa se torna puramente gulosa e, por outro lado, se α = 1, a busca é puramente aleatória.

No pseudocódigo 3.4.2 são apresentadas as etapas básicas para a construção de uma so- lução gulosa aleatória baseada no valor do custo incremental dos candidatos. Inicialmente são calculados todos os custos incrementais de todos os candidatos a serem incorporados na solução. O conjunto C de candidatos é avaliado e os valores máximo e mínimo dos custos incrementais são armazenados nas variáveis cmax e cmin, respectivamente. É defi-

nido um valor para α, e todos os candidatos que possuírem um custo incremental menor ou igual a α(cmax− cmin) são inseridos na lista restrita. Em seguida, é selecionado alea-

toriamente um candidato contido na lista restrita para fazer parte da solução, e todos os candidatos não selecionados têm seu valor de custo incremental atualizado para a próxima iteração. Esse procedimento é realizado até que uma solução completa para o problema seja criada.

3.4 GRASP, Simulated Annealing e Colônia de Formigas 42

Pseudocódigo 3.4.2: Construcao Gulosa Aleatoria(α, Semente)

Solucao ← ∅

- Inicializa gerador de números aleatórios com a semente fornecida - Inicialize o conjunto de candidatos: C ← E

- Avalie o custo incremental c(e) para cada e ∈ C Enquanto C 6= ∅ Faça                              cmin ← min{c(e)|e ∈ C}; cmax ← max{c(e)|e ∈ C};

RCL ← {e ∈ C|c(e) ≤ cmin+ α(cmax− cmin)};

Selecione um elemento s de RCL de forma aleatória; Solucao ← Solucao ∪ s;

Atualize o conjunto de candidatos C;

Reavalie o custo incremental c(e) para todo e ∈ C; Retorno (Solucao)

Implementações inicias do GRASP utilizaram um valor fixo para α, sendo geralmente determinado através de experimentos. Entretanto, em alguns casos, uma simples mudança de classe de problema, ou um problema particular de uma classe de problemas requeriam um valor diferente para o parâmetro α. Com isso Resende et al. (2000) propuseram a utilização de diferentes valores de α para cada iteração do GRASP, sendo α gerado como α ∈ U N IF [0, 1].

Um mecanismo de auto ajuste para o parâmetro α foi proposto por Prais e Ribeiro (2000a, 2000b), nomeado pelos autores de GRASP reativo e, da mesma forma que em Resende et al. (2000), um novo valor para o parâmetro α foi utilizado em cada iteração da heurística. Entretanto, em vez de ser escolhido por uma distribuição uniforme, α foi escolhido a partir de um conjunto discreto de valores {α1, α2, . . . , αm}, e tendo cada

valor αk uma probabilidade p(αk) de ser escolhido. O GRASP reativo de Prais e Ribeiro

(2000b) muda as probabilidades {p(α1), p(α2), . . . , p(αm)} visando favorecer valores de α

que produzem soluções de melhor qualidade.

Outros mecanismos visando melhorar a eficiência e robustez do GRASP foram pro- postos na literatura, principalmente visando incorporar mecanismos de memória ao proce- dimento, como por exemplo, a utilização de path relinking. O path relinking foi proposto pela primeira vez no contexto da busca tabu ou tabu search (TS) (GLOVER; LAGUNA,

3.4 GRASP, Simulated Annealing e Colônia de Formigas 43

em Glover et al. (2000), sendo o trabalho de Laguna e Martí (1999) a primeira aplicação do path relinking com o GRASP.

A metaheurística GRASP foi aplicada com sucesso em diversos problemas e aplicações. Em Festa e Resende (2002) são apresentados 230 trabalhos, desde material introdutório e tutoriais sobre GRASP, como também aplicações em diversos domínios e problemas, como por exemplo, na teoria de grafos, problemas encontrados na operação de transportes, ro- teamento de veículos, localização de instalações, biologia, sistemas elétricos, problemas de corte e empacotamento, problemas de designação quadrática, telecomunicações, im- plementações paralelas, entre outros.