Você está na página 1de 5

´ ´

Utilizando a busca tabu com técnicas de processamento paralelo e out-of-core.

Leonardo Diniz
Universidade Federal Fluminense

RESUMO

Este trabalho visa observar o desenvolvimento sobre o funcionamento da metaheuristica busca tabu sobre
os artifícios de processamento paralelo/distribuído e out-of-core no problema da mochila, a fim de aplicá-
la futuramente em outros problemas e onde o uso de memória pode ser mais escasso ou que necessite
de grandes recursos computacionais.

Principais Áreas: metaheurísticas; otimização; Processamento Paralelo

ABSTRACT
This work aims to observe the development on the operation of tabu search metaheuristic on the artifices
of parallel processing / distributed and out-of-core knapsack problem in order to apply it in the future and
other problems where the use of memory can be scarce or which require large computational resources.

Main Areas: Metaheuristics; Optimization; Parallel Processing

Introdução

Este trabalho se destina a estudar a metaheuristica de busca tabu no problema da mochila


utilizando as técnicas de processamento paralelo com o out-of-core a fim de de obter uma base
mais sólida, para futuramente, utilizá-la em problemas de graus mais elevados, onde a falta de
memória pode ocorrer. O problema da mochila é um caso clássico de otimização, onde existem
objetos com seus respectivos pesos e benefícios, e uma mochila com uma carga limite de peso. O
intuito do problema é alocar a maior quantidade de benefícios que os objetos possuem sem
estourar o limite de carga da mochila.Para começar,neste artigo, transformaremos cada objeto em
um bit cada, ou seja, trabalharemos com 5 objetos, então nosso S para otimização será composto
por uma palavra binária de 5 bits,como no exemplo a seguir: 0 1 0 1 0. Cada item em nosso
trabalho será escrito um arquivo específico conforme figura abaixo

Conforme figura, o peso do primeiro item(bit) será 4 e seu beneficio será 2, e respeitando essa
ordem assim por diante.

Com isso, pode-se começar o procedimento. O primeiro passo é fazer uma cópia do arquivo s para
um arquivo “saux”, que será uma auxiliar de cálculo para a procura local. Feito isso, pode-se
começar a vasculhar a vizinhança com uma busca local , a procura do melhor resultado.Utilizando-
se da técnica de processamento paralelo/distribuído,que consiste em vários processos atuando
cada um em uma parte do problema,cada processo se encarregará de procurar em um vizinho o
melhor valor local ,ou seja, cada processo , que no caso desse trabalho será 5, apontarão para o
arquivo saux além de que cada processo será responsável por achar e calcular o melhor fs de cada
vizinho. Levando-se em consideração nosso “s” que é 0 1 0 1 0, o processo 0 trabalhará com o
vizinho 1 1 0 1 0, enquanto que o processo 2 processará o vizinho 0 0 0 1 0 e assim por
diante,conforme figura abaixo, gerando-se um arquivo com o vizinho de sua responsabilidade

Enquanto vai gerando os vizinhos em arquivo, cada processo vai calculando seu fs, que consiste
em ler bit a bit o vizinho e multiplicar o bit lido pelo correspondente no arquivo beneficio e ir
somando-se os resultados. O mesmo vai sendo feito para peso do vizinho, só que o arquivo
multiplicado é o “peso”.Ao final do cálculo, cada processo, em posse do resultado beneficio, o
escreverá em um mesmo arquivo, compartilhado por todos, nomeado como “teste”,conforme
abaixo.

Os valores não são escritos ordenadamente conforme seus processos. Existem ressalvas, pois para
que um processo possa escrever seu resultado, ele tem que estar abaixo do limite de peso da
mochila além de não estar na lista tabu,visto que a lista tabu proíbe aquele bit de atuar, ou estar
abaixo do limite de peso da mochila e seu beneficio ser maior que o melhor beneficio encontrado
até agora. Pode-se observar com isso que mesmo que um bit esteja na lista tabu, se o vizinho em
questão encontrar um benefício melhor que o encontrado ate agora, ele “escreverá” seu resultado
no arquivo teste.
Continuando, cada processo acessará novamente o arquivo teste, desta vez lendo todos os
resultados fazendo uma checagem se o beneficio obtido por ele foi o maior encontrado nessa
iteração. No caso deste trabalho, entre os processos 0 e 4,o maior beneficio foi encontrado no
processo 4 com valor de 10 e vizinho 0 1 0 1 1.
Neste momento, cada processo já leu o arquivo teste e sabe que seu valor encontrado não foi o
maior e fica no aguardo da checagem final do processo 4.

Continuando, o processo 4 deve fazer uma checagem se o beneficio encontrado por ele é o maior
beneficio encontrado nessa iteração, pois caso seja, ele renomeará o arquivo contendo o vizinho
atual como o novo arquivo “saux”, pois obteve o melhor beneficio, além de escrever a iteração em
que ele foi encontrado, para que na próxima iteração, ele seja o novo ponto de partida, conforme
visto figura abaixo.

Independente se r o melhor beneficio local encontrado, ele também foi o melhor beneficio global
encontrado, ou seja , foi o melhor encontrado até agora. Sendo assim, ele também recria o arquivo
“s” com a cópia do “saux”, conforme visto figura abaixo.

Feito isso, o processo que examinou o vizinho precisa dizer que este bit terá que entrar na lista
tabu. Para isso, esse processo recebe um marcador com o valor de -4, significando que agora ele
fará parte da lista tabu por 4 iterações, pois a cada iteração esse valor será acrescido de 1, até o
momento em que esse valor for maior que 0 e só então, ele sairá da lista tabu,ou até encontrar um
beneficio melhor novamente. Conforme mencionado anteriormente, mesmo estando na lista tabu,
caso ele encontre um beneficio global melhor , seu marcador será colocado como -4 novamente.
Aqui o o arquivo teste é apagado.

Neste exato momento, todos os processos estão alinhados e precisam avaliar se o critério de parada
foi satisfeito ou não. Foi adotado um critério de parada como iteração atual menos a melhor
iteração global encontrada até o momento, sendo que se em algum momento o resultado for maior
do que 1, então os processos cessam. Caso contrário, eles continuarão. Os processos já tem seu
valor da iteração atual mas precisam do valor da iteração global. Para isso, eles leem o arquivo “s”
contendo a melhor iteração global e calculam o resultado. Para este dado momento o resultado é
igual a 0, pois iteração atual(1) – melhor iteração(1) = 0, ou seja , os processos continuam o
processamento normalmente.

Neste exato momento encerra-se a primeira iteração, fazendo com que se comece uma nova
iteração e todo o processo se repete.

Conclusão

Este trabalho veio destinado a ganhar um knowhow de como utilizar a busca tabu com
processamento paralelo/distribuído e utilizando a técnica de out-of-core. Mesmo utilizando um
exemplo de grau tão pequeno e com um exemplo clássico como o problema da mochila, foram
constatados que os resultados esperados foram encontrados e que a técnica foi assimilada. Para
problemas mais extensos e de grau mais elevados, como encontrar melhores rotas em grandes
cidades ou de mesma complexidade, que requerem altos níveis de processamento computacional
em relação a memória, a técnica se mostraria muito útil uma vez que não se precisaria criar uma
lista tabu, visto que cada processo se controla.Ainda nesse contexto, mesmo que mesmo que a
utilização de out-of-core seja mais lenta que o uso de memória, para casos em que a memória seja
limitada, esse procedimento funcionaria perfeitamente e dentro do esperado.

Referenciasˆ

Você também pode gostar