Modelling and optimizing a system for testing electronic circuit boards

In this article we consider a difficult combinatorial optimization problem arising from the operation of a system for testing electronic circuit boards (ECB). This problem was proposed to us by a company that makes a system for testing ECBs and is looking for an efficient way of planning the tests on any given ECB. Because of its difficulty, we first split the problem into a covering subproblem and a sequencing subproblem. We also give a global formulation of the test planning problem. Then we present and discuss results pertaining to the covering and sequencing subproblems. These results demonstrate that their solution yields testing plans that are much better than those currently used by the company. Finally we conclude our article by outlining avenues for future research.


Introduction
In this article we study the operations of a system for testing Electronic Circuit Boards (ECBs) that uses flying probes. Our study was carried out in cooperation with a company that will be referred to as the Company in what follows. We first describe the broad outlines of this system (called the FP system); further details will be given in the following sections. The FP system includes eight shuttles: four shuttles that are above the board and four shuttles that are below the board. To each shuttle are attached some probes (usually two or three probes). The board being tested contains nets, each of which can be viewed as a wire with a finite number of points of interest (or simply points). For the purposes of this study, a net is a set of points whose coordinates are known. Note that the nets are pairwise disjoint, i.e., no point belongs to more than one net.
Given a subset R of nets, a test consists of assigning certain probes to nets in R so that one point in each net is touched by one probe; the set of probes that may be used to touch a given point is known in advance and depends upon the test being carried out. Hence a test consists, formally, of a collection of nets and a family of probe sets (one set of probes for each point in each net involved in the test). The probes must touch the points simultaneously, which means that there must be a matching between a subset Q of the probes and the collection R of nets. Of course such a matching need not exist: its existence depends upon the locations of the eight shuttles. Figure 1 displays two tests, one of which can be carried out in the current configuration but the other cannot. In general, given a configuration of shuttles, only a fraction of the tests can be carried out. Thus several configurations must be computed in order to ensure that all the tests are covered. (Note that the initial configuration, which is also the final one, is given in advance.) Moving the shuttles from one configuration to the next requires some time, which can be evaluated if one knows the coordinates of the shuttles within their successive configurations. The objective of the Company is to minimize the total time needed to move the shuttles between configurations, with the constraint that each test is covered by at least one configuration. The system currently used by the Company yields poor results, in the sense that the number of configurations needed to cover all the tests is far too large, resulting in many unnecessary shuttle moves. Hence the problem was proposed to us by the Company at the Fields-MITACS Industrial Problem-Solving Workshop (see Chen S, Gustafsson J, Marcotte O, Morfin M, Pugh M: Improved optimization for a testing system with two mobility layers, in Proceedings of the Fields-MITACS Industrial Problem-Solving Workshop, forthcoming).
The planning problem just described is similar to the Travelling Salesman Problem (TSP), one of the basic problems in combinatorial optimization (see Applegate et al. [2]). We conjecture that in its general form, the planning problem is as difficult to solve as the TSP. Although we are not aware of any previous work on the planning problem, there are similarities between our problem and two classes of problems that have been considered already: geometric covering problems (see for instance the article by Arkin and Hassin [3] and the article by Ahn et al. [1]) and some generalizations of the TSP. One of these generalizations is the Travelling Politician Problem (see Riordan [19]). Other generalizations include the Covering Salesman Problem (see the article by Current and Schilling [5]) and the Clustered Travelling Salesman Problem (CTSP), discussed in an article by Laporte and Palekar [11] that includes an application of the CTSP to a circuit design problem.
The Generalized Travelling Salesman Problem (GTSP) has received a fair amount of attention (see for example the articles [12][13][14][15] by Laporte and his colleagues). Some authors have proposed transforming a GTSP instance into a TSP instance (for an example see Dimitrijevic and Saric [6]). Others have proposed a Lagrangian-based approach for the asymmetric GTSP (Noon and Bean [17]) or a branch-and-cut algorithm for the symmetric GTSP (Fischetti et al. [8]). Fischetti et al. [7] have studied the symmetric GTSP polytope. Recently Pop [18] and Kara, Guden, and Koc [10] have proposed new formulations for the GTSP. In spite of the similarities between the planning problem and the various problems we have just mentioned, our problem seems to be completely new and a major portion of the present article will be devoted to its formulation as a mathematical program.
As mentioned before, although the objective of the Company is to minimize the total time needed to move the shuttles between configurations, the main difficulty faced by the Company is the large number of configurations required to cover all the tests in the system that it currently uses. Hence our first objective is to try to reduce the number of configurations. To achieve this we tackle the planning problem in two steps. First we construct a partition of the set of tests into subsets that can be carried out within a single configuration. We call this problem the covering problem since we are looking for a family of configurations that covers each and every test. Then we solve the optimal sequence problem in order to find the best sequence of configurations (using only those configurations that are in the solution of the covering problem). Since the decomposition of the planning problem into a covering problem and a sequencing problem does not always yield an optimal solution, we also present a global formulation of the planning problem.
Our article is organized as follows. The "Methods" section deals with the modelling and solution of the planning problem. It includes a subsection on shuttles and probes; a subsection on power chains and avoidance of collisions; a subsection on probes, points of interest, and reachability constraints; subsections on incompatibility constraints and tests and feasibility constraints, respectively; a subsection on the partial covering problem; a subsection on a greedy algorithm for the covering problem; a subsection on the optimal sequence problem; and finally a subsection on a global formulation of the planning problem. The article continues with a section on "Results and discussion" and ends with the "Conclusion" section.

Shuttles and probes
We assign the indices 0, 1, . . . , 7 to the eight shuttles in the following way: the shuttles that are above the board are labelled 0, 1, 2, 3 in the clockwise order starting with the frontleft shuttle and the shuttles below are labelled 4, 5, 6, 7 in a similar way. Hence Shuttle 0 is the front-left shuttle that is above the board, Shuttle 1 is the back-left shuttle above the board, Shuttle 2 the back-right shuttle above the board, and so on. The dimensions of each shuttle are 195 mm (in the horizontal direction) and 160 mm (in the vertical direction). The dimensions of the board are 1050 mm (in the horizontal direction) and 850 mm (in the vertical direction). We will use these constants in the model but obviously they can be replaced by other constants if the covering problem must be solved for another system. Each shuttle has a preferred corner, corresponding to the point where its power chain is attached to the board. For instance, the preferred corner of the front-left shuttle that is above (resp. below) the board is the front-left corner of this shuttle.
The initial configuration is the configuration in which the preferred corner of each shuttle is located at the corresponding board corner. For instance, the initial coordinates of the preferred corner of the back-left shuttle are (0, 850). A given board cannot be introduced into (or removed from) the FP system unless it is in the initial configuration. Hence when the board is introduced into the FP system, one computes the tests that can be carried out within this configuration before considering other configurations.
In our model the x-coordinate of Shuttle k (for k ∈ {0, 1, . . . , 7}) will be denoted by S 2k and its y-coordinate by S 2k+1 : those two expressions are variables since we are looking for "good" configurations and the goal of the model is to find them. The probes, which can come into contact with points of interest (or points, for short), are attached to their respective shuttles. The number of probes in the system under consideration is 21. The expression k(p) will denote the shuttle to which the probe p is attached, for p in {0, 1, 2, . . . , 20}. For each shuttle we also know its x-offset and y-offset, denoted respectively by O p1 and O p2 . (Note that O p1 and O p2 are constants, not variables.) The coordinates of the point where the probe p is attached to the shuttle k(p) are thus equal to S 2k(p) + O p1 and S 2k(p)+1 + O p2 , respectively.

