search_cover_ants {gor}R Documentation

Ant colony optimization algorithm for Vertex-Cover

Description

Ant colony optimization (ACO) heuristic algorithm to search for a vertex cover of small size in a graph. ACO is a random algorithm; as such, it yields better results when longer searches are run. To guess the adequate parameter values resulting in better performance in particular instances requires some experimentation, since no universal values of the parameters seem to be appropriate to all examples.

Usage

search_cover_ants(g, K, N, alpha = 2, beta = 2, dt = 1, rho = 0.1, verb = TRUE)

Arguments

g

Graph.

K

Number of ants per iteration.

N

Number of iterations.

alpha

Exponent of the pheronome index, see details.

beta

Exponent of the vertex degree, see details.

dt

Pheromone increment.

rho

Pheromone evaporation rate.

verb

Boolean; if TRUE (default) it echoes to the console the routine progress .

Details

ACO is an optimization paradigm that tries to replicate the behavior of a colony of ants when looking for food. Ants leave after them a soft pheromone trail to help others follow the path just in case some food has been found. Pheromones evaporate, but following again the trail reinforces it, making it easier to find and follow. Thus, a team of ants search a vertex cover in a graph, leaving a pheromone trail on the chosen vertices. At each step, each ant decides the next vertex to add based on the pheromone level and on the degree of the remaining vertices, according to the formula P(v) ~ phi(v)^alpha*exp(beta*d(v)), where phi(v) is the pheromone level, d(v) is the degree of the vertex v, and alpha, beta are two exponents to broad or sharpen the probability distribution. After each vertex has been added to the subset, its incident adges are removed, following a randomized version of the greedy heuristic. In a single iteration, each ant builds a vertex cover, and the best of them is recorded. Then the pheromone level of the vertices of the best cover are enhanced, and the remaining pheromones begin to evaporate.

Default parameter values have been chosen in order to find the optimum in the examples considered below. However, it cannot be guarateed that this is the best choice for all cases. Keep in mind that no polynomial time exact algorithm can exist for the VCP, and thus harder instances will require to fine-tune the parameters. In any case, no guarantee of optimality of covers found by this method can be given, so they might be improved further by other methods.

Value

A list with three components: $set contains the subset of V(g) representing the cover and $size contains the number of vertices of the cover; $found is the number of vertex covers found in subsequent iterations (often they are repeated, that is, different explorations may find the same vertex cover).

Author(s)

Cesar Asensio

See Also

is_cover checks if a vertex subset is a vertex cover, build_cover_greedy builds a cover using a greedy heuristic, build_cover_approx builds a cover using a 2-approximation algorithm, improve_cover_flip improves a cover using local search, search_cover_random looks for a random cover of fixed size, find_cover_BB finds covers using a branch-and-bound technique, plot_cover plots covers.

Examples

set.seed(1)
g <- sample_gnp(25, p=0.25)                  # Random graph

X6 <- search_cover_ants(g, K = 20, N = 10)
plot_cover(X6, g)
X6$found


[Package gor version 1.0 Index]