• No results found

3.4 Analyzing Dynamic Assembly Structures

3.4.4 Computation of Part Number Sequences

Dynamic assembly structures can be considered from two different perspectives. An assembly developer has the top-to-bottom perspective. First the different assembly variants of the root structure nodes are developed. Later, in the lower levels, the con- crete parts of which the variants consist are developed. In contrast, the bottom-to-top perspective is important for the production logistics, e.g., in how many variants occurs a certain part, or, if a part cannot be delivered any more, which (sub-)assembly variants are affected?

The following use case may occur in practice: A physical part, represented by a material node of a leaf node, is no longer available because the responsible component supplier has difficulties in production. The important question arising is, which (sub-)assemblies are affected? Which material nodes of the root assembly node are using this part? To step through all levels by hand or testing some example configurations is tedious and error-prone.

We call the list of all affected material nodes part number sequence and give a formal definition in Definition 35. Afterwards we present a SAT-based algorithm to compute all part number sequences automatically.

Definition 35. (Part Number Sequence) Let D be a dynamic assembly structure em-

bedded in BOM B. Let t ∈ types(D) be a product type. A part number sequence is a se- quence of material nodes identifiers (ident(m1), . . . , ident(mk)) for material nodes m1 ∈

matNodes(N1), . . . , mk∈ matNodes(Nk) and structure nodes N1, . . . , Nk∈ strNodes(B)

such that the following conditions hold:

a) (Parent-Child-Relationship) For each i ∈ {2, . . . , k} holds: mi is a material node

of a parent structure node of material node mi−1, i.e., Ni−1∈ children(Ni).

b) (Uniqueness of Parent) For each i ∈ {2, . . . , k} holds that (parent) material node

mi is unique w.r.t. (child) material node mi−1 (see Definition 33).

Figure 3.15: Illustration of several (in-)correct cases of part number sequences Figure 3.15 illustrates different cases of part number sequences of a DAS. The set of models of the material nodes is represented by Venn diagrams. Case a) shows the correct behavior, i.e., the set of models of the respective child material node contains the set of models of a parent material node. Thus, the part number sequence does not stop. Case b) and c) show incorrect behavior, i.e., the set of models of the child material node mc

(resp. m0c) does not contain the set of models of the parent material node m (resp. mc).

Therefore, the part number sequence stops intermediately.

Example 24 shows a simplified example of part number sequences of a DAS.

Example 24. (Part Number Sequences) We reconsider the example dynamic assem-

bly structure from Example 21. To simplify the example we do not take the product description formula into account.

Table 3.12 shows the part number sequences for all leaf material nodes. Material node 501 results in two part number sequences and both part number sequences are reaching level 0 without stoppage. The same behavior can be considered for material node 601. Material node 502 yields in one part number sequence and is reaching level 0, too.

In contrast, the part number sequences of material nodes 503, 602, 701 and 702 are all stopped at the beginning for various reasons. For example, material node 503 is not constructible with any material node of structure node 40 and thus, is an orphan (cf. Example23). Since material node 602 is also an orphan, the part number sequence is stopped, too. The stoppage for material node 701 and 702 is different. Here, both material nodes are constructible and entailed by material node 301, but parent material node 301 is ambiguous (cf. Example 22).

Table 3.12: Part number sequences for leaf material nodes Level Mat. Node ID Level Mat. Node ID Level Mat. Node ID

2 501 1 401 0 301 2 501 1 401 0 302 2 502 1 402 0 303 2 503 – – – – 2 601 1 401 0 301 2 601 1 401 0 302 2 602 – – – – 1 701 – – – – 1 702 – – – –

When we assume the ideal case that a dynamic assembly structure is both unique and complete, then we can find part number sequences for each material node on any level which end in the root node.

Proposition 9. Let D be an unique and complete dynamic assembly structure. Let

m ∈ matNodes(N ) be a material node of a structure node N ∈ strNodes(D). Then there is at least one part number sequence which starts by m and ends with a material node of the root node of D.

Proof. Proof by induction over the level of material node m.

Induction Basis: We assume level(m) = 0. Since D is unique the structure node N contains only satisfiable material nodes. Therefore, there is a part number sequence (m).