Power chains and avoidance of collisions
In this subsection we first address the problem of modelling the avoidance of collisions above the board, specifically collisions • between the power chain of a given shuttle and any other shuttle; • between the power chains of any two shuttles; and • between two shuttles. Figure 2 describes the board regions considered when studying collisions. We will first consider modelling the avoidance of collisions between the power chain of a given shuttle and any other shuttle. Figure 3 illustrates the forbidden region corresponding to the frontleft shuttle for each of five cases (note that Case 2 is illustrated by two subcases), where the forbidden region denotes (roughly) the region that can be occupied by the power chain of the front-left shuttle. Each of the five cases is described precisely below. Our definition of forbidden region is too strict, in the sense that a shuttle or power chain could occupy part of the forbidden region without interfering with the power chain of the shuttle under consideration. A more precise definition, however, would be very difficult to  model, since a power chain is a flexible object containing several springs and may assume many different positions.
We now give the (mathematical) description of forbidden region that we will use. Let (S 0 , S 1 ) denote the coordinates of the preferred corner of the front-left shuttle. We first define the large rectangle: if S 1 is at least 460, the large rectangle denotes the set if S 1 is less than 460, it denotes the set If S 0 is at most 350, the forbidden region is precisely the large rectangle. If S 0 is greater than 350, the forbidden region is the set difference between the large rectangle and the small rectangle, where the latter is defined as We now turn to the five cases that arise when considering the avoidance of collisions between the power chain of the front-left shuttle and any other shuttle. In Fig. 3 the frontleft shuttle is depicted in red, the other shuttle in blue, and the forbidden region in black.
Let S 0 and S 1 denote the coordinates of the avoidance corner of the "other" shuttle (which is anonymous for the time being). This avoidance corner is the frontleft corner of the other shuttle. Here are the five cases, which are not mutually exclusive: 1. the other shuttle is included within the vertical strip (i.e., S 0 ≥ S 0 holds); 2. the other shuttle is included within the upper horizontal strip (i.e., S 1 ≥ max{460, S 1 } holds) and S 1 is at least equal to 300; 3. the other shuttle is included within the upper horizontal strip (i.e., S 1 ≥ S 1 + 160 holds) and S 1 is at most equal to 300; 4. the other shuttle is included within the lower horizontal strip (i.e., S 0 ≥ 350 and S 1 + 160 ≤ 300 hold), S 0 is at least equal to 350, and S 1 at least equal to 300; 5. the other shuttle is included within the lower horizontal strip (i.e., S 0 ≥ 350 and S 1 + 160 ≤ S 1 hold), S 0 is at least equal to 350, and S 1 at most equal to 300.
To model these collision avoidance constraints, we define five binary variables y r (for r ∈ {0, 1, 2, 3, 4}), each of which corresponding to one of the cases listed above. The first constraint below means that one of the five cases must be chosen in order to verify that the avoidance corner (i.e., the front-left corner of the "other" shuttle) does not belong to the forbidden region. The second, third, and fourth constraints ensure that if y i−1 (for i in {1, 2, 3, 4, 5}) has the value 1, the conditions on S 0 and S 1 in Case i are indeed verified. The fifth (resp. eighth) constraint ensures that the coordinates S 0 and S 1 satisfy the conditions in Case 1 (resp. 3). Finally the sixth and seventh (resp. ninth and tenth, eleventh and twelfth) constraints ensure that S 0 and S 1 satisfy the conditions in Case 2 (resp. 4, 5).
We now simplify these constraints as follows.
The above constraints are "abstract" in the sense that S 0 and S 1 represent the avoidance corner of an anonymous shuttle. Actually, to model the requirement that there is no collision between the power chain of the front-left shuttle and any other shuttle, we need three groups of 12 constraints, each corresponding to one of the following shuttles: the backleft shuttle (S 0 = S 2 , S 1 = S 3 − 160), the back-right shuttle (S 0 = S 4 − 195, S 1 = S 5 − 160), and the front-right shuttle (S 0 = S 6 −195, S 1 = S 7 ). We then obtain a complete set of constraints for the front-left shuttle, i.e., 36 constraints. This set requires the introduction of 15 binary variables. We need similar sets of constraints and binary variables for the other shuttles. In total there will be 60 binary variables and 144 constraints.
We must now model the requirement that two avoidance regions cannot overlap, so as to ensure that two power chains cannot "cross. " Consider the avoidance region of the front-left shuttle and its relationships with the other avoidance regions.
• Given that no two shuttles intersect (see below) and no shuttle has a non-empty intersection with the avoidance region of any other shuttle, it is enough to impose the condition S 3 ≥ S 1 in order to prevent the avoidance regions of the front-left and back-left shuttles from having a non-empty intersection.
• The back-right shuttle cannot belong to the lower horizontal region (or at least the part of the lower horizontal region that is not already in the vertical region). Otherwise the avoidance region of the back-right shuttle would have a non-empty intersection with the front-left shuttle or the avoidance region of the front-left shuttle. In practice this means that the variables y 8 and y 9 must equal 0.
• The front-right shuttle cannot belong to the upper horizontal region (or at least the part of the upper horizontal region that is not already in the vertical region). Otherwise the avoidance region of the front-right shuttle would have a non-empty intersection with the front-left shuttle or the avoidance region of the front-left shuttle. In practice this means that the variables y 11 and y 12 must equal 0.
The above conditions will ensure that there is no collision between the power chains in pairs of shuttles that include the front-left shuttle. Similar conditions are needed for the three other pairs of shuttles. Therefore to avoid collisions between power chains (on one hand) and shuttles or other power chains (on the other), we can use the above constraints (after forcing some variables to equal 0) and add the following constraints to the model.
Finally we turn to collisions between shuttles. We consider again the front-left shuttle and assume that S 0 and S 1 are the coordinates of the front-left corner of the "other" shuttle. The variable y 60 (resp. y 61 , y 62 , y 63 ) takes the value 1 if and only if the "other" shuttle is to the left (resp. above, to the right, below) of the front-left shuttle. The following constraints ensure that the two shuttles will not overlap.
We obtain the following system after simplifying them.
As before, the variables S 0 and S 1 must be replaced by the correct expressions for every shuttle other than the front-left shuttle. The three other pairs (back-left and back-right, back-left and front-right, back-right and front-right) must also be taken into account. For this kind of constraints a total of 24 binary variables and 30 relations are needed.
We now have a complete system of constraints preventing collisions between shuttles and power chains that are above the board. Of course a similar system is required for the shuttles and power chains that are below the board. All these constraints will be referred to as the collision avoidance constraints and denoted by CAC (S u , y r ), where the variables of the form y r are the auxiliary variables.

