当试图了解禁忌搜索如何应用于旅行推销员时,我很难理解邻域是如何生成的。如果我们从维基百科看这个伪代码:
sNeighborhood ← getNeighbors(bestCandidate)
for (sCandidate in sNeighborhood)
if ( (not tabuList.contains(sCandidate)) and (fitness(sCandidate) > fitness(bestCandidate)) )
bestCandidate ← sCandidate
end
end
我最好的候选人从最近邻算法生成的路径开始,这条路径的邻居是什么?
假设我的路径是 A,B,D,C,A 是每个索引的所有可能性的邻域吗?例如 [B,D,C], [A,C,D] 等?
然后我们消除每个索引的禁忌列表中的邻居?
如果不是,我的邻居是什么?
同样在伪代码中,禁忌列表只添加了新的最佳候选者,那么我们下次如何选择不同的邻域呢?
if (fitness(bestCandidate) > fitness(sBest))
sBest ← bestCandidate
end
tabuList.push(bestCandidate)
维基百科源代码: