how to generate neighborhood in tabu search for continuous functions in matlab?

336 views Asked by At

I want to implement tabu search in matlab for optimizing Ackley benchmark function, for that I'm confused about how to generate neighborhood for this continuous functions. Is uniform random number sufficient for that or I have to choose step sizes ? thx for helping

1

There are 1 answers

0
Nirmal On

Pseudocode from Wikipedia:

1  sBest ← s0
2  bestCandidate ← s0
3  tabuList ← []
4  tabuList.push(s0)
5  while (not stoppingCondition())
6    sNeighborhood ← getNeighbors(bestCandidate)
7    bestCandidate ← sNeighborHood.firstElement
8    for (sCandidate in sNeighborHood)
9      if ( (not tabuList.contains(sCandidate)) and (fitness(sCandidate) > 
       fitness(bestCandidate)) )
10       bestCandidate ← sCandidate
11     end
12   end
13   if (fitness(bestCandidate) > fitness(sBest))
14     sBest ← bestCandidate
15   end
16   tabuList.push(bestCandidate)
17   if (tabuList.size > maxTabuSize)
18     tabuList.removeFirst()
19   end
20 end
21 return sBest

Check line 9. The whole idea of Tabu search is to have a list of previously visited positions to discourage the search from going to those previously visited positions.

If random perturbations of the current position are used as its neighbors, the probability of reaching that exact same neighbor from another position is practically 0. This deceives the purpose of having a tabu list since condition 1 in line 9 will almost always be true.

I guess it's better to discretize the search-space into say, 10 or 50 intervals for each dimension.