Probes, points of interest, and reachability constraints
We now introduce the binary variables X αp for every point α and every probe p, where X αp is a binary variable that equals 1 if and only if probe p (attached to the shuttle k(p)) can reach the point α (whose coordinates are denoted by P α1 and P α2 , respectively). We wish to model the constraint that if X αp equals 1, then the probe p can actually reach the point α. Given the system we are studying, this amounts to saying that if X αp equals 1, the expression |S 2k(p) +O p1 −P α1 | should be at most 30.0 and the expression |S 2k(p)+1 +O p2 − P α2 | at most 33.5. In other words, if X αp equals 1, the following relations must be satisfied.
We can rewrite them as follows.
The variable S 2k(p) (resp. S 2k(p)+1 ) must satisfy the above constraints if X αp equals 1; otherwise it is bounded from above (resp. below) by its upper (resp. lower) bound. Here are the constraints that we include into the model.
These inequalities (called reachability constraints) are required for each couple (α, p). The set of reachability constraints will be denoted by REACH S u , X αp .

Incompatibility constraints
These constraints are not necessary for modelling our problem but allow us to strengthen its linear programming relaxation. Assume that α and β denote two points of interest and p and q two probes attached to the same shuttle. It is easy to derive from the reachability constraints some conditions implying that X αp and X βq cannot both equal 1. So for each pair of couples (α, p) and (β, q) satisfying those conditions, we may add the constraint X αp + X βq ≤ 1 to the model. In practice we do not add all the incompatibility constraints to the model: rather we solve its linear relaxation and add to the model all such constraints that are violated in the current optimal solution and verify X αp ≥ 0.2 and X βq ≥ 0.2 in the current optimal solution. The set of all incompatibility constraints included into the model will be denoted by INC X αp .

