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
Asked
Active
Viewed 325 times
1 Answers
1
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.

Nirmal
- 1,285
- 2
- 13
- 23