Induction Step: We assume the statement holds for material nodes of level n. We assume level(m) = n + 1. Since material node parent(N ) is complete, there is at least one material node mp ∈ parent(N ) such that con(m) ∧ con(mp) is satisfiable. Since

parent(N ) is unique, the material node mp has to be unique w.r.t. material node n.

Then there exists a part number sequence starting by m with and a transition to mp:

(m, mp, . . .). By the induction assumption there is at least one part number sequence

for mp with level(mp) = n starting with mp and resulting in a material node of the

root node of D. Thus, we found at least one part number sequence beginning with m and resulting in a material node of the root node of D.

In practice however, we cannot assume a dynamic assembly structure to be unique and complete for any assembly node. Therefore, some part number sequences may stop as seen in Example 24.

Algorithm 3.14: Computation of all part number sequences of a material node:

computePartNumberSequences(m)

Input: Material node m ∈ matNodes(N ) of a structure node N ∈ strNodes(D) of

a DAS D

Output: A mapping I from the product type to a set of part number sequences

beginning with material node m

1 I ← ∅

2 foreach product type t ∈ types(D) do

3 I ← I ∪ {(t, computePartNumberSequences-rec(t, m, N ))} 4 return I

5 func computePartNumberSequences-rec(t, m, N ) : C 6 C ← ∅

7 U ← computeUniqueParentMaterialNodes(t, m, N) 8 foreach material node mp ∈ U do

9 parentSequences ← computePartNumberSequences-rec(t, mp, parent(N )) 10 C ← C ∪ ({m} × parentSequences)

11 return C

Algorithm3.14shows the algorithm for computing all part number sequences for a given material node (not necessarily from a leaf structure node). First, the result set I is initial- ized (Line 1). The algorithm iterates over the covered product types types(D) (Line 2) and proceeds with the computation for each product type t ∈ types(D) separately. The subroutine computePartNumberSequences-rec is called and the result is added to the final result set I (Line 3). The subroutine computes the set of part number sequences for product type t and a material node m from structure node N . First, the subroutine initializes set C (Line 6), then all parent material nodes which are unique with respect to

m are extracted by the help algorithm computeUniqueParentMaterialNodes (Line 7).

Afterwards the subroutine iterates over all unique parent material nodes mp ∈ U to

build part number sequences starting with m and continuing with mp. The subroutine

recursively calls itself (Line 9) to compute all part number sequences beginning with mp

and appends them.

Algorithm 3.15 shows the help algorithm to compute the set of parent material nodes which are unique w.r.t. a given material node m. First the set U is initialized (Line 1). Then a new solver object is created (Line 2) and ϕPD(t) is added (Line 3). Every parent

material node mp ∈ matNodes(parent(N )) is tested for satisfiability, tested entailment

con(mp) → con(m) and tested for unsatisfiability with any other node (Line 5). If all

three tests hold the parent material node mp is added the result set (Line 6). The result

Algorithm 3.15: Computation of all unique parent material nodes for a material

node: computeUniqueParentMaterialNodes(t, m, N )

Input: A product type t ∈ types(D), a material node m ∈ matNodes(N ) and a

structure node N ∈ strNodes(D) of a DAS D

Output: A set U of parent material nodes which are unique and select m

1 U ← ∅

2 solver ← new inc/dec CDCL SAT solver

3 solver. add(ϕPD(t))

4 foreach material node mp ∈ matNodes(parent(N )) do

5 if solver. sat(con(mp)) and solver. entails(con(mp), con(m)) and

solver. unsatcon(mp) ∧Wm0∈matNodes(N )\{m}con(m0)



then

6 U ← U ∪ {mp} 7 return U

There are various possible reasons why a part number sequence may stop. Among others the following mistakes in the product documentation can cause a stoppage of a part number sequence:

a) The parent material node is ambiguous. b) The child material node is incomplete.

For the various possible reasons for an ambiguous resp. incomplete assembly node, see the two subsections before. A final answer about the correct reason(s) can only be made by a documentation expert of the specific division.

We performed experimental evaluations for all presented algorithms for the computation of part number sequences. See Subsection3.4.6 for the results.