Tests and feasibility constraints
Given the current configuration (i.e., a set of values for the variables S u representing the shuttles coordinates), we wish to determine whether a specific test can be carried out or not. We introduce, for each , a binary variable Y that may take the value 1 only if the test can be carried out within the current configuration. We must find a way of relating the value of Y to those of the X αp . First we show that the test can be performed within the current configuration if and only if there is a matching of a certain type in a bipartite graph (denoted G ) that we now describe. Let N denote the set of nets involved in test and U the set of points belonging to some net in N . The graph G contains two kinds of vertices: the points in U and the probes. It contains an edge between point α and probe p if and only if probe p can be used to touch point α within the test (i.e., the couple (α, p) is admissible) and X αp equals 1. Recall that the admissibility of the couple (α, p) depends upon . We denote by E the set of admissible couples for test . In Fig. 4 all the edges in E are represented: the green edges are those defining graph G and the black edges represent couples (α, p) that are admissible but verify X αp = 0. Note that Net 0 (resp. Net 1, Net 2) is the set {0, 1, 2} (resp. {3, 4, 5}, {6, 7, 8}). From the definition of "carrying out a test, " it follows that a test can be performed within the current configuration if and only if G contains a matching saturating exactly one point within each net in N . For instance the green graph G in Fig. 4 contains the matching {(1, 10), (4, 7), (8, 12)}, showing that probe 10 (resp. 7, 12) can touch point 1 (resp. 4,8) in Net 0 (resp. 1, 2). Hence the test can be carried out within the current configuration. We now observe that finding a matching saturating exactly one point within each net in N is equivalent to finding a system of distinct representatives for the collection of sets {Z i }, where Z i is the set of probes that can be used to touch a point in the net i, i.e., Z i = p ∈ P | (α, p) is admissible and X αp = 1 for some α in net i and P denotes the set of probes. A classical theorem in combinatorial optimization asserts that the collection of sets {Z i } i∈N has a system of distinct representatives if and only if the condition i∈M Z i ≥ |M| is satisfied for every subset M of N (see in particular the seminal text by Ford and Fulkerson [9] and the book by Chvátal [4]). This theorem can be rephrased as follows: by the definition of the Z i . We thus obtain the following proposition. For each test we include into our model the constraints

Proposition 2.1 The graph G contains a matching saturating exactly one point within each net in N if and only if the inequalities
for all sets M, Q such that M is not empty, Q is a subset of probes, and |Q| equals |M| − 1. They will be called feasibility constraints and denoted by FEAS X αp , Y . Proposition 2.1 implies that if Y equals 1, then the graph G contains a matching of the required type and test can be carried out within the current configuration.
Finally, for the case where |M| equals 3, we need all the constraints of the form for some pair of probes {q, q }. For instance, if q equals 6 and q equals 7, we have X 0,0 + X 0,9 + X 1,0 + X 1,10 + X 3,8 + X 3,11 + X 4,11 + X 5,8 + X 5,13 + X 6,12 + X 6,16 + X 7,9 When the model containing these feasibility constraints returns a solution, one must do a little bit of work to compute the couples (α, p) that describe the implementation of test (for each ). Actually it suffices to solve a bipartite matching problem in the graph G corresponding to this solution. We now comment on the number of feasibility constraints for a given . Assuming that there are 21 probes (as in the case of our data sets), this number equals and grows rapidly as a function of |N |. This is not an issue because in our data sets |N | is almost always less than five. Nonetheless one might ask why we do not model directly the requirement that there be a matching between nets and probes (in order to carry out a specific test). The reason is that to do so, we would need to introduce variables of the form X αp and the resulting model would contain too many variables.
If one does not want to use the above feasibility constraints when |N | is at least three (note that the number of constraints equals 276 when N contains three nets!), an alternative is to introduce the supplementary variables X αp and the following constraints.

