A local search heuristic is performed through choosing an initial solution x, discovering a direction of descent from
x, within a neighborhood , and proceeding to the minimum of within in the same direction. If there is no direction of descent, the heuristic stops; otherwise, it is iterated. Usually the highest direction of descent, also related to as best improvement, is used. This set of rules is summarized in , where we assume that an initial solution
x is given. The output consists of a local minimum, denoted by
x′, and its value. Observe that a neighborhood structure is defined for all . At each step, the neighborhood of
x is explored completely. As this may be time-consuming, an alternative is to use the first descent heuristic. Vectors x^i \in N(x) are then enumerated systematically and a move is made as soon as a direction for the descent is found. This is summarized in .
Algorithm 1: Best improvement (highest descent) heuristic Function BestImprovement(x) repeat x′ ← x x ← argmin_{ f(y) }, y ∈ N(x) until ( f(x) ≥ f(x′) ) return x′
Algorithm 2: First improvement (first descent) heuristic Function FirstImprovement(x) repeat x′ ← x; i ← 0 repeat i ← i + 1 x ← argmin{ f(x), f(x^i)}, x^i ∈ N(x) until ( f(x) Let one denote \mathcal{ N}_k(k=1, . . . ,k_{\max}) , a finite set of pre-selected neighborhood structures, and with \mathcal{N}_k(x) the set of solutions in the
kth neighborhood of
x. One will also use the notation \mathcal{N'}_k(x), k = 1, . . . , k'_{\max} when describing local descent. Neighborhoods \mathcal{N}_k(x) or \mathcal{N'}_k(x) may be induced from one or more
metric (or quasi-metric) functions introduced into a solution space
S. An optimal solution x_\text{opt} (or
global minimum) is a feasible solution where a minimum of problem is reached. We call a local minimum of problem with respect to \mathcal{N}_k(x) , if there is no solution x \in \mathcal{N'}_k(x) \subseteq X such that f(x) . In order to solve problem by using several neighborhoods, facts 1–3 can be used in three different ways: We first give in the steps of the neighborhood change function which will be used later. Function NeighborhoodChange() compares the new value with the incumbent value obtained in the neighborhood k (
line 1). If an improvement is obtained, k is returned to its initial value and the new incumbent updated (
line 2). Otherwise, the next neighborhood is considered (
line 3).
Algorithm 3: Neighborhood change Function NeighborhoodChange (x, x′, k) if f (x′) When VNS does not render a good solution, there are several steps which could be helped in process, such as comparing first and best improvement strategies in local search, reducing neighborhood, intensifying shaking, adopting VND, adopting FSS, and experimenting with parameter settings. The Basic VNS (BVNS) method (
Handbook of Metaheuristics, 2010)) could be found algorithm. == Extensions ==