Computer-Aided Design 40 (2008) 411–421 www.elsevier.com/locate/cad
Symbolic OBDD representations for mechanical assembly sequences Tianlong Gu ∗ , Zhoubo Xu, Zhifei Yang School of Computer Science, Guilin University of Electronic Technology, Guilin 541004, China Received 6 June 2007; accepted 1 December 2007
Abstract Assembly sequence planning is one typical combinatorial optimization problem, where the size of parts involved is a significant and often prohibitive difficulty. The compact storage and efficient evaluation of all the feasible assembly sequences is one crucial concern. Ordered binary decision diagram (OBDD) is a canonical form to represent and manipulate the Boolean functions efficiently, and appears to give improved results for large-scale combinatorial optimization problems. In this paper, subassemblies, assembly states and assembly tasks are represented as Boolean characteristic functions, and the symbolic OBDD representation of assembly sequences is proposed. In this framework, the procedures to transform directed graph and AND/OR graph into OBDDs are presented. The great advantage of OBDD-based scheme is that the storage space of OBDDbased representation of all the feasible assembly sequences does not increase with the part count of assembly dramatically so quickly as that of both directed graph and AND/OR graph do. We undertake many experimental tests using Visual C++ and CUDD package. It was shown that the OBDD scheme represented all the feasible assembly sequences correctly and completely, and outperforms either directed graph or AND/OR graph in storage efficiency. c 2008 Published by Elsevier Ltd
Keywords: Assemble sequence planning; Directed graph; AND/OR graph; Ordered binary decision diagram
1. Introduction The highly competitive nature of the global market of manufacturing products requires frequent changes of the product design and manufacturing strategies. In order to shorten the time and reduce the costs required for the development of the product and its manufacturing process, it is desirable to automate and computerize the assembly sequence planning activity. Typically, a product can have a very large number of feasible assembly sequences even at a small parts count, and this number rises exponentially with increasing parts count, which renders it staggeringly difficult and even impossible for one to represent all the sequences individually. Thus, the choices of representation for assembly sequences can be crucial in assembly sequence planning, and there has been a need to develop systematic and efficient methods to represent all the available alternatives. The representation for assembly sequences has received much attention due to the requirement of less storage and easy user comprehending. Various representations of assembly ∗ Corresponding author. Tel.: +86 773 5601303; fax: +86 773 5605683.
E-mail address:
[email protected] (T. Gu). c 2008 Published by Elsevier Ltd 0010-4485/$ - see front matter doi:10.1016/j.cad.2007.12.001
sequences used in the literature on assembly sequence planning can be classified into two groups [1,2]: ordered lists and graphical representations. The ordered list could be a list of tasks, list of assembly states, or list of subsets of connections. In the ordered lists each assembly sequence is represented by a set of lists. Although this set of lists might represent a complete and correct description of all feasible assembly sequences, it is not necessarily the most compact or most useful representation of sequences. The graphical schemes map the assembly operations and assembly states into specified diagrammatic elements, and share common subsequences and common states graphically in many assembly sequences, which create more compact and useful representations that can encompass all feasible assembly sequences. The graphical representations include precedence diagrams [3], state transition diagrams [4], inverted trees [5], liaison sequence graphs [6], assembly sequence graphs [7] directed graphs [2] and AND/OR graphs [8] etc. In the precedence diagram [3], assembly operations are represented by numbered circles. The circles are connected by arrows showing the precedence relations. The shortcoming of this formalism is the lack of algorithmic nature in the development of the diagram. In the state transition diagrams [4], subassemblies are represented by a separate diagram with a
412
T. Gu et al. / Computer-Aided Design 40 (2008) 411–421
corresponding node in the main diagram. Hence, it cannot provide a compact representation of all assembly sequences. Bourjault represented all valid assembly sequences in the form of an inverted tree [5] that describes the possible orders of assembly. The inverted tree gives the liaison sequences only, not the actual assembly sequences. Also, it does not contain any information about subassemblies. The liaison sequence graph [6] representation is similar to that of state transition diagram, but this scheme gives liaison sequences instead of assembly sequences. However, here the states do not represent a set of parts, but a set of relations between parts. The assembly sequence graph described in [7] represents all feasible sequences through a series of assembly states and assembly tasks. Although assembly sequence graph provides a detailed hierarchical representation, it becomes quite clumsy for products with large number of parts. In a directed graph of assembly sequences [2], the nodes correspond to the sets of stable subassemblies, and the edges correspond to the assembly tasks. A directed graph might contain infeasible assembly sequences. Homem de Mello and Sanderson described an AND/OR graph [8] representation of assembly sequences. Though the AND/OR graphs usually provide a compact representation, they give the disassembly sequences only. These traditional representations have the same shortcoming that increasing parts count in an assembly makes it staggeringly difficult and even impossible to represent all the sequences. In recent years, implicitly symbolic representation and manipulation technique, called as symbolic graph algorithm or symbolic algorithm [9,10], has emerged in order to combat or ease combinatorial state explosion. Typically, ordered binary decision diagram (OBDD) or variants thereof are used to represent the discrete objects [11,12]. Efficient symbolic algorithms have been devised for hardware verification, model checking, testing and optimization of circuits. Hachtel and Somenzi developed OBDD-based symbolic algorithm for maximum flow in 0–1 networks that can be applied to very large graphs (more than 1036 edges) [13]. Gu and Xu presented the symbolic ADD (Algebraic Decision Diagram) formulation and algorithms for maximum flow problems in general networks [14]. Zhong, Huang and Gu discussed the operations of directed graphs using OBDDs on the view of a kind of general data structures [15]. Symbolic algorithms appear to be a promising way to improve the computation of large-scale combinatorial computing problems through encoding and searching nodes and edges implicitly. In this regard, we present the symbolic OBDD formulation of all the assembly sequences. The subassemblies, assembly states, assembly tasks and assembly sequences are represented by Boolean characteristic functions, and the procedures to translate directed graph and AND/OR graph into OBDDs are presented. Experiment tests show that the OBDD formulation outperforms either directed graph or AND/OR graph in storage efficiency. The rest of this paper is organized as follows. In Section 2, we introduce some concepts and properties regarding ordered binary decision diagram. The symbolic formulations for subassemblies, assembly states, assembly tasks and assembly
sequences are described in Section 3; Section 4 and Section 5 develop the procedures to translate directed graph and AND/OR graph into OBDDs respectively; Some experimental results are presented in Section 6; The last section gives some conclusions. 2. Ordered binary decision diagram An ordered binary decision diagram (OBDD) [9,10] provides compact, canonical and efficiently manipulative representation for Boolean functions. Given a Boolean algebra B, the Boolean formulae on the variables x1 , . . . , xn are obtained by recursively applying negation, conjunction, and disjunction to the elements of B and the variables. We denote conjunction, disjunction and negative by “·”, “+” and “0” respectively. Unless otherwise noted, we assume B = {0, 1}. Thus, x1 · x3 + x2 · x3 is a formulae. Boolean formulae designate Boolean functions in the usual way. Let f (x1 , . . . , xn ) be a Boolean function. Then f (xi )then = f (x1 , . . . , xi−1 , 1, xi+1 , . . . , xn ) f (xi )else = f (x1 , . . . , xi−1 , 0, xi+1 , . . . , xn ) are the positive and negative cofactors of f with respect to xi . The following expansion theorem forms the basis for algorithms that create and manipulate OBDD: f (x1 , . . . , xn ) = xi · f (xi )then + (xi )0 · f (xi )else . We can expand a Boolean function with respect to any variable xi , and represent the elements of these expanded functions graphically. Recursively, an OBDD for a Boolean function can be created. The OBDD for a nonconstant Boolean function f is a directed acyclic graph G = (V, E). It includes sink or terminal nodes ‘0’ and ‘1’, which represent constant Boolean functions 0 and 1. These nodes have no descendants. All other nodes v ∈ V include a labeled variable l(v), and have two outgoing edges of then and else cofactors drawn as solid and dash lines. The nodes are in one-to-one correspondence with Boolean functions. The function f (l(v)) of a node v ∈ V is specified as l(v) · f (l(v))then + l(v)0 · f (l(v))else , where f (l(v))then and f (l(v))else are called as the functions of the then and else children. The root node of an OBDD represents the function f . The variables in an OBDD are ordered, i.e. if v is a descendant of u, which means (u, v) ∈ E, then l(u) < l(v), and all the paths in the OBDD keep the same variable ordering. Given a Boolean function and any assignments to its variables, the function value is determined by tracing a path from the function node to a terminal node following the appropriate branch from each node. The branch depends on the variable value of the assignments, and the function value under the assignments is determined by its path’s terminal or sink node. For example, Fig. 1 shows the binary tree and the OBDD for Boolean function f = x1 · x3 + x2 · x3 , in which the variable order is x1 < x2 < x3 . It is obvious that the OBDD is a directed acyclic graph, and stores the same information in a more compact way. We trace the path ¬→→®→¯, and
T. Gu et al. / Computer-Aided Design 40 (2008) 411–421
+ γr 1 · γr 2 · · · · · γr n · µr 1 · µr 2 · · · · · µr m = Σi Σ j (Πk γik ) · (Πk µ jk ),
(a) Binary tree.
(b) OBDD.
Fig. 1. OBDD for Boolean function f = x1 · x3 + x2 · x3 .
reach the sink node 0. Thus, the value of Boolean function f = x1 · x3 + x2 · x3 of variable assignment (0, 1, 0) is 0. An important property of OBDDs is that they are a canonical representation of Boolean functions. Canonicity means that for a Boolean function f and each variable ordering π there is a unique OBDD, and vice versa. Moreover, most of the Boolean functions operations can be implemented efficiently through graphical manipulations of OBDDs. A set is a nonorder collection of elements with any specified properties. A set is perhaps the most fundamental mathematical abstraction and can be seen as a generic concept to build various representations of discrete objects. We can convert a set S to an OBDD by encoding the elements of S with a length-n binary number, where n = dlog2 (|S|)e. The encoded element in S corresponds to a vector of binary variables X = [(x0 , . . . , xn−1 )]. Thus, a set S can be formulated by the following Boolean characteristic function: 1, X = encoded(s), s ∈ S Φ S (X ) = (1) 0, otherwise. Set operations can be reduced to the operations on Boolean characteristic functions as follows: union of sets: Φ A∪B (X ) = Φ A (X ) + Φ B (X ) intersection of sets: Φ A∩B (X ) = Φ A (X ) · Φ B (X ) difference of sets: Φ A−B (X ) = Φ A (X ) · (Φ B (X ))0. A relation is a set of ordered pairs. Given a relation R from A to B, we can formulate the relation as an OBDD by encoding the elements of A with a length-n binary number and the elements of B with a length-m binary number, where n = dlog2 (|A|)e and m = dlog2 (|B|)e. The encoded element in A corresponds to a vector of binary variables X = (x0 , . . . , xn−1 ), and the encoded element in B to a vector of binary variables Y = (y0 , . . . , ym−1 ). Therefore, a pair (a, b) in R can be formulated by the following Boolean characteristic function: 1, X = encoded(a), Y = encoded(b), Φ(a,b) (X, Y ) = (2) (a, b) ∈ R 0, otherwise and the relation R can be formulated as: Φ R (X, Y ) = γ11 · γ12 · · · · · γ1n · µ11 · µ12 · · · · · µ1m + · · · + γk1 · γk2 · · · · · γkn · µk1 · µk2 · · · · · µkm + · · ·
413
(3)
where γik is the appearance of variable xk corresponding to k bit code of the i-th element of set A, and µik the appearance of variable yk corresponding to k bit code of the j-th element of set B. If xik = 1 then γik = xk else γ ik = xk 0. Similarly, If yik = 1 then µik = yk else µik = yk 0. These characteristic functions are of Boolean functions, and can be compactly represented by OBDDs. For example, the characteristic functions of set A = {a, b, c, d} and set B = {1, 5, 7} are derived by encoding a = [000], b = [001], c = [010], d = [011], 1 = [100], 5 = [101] and 7 = [110]: Φ A (X ) = x1 0 · x2 0 · x3 0 + x1 0 · x2 0 · x3 + x1 0 · x2 · x3 0 + x1 0 · x2 · x3 Φ B (X ) = x1 · x2 0 · x3 0 + x1 · x2 0 · x3 + x1 · x2 · x3 0 Φ A∪B (X ) = x1 0 · x2 0 · x3 0 + x1 0 · x2 0 · x3 + x1 0 · x2 · x3 0 + x1 0 · x2 · x3 + x1 · x2 0 · x3 0 + x1 · x2 0 · x3 + x1 · x2 · x3 0. The characteristic function of relation R = {(a, 1), (a, 5), (b, 1), (b, 7), (c, 1), (c, 5), (d, 7)} is derived by encoding a = [00], b = [01], c = [10], d = [11], 1 = [00], 5 = [01] and 7 = [10]: Φ R (X ) = x10 · x20 · y10 · y20 + x10 · x20 · y10 · y2 + x10 · x2 · y10 · y20 + x10 · x2 · y1 · y20 + x1 · x20 · y10 · y20 + x1 · x20 · y10 · y2 + x1 · x2 · y1 · y20 . The OBDDs for these characteristic functions are shown in Fig. 2. 3. Symbolic representation of assembly sequences A mechanical assembly is a composition of interconnected parts forming a stable unit. Each part is a solid rigid object, that is, its shape remains unchanged. Parts are interconnected whenever they have one or more compatible surfaces in contact. Surface contacts between parts reduce the degree of freedom for relative motion. These contacts and relative motions are embedded in various logical and physical relations among the parts of the assembly, called as assembly knowledge, and can be extracted directly from the CAD model of assembly. It is assumed that whenever two parts are put together all contacts between them are established. Due to this assumption, an assembly can be represented by a simple undirected connection graph (P, C), in which P is the set of nodes, and C is the set of edges. Each node in P corresponds to a part in the assembly, and there is one edge in C connecting every pair of nodes whose corresponding parts have at least one surface contact. Fig. 3(a) shows an assembly in exploded view, and Fig. 3(b) shows its corresponding connection graph. A subassembly consists of a unique part or some parts in which every part has at least one surface contact with another part. Although there are cases in which it is possible to join the parts in more than one way, a unique assembly geometry will be assumed for each subassembly. This geometry corresponds to their relative location in the whole assembly. A subassembly
414
T. Gu et al. / Computer-Aided Design 40 (2008) 411–421
(a) Set A.
(c) Set A ∪ B.
(b) Set B.
(d) Relation R.
Fig. 2. OBDD formulation of sets and relation.
(a) Assembly in exploded view.
(b) Connection graph. Fig. 3. A four-part assembly.
is said to be stable if its parts maintain their relative position and do not break contact spontaneously. All one-part subassemblies are stable. It is also assumed that whenever a subassembly is formed all contacts between its parts are established. Therefore, any subassembly can be characterized by its set of parts, and can be represented by an n-dimensional binary subassembly vector [x1 x2 . . . xn ] in which the ith component is true (T) or false (F), respectively, if the nth part is involved in the subassembly or not. For example, {Cap, Stick, Receptacle} and {Receptacle, Handle} are two subassemblies of the assembly
shown in Fig. 3, and can be represented by 4-dimensional binary subassembly vectors [1110] and [0011] respectively. The assembly process consists of a succession of tasks, through each of which the subassemblies are joined into a larger subassembly. The process starts with all parts separated, and ends with all parts properly joined together to obtain the whole assembly. It is assumed that exactly two subassemblies are joined by each assembly task, and that after parts have been put together, they remain together until the end of the assembly process. An assembly task is said to be geometrically feasible if there is a collision-free path to bring the two subassemblies into contact from a situation in which they are far apart. And an assembly task is said to be mechanically feasible is it is feasible to establish the attachments that act on the contacts between the two subassemblies. Given two subassemblies characterized by their sets of parts θ1 and θ2 , we say that joining θ1 and θ2 is an assembly task if the set θ3 = θ1 ∪ θ2 characterizes a subassembly. Alternatively, a task can be seen as a decomposition of the output subassembly into the two input subassembly. Therefore, an assembly task τ i can be characterized by an ordered pair ({θi1 , θi2 }, θi3 ) of its output subassembly and input subassemblies. Since the equation θi3 = θi1 ∪ θi2 holds, an assembly task τ i can be represented by an 2n-dimensional binary vector [x1 x2 . . . xn y1 y2 . . . yn ] in which [x1 x2 . . . xn ] and [y1 y2 . . . yn ] are the binary vectors of subassembly θi1 and θi3 respectively. For example, for the assembly shown in Fig. 3, if θ1 = {Cap, Receptacle} and θ2 = {Handle}, then joining θ1 and θ2 is an assembly task τ . The assembly task τ is characterized by an ordered pair τ = ({{Cap, Receptacle}, {Handle}}, {Cap, Receptacle, Handle}), and can be represented by an 8-dimensional binary vector [10101011]. The state of assembly process is the configuration of the parts at the beginning (or at the end) of an assembly task. We call the state at which a task begins as the pre-state, and the state at which a task ends as the post-state. The pre-state of a task τi can be characterized by its input subassemblies {θi1 , θi2 }, and the post-state of a task can be characterized by its output subassembly θi3 . Since the configuration of parts is determined by the connections that have been established, a state of the assembly process can also be represented by an L-dimensional binary vector [x1 x2 . . . x L ] in which the ith component is true (T) or false (F), respectively, if the ith connection is established in that state or not. In this regard, an assembly task can also be represented by a 2L-dimensional binary vector [x1 x2 . . . x L y1 y2 . . . y L ] in which [x1 x2 . . . x L ] and [y1 y2 . . . y L ] are the L-dimensional binary connection vectors of the beginning state and the end state of the task respectively. For example, for the assembly shown in Fig. 3, the pre-state of the assembly task τ = ({{Cap, Receptacle}, {Handle}}, {Cap, Receptacle, Handle}) is characterized by its input subassemblies {{Cap, Receptacle}, {Handle}}, and the post-state by its output subassembly {Cap, Receptacle, Handle}. At the pre-state connection C2 of task τ is established, and at the post-state connections C2 and C5 are established. Therefore, these two states can be represented by 5-dimensional binary vectors [01000] and [01001] respectively, and the
415
T. Gu et al. / Computer-Aided Design 40 (2008) 411–421
assembly task can also be represented by a 10-dimensional binary vector [0100001001]. Given an assembly with n parts, an assembly sequence is an ordered list of n-1 assembly tasks σ = τ1 τ2 . . . τn−1 , in which the intput subassemblies of the first task τ1 is the separated parts, the output subassembly of the last task ιn−1 is the whole assembly, and the input subassemblies to any task τi is either a one-part subassembly or the output subassemblies of a task that precedes τi . An assembly sequence is said to be feasible if all its assembly tasks are geometrically and mechanically feasible, and the input subassemblies of all tasks are stable. To any assembly sequence σ =τ1 τ2 . . . τn−1 there corresponds an ordered sequences of n assembly states s1 s2 . . . sn of the assembly process. The stats s1 is the state in which all parts are separated, and the state sn is the state in which all parts are joined together. And any two consecutive state si and si+1 are such that only the two input subassemblies of task τi are in si and not in si+1 , and only the output subassembly of task τi is in si+1 and not in si . Therefore, an assembly sequence can also be characterized by an ordered sequence of states σ = s1 s2 . . . sn . In this regard, an assembly sequence can be represented by the following relation: R1σ = {(θi1 , θi3 )|θi1 is the first element of task τi ‘s pre-state, and θi3 is the post-state of task τi ‘s post-state, i = 1, 2, . . . , n − 1, σ = τ1 τ2 . . . τi . . . τn−1 }
(a) φ1σ (X, Y ).
(b) φ2σ (X, Y ).
Fig. 4. OBDD for assembly sequence.
R1σ = {({Cap}, {Cap, Receptacle}), ({Cap, Receptacle}, {Cap, Receptacle, Stick}), ({Cap,Receptacle,Stick}, {Cap, Receptacle, Stick, Handle}) or relation R2σ = {([00000], [01000]), ([01000], [11100]), ([11100], [11111])}, and their symbolic formulations are the following Boolean functions: φ1σ (X, Y ) = x1 · x20 · x30 · x40 · y1 · y2 · y30 · y40 + x1 · x2 · x30 · x40 · y1 · y2 · y3 · y40
(4)
+ x1 · x2 · x3 · x40 · y1 · y2 · y3 · y4 φ2σ (X, Y ) = x10 · x20 · x30 · x40 · x50 · y10 · y2 · y30 · y40 · y50
or
+ x10 · x2 · x30 · x40 · x50 · y1 · y2 · y3 · y40 · y50
R2σ = {(si , si+1 )|i = 1, 2, . . . , n − 1, σ = s1 s2 . . . si . . . sn }. The relation R1σ can be symbolically formulated as: φ1σ (X, Y ) =
n−1 X
γi1 · γi2 · · · · · γin · µi1 · µi2 · · · · · µin ,
(6)
i=1
where γik is the appearance of variable xk corresponding to the n-dimensional binary subassembly vector of θi1 , and µik the appearance of variable yk corresponding to the n-dimensional binary subassembly vector of θi3 . If xik = 1 then γik = xk else γik = xk 0. Similarly, If yik =1 then µik = yk else µik = yk 0. And the relation R2σ can be symbolically formulated as: φ2σ (X, Y ) =
n−1 X
γi1 · γi2 · · · · · γi L · µi1 · µi2 · · · · · µi L ,
+ x1 · x2 · x3 · x40 · x50 · y1 · y2 · y3 · y4 · y5 .
(5)
The OBDD of the assembly sequence is shown in Fig. 4. An assembly might have a number of different feasible assembly sequences, and many assembly sequences share common subsequences. The set of all the feasible assembly sequences can be represented compactly by the following symbolic formulation: X Φ1σ (X, Y ) = φ1σ (X, Y ) (8) σ
or Φ2σ (X, Y ) =
X σ
φ2σ (X, Y ).
(9)
(7)
i=1
where γik is the appearance of variable xk corresponding to the L-dimensional binary connection vector of state si , and µik the appearance of variable yk corresponding to the L-dimensional binary connection vector of state si+1 . If xik =1 then γik = xk else γik = xk 0. Similarly, If yik =1 then µik = yk else µik = yk 0. For example, for the assembly shown in Fig. 3, if τ1 = ({{Cap}, {Receptacle}}, {Cap, Receptacle}), τ2 = ({{Cap,Receptacle},{Stick}},{Cap,Receptacle,Stick}) and τ3 = ({{Cap,Receptacle,Stick}, {Handle}}, {Cap, Receptacle, Stick, Handle}), σ = τ1 τ2 τ3 is a feasible assembly sequence. The assembly sequence can be represented by the relation
4. Formulating directed graph via OBDDs The set of all assembly sequences for a assembly, whose set of parts is P = { p1 , p2 , . . . , pn }, can be represented by a directed graph, in which the nodes correspond to the sets of stable subassemblies, or the partitions of part set P, and the edges correspond to the assembly tasks, or ordered pairs of nodes. It is noted that directed graph here is different from general one in having domain-specific knowledge as following: for any edge, there are only two subset θi1 and θi2 in the state partition corresponding to the first node that are not in the state partition corresponding to the second node. Also, there is only
416
T. Gu et al. / Computer-Aided Design 40 (2008) 411–421
one subset θi3 in the state partition corresponding to the second node that is not in the state partition corresponding to the first node, and θi3 = θi1 ∪ θi2 . A directed graph of all the assembly sequences can be formulated as: DG = (V P , E P ) V P = {Θ|Θ ⊆ 2 P , Θ
are partitions of P}
E P = VP × VP ,
(10)
where 2 P is the power set of product set P. In the directed graph of assembly sequences, we call the node in which there exist no outgoing edges as a sink node, and the node from which all the edges are leaving as a source node. A source node corresponds to the state in which all parts are separated, and a sink node corresponds to the state in which all parts are joined together. The OBDD formulation of directed graph for all the assembly sequences can be generated by the following procedures: Step 1. Start the search from the sink node V Pt of the directed graph, and initialize VT = ∅ andVi = V Pt ; Step 2. Find the set of edges E Pi = {(V Pk , V Pi ) ∈ E P |V Pi = Vi }, that have the terminal node of Vi ; Step 3. Choose edge (V Pk , V Pi ) ∈ E Pi , calculate θk3 = V Pi − V Pk , {θk1 , θk2 } = V Pk − V Pi ; Step 4. Create the Boolean function of the assembly task ({θk1 , θk2 }, θk3 ) as φk (X, Y ) = γ11 · γ12 · · · · · γ1n · µ11 · µ12 · · · · · µ1n , where γi j and µi j is the appearances of variable xk and variable yk corresponding to the binary vectors [x1 x2 . . . xn ] and [y1 y2 . . . yn ] of subassembly θi1 and θi3 respectively; Step 5. Iterate Φ1σ (X, Y ) = Φ1σ (X, Y ) + φk (X, Y ), and reset VT = VT ∪ {V Pk }, E Pi = E Pi − {(V Pk , V Pi )}; Step 6. If E Pi is not empty, go to step 3, else reset VT = (VT − {V Pi }); Step 7. If VT is not empty, choose one node in VT as Vi , else output Φ1σ (X, Y ) and stop; Step 8. If Vi is a source node go to step 7, else go to step 2. For example, Fig. 5(a) gives the directed graph of all the assembly sequences for the assembly shown in Fig. 3. We create its OBDD formulation as follows:
(b) OBDD. Fig. 5. OBDD for directed graph.
{C, S, R, H}), ({{S, R, H}, {C}}, {C, S, R, H})} (V Pk , V Pi ) = ({{C, R}, {S, H}}, {C, S, R, H}) ({θk1 , θk2 }, θk3 ) = ({{C, R}, {S, H}}, {C, S, R, H}) φk (X, Y ) = x1 · x20 · x3 · x40 · y1 · y2 · y3 · y4 Φ1σ (X, Y ) = Φ1σ (X, Y ) + φk (X, Y )
VT = ∅ Vi
(a) Directed graph.
= x1 · x2 · x3 · x40 · y1 · y2 · y3 · y4
= V Pt = {{C, S, R, H}}
E Pi = {({{C, S, R}, {H }}, {C, S, R, H}), ({{C, R}, {S, H}}, {C, S, R, H}), ({{C, S}, {R, H}}, {C, S, R, H}), ({{S, R, H}, {C}}, {C, S, R, H})} (V Pk , V Pi ) = ({{C, S, R}, {H }}, {C, S, R, H})
+ x1 · x20 · x3 · x40 · y1 · y2 · y3 · y4 VT = VT ∪ {V Pk } = {{{C, S, R}, {H }}, {{C, R}, {S, H}}} E Pi = E Pi − {(V Pk , V Pi )} = {({{C, S}, {R, H}},
({θk1 , θk2 }, θk3 ) = ({{C, S, R}, {H }}, {C, S, R, H})
{C, S, R, H}), ({{S, R, H}, {C}},
φk (X, Y ) = x1 · x2 · x3 ·
{C, S, R, H})}
x40
· y1 · y2 · y3 · y4
Φ1σ (X, Y ) = Φ1σ (X, Y ) + φk (X, Y ) = x1 · x2 · x3 ·
x40
· y1 · y2 · y3 · y4
(V Pk , V Pi ) = ({{C, S}, {R, H}}, {C, S, R, H}) ({θk1 , θk2 }, θk3 ) = ({{C, S}, {R, H}}, {C, S, R, H})
VT = VT ∪ {V Pk } = {{{C, S, R}, {H }}}
φk (X, Y ) = x1 · x2 · x30 · x40 · y1 · y2 · y3 · y4
E Pi = E Pi − {(V Pk , V Pi )} = {({{C, R}, {S, H}},
Φ1σ (X, Y ) = Φ1σ (X, Y ) + φk (X, Y )
{C, S, R, H}), ({{C, S}, {R, H}},
= x1 · x2 · x3 · x40 · y1 · y2 · y3 · y4
T. Gu et al. / Computer-Aided Design 40 (2008) 411–421
+ x1 · x20 · x3 · x40 · y1 · y2 · y3 · y4 + x1 · x2 · x30 · x40 · y1 · y2 · y3 · y4 VT = VT ∪ {V Pk } = {{{C, S, R}, {H }}, {{C, R}, {S, H}}, {{C, S}, {R, H}}} E Pi = E Pi − {(V Pk , V Pi )} = {({{S, R, H}, {C}}, {C, S, R, H})} (V Pk , V Pi ) = ({{S, R, H}, {C}}, {C, S, R, H}) ({θk1 , θk2 }, θk3 ) = ({{S, R, H}, {C}}, {C, S, R, H}) φk (X, Y ) = x10 · x2 · x3 · x4 · y1 · y2 · y3 · y4 Φ1σ (X, Y ) = Φ1σ (X, Y ) + φk (X, Y ) = x1 · x2 · x3 · x40 · y1 · y2 · y3 · y4 + x1 · x20 · x3 · x40 · y1 · y2 · y3 · y4 + x1 · x2 · x30 · x40 · y1 · y2 · y3 · y4 + x10 · x2 · x3 · x4 · y1 · y2 · y3 · y4 VT = VT ∪ {V Pk } = {{{C, S, R}, {H }}, {{C, R}, {S, H}}, {{C, S}, {R, H}}, {{S, R, H}, {C}}} E Pi = E Pi − {(V Pk , V Pi )} = ∅ VT = (VT − {V Pi }) = {{{C, S, R}, {H }}, {{C, R}, {S, H}}, {{C, S}, {R, H}}, {{S, R, H}, {C}}} Vi = {{C, S, R}, {H }} E Pi = {({{C, R}, {S}, {H }}, {{C, S, R}, {H }}), ({{C, S}, {R}, {H }}, {{C, S, R}, {H }}), ({{S, R}, {C}, {H }}, {{C, S, R}, {H }})} (V Pk , V Pi ) = ({{C, R}, {S}, {H }}, {{C, S, R}, {H }}) ({θk1 , θk2 }, θk3 ) = ({{C, R}, {S}}, {C, S, R}) φk (X, Y ) = x1 · x20 · x3 · x40 · y1 · y2 · y3 · y40 Φ1σ (X, Y ) = Φ1σ (X, Y ) + φk (X, Y ) = x1 · x2 · x3 · x40 · y1 · y2 · y3 · y4 + x1 · x20 · x3 · x40 · y1 · y2 · y3 · y4 + x1 · x2 · x30 · x40 · y1 · y2 · y3 · y4 + x10 · x2 · x3 · x4 · y1 · y2 · y3 · y4 + x1 · x20 · x3 · x40 · y1 · y2 · y3 · y40 VT = VT ∪ {V Pk } = {{{C, S, R}, {H }}, {{C, R}, {S, H}}, {{C, S}, {R, H}}, {{S, R, H}, {C}}, {{C, S}, {R}, {H }}} E Pi = E Pi − {(V Pk , V Pi )} = {({{C, S}, {R}, {H }}, {{C, S, R}, {H }}), ({{S, R}, {C}, {H }}, {{C, S, R}, {H }})} (V Pk , V Pi ) = ({{C, S}, {R}, {H }}, {{C, S, R}, {H }}) ({θk1 , θk2 }, θk3 ) = ({{C, S}, {R}}, {C, S, R}) φk (X, Y ) = x1 · x2 · x30 · x40 · y1 · y2 · y3 · y40 Φ1σ (X, Y ) = Φ1σ (X, Y ) + φk (X, Y ) = x1 · x2 · x3 · x40 · y1 · y2 · y3 · y4 + x1 · x20 · x3 · x40 · y1 · y2 · y3 · y4
417
+ x1 · x2 · x30 · x40 · y1 · y2 · y3 · y4 + x10 · x2 · x3 · x4 · y1 · y2 · y3 · y4 + x1 · x20 · x3 · x40 · y1 · y2 · y3 · y40 + x1 · x2 · x30 · x40 · y1 · y2 · y3 · y40 VT = VT ∪ {V Pk } = {{{C, S, R}, {H }}, {{C, R}, {S, H}}, {{C, S}, {R, H}}, {{S, R, H}, {C}}, {{C, S}, {R}, {H }}, {{C, S}, {R}, {H }}} E Pi = E Pi − {(V Pk , V Pi )} = {({{S, R}, {C}, {H }}, {{C, S, R}, {H }})} (V Pk , V Pi ) = ({{S, R}, {C}, {H }}, {{C, S, R}, {H }}) ({θk1 , θk2 }, θk3 ) = ({{S, R}, {C}}, {C, S, R}) φk (X, Y ) = x10 · x2 · x3 · x40 · y1 · y2 · y3 · y40 Φ1σ (X, Y ) = Φ1σ (X, Y ) + φk (X, Y ) = x1 · x2 · x3 · x40 · y1 · y2 · y3 · y4 + x1 · x20 · x3 · x40 · y1 · y2 · y3 · y4 + x1 · x2 · x30 · x40 · y1 · y2 · y3 · y4 + x10 · x2 · x3 · x4 · y1 · y2 · y3 · y4 + x1 · x20 · x3 · x40 · y1 · y2 · y3 · y40 + x1 · x2 · x30 · x40 · y1 · y2 · y3 · y40 + x10 · x2 · x3 · x40 · y1 · y2 · y3 · y40 VT = VT ∪ {V Pk } = {{{C, S, R}, {H }}, {{C, R}, {S, H}}, {{C, S}, {R, H}}, {{S, R, H}, {C}}, {{C, S}, {R}, {H }}, {{C, S}, {R}, {H }}, {{S, R}, {C}, {H }}} E Pi = E Pi − {(V Pk , V Pi )} = ∅ ...... Recursively, the Boolean function Φ1σ (X, Y ) for the directed graph can be deduced: Φ1σ (X, Y ) = x1 · x2 · x3 · x40 · y1 · y2 · y3 · y4 + x1 · x20 · x3 · x40 · y1 · y2 · y3 · y4 + x1 · x2 · x30 · x40 · y1 · y2 · y3 · y4 + x10 · x2 · x3 · x4 · y1 · y2 · y3 · y4 + x1 · x20 · x3 · x40 · y1 · y2 · y3 · y40 + x1 · x2 · x30 · x40 · y1 · y2 · y3 · y40 + x10 · x2 · x3 · x40 · y1 · y2 · y3 · y40 + x10 · x2 · x30 · x40 · y10 · y2 · y30 · y4 + x1 · x20 · x30 · x40 · y1 · y20 · y3 · y40 + x10 · x20 · x3 · x40 · y10 · y20 · y3 · y4 + x1 · x20 · x30 · x40 · y10 · y20 · y3 · y4 + x10 · x2 · x3 · x40 · y10 · y2 · y3 · y4 + x10 · x20 · x3 · x4 · y10 · y2 · y3 · y4 + x10 · x2 · x30 · x4 · y10 · y2 · y3 · y4 + x1 · x20 · x30 · x40 · y1 · y20 · y3 · y40 + x1 · x20 · x30 · x4 0 · y1 · y2 · y30 · y40
418
T. Gu et al. / Computer-Aided Design 40 (2008) 411–421
+ x10 · x2 · x3 0 · x40 · y10 · y2 · y3 · y40 + x10 · x2 0 · x3 · x40 · y10 · y20 · y3 · y4 + x10 · x2 · x30 · x40 · y10 · y2 · y30 · y4 . The OBDD for the directed graph is presented in Fig. 5(b). 5. Formulating AND/OR graph via OBDDs In an AND/OR graph representation of assembly sequences, the nodes are the subsets of P that characterize stable subassemblies. It is noted that AND/OR graph here contains domain-specific knowledge as following: each hyperarc is associated to a decomposition of the subassembly θi3 that corresponds to its incoming node, and is an ordered pair in which the first element is a node that corresponds to a stable subassembly θi3 , the second element is a set of two nodes {θi1 , θi2 } such that θi3 = θi1 ∪ θi2 . Formally, the AND/OR graph of feasible assembly sequences of an assembly, whose set of parts is P = { p1 , p2 , . . . , pn }, is the AND/OR graph:
(a) AND/OR graph.
AG = (S P , D P ) S P = {θk |θk ∈ 2 P } D P = {({θi1 , θi2 }, θi3 )|θi1 ∈ S P , θi2 ∈ S P , θi3 ∈ S P , θi3 = θi1 ∪ θi2 , θi1 ∩ θi2 = ∅}.
(11)
Essentially, each hyperarc corresponds to one geometrically and mechanically feasible assembly task characterized by ({θi1 , θi2 }, θi3 ), and thus we can create the symbolic OBDD formulation of the AND/OR graph through representing the hyperarcs as Boolean characteristic functions. In terms of the different situations of subassemblies included in the hyperarc ({θi1 ,θi2 }, θi3 ), we develop the Boolean functions in three ways as follows: (1) When both θi1 and θi2 consist of one single part, i.e., θi1 = { pk } and θi2 = { p j }, the corresponding assembly task transforms the configuration of the parts from state S0 = { p1 , p2 , . . . , pn } to state {S0 − { pk , p j }} ∪ {{ pk , p j }}, and can be formulated by the characteristic function 0 0 x10 · x20 · · · · · xn0 · y10 · y2 0 · . . . · yk−1 · yk · yk+1 · · · · · y 0j−1
· y j · y 0j+1 · · · · · yn0 ; (2) When either θi1 or θi2 consists of one single part, but not both, supposed that |θi1 | > 2 and θi2 | = { pk }, the corresponding assembly task transforms the configuration of the parts from state {S0 − θi1 } ∪ {θi1 } to state {S0 − θi3 } ∪ {θi3 }, and can be formulated by the characteristic function γ1 · γ2 · · · · · γk · · · · · γn · µ1 · µ2 · · · · · µk · · · · · µn in which γ1 · γ2 · · · · · γk · · · · · γn and µ1 · µ2 · · · · · µk · . . . · µn correspond to xk ’s appearance and yk ’s appearance in the binary subassembly vectors of subassemblies θi1 and θi3 respectively. If pk ∈ θi1 , then γk = xk , else γk = xk0 ; If pk ∈ θi3 , then µk = yk , else µk = yk0 ; (3) When there are parts more than one in both θi1 and θi2 , i.e. |θi1 | > 2 and |θi2 | > 2, the corresponding assembly task
(b) OBDD. Fig. 6. OBDD for AND/OR graph.
transforms the configuration of the parts from state {S0 − θi1 } ∪ {θi1 } or state {S0 − θi2 } ∪ {θi2 } to state {S0 − θi3 } ∪ {θi3 }, and can be formulated by the characteristic function γ11 · γ12 · · · · · γ1k · · · · · γ1n · µ1 · µ2 · · · · · µi · · · · · µn + γ21 · γ22 · · · · · γ2k · · · · · γ2n · µ1 · µ2 · · · · · µi · · · · · µn , in which γ11 · γ12 · · · · · γ1k · · · · · γ1n , and γ21 · γ22 · · · · · γ2k · · · · · γ2n µ1 · µ2 · · · · · µk · · · · · µn correspond to xk ‘s appearance in the binary subassembly vectors of subassemblies θi1 and θi2 respectively, and µ1 · µ2 · · · · · µk · · · · · µn corresponds to yk ‘s appearance in the binary subassembly vector of subassembly θi3 . If pk ∈ θi1 , then γ1k = xk , else γ1k = xk 0; If pk ∈ θi2 , then γ2k = xk , else γ2k = xk0 ; If pk ∈ θi3 , then µk = yk , else µk = yk0 . For example, Fig. 6(a) gives the AND/OR graph of all the assembly sequences for the assembly shown in Fig. 3. The hyperarcs ({{C}, {S}}, {C, S}), ({{S}, {R}}, {S, R}), ({{R}, {H }}, {R, H}) and ({{S}, {H }}, {S, H}) belong to the first case, and can be formulated by the characteristic functions: x10 · x20 · x30 · x40 · y1 · y2 · y30 · y40 x10 · x20 · x30 · x40 · y10 · y2 · y3 · y40 x10 · x20 · x30 · x40 · y10 · y20 · y3 · y4 x10 · x20 · x30 · x40 · y10 · y2 · y30 · y4 .
419
T. Gu et al. / Computer-Aided Design 40 (2008) 411–421
The hyperarcs ({{C, S}, {R}}, {C, S, R}), ({{S, R}, {C}}, {C, S, R}), ({{S, R}, {H }}, {S, R, H}), ({{R, H}, {S}}, {S, R, H}), ({{S, H}, {R}}, {S, R, H}), ({{C, S, R}, {H }}, {C, S, R, H}) and ({{S, R, H}, {C}}, {C, S, R, H}) belong to the second case, and can be formulated by the characteristic functions: x1 · x2 · x30 · x40 · y1 · y2 · y3 · y40 x10 · x2 · x3 · x40 · y1 · y2 · y3 · y40 x10 · x2 · x3 · x40 · y10 · y2 · y3 · y4 x10 · x20 · x3 · x4 · y10 · y2 · y3 · y4 x10 · x2 · x30 · x4 · y10 · y2 · y3 · y4 x1 · x2 · x3 · x40 · y1 · y2 · y3 · y4 x10 · x2 · x3 · x4 · y1 · y2 · y3 · y4 .
Fig. 7. A gear pump.
The hyperarc ({{C, S}, {R, H}}, {C, S, R, H}) belongs to the third case, and can be formulated by the characteristic function: x1 · x2 · x30 · x40 · y1 · y2 · y3 · y4 + x10 · x20 · x3 · x4 · y1 · y2 · y3 · y4 . The Boolean characteristic function of the AND/OR graph can be generated by Boolean disjunctions of these functions. Φ1σ (X, Y ) = x10 · x20 · x30 · x40 · y1 · y2 · y30 · y40 + x10 · x20 · x30 · x40 · y10 · y2 · y3 · y40 + x10 · x20 · x30 · x40 · y10 · y20 · y3 · y4 + x10 · x20 · x30 · x40 · y10 · y2 · y30 · y4 + x1 · x2 · x30 · x40 · y1 · y2 · y3 · y40 + x10 · x2 · x3 · x40 · y1 · y2 · y3 · y40 + x10 · x2 · x3 · x40 · y10 · y2 · y3 · y4 + x10 · x20 · x3 · x4 · y10 · y2 · y3 · y4 + x10 · x2 · x30 · x4 · y10 · y2 · y3 · y4 + x1 · x2 · x3 · x40 · y1 · y2 · y3 · y4 + x1 · x2 · x30 · x40 · y1 · y2 · y3 · y4 + x10 · x20 · x3 · x4 · y1 · y2 · y3 · y4 + x10 · x2 · x3 · x4 · y1 · y2 · y3 · y4 . The OBDD for the AND/OR graph is shown in Fig. 6(b). Fig. 8. An electrical controller.
6. Experiments We implement the symbolic OBDD scheme in windows XP and software package CUDD [16]. The storage efficiency of symbolic OBDD formulation has been tested, and compared with directed graph and AND/OR graph. We choose many practical assemblies with different part numbers. For example, we undertake the test on a gear pump shown in Fig. 7. All of its feasible assembly sequences are generated using Gottipolu and Ghosh’s technique [1], and represented as directed graph and OBDDs respectively. The correctness and completeness of OBDD formulation are verified by withdrawing feasible sequence from the directed graph and determining if it is included in the OBDD repeatedly, and vice versa. We also do the test on an electrical controller
shown in Fig. 8. All of its feasible assembly sequences are also generated similarly, and formulated as AND/OR graph and OBDDs respectively. The correctness and completeness of OBDD formulation are evaluated through withdrawing feasible sequence from the AND/OR graph and determining if it is included in the OBDD repeatedly, and vice versa. Tables 1 and 2 present some experimental results, which show that symbolic formulation outperforms both directed graph and AND/OR graph in storage efficiency, especially on complex assemblies. 7. Conclusions The choice of representation for assembly sequences has been crucial in assembly sequence planning. AND/OR graphs
420
T. Gu et al. / Computer-Aided Design 40 (2008) 411–421
Table 1 Comparison of OBDD with directed graph The number of parts in assembly
The number of assembly states
The number of assembly tasks
Storage space Directed graph
OBDD
8
363 875 1365
3107 7199 10615
54.2 kB 126.2 kB 187.2 kB
26.9 kB 82.2 kB 132.1 kB
10
591 1116 1666
6595 11423 16389
112.3 kB 195.9 kB 282.1 kB
53.5 kB 116.1 kB 181.7 kB
12
847 1388 2624
11200 17211 30676
188.2 kB 290.6 kB 520.3 kB
87.5 kB 159.5 kB 324.1 kB
13
1159 1663 2452
17778 24466 33982
295.9 kB 408.3 kB 569.3 kB
122.9 kB 209.7 kB 318.0 kB
16
3543 6781 3562
97727 174176 70343
1582.3 kB 2.76 MB 1.13 MB
535.4 kB 1.34 MB 544.5 kB
20
2902 3967 6300
70391 92026 137746
1.12 MB 1.46 MB 2.20 MB
439.1 kB 672.2 kB 1.2 MB
Table 2 Comparison of OBDD with AND/OR graph The number of parts in assembly 6
7
8
10
16
20
The number of nodes 61 59 63 112 123 125 189 239 255 1023 1011 1022 2040 2037 2047 4081 4094 4094
and directed graphs are two popular representations. However, they face the same challenge that increasing parts count renders it staggeringly difficult and even impossible to represent all the sequences individually. We present the novel symbolic OBDD scheme for representing all the feasible assembly sequences, and explain the equivalences between them. Experiments give the proof that symbolic formulation outperforms both directed graph and AND/OR graph in storage efficiency, especially on complex assemblies. Moreover, the operations in generating and evaluating assemble sequence can be implemented using OBDDs, which does not require explicit enumeration of assemble states and subassemblies and can handle many reasoning executions in one manipulation. It can be expected that whatever can be done using AND/OR graph and directed
The number of hyperarcs 157 170 262 385 605 790 703 1739 2676 26710 19214 17033 50072 61892 76990 150293 194887 233803
Storage space AND/OR graph
OBDD
2.93 kB 3.12 kB 4.59 kB 6.89 kB 10.41 kB 13.32 kB 12.46 kB 32.16 kB 43.80 kB 425.34 kB 308.12 kB 266.14 kB 782.38 kB 967.06 kB 1.10 MB 2.32 MB 2.97 MB 3.60 MB
2.95 kB 3.09 kB 2.67 kB 6.84 kB 7.64 kB 6.30 kB 13.83 kB 17.52 kB 13.98 kB 67.48 kB 124.78 kB 129.27 kB 354.78 kB 332.52 kB 239.27 kB 0.99 MB 929.97 kB 603.72 kB
graph can be done using OBDD much better in both storage and computational efficiency. Therefore, the symbolic OBDD representation of assembly sequences can expand the assembly sequence planner to large and complex assemblies. We also developed a prototype tool for generating geometrically feasible assembly sequences using Microsoft Visual C++. Some assemblies, such as ball-pen and gearbox, have been tested. We generate the AND/OR graph of their feasible sequences by traditional technique [1], and create the OBDDs of their feasible sequences by the prototype tool. Furthermore, we withdraw feasible sequence from the AND/OR graph, and determine if it is included in the OBDDs repeatedly, and vice versa. It is shown that the prototype tool can generate geometrically feasible assembly
T. Gu et al. / Computer-Aided Design 40 (2008) 411–421
sequences correctly and completely. Theoretically, this scheme can handle only assembly planning where there are collisionfree paths between parts. However, we could manipulate these cases through setting proper subassemblies artificially in our prototype tool. We will discuss these related issues in the forthcoming article. The assembly knowledge models of liaison graph and translation functions can also be transformed into OBDD-based forms, and the geometrically feasible assembly sequences can be evaluated and generated symbolically and implicitly using efficient OBDD structures and manipulations. It is desirable that develop more efficient symbolic algorithms to evaluate and optimize assembly sequences. Acknowledgments The authors are very grateful to the anonymous reviewers for their helpful comments. This work has been supported by National Natural Science Foundation of China (Grant No. 60563005) and Natural Science Foundation of Guangxi Province. References [1] Gottipolu RB, Ghosh K. A simplified and efficient representation for evaluation and selection of assembly sequences. Computers in Industry 2003;50(3):251–64. [2] Homem de Mello LS, Sanderson AC. Representation of mechanical assembly sequences. IEEE Transactions on Robotics and Automation 1991;7(2):211–27. [3] Prenting T, Battaglin R. The precedence diagram: A tool for analysis in assembly line balancing. Journal of Industrial Engineering 1964;15(4): 208–13.
421
[4] Warrats JJ, Bonschancher N, Bronsvoort WF. A semiautomatic sequence planner. In: Proceedings of IEEE international conference on robotics and automation. 1992. p. 2431–8. [5] Bourjault A. Contribution a` une approche m´ethodologique de l’assemblage automatis´e: e´ laboration automatique des s´equences ´ op´eratoires. Th`ese d’ Etat. France: Universit´e de Franche-Comt´e, Besancon; 1984. [6] De Fazio TL, Whitney DE. Simplified generation of all mechanical assembly sequences. IEEE Journal of Robotics and Automation 1987;RA3(6):640–58. [7] Gottipolu RB, Ghosh K. An integrated approach to the generation of assembly sequence. International Journal of Computer Applications in Technology 1995;8(3–4):125–38. [8] Homem de Mello LS, Sanderson AC. AND/OR graph representation of assembly plans. IEEE Transactions on Robotics and Automation 1990; 6(2):188–99. [9] Bryant RE. Graph-based algorithms for Boolean function manipulation. IEEE Transaction on Computer 1986;35(8):677–91. [10] Bryant RE. Symbolic Boolean manipulation with ordered binary decision diagrams. ACM Computing Surveys 1992;24(3):293–318. [11] Sieling D, Drechsler R. Reduction of OBDDs in linear time. Information Processing Letters 1993;48(1):139–44. [12] Sieling D, Wegener I. Graph driven BDDs — a new data structure for Boolean functions. Theoretical Computer Science 1995;141:283–310. [13] Hachtel GD, Somenzi F. A Symbolic algorithm for maximum flow in 0–1 networks. Formal methods in system design 1997;10(2/3):207–19. [14] Tianlong Gu, Zhoubo Xu. The symbolic algorithms for maximum flow in networks. Computers & Operations Research 2007;34(2):799–816. [15] Yanru Zhong, Meifa Huang, Tianlong Gu. Storage and manipulations of directed graph based on OBDD. In: Proceedings of SPIE – the sixth international symposium on instrumentation and control technology: Sensors, automatic measurement, control, and computer simulation. vol. 6358. 2006. p. 531–5. [16] Somenzi F. CUDD: CU Decision Diagram Package Release 2.3.1. http://vlsi.Colorado.edu/.