The partial covering problem
It is natural to ask the following question: what is the maximum number of tests that can be carried out while the system is in a given configuration? This problem, which we call the partial covering problem, can be formulated as follows: maximize the function Y subject to the collision avoidance constraints CAC(S u , y r ), the reachability constraints REACH(S u , X αp ), the incompatibility constraints INC(X αp ), the feasibility constraints FEAS(X αp , Y ), the lower and upper bound constraints on all the variables, and the integrality constraints on the binary variables. The resulting mixed integer linear program can be solved by using a commercial solver.

A greedy algorithm for the covering problem
The covering problem can be solved in a heuristic fashion through repeated calls of an algorithm for solving the partial covering problem. This method is summarized in Algorithm 1. Note that in the first line of the loop body, T can be replaced by a subset of tests. Then one must determine which of the omitted tests are covered by the configuration C before removing them from T . Algorithm 1 A greedy algorithm for the covering problem 1: C ←− {the initial configuration} 2: let T denote the set of all tests 3: remove from T the tests that can be carried out within the initial configuration 4: n ←− 1 5: while T is not empty do 6: compute a configuration C covering the maximum number of tests in T 7: include C in C 8: remove from T the tests covered by C 9: n ←− n + 1 10: end while

The optimal sequence problem
Let C be the set of configurations computed by the above algorithm and n its cardinality. Thus C is of the form {C 1 , C 2 , . . . , C n }, where C i denotes the ith configuration (C 1 being the initial configuration). Let also d C i , C j denote the time taken by the FP system to go from the configuration C i to the configuration C j . We wish to compute the best sequence of configurations, i.e., a sequence C 1 = C σ (1) , C σ (2) , . . . , C σ (n) , C 1 (where σ denotes a permutation) that minimizes When a shuttle moves from one configuration to the next, it travels at the same speed in the horizontal direction as in the vertical direction, and thus the time it takes to do so is proportional to the L ∞ distance between the respective positions of the shuttle in the two configurations. Hence we assume that d C i , C j is the L ∞ distance between C i and C j .
Since the distances are symmetric (meaning that d C i , C j = d C j , C i holds for any pair {i, j}), we can model the optimal sequence problem as a Travelling Salesman Problem (TSP) on an undirected graph. The TSP itself can be modelled by using degree constraints (each vertex must be of degree 2) and subtour elimination constraints (enforcing the condition that there be at least two edges between a subset S of vertices and its complement, for any S verifying 2 ≤ |S| ≤ n − 2). We introduce the binary variables z ij for 1 ≤ i < j ≤ n, where z ij equals 1 if and only if the edge ij belongs to the tour. Here is the integer programming formulation of the optimal sequence problem.
∀i, ∀j such that i < j

