Jump to content

User:Jesgadiaz/sandbox

From Wikipedia, the free encyclopedia

Vertex k-center problem

[edit]

The vertex k-center problem is a classical NP-Hard problem in computer science. It has application in Facility Location and Clustering[1][2]. Basically, the vertex k-center problem models the following real problem: given a city with facilities, find the best facilities where to build fire stations. Since firemen must attend any emergency as quickly as possible, the distance from the farthests facility to its nearest fire station has to be as small as possible. In other words, the position of the fire stations must be such that every possible fire is attended as quickly as possible.

Formal definition

[edit]

The vertex k-center problem is a classical NP-Hard problem in computer science. It was first proposed by Hakimi in 1964[3]. Formally, the vertex k-center problem consists in: given a complete undirected graph in a metric space, and a positive integer , find a subset such that and the objective function is minimized. The distance is defined as the distance from the vertex to its nearest center in .

Approximation algorithms

[edit]

If , the vertex k-center problem can not be (optimally) solved in polynomial time. However, there are some polynomial time algorithms that get near optimal solutions. Specifically, 2-approximated solutions. Actually, if the best possible solution that can be achieved by a polynomial time algorithm is a 2-approximated one[4][5][6][7]. In the context of a minimization problem, such as the vertex k-center problem, a 2-appoximated solution is any solution such that , where is an optimal solution. An algorithm that guarantees to generate 2-approximated solutions is known as a 2-pproximation algorithm. The main 2-approximated algorithms for the vertex k-center problem reported in the literature are the Sh algorithm[8],the HS algorithm[7], and the Gon algorithm[5][6]. Even though these algorithms are the (polynomial) best possible ones, their performance on most benchmark datasets is very deficient. Because of this, many heuristics and metaheuristics have been developed through the time. Contrary to common sense, one of the most practical (polynomial) heuristics for the vertex k-center problem is based on the CDS algorithm, which is a 3-approximation algorithm[9].

The Sh algorithm

[edit]

Formally characterized by David Shmoys in 1995[8], the Sh algorithm takes as input a complete undirected graph , a positive integer , and an assumption on what the optimal solution size is. The Sh algorithm works as follows: selects the first center at random. So far, the solution consists of only one vertex, . Next, selects center at random from the set containing all the vertices whose distance from is greater than . Now, . Finally, selects the remaining centers the same way was selected. The complexity of the Sh algorithm is , where is the number of vertices.

The HS algorithm

[edit]

Proposed by Dorit Hochbaum and David Shmoys in 1985, the HS algorithm takes the Sh algorithm as basis[7]. By noticing that the value of must equals the cost of some edge in , and since there are edges in , the HS algorithm basically repeats the Sh algorithm with every edge cost. The complexity of the HS algorithm is . However, by running a binary search over the ordered set of edge costs, its complexity is reduced to .

The Gon algorithm

[edit]

Proposed independently by Teofilo Gonzalez[5], and by Martin Dyer and Alan Frieze in 1985[6], the Gon algorithm is basically a more powerfull version of the Sh algorithm. While the Sh algorithm requires a guess on , the Gon algorithm can prescind from such guess by noticing that if any set of vertices at distance greater than exists, then the farthest vertex must be inside such set. Therefore, instead of computing at each iteration the set of vertices at distance greater than and then selecting a random vertex, the Gon algorithm simply selects the farthest vertex from every partial solution . The complexity of the Gon algorithm is , where is the number of vertices.

The CDS algorithm

[edit]

Proposed by García Díaz et al. in 2017, the CDS algorithm is a 3-approximation algorithm that takes ideas from the Gon algorithm (farthest point heuristic), the HS algorithm (parametric pruning), and the relationship between the vertex k-center problem and the Dominating Set problem. The CDS algorithm has a complexity of . However, by performing a binary search over the ordered set of edge costs, a more efficiente heuristic named CDSh is proposed. The CDSh algorithm complexity is . Despite the suboptimal performance of the CDS algorithm, and the heuristic performance of CDSh, both present a much better performance than the Sh, HS, and Gon algorithms.

Experimental performance

[edit]

