Int. J. Bio-Inspired Computation, Vol. 2, No. 2, 2010
71
A viral system massive infection algorithm to solve the Steiner tree problem in graphs with medium terminal density Pablo Cortés*, José M. García, Jesús Muñuzuri and José Guadix Ingeniería de Organización, School of Engineering, University of Seville, Camino de los Descubrimientos s/n, E-41092 Sevilla, Spain E-mail:
[email protected] E-mail:
[email protected] E-mail:
[email protected] E-mail:
[email protected] *Corresponding author Abstract: The Steiner tree problem in graphs presents highest difficulties in case of graphs with a medium density of terminals. In fact, most of the efficient algorithms that have been developed to deal with the Steiner tree problem show their worse behaviour for a terminal density between 15 and 30%. Here we present a new bio-inspired approach based on a biological virus infection called viral system (VS) that emulates a massive infection in an organism (representing a massive exploration of the feasibility region). The approach is tested in a large-sized library of problems for which the optimal solution is known, and it is compared to other very efficient soft computing methodologies such as Tabu search and genetic algorithms that have been developed for this specific problem. The VS massive infection algorithm improves the results provided by such approaches. Keywords: viral system; VS; bio-inspired methods; Steiner tree problem; networks. Reference to this paper should be made as follows: Cortés, P., García, J.M., Muñuzuri, J. and Guadix, J. (2010) ‘A viral system massive infection algorithm to solve the Steiner tree problem in graphs with medium terminal density’, Int. J. Bio-Inspired Computation, Vol. 2, No. 2, pp.71–77. Biographical notes: P. Cortés studied Industrial Engineering and obtained his PhD in the School of Engineering at the University of Seville, Spain, in year 2000. Since then, he has been involved in artificial intelligence methods with special attention to bio-inspired technologies. Currently he lectures at the School of Engineering of the University of Seville. J.M. García studied Computer Engineering in the University of Seville. He obtained his PhD in Industrial Engineering in 2003. His research is focused on computer science methodologies applied on management problems with special attention on network synthesis and manufacturing problems. J. Muñuzuri has a PhD in Industrial Engineering and currently lectures at the School of Engineering of the University of Seville. He also obtained his MSc in Industrial Design and Production during his stay in the University of Wales Swansea in 1996. His main fields of research are operations research and simulation applied to logistics, transport and telecommunications. J. Guadix is a Teaching Assistant in the School of Engineering at the University of Seville. He earned his Doctorate in 2004 from University of Seville. His research interests include operations research and computational intelligence methods applied on hotel management, which is the field of his PhD. He has been a Consultant for several leading services companies and regional government administrations since 2000.
1
Introduction
The Steiner tree problem in graphs considers the connection of a set of nodes, identified as terminal nodes, using another set of nodes, called Steiner nodes. The Steiner tree problem tries to find the minimum cost network that connects the subset of terminal nodes in a specific graph G = (N, A). The Steiner tree problem can be stated as follows: given a non-directed graph G = (N, A) with |N| nodes and |A| arcs
Copyright © 2010 Inderscience Enterprises Ltd.
with costs cij ∀(i, j) ∈ A, and a subset T ⊆ N with |T| nodes called terminals or targets, with the rest of the nodes in N called Steiner nodes; find a network GT ⊆ G that connects all the terminal nodes in T at minimum cost. This network can include some of the Steiner nodes but does not have to include all the Steiner nodes. The Steiner tree problem presents a major difficulty for problems with a medium density of terminals. It is known
72
P. Cortés et al.
that the Steiner tree problem with low terminal density can be efficiently solved with approaches based on shortest path algorithms (in the limit, the case with only two terminals corresponds to the shortest path problem), and Steiner tree problems with high terminal density can be efficiently solved with approaches based on minimum spanning trees (MST) (in the limit, the total absence of Steiner nodes corresponds to the MST problem). Problems with medium terminal density reveal themselves as the most complex cases, and the most suitable approaches experiment the highest difficulties. To solve this type of problems we are presenting a novel approach based on a soft computing technique called viral systems (VS) (firstly described in Cortés et al., 2008), and we compare the provided results with other well-established approaches in a large sized library of problems. The new approach differs from the original VS in the infection conceptualisation. VS were firstly introduced making use of a selective (parsimonious) infection process. Here we reveal how considering a quick massive infection can provide better solutions for special cases. The rest of this paper follows with a brief description of VS massive infection algorithm in Section 2, the presentation of the computational results in Section 3, and the final conclusions in last section.
2
A brief description of VS in massive infection cases
VS were first introduced by Cortés et al. (2008) with the description of a new soft computing approach and its biological analogy with a viral infection; readers interested in a detailed description of such methodology are referred to this paper. One of the main characteristics of VS refers to the replication mechanism of viruses, together with the capability of the host organism to develop an antigenic response. Basically, viruses can follow two different replication processes: lytic or lysogenic replication. In lytic replication, the virus infects the cell starting to replicate nucleus-capsids (copies) of the virus. Once a maximum number of replications has been reached, the new viruses are released and try to infect new cells of the organism. In lysogenic replication, the virus infects the cell and remains hidden inside until a number of generations has passed. After that, the genome of the cell is altered in a way similar to a mutation process. VS is an iterative method that runs during a maximum number of iterations, or until the optimum is reached in case of a known optimum. VS defines the clinical picture of an infected population as the description of all the cells infected by viruses. Computationally, it includes the encoding of the solution that is being explored (the genome of the cell that is infected, in biological terms) and the number of nucleus-capsids being replicated, NR, (for lytic replications) or the number of hidden generations, IT, (for lysogenic replications). Thus the state of each virus is given by the
three-tuple ‘cell genome-NR-IT’. All these three-tuples corresponding to the cells infected by viruses define the clinical picture. Every cell infected by a virus develops a lytic or a lysogenic replication according to a probability plt (for lytic replication) or plg otherwise, where plt + plg = 1. In case of lysogenic replications, the activation of the mutation process takes place after a limit of iterations has passed (LIT). The value of LIT depends on the cell’s health conditions, so a healthy cell (high value of the objective function being minimised, f(x)) will have a low infection probability, i.e., the value of LIT will be higher. An unhealthy cell, on the contrary, will have a lower value of LIT. In case of lytic replications, a number of virus replications (NR) is calculated for each iteration as a function of a binomial variable, Z, adding its value to the current NR in the clinical picture. Z is calculated using a binomial distribution given by the maximum level of nucleus-capsids replicated, LNR, and the single probability of one replication, pr,: Z = Bin (LNR, pr). LNR represents the limit to break the cell border and to release the lodged viruses. As in the lysogenic cycle, the value of LNR is set depending on the value of the objective function being minimised, f(x). Thus cells with higher f(x) have lower probability of getting infected, and therefore the value of LNR will be higher. After that, each liberated virus will have a probability, pi, of infecting other new cells of the neighbourhood. If the neighbourhood cardinality of x is defined as |V(x)|, the number of cells infected by the virus in the neighbourhood can be calculated as a binomial distribution given by Y = Bin (|V(x)|, pi). On the other hand, in order to defend itself from the growth of the viral infection, the organism (the set of cells) responds by releasing antigens. In the clinical picture, each one of the infected cells generates antibodies according to a Bernoulli probability distribution A(x) = Ber (pan), where pan is the unitary probability of generating antibodies by the cell x in the clinical picture. Hence, the total population of infected cells generating antibodies is characterised by a binomial distribution of parameters: the size of the clinical picture, n, and the probability of generating antibodies, pan: A(population) = Bin (n, pan). Also, the antigenic response for every cell in the neighbourhood of an active virus is estimated as a Bernoulli probability distribution given by the probability of generating antibodies, pan: A(x’) = Ber (pan): x’ ∈ V(x). Therefore, the total number of cells with antibodies in the neighbourhood will follow a binomial probability distribution given by the total size of the neighbourhood for all the active viruses, |V(x)|, and the probability of generating antibodies, pan: A = Bin (|V(x)|, pan). In this situation, a Markovian process defines the evolution of the clinical picture. Let π = (π 0 , π 1 ,..., π LNR ) be the probability of a cell with 0, 1, …, LNR nucleus-capsids replicated. Equations (1–3) are satisfied in steady state.
A viral system massive infection algorithm to solve the Steiner tree problem in graphs
π =π ⋅P
πj =
j −1 ⎞ 1 ⎛ ⎜ p j − k ⋅π k ⎟ ⎜ ⎟ 1 − p0 ⎝ k =0 ⎠
∑
∀j = 1, 2, ..., LNR
π 0 + π 1 + ... + π LNR = 1
(1)
2.2 VS pseudocode
(2)
The following pseudocode (Table 1) describes a VS massive infection applied to the Steiner tree problem.
(3)
To ensure computational control of the infection evolution (4) has been given as a suitable value for pan. pan >
(
)
n ⋅ π LNR ⋅ pi ⋅ | V ( x) | −1
(
)
n ⋅ π LNR ⋅ pi ⋅ | V ( x) | −1 + n
73
Table 1
General pseudocode for the VS massive infection
procedure Virus_System(Nmax, Clinical_Size, plt ,pi, pan, pr, LNR, LIT) CP = ∅ /* Clinical Picture /* Get Initial Clinical Picture
(4)
for i = 1 to Clinical_Size /* Get randomly a feasible solution and assign randomly a replication type
where | V ( x ) | is the average neighbourhood size for a specific problem.
2.1 Considerations of VS in relation to the Steiner tree problem Considering a Steiner tree problem with N nodes and T terminals, the cell genome is represented by a bit string of size |N – T| corresponding to the Steiner nodes in the graph, where position i corresponds to node i in the graph. Taking value 1 means that the Steiner node i is connected, with the bit set to 0 otherwise. We consider a bit string of size |N – T| because all the terminal nodes must be in the Steiner tree, so it is enough to use a bit string that identifies only the Steiner nodes in the Steiner tree. Once the Steiner nodes of the graph have been specified, a Steiner tree can be constructed by means of a MST that contains all the terminal nodes (set T), the subset of Steiner nodes fixed to 1 in the bit string and, perhaps, some artificial arcs if the set is disconnected. If there is need to introduce artificial arcs due to the disconnection of the tree, there appear different options, and we follow the graph construction mechanisms (Gendreau et al., 1999). A key decision in every VS is to state an adequate cell neighbourhood for the virus in the lytic replication process, as well as to define the genome alteration process for the lysogenic replication. In the case of the Steiner tree problem, given a feasible solution, the genome alteration is carried out by flipping a bit in the string when the lysogenic replication is being considered. On the other hand, when considering the lytic replication, the neighbourhood of the feasible solution (infected cell) being considered consists of the set of bit strings that can be obtained by the removal or the addition of a single Steiner node from/to the current cell encoding. In order to be efficient, the new MSTs must be found by manipulating a rooted tree data structure carefully (Gendreau et al., 1999). Due to the special encoding for the Steiner problem solutions the neighbourhood size is constant and equal to the number of Steiner nodes. It must be noted that the neighbourhood is set by changing the value of each bit from 0 to 1 and vice versa.
CP(i) = Get_Random_Feasible_Solution() CP(i).Replicat_Type = Get_Random_Replication _Type(plt) next do iterations = iterations + 1 i = Select_Random_Solution(Clinical_Size) if CP(i).Replicat_Type = ‘Lytic’ Then Lytic_Replication(CP(i), plt, pi, pan, pr, LNR) else Lysogenic_Replication(CP(i) , plt) loop until iterations= Nmax or Check_Gap(CP) = True end Virus_System ---------------------------------------------------------------------------procedure Lytic_Replication (CS, plt ,pi, pan, pr, LNR) CS = Current solution /* Get the number of replicated nucleus-capsids
z = Get_Random_Binomial_Probability(LNR, pr) do i=i+1 if z < Binomial(i) then P(c).NR = P(c).NR + 1 loop until i = LNR or z ≥ Binomial(i) /* Check infection
if CS.NR > CS.LNR then /* Get the list VS of neighbouring solutions of CS in descending order regarding solution health
VAS = Get_ Arranged_Neighbourhood(Vs) /* Get the clinical picture CP in ascending order regarding solution health
CPA = Get_ Arranged_Clinical_Picture(CP) i=1 for each S’∈VAS if i pan and b > pi then /* Replace CPA(i)
/* Get the clinical picture CP in ascending order regarding solution health
with a new solution CS’
CPA(i) = CS’
CPA = Get_ Arranged_Clinical_Picture(CP)
CPA(i).Replicat_Type = Get_Random_Replicat_Type(plt)
i=1 for each S’∈VAS
replace = true
if i |CPA|
do
end-for
a= Get_Random_Binomial_Probability(|Vs|, pan)
end Lytic_Replication ----------------------------------------------------------------------------procedure Lysogenic_replication(CS, plt)
b = Get_Random_Binomial_Probability (|Vs|, pi)
CS.IT = CS.IT + 1
if a > pan and b > pi then
if CS.IT > CS.LIT then
/* Replace CPA(i) with the solution CS’ generated by S’}
s = Get_Random_Gen () /* apply move of mutation on CS
CPA(i) = CS’
CSNEW = Mutation(CS, s)
CPA(i).Replicat_Type = Get_Random_Replicat_Type(plt)
CSNEW.Replicat_Type = Get_Random_Replication_Type(plt)
replace = true
return CS
i=i+1
end Lysogenic_replication
The general pseudocode functions and procedures previously described in the table are complemented with the specific problem procedures. These are mainly the neighbourhood characterisation and the problem-oriented lysogenic replication. These procedures are described for the Steiner tree problem in Table 2. Table 2
loop until replace = true or i > |CPA| end-for end Lytic_Replication ----------------------------------------------------------------------------procedure Lysogenic_replication(CS, plt) CS.IT = CS.IT + 1 if CS.IT > CS.LIT then
Specific pseudocode for the Steiner tree problem
s = Get_Random_Steiner_Node() if s∈S
procedure Lytic_Replication (CS, plt ,pi, pan, pr, LNR) CS = Current solution S = Steiner nodes in the current solution
CS.Replicat_Type = Get_Random_Replication_Type(plt) return CS
/* Get the number of replicated nucleus-capsids
z = Get_Random_Binomial_Probability(LNR, pr) i=0 do i=i+1 if z < Binomial(i) then P(c).NR = P(c).NR + 1 loop until i = LNR or z ≥ Binomial(i) /* Check infection
if CS.NR > CS.LNR then /* Get the list VS of neighbouring solutions of CS in descending order regarding solution health
VS = ∅ for each s∈S if s∈S then SNEW = S - {s} else SNEW = S + {s} VS = VS + SNEW
then S = S - {s} else S = S + {s}
end Lysogenic_replication
3
Computational results
The OR-Library that can be accessed in the website http://people.brunel.ac.uk/~mastjjb/jeb/info.html (Beasley, 2008) has been used for the computational results, considering series SteinC, SteinD and SteinE. We divided the Steiner tree problem into three groups: Group No.1 is a low terminal density group that contains problems with less than 15% of terminal nodes; Group No. 2 corresponds to medium terminal density and consists of problems with more than 15% and less than 30% of terminal nodes; and Group No. 3 features problems with more than 30% of terminals.
75
A viral system massive infection algorithm to solve the Steiner tree problem in graphs
Table 3 shows results obtained by the P-Tabu and F-Tabu methods (Gendreau et al., 1999), two genetic algorithms GA-E (Esbensen, 1995), and GA-V (Voss and Gutenschwager, 1999), and a VS based on a selective infection (Cortés et al., 2008). The table also includes the minimum-path heuristic (MPH) (Takahashi and Matsuyama, 1980) which is the best greedy heuristic implemented for the Steiner tree problem. Problems were assigned to groups after pre-processing the Steiner tree problem with the five graph reduction rules described in Winter (1897). Table 3 shows the problem code that is associated to each analysis group. As clearly stated by the figures, Group 2 is largely the most complex one, and bigger errors are always obtained for this group, taking into consideration both the average error and the maximum error. We have therefore focused our research on Group 2. In our opinion, a major effort has to be put on this specific and characteristic group of the Steiner tree problem. To compare methodologies, we executed the VS massive infection five times for each problem, with the algorithm run on a Xeon (TM) 2.80 GHz; 1 GB RAM. Table 4 shows the results compared to the previous of Table 3. The most significant parameters of the algorithm are the maximum number of iterations (taking into account that each iteration is computed after a virus replication takes place, which does not necessarily happen every Table 3
time the cells neighbourhood is searched), and the probabilities of infecting neighbouring cells (pi) and generating antibodies (pan). It has to be taken into account that pan and pi must satisfy equation (4). We finally selected a number of iterations equal to 100,000, a clinical picture size of 100, a probability of antigenic response equal to 0.1, and a probability of infection equal to 0.6. Likewise, we fixed the values of LNR and LIT to 15 and the probability of lytic replication to 0.7). Table 4 provides the results for Steiner tree problem Group 2. VS massive infection algorithm provided the best solution for 11 instances, nine of which were the optimum. The selective infection case of VS provided seven times the optimum and the best approach and the F-Tabu provided five optimums, although it was the best approach on seven occasions. The results provided by the less efficient P-Tabu were slightly worse. The behaviour of the other methods is clearly worse, producing two best approaches in case of the genetic algorithm due to Esbensen (1995) and only one for the MPH heuristic. Furthermore, the massive infection approach maintained a bounded distribution of its standard deviation, which provides a better adjustment around the optimum. It also provided the best solution for all the problems except for C8 (0.39% error versus 0.00% of F-Tabu), D8 (0.47% versus 0.37% of F-Tabu) and E8 (1.78% versus 0.42% of GA-E).
Results for the Steiner tree problem according to the percentage of terminal
OR-library Trials
Group 1
Group 2
Group 3
C{1,2,6,7,11,12,16,17} D{1,2,6,7,11,12,16,17} E{1,2,6,7,11,12,16,17}
C{8,9,13,14,18,19} D{8,13,14,18,19} E{8,13,14,18,19}
C{3,4,5,10,15,20} D{3,4,5,9,10,15,20} E{3,4,5,9,10,15,20}
Average value
MPH: GA-V: GA-E: P-Tabu: F-Tabu: VS-s:
0.15% 0.88% 0.60% 0.15% 0.06% 0.00%
MPH: GA-V: GA-E: P-Tabu: F-Tabu: VS-s:
2.88% 1.13% 0.95% 0.63% 0.39% 0.57%
MPH: GA-V GA-E: P-Tabu: F-Tabu: VS-s:
0.35% 0.37% 0.17% 0.08% 0.04% 0.10%
Standard deviation
MPH: GA-V: GA-E: P-Tabu: F-Tabu: VS-s:
0.50% 1.08% 0.78% 0.50% 0.30% 0.00%
MPH: GA-V: GA-E: P-Tabu: F-Tabu: VS-s:
2.32% 0.49% 0.73% 0.66% 0.46% 0.72%
MPH: GA-V: GA-E: P-Tabu: F-Tabu: VS-s:
0.35% 0.39% 0.23% 0.15% 0.09% 0.19%
Maximum error
MPH: GA-V: GA-E: P-Tabu: F-Tabu: VS-s:
2.07% 3.62% 2.07% 2.07% 1.49% 0.00%
MPH: GA-V: GA-E: P-Tabu: F-Tabu: VS-s:
7.62% 2.28% 3.37% 2.66% 1.60% 2.66%
MPH: GA-V: GA-E: P-Tabu: F-Tabu: VS-s:
1.17% 1.25% 0.92% 0.42% 0.32% 0.69%
76
P. Cortés et al.
Table 4
Comparison of results for Group 2 of the Steiner tree problem
Problem
Optimum
% terminals
MPH
GA-Voss
GA-Esb
P-Tabu
F-Tabu
VS-selective
VS-massive
C8
509
20.4%
0.00%
0.51%
0.63%
0.00%
0.00%
0.00%
0.39%
C9
707
29.7%
0.99%
1.30%
1.05%
0.14%
0.14%
0.00%
0.00%
C13
258
16.7%
0.78%
1.32%
1.01%
0.00%
0.00%
0.00%
0.00%
C14
323
25.1%
1.24%
0.68%
0.87%
0.31%
0.31%
0.00%
0.00%
C18
113
16.6%
5.31%
0.71%
0.71%
0.88%
0.00%
0.00%
0.00%
C19
146
25.0%
4.79%
0.82%
0.41%
0.68%
0.00%
0.00%
0.00%
D8
1072
20.7%
1.59%
2.28%
1.55%
0.47%
0.37%
0.47%
0.47%
D13
500
16.7%
2.00%
1.48%
0.56%
0.00%
0.00%
0.00%
0.20%
D14
667
25.1%
0.75%
0.75%
0.30%
0.15%
0.15%
0.15%
0.00%
D18
223
16.7%
6.28%
1.43%
1.26%
1.35%
0.90%
0.90%
0.00%
D19
310
25.0%
5.81%
1.20%
1.03%
0.65%
0.32%
0.65%
0.00%
E8
2640
21.1%
1.63%
-
0.23%
0.49%
0.42%
1.14%
1.78%
E13
1280
16.7%
1.88%
-
0.70%
0.78%
0.63%
1.33%
0.55%
E14
1732
25.0%
1.04%
-
0.23%
0.29%
0.23%
0.64%
0.29%
E18
564
16.7%
7.62%
-
3.37%
2.66%
1.60%
2.66%
0.35%
E19
758
25.0%
4.35%
-
1.26%
1.19%
1.19%
1.18%
0.00%
MPH
GA-Voss
GA-Esb
P-Tabu
F-Tabu
VS-selective
VS-massive
Average
2.88%
1.13%
0.95%
0.63%
0.39%
0.57%
0.25%
Stand. deviation
2.32%
0.49%
0.73%
0.66%
0.46%
0.72%
0.44%
Max. error
7.62%
2.28%
3.37%
2.66%
1.60%
2.66%
1.78%
Optimums
1
0
0
3
5
7
9
Best approach
1
0
2
3
7
7
11
Additionally, we have to state that our VS massive infection was executed starting with a randomly generated population. On the contrary, F-Tabu starts from a very efficient seed, provided by MPH and P-Tabu approaches run one after the other, as an initial solution. It is also remarkable that MPH obtains better results than specially oriented genetic algorithms, which is probably due to the heuristic being executed 100 times in order to obtain the best possible seed to supply to the P-Tabu and F-Tabu methods. However, we realised that without need to search for a good seed we were obtaining better results than the best Steiner tree problem algorithm (F-Tabu) for this specific complex group. The computational times of VS-massive can be estimated as the order of time consumption required depending on the problem’s complexity, given by (5),
(
time ~ O ITER ⋅ NumSteiners ⋅ Ngraph 2
)
(5)
where ITER is the maximum number of iterations, NumSteiners the number of Steiner nodes in the graph and Ngraph the total number of nodes in the graph. The evaluation of a cell’s neighbourhood is the process that requires the largest amount of computational time in the algorithm, which process is the same as the one used in the F-Tabu algorithm to reach the next solution in the search procedure. Therefore, the worst case would be to run lytic
replications in every iteration of the algorithm. For that case, the degree of complexity would be equal to the number of neighbourhood solutions evaluated multiplied by the complexity of the evaluation process. The number of evaluations is calculated as the number of iterations multiplied by the number of Steiner nodes. The evaluation process is the calculation of a MST, which requires O(Ngraph2). Therefore, it can be guaranteed that VSmassive yielded computational times in the same order of magnitude than Tabu’s approaches by Gendreau et al. (1999).
4
Conclusions
The Steiner tree problem in graphs shows especially difficult characteristics when the density of terminals is neither too high nor too low, but not much attention has been put on this special aspect of the problem yet. In fact, algorithms exploring varied and different areas of the feasibility region are more promising when looking for the optimum, or at least a good solution. Due to these reasons, our VS representing a massive infection where viruses are deployed throughout the organism allows for better results that other very efficient methods that tackle the Steiner tree problem in a more general fashion. The VS algorithm was tested for a large-sized library of the Steiner tree problem
A viral system massive infection algorithm to solve the Steiner tree problem in graphs
for which the optimal solutions are known, and the results were compared with some of the best approaches in the scientific literature. The VS massive infection algorithm clearly outperformed both of them.
References Cortés, P., García, J.M., Muñuzuri, J. and Onieva, L. (2008) ‘Viral systems: a new bio-inspired optimisation approach’, Computers & Operations Research, Vol. 35, No. 9, pp.2840–2860. Esbensen, H. (1995) ‘Computing near-optimal solutions to the Steiner problem in a graph using genetic algorithm’, Networks, Vol. 26, pp.173–185. Gendreau, M., Larochelle, J.F. and Sansò, B. (1999) ‘A Tabu search heuristic for the Steiner tree problem’, Networks, Vol. 34, No. 2, pp.162–172. Takahashi, H. and Matsuyama, A. (1980) ‘An approximate solution for the Steiner problem in graphs’, Mathematica Japonica, Vol. 24, pp.573–577. Voss, S. and Gutenschwager, K. (1999) ‘A chunking based genetic algorithm for the Steiner tree problem in graphs’, in Pardalos, P.M. and Du, D. (Eds.): Network Design: Connectivity and Facilities Location, pp.335–355, DIMAC Series in Discrete Mathematics and Theoretical Computer Science 40, AMS, Providence. Winter, P. (1987) ‘Steiner problem in networks’, Networks, Vol. 17, pp.129–167.
Websites Beasley, J.E. (2008) OR-Library, available at http://people.brunel.ac.uk/~mastjjb/jeb/info.html (accessed on 2008).
77