A global formulation of the planning problem
We now give a formulation of the planning problem that is global but unlikely to be solved for large data sets. In this formulation we are looking for several configurations at once, so that each test is covered by at least one configuration. We assume that there are at most n configurations. We introduce a group of variables S i u , y i r , X i αp , Y i for each i ∈ {1, 2, . . . , n}, that is, for each potential configuration. The variable Y i equals 1 if and only if the test is covered by the configuration represented by the shuttles coordinates S i u . For each i the vector S i u , y i r , X i αp , Y i must satisfy the constraints in CAC S i u , y i r , REACH S i u , X i αp , INC X i αp , and FEAS X i αp , Y i , as well as the bound and nonnegativity constraints on the variables and the integrality constraints on all the variables except the S i u . To these constraints one must add constraints ensuring that each test is covered by at least one configuration. These constraints can be expressed as n i=1 Y i ≥ 1 for every . We now introduce variables and constraints to model the choice of the optimal configuration sequence. For i in {1, 2, . . . , n}, let w i be a binary variable that equals 1 if and only if Configuration i is chosen. For any nonempty proper subset S of {1, 2, . . . , n}, let w S be a binary variable that equals 1 if and only if S contains at least one of the chosen configurations. As in the subsection "The optimal sequence problem", we introduce the variables z ij defined as follows: z ij (for 1 ≤ i < j ≤ n) equals 1 if and only if Configuration i appears immediately before or after Configuration j in the sequence of configurations. Finally we let d ij denote the L ∞ distance between Configurations i and j. We can now propose a model for choosing an optimal configuration sequence.
This model is a mixed integer program with linear constraints and a nonlinear objective function. It can be linearized by introducing the nonnegative real variables D ij , where D ij stands for the product d ij z ij for each i and j with i < j. After replacing the objective function by n−1 i=1 n j=i+1 D ij and adding the constraints is a constant larger than any distance between two configurations), we obtain a model of our problem that is actually a mixed integer linear program.
We expect that n (the maximum number of configurations) will be relatively small for most data sets, i.e., smaller than 30. If the number of tests is large, however, the above MILP will be hard to solve and one will have to investigate the use of column generation or other decomposition techniques for solving our problem. We also note that the set of solutions of this model exhibits many symmetries. This difficulty could be partially overcome by introducing the constraints w i ≥ w i+1 (for i in {1, 2, . . . , n − 1}) into the model.