Some of the most widely used benchmark datasets for the vertex k-center problem are the pmed instances from OR-Lib[10], and some instances from TSP-Lib[11]. Table 1 and Table 2 show the mean and standard deviation of the experimental approximation factors of the solutions generated by each algorithm over the 40 pmed instances from OR-Lib, and over the TSP-Lib instances, respectively[9].

Table 1. Experimental approximation factor over pmed instances from OR-Lib
Algorithm Complexity
HS 1.532 0.175
Gon 1.503 0.122
CDSh 1.035 0.031
CDS 1.020 0.027
Table 2. Experimental approximation factor over instances from TSP-Lib
Algorithm Complexity
Gon 1.396 0.091
HS 1.318 0.108
CDSh 1.124 0.065
CDS 1.042 0.038
  1. ^ Pacheco, Joaquín A.; Casado, Silvia (2005-12). "Solving two location models with few facilities by using a hybrid heuristic: a real health resources case". Computers & Operations Research. 32 (12): 3075–3091. doi:10.1016/j.cor.2004.04.009. ISSN 0305-0548. {{cite journal}}: Check date values in: |date= (help)
  2. ^ Kaveh, A.; Nasr, H. (2011-08). "Solving the conditional and unconditional -center problem with modified harmony search: A real case study". Scientia Iranica. 18 (4): 867–877. doi:10.1016/j.scient.2011.07.010. ISSN 1026-3098. {{cite journal}}: Check date values in: |date= (help)
  3. ^ Hakimi, S. L. (1964). "Optimum Locations of Switching Centers and the Absolute Centers and Medians of a Graph". Operations Research. 12 (3): 450–459.
  4. ^ Kariv, O.; Hakimi, S. L. (1979-12). "An Algorithmic Approach to Network Location Problems. I: The p-Centers". SIAM Journal on Applied Mathematics. 37 (3): 513–538. doi:10.1137/0137040. ISSN 0036-1399. {{cite journal}}: Check date values in: |date= (help)
  5. ^ a b c Gonzalez, Teofilo F. (1985). "Clustering to minimize the maximum intercluster distance". Theoretical Computer Science. 38: 293–306. doi:10.1016/0304-3975(85)90224-5. ISSN 0304-3975.
  6. ^ a b c Dyer, M.E; Frieze, A.M (1985-02). "A simple heuristic for the p-centre problem". Operations Research Letters. 3 (6): 285–288. doi:10.1016/0167-6377(85)90002-1. ISSN 0167-6377. {{cite journal}}: Check date values in: |date= (help)
  7. ^ a b c Hochbaum, Dorit S.; Shmoys, David B. (1985-05). "A Best Possible Heuristic for thek-Center Problem". Mathematics of Operations Research. 10 (2): 180–184. doi:10.1287/moor.10.2.180. ISSN 0364-765X. {{cite journal}}: Check date values in: |date= (help)
  8. ^ a b Shmoys, David B. (1995). "Computing Near-Optimal Solutions to Combinatorial Optimization Problems". IN COMBINATORIAL OPTIMIZATION, DIMACS SERIES IN DISCRETE MATHEMATICS AND THEORETICAL COMPUTER SCIENCE. 20: 355––397.
  9. ^ a b Garcia-Diaz, Jesus; Sanchez-Hernandez, Jairo; Menchaca-Mendez, Ricardo; Menchaca-Mendez, Rolando (2017-07-01). "When a worse approximation factor gives better performance: a 3-approximation algorithm for the vertex k-center problem". Journal of Heuristics. 23 (5): 349–366. doi:10.1007/s10732-017-9345-x. ISSN 1381-1231.
  10. ^ Beasley, J. E. (1990). "OR-Library: Distributing Test Problems by Electronic Mail". The Journal of the Operational Research Society. 41 (11): 1069–1072. doi:10.2307/2582903.
  11. ^ Reinelt, Gerhard (1991-11). "TSPLIB—A Traveling Salesman Problem Library". ORSA Journal on Computing. 3 (4): 376–384. doi:10.1287/ijoc.3.4.376. ISSN 0899-1499. {{cite journal}}: Check date values in: |date= (help)