Results and discussion
In this section we present results pertaining to the solution of the covering and sequencing subproblems. As mentioned in the subsection "A global formulation of the planning problem", the global formulation cannot be used for large data sets, particularly the kind of data sets that the Company must handle. We start by describing the format of each data set, consisting of a probe file, a point file, and a test file. The probe file contains the description of each probe, namely: a numerical identifier; the string "top" or "bot" to indicate whether the shuttle to which the probe is attached is on top or on bottom of the board; a string indicating the position of that shuttle (for instance "fl" refers to a front-left shuttle); and the coordinates of the point of attachment of the probe with respect to the preferred corner of the shuttle to which it is attached. Here is an example of such a description. The test file consists of a sequence of test descriptions (each of which occupying several lines). For instance the description of Test 4908 is as follows.  4 5 6 7 8 10 11 13 14 15 16 19 20  5269  1 2 3 4 5 6 7 8 10 11 13 14 15 16 19 20  5270  1 2 3 4 5 6 7 8 10 11 13 14 15 16 19 20  5271  1 2 3 4 5 6 7 8 10 11 13 14 15 16 19 20 Note that the second number on the first line represents the number of nets within the test (2, in this example). Therefore the first line in the test description is followed by the description of the first net, Net 9816, followed by the description of the second one, Net 9817. Net 9816 consists of three points, represented by their identifiers and whose coordinates are stored in the point file. The points in question are Points 3120, 3121, and 3122, and each point identifier is followed (on the next line) by the list of probes that may touch that particular point. Naturally Net 9817 is described in a similar fashion. Table 1 summarizes the characteristics of the four instances that we used for our tests. It turns out that some of the tests in each of the four data sets are infeasible, i.e., there are tests that no configuration can "cover. " For this reason our program begins by determining which tests are infeasible through solving a series of partial covering problems (each with a data set consisting of one test). Then we solve the partial covering problem (see section "Methods") for the remaining tests, each of which is feasible. Note that we did not include into the model the tests that consist of 5 nets or more, because the corresponding feasibility constraints (see the subsection "Tests and feasibility constraints") are too numerous. In any case only Dataset 3 contains such tests and there are only 6 of them.
In our experiments we solved the covering problem by using Cplex to find a solution of each of the partial covering problems. Note that Cplex implements a branch-and-bound algorithm for solving mixed integer linear programming problems (see Nemhauser and Wolsey [16] for a description of the branch-and-bound method). Our initial intention was to solve the covering problem by solving partial covering problems until all the tests had been covered, as explained in the subsection "A greedy algorithm for the covering problem". Unfortunately the number of constraints of our model is huge and including into it all the feasible tests consumed too much memory. Therefore instead of solving a partial covering problem including all the feasible tests, we included at most 400 tests in each of the successive partial covering problems solved by our algorithm. The configuration obtained after solving a given partial covering problem may actually cover more than the number of covered tests indicated in the solution; therefore we look for all the tests covered by the current configuration before solving the next partial covering problem. The mixed integer linear program (MILP) corresponding to a partial covering problem has a weak linear relaxation and many of its solutions have the same objective function value. Hence finding a (provably) optimal solution of a given partial covering problem takes too much time and we decided to put a limit on its execution time. For each of the four data sets, we tried three such limits: 90 seconds, 180 seconds, and 270 seconds, respectively. For instance, in Table 2, the identifier 7700FC-180 refers to an experiment with data set 7700FC in which we let the Cplex MILP algorithm run for at most 180 seconds when attempting to solve a partial covering problem. We ran our tests on a machine with an Intel Core i7-860, 2.80GHz, and a 2G memory.
Intuitively, if we spend more time finding a good solution for each of the partial covering problems, we should be able to cover all the tests with fewer configurations and hence obtain a better solution of the planning problem. With one exception (Dataset4-90), the results in Table 2 show that spending 270 seconds to solve each partial covering problem always yields a solution that is better (i.e., of smaller length) than those obtained after spending only 90 or 180 seconds on each partial covering problem. This is true even if spending 90 or 180 seconds on each partial covering problem yields a solution with fewer configurations. Overall the results are very encouraging, because the system currently in use at the Company produces plans that may include hundreds of configurations while Table 2 Results. Real time represents the time (in minutes) needed to solve the covering problem, User time the time (in minutes) consumed by all the processors, Nb. of config. the number of partial covering problems that were solved, and Sol. value the optimal value of the sequencing problem described in the subsection "The optimal sequence problem" our solutions include fewer than 30 configurations. The real time consumed for computing a solution is considered reasonable by the Company, since the time needed to test a single board is itself substantial. Therefore it is feasible to spend one hour or so preparing the sequence of configurations that will be used for testing a specific board.

Conclusion
In this article we have shown that the use of modelling and mathematical programming yields solutions of the test planning problem that are much better than those currently used by the Company. The new solutions can be obtained within times that are reasonable. Our results indicate that the system currently used by the Company could be replaced by a system based on mathematical programming. More work remains to be done, however, in order to strenghten the formulation of the partial covering problem. In particular we would like to find new families of cutting planes, whose introduction into the model will speed up the solution process and thus yield better solutions of the partial covering problem. Another avenue is to design heuristics (not making use of MILP models) in order to cover a large number of tests with few configurations. One could then use the MILP model described in section "Methods" to cover the remaining tests, presumably those complicated tests that include three or more nets. These improvements may enable us to find solutions of the planning problem that are as good as those reported in this article but take less time to compute. As for the model in the subsection "A global formulation of the planning problem", we could test it on small data sets and then look for more sophisticated approaches for solving it, in the hope of computing solutions for real-world problems within reasonable times.

Funding
Some of the work described in this article was carried out while Mario Morfin was a postdoctoral fellow at the Company. His two internships were supported by Mitacs Inc. and NSERC, respectively, and were also partially supported by the Company.