Keywords

1 Introduction

The current state of the industry is characterized by an increasing level of automation. Use of modern systems allows building and analyzing models based on process logs. However, the process of analyzing models remains a rather difficult task, since it depends on the goals and objectives of the analysis, as well as the modeling method.

Processes are a set of interrelated operations and have a complex structure. When analyzing and optimizing processes, it is often important to determine the type of structure to which the considered part of the process belongs. In this regard, it is necessary to develop methods for identifying process structures and, in the future, methods for their optimization.

2 Overview of Main Approaches to Structural Analysis

Issues related to the structure of the system can be resolved both at the stage of model creation by building special structural models, and at the stage of models analysis by carrying out structural analysis.

Structural modeling involves modeling the organizational structure of systems and subsystems, such as: informational, organizational, functional, management, i.e. modeling the composition and relations between the elements [1]. A detailed analysis of possible methods for business processes modeling is presented in [2]. Special aspects of production processes within business processes and possible options for application of some models of production lines are considered in [3]. A large number of researchers suggest using the SADT methodology [4, 5] based on the IDEF [6,7,8] or BPMN notation and its extensions [9,10,11] for structural modeling. A comparative analysis of these approaches is presented in [12]. At the same time, methods have been developed to automate the creation of such models [13,14,15], which allows in the future also to automate the analysis of these models and the synthesis of new solutions.

Structural analysis can be applied for different types of models. Its main purpose is to search for static characteristics of the system related to the interconnections of its elements and subsystems at various levels, as well as to classify structures that are important for decision-making. Depending on the type of the studied models and on the selected classification parameter, the approaches to structural analysis may also differ [16,17,18]. It is shown in [19] that one of the promising methods for modeling production processes is mathematical apparatus of Petri nets and their extensions. Methods for structural analysis of Petri nets are discussed in [20,21,22]. However, these analyzes do not consider the possibility of restructuring the net to execute a series of steps in parallel. Therefore, it is necessary to develop your own algorithms that allow you to define the key structures that affect the possibility and the choice of the method of parallel organization of the process.

3 Extended Petri Nets with Semantic Relations as an Apparatus for Simulation of Distributed Manufacturing Processes

The simplest extended Petri net with semantic relations (ExPNSR) can be specified by the following set:

$$ {\Pi } = \left\{ {A,\left\{ {Z^{C} ,\tilde{R}^{C} ,\hat{R}^{C} } \right\},\left\{ {Z^{S} ,\tilde{R}^{S} ,\hat{R}^{S} } \right\}} \right\}, $$

where \(A = \left\{ {a_{1\left( a \right)} , \ldots , a_{j\left( a \right)} , \ldots ,a_{J\left( a \right)} } \right\}\) – a finite set of places; \(Z^{C} = \left\{ {z_{{1\left( {z^{C} } \right)}}^{C} , \ldots ,z_{{j\left( {z^{C} } \right)}}^{C} , \ldots ,z_{{J\left( {z^{C} } \right)}}^{C} } \right\}\) – a finite set of transition by control relations; \(\tilde{R}^{C}\) – an incidence matrix of size \(J\left( a \right) \times J\left( {z^{C} } \right)\) that maps the set of places to a set of transitions by control relations; \(\hat{R}^{C}\)– an incidence matrix of size \(J\left( {z^{C} } \right) \times J\left( a \right)\) that maps the set of transitions by control relations to a set of places; \(Z^{S} = \left\{ {z_{{1\left( {z^{S} } \right)}}^{S} , \ldots ,z_{{j\left( {z^{S} } \right)}}^{S} , \ldots ,z_{{J\left( {z^{S} } \right)}}^{S} } \right\}\) – a finite set of transition by semantic relations; \(\tilde{R}^{S}\) – an incidence matrix of size \(J\left( a \right) \times J\left( {z^{S} } \right)\) that maps the set of places to a set of transitions by semantic relations for token; \( \hat{R}^{S}\) – an incidence matrix of size \(J\left( {z^{S} } \right) \times J\left( a \right)\) that maps the set of transitions by semantic relations to a set of places for token.

In addition, the following transition functions are set:

  • input function of transitions by control relations:

    $$ I_{A} \left( {Z^{C} } \right) = \left\{ {I_{A} \left( {z_{{1\left( {z^{C} } \right)}}^{C} } \right), \ldots ,I_{A} \left( {z_{{j\left( {z^{C} } \right)}}^{C} } \right), \ldots ,I_{A} \left( {z_{{J\left( {z^{C} } \right)}}^{C} } \right)} \right\}; $$
  • output function of transitions by control relations:

    $$ O_{A} \left( {Z^{C} } \right) = \left\{ {O_{A} \left( {z_{{1\left( {z^{C} } \right)}}^{C} } \right), \ldots ,O_{A} \left( {z_{{j\left( {z^{C} } \right)}}^{C} } \right), \ldots ,O_{A} \left( {z_{{J\left( {z^{C} } \right)}}^{C} } \right)} \right\}; $$
  • input function of transitions by semantic relations:

    $$ I_{A} \left( {Z^{S} } \right) = \left\{ {I_{A} \left( {z_{{1\left( {z^{S} } \right)}}^{S} } \right), \ldots ,I_{A} \left( {z_{{j\left( {z^{S} } \right)}}^{S} } \right), \ldots ,I_{A} \left( {z_{{J\left( {z^{S} } \right)}}^{S} } \right)} \right\}; $$
  • output function of transitions by semantic relations:

    $$ O_{A} \left( {Z^{S} } \right) = \left\{ {O_{A} \left( {z_{{1\left( {z^{S} } \right)}}^{S} } \right), \ldots ,O_{A} \left( {z_{{j\left( {z^{S} } \right)}}^{S} } \right), \ldots ,O_{A} \left( {z_{{J\left( {z^{S} } \right)}}^{S} } \right)} \right\}. $$

More information about the mathematical apparatus of ExPNSR is presented in [23].

Between the places of the net, the control precedence relation is fulfilled. Place \(a_{i}\) is considered to be preceding by control relations for \(a_{j}\) (specified as \(a_{i} <_{C} a_{j}\)) if there is such a control path from the starting place of the process \(a_{S}\) to place \(a_{j}\) that it includes place \(a_{i}\).

For the starting place of the process, it is true:

$$ \exists z_{{i\left( {z^{C} } \right)}}^{C} \left( {I_{A} \left( {z_{{i\left( {z^{C} } \right)}}^{C} } \right) = a_{S} } \right) \wedge {\nexists }z_{{j\left( {z^{C} } \right)}}^{C} \left( {O_{A} \left( {z_{{j\left( {z^{C} } \right)}}^{C} } \right) = a_{S} } \right). $$

4 Structures of ExPNSR

In the process model, built in accordance with the definition of the ExPNSR, three types of structures can be distinguished, formed as a result of various combinations of places and control transitions:

  • linear section (Ln);

  • cycle (C);

  • branching (Br).

The linear section (Fig. 1) is characterized by a sequence of linear control structures, implying the execution of some operation immediately after the completion of the previous one.

Fig. 1.
figure 1

An example of a linear section.

Cycles imply a return by control to the initial place \({a}_{cB}\), the presence of a condition (branch-place) \({a}_{cond}\), which takes control out of the cycle, and the body of the cycle (Cp), which contains a sequence of linear sections, branches and other cycles. Among the cycles, there are cycles with a post-condition (Fig. 2a) and cycles with a pre-condition (Fig. 2b).

Fig. 2.
figure 2

Examples of cycles: a - with a post-condition; b - with a pre-condition.

Cycles are characterized by the following:

$$ \begin{gathered} \exists z_{{i\left( {z^{C} } \right)}}^{C} \left( {O_{A} \left( {z_{{i\left( {z^{C} } \right)}}^{C} } \right) = a_{cB} \wedge \;I_{A} \left( {z_{{i\left( {z^{C} } \right)}}^{C} } \right) = a_{i\left( a \right)} } \right)|a_{cB} <_{C} a_{i\left( a \right)} ; \hfill \\ \left| {Z_{Oi}^{C} } \right| >1\;\forall z_{{i\left( {z^{C} } \right)}}^{C} \in Z_{Oi}^{C} \;\left( {I_{A} \left( {z_{{i\left( {z^{C} } \right)}}^{C} } \right) = a_{cond} } \right) \wedge \;\;\;{\nexists }Br_{i} \;\;\left( {a_{xB} = a_{cond} } \right); \hfill \\ \exists z_{{i\left( {z^{C} } \right)}}^{C} \left( {I_{A} \left( {z_{{i\left( {z^{C} } \right)}}^{C} } \right) = a_{cond} \wedge O_{A} \left( {z_{{i\left( {z^{C} } \right)}}^{C} } \right) = a_{out} } \right)|a_{out} \notin Cp \hfill \\ \wedge a_{out} \ne a_{cB} . \hfill \\ \end{gathered} $$

Branch (Fig. 3) is characterized by the presence of a condition describing options for actions according to its result, and the number of such options can vary from 2 to n, and contains the initial place the final place \(a_{xe}\), as well as branches \(B_{xi}\), \(i = \overline{2,n}\). Each branch can contain a sequence of linear sections, other branches and cycles. Branches are characterized by the following:

$$ \left| {Z_{Oi}^{C} } \right| > 1\;\forall z_{{i\left( {z^{C} } \right)}}^{C} \in Z_{Oi}^{C} \;\left( {I_{A} \left( {z_{{i\left( {z^{C} } \right)}}^{C} } \right) = a_{xB} } \right) \wedge . $$
$$ {\nexists }C_{i} \;\left( {a_{cB} = a_{xB} } \right) \wedge \;\;\;{\nexists }z_{{j\left( {z^{C} } \right)}}^{C} \in Z_{Oi}^{C} \;\left( {O_{A} \left( {z_{{j\left( {z^{C} } \right)}}^{C} } \right) = a_{i\left( a \right)} } \right)|a_{i\left( a \right)} <_{C} a_{xB} . $$
Fig. 3.
figure 3

Example of branch.

5 Structural Analysis of ExPNSR

To analyze the structure of the ExPNSR, it is necessary to build a model of the selected process. For this, each stage of the process is transformed into a place of the net, and the sequence of operations is specified by forming control transitions between places. The formation of semantic transitions, that is, the indication of material and informational dependencies between the elements of the process, is not required at this stage.

The constructed net is analyzed in the following order:

  • Search for the starting place of the net.

  • Search for cycles: determination of initial places.

  • Finding branches: determining initial places and forming branches.

  • Determination of conditions for cycles and nested cycles with the same initial place.

  • Filling the contents of the branches of each of the branches.

  • Filling the body of each of the cycles.

Of the described stages, the most difficult stage is the stage of determining the conditions of the cycles, since at this stage the nesting of cycles with the same initial place is also determined. Let's consider this stage in more detail.

Determination of conditions for cycles and nesting with the same initial place is performed as follows for each not yet considered loop \(C_{i\left( C \right)}\) using the following notation:

  • Conds – a set of places that are possible conditions for \(C_{i\left( C \right)}\).;

  • \(Z_{O}\)– a set of transitions to which \(a_{{cB_{i\left( C \right)} }}\) leads;

  • eC - the set of already considered cycles, the beginning of which coincides with \(C_{i\left( C \right)}\);

  • parC - the set of cycles in which can be nested.

  1. 1.

    Determine the set \(Z_{O}\):

  1. 2.

    Determine the set Conds:

  1. 3.

    If \(\left| {Conds} \right| = 1\), then there is no nesting with the same starting place, go to step 3, otherwise go to step 4.

  1. 4.

    If \(\left| {Z_{O} } \right| > 1\), then a cycle with a precondition is found:

    $$ \begin{gathered} a_{{cond_{i\left( C \right)} }} = a_{{cB_{i\left( C \right)} }} ; \hfill \\ a_{{out_{i\left( C \right)} }} = a_{i\left( a \right)} |\exists z_{{i\left( {Z^{C} } \right)}}^{C} (I_{A} \left( {z_{{i\left( {Z^{C} } \right)}}^{C} } \right) = a_{{cB_{i\left( C \right)} }} \wedge \hfill \\ O_{A} \left( {z_{{i\left( {Z^{C} } \right)}}^{C} } \right) = a_{i\left( a \right)} ) \wedge a_{i\left( a \right)} \notin Cp_{i\left( C \right)} ; \hfill \\ \end{gathered} $$

else, a cycle with a postcondition is found:

$$ \begin{gathered} a_{{cond_{i\left( C \right)} }} = Conds_{0} ; \hfill \\ a_{{out_{i\left( C \right)} }} = a_{i\left( a \right)} | \exists z_{{i\left( {Z^{C} } \right)}}^{C} (I_{A} \left( {z_{{i\left( {Z^{C} } \right)}}^{C} } \right) = a_{{cB_{i\left( C \right)} }} \wedge \hfill \\ O_{A} \left( {z_{{i\left( {Z^{C} } \right)}}^{C} } \right) = a_{i\left( a \right)} ) \wedge a_{i\left( a \right)} \ne a_{{cB_{i\left( C \right)} }} . \hfill \\ \end{gathered} $$

complete the consideration of the cycle.

  1. 5.

    Determine the set eC:

    $$ eC = \left\{ {C_{j\left( C \right)} } \right\}|a_{{cond_{j\left( C \right)} }} = a_{{cB_{i\left( C \right)} }} \vee a_{{cond_{j\left( C \right)} }} \in Conds. $$
  1. 6.

    If \(\left| {eC} \right| = 0\) and \(\left| {Z_{O} } \right| > 1\), then the considered cycle is senior with the precondition:

    $$ \begin{gathered} a_{{cond_{i\left( C \right)} }} = a_{{cB_{i\left( C \right)} }} ; \hfill \\ a_{{out_{i\left( C \right)} }} = a_{i\left( a \right)} |\exists z_{{i\left( {Z^{C} } \right)}}^{C} (I_{A} \left( {z_{{i\left( {Z^{C} } \right)}}^{C} } \right) = a_{{cB_{i\left( C \right)} }} \wedge \hfill \\ O_{A} \left( {z_{{i\left( {Z^{C} } \right)}}^{C} } \right) = a_{i\left( a \right)} ) \wedge a_{i\left( a \right)} \notin Cp_{i\left( C \right)} ; \hfill \\ \end{gathered} $$

complete the consideration of the cycle, else go to step 6.

  1. 7.

    Removing extra places from Conds:

    $$ \begin{gathered} Conds = Conds\backslash a_{i\left( a \right)} |\left| {Z_{Or} } \right| = 1 \forall z_{{i\left( {Z^{C} } \right)}}^{C} \in Z_{Or} (I_{A} \left( {z_{{i\left( {Z^{C} } \right)}}^{C} } \right) = a_{i\left( a \right)} ) \hfill \\ Conds = Conds\backslash a_{i\left( a \right)} |\exists C_{j\left( C \right)} \left( {a_{{cond_{j\left( C \right)} }} = a_{i\left( a \right)} } \right) \hfill \\ \end{gathered} $$
  1. 8.

    Completing the formation of the cycle:

    $$ \begin{gathered} a_{{cond_{i\left( C \right)} }} = a_{i\left( a \right)} |a_{i\left( a \right)} \in Conds \wedge \hfill \\ \forall a_{j\left( a \right)} \in Conds\left( {a_{j\left( a \right)} <_{C} a_{i\left( a \right)} } \right); \hfill \\ a_{{out_{i\left( C \right)} }} = a_{i\left( a \right)} |\exists z_{{i\left( {Z^{C} } \right)}}^{C} I_{A} \left( {z_{{i\left( {Z^{C} } \right)}}^{C} } \right) = a_{{cond_{i\left( C \right)} }} \wedge \hfill \\ O_{A} \left( {z_{{i\left( {Z^{C} } \right)}}^{C} } \right) = a_{i\left( a \right)} \wedge a_{i\left( a \right)} \ne a_{{cB_{i\left( C \right)} }} . \hfill \\ \end{gathered} $$
  1. 9.

    If \(\left| {eC} \right| = 1\), then this cycle is the parent for the considered one:

    $$ Cp_{{eC_{0} }} = Cp_{{eC_{0} }} \mathop \cup \nolimits C_{i\left( C \right)} ; $$

else we search for the parent loop:

$$ \begin{gathered} parC = \left\{ {C_{j\left( C \right)} } \right\}|C_{j\left( C \right)} \in eC \wedge a_{{cond_{j\left( C \right)} }} \ne a_{{cB_{j\left( C \right)} }} ; \hfill \\ Cp_{j\left( C \right)} = Cp_{j\left( C \right)} \mathop \cup \nolimits C_{i\left( C \right)} |C_{j\left( C \right)} \in parC \wedge \hfill \\ \forall C_{k\left( C \right)} \in parC\left( {a_{{cond_{j\left( C \right)} }} <_{C} a_{{cond_{k\left( C \right)} }} } \right). \hfill \\ \end{gathered} $$

Complete the consideration of the cycle.

As an algorithm for filling these structures, consider the filling of branches. Filling the body of cycles is done in a similar way.

To fill in the branching \(Br_{{i\left( {Br} \right)}}\), each of its branches \(Bx_{{i\left( {Br} \right)}}\) is analyzed according to the following algorithm with the notation:

  • p – considered place;

  • Ln – formed linear section;

  • \(Z_{I}\)- set of transitions leading to p;

  • np – the next place to be considered;

  • \(Z_{In}\) - set of transitions leading to np.

  1. 1.

    Find the first place of the branch:

    $$ p = O_{A} \left( {z_{{i\left( {Z^{C} } \right)}}^{C} } \right)|I_{A} \left( {z_{{i\left( {Z^{C} } \right)}}^{C} } \right) = a_{{xB_{{i\left( {Br} \right)}} }} . $$
  2. 2.

    Form the current linear section:

    $$ Ln = \emptyset $$
  1. 3.

    Form the current linear section:

    $$ Z_{I} = \left\{ {z_{{i\left( {Z^{C} } \right)}}^{C} } \right\}|O_{A} \left( {z_{{i\left( {Z^{C} } \right)}}^{C} } \right) = p \wedge \;\;\forall a_{i\left( a \right)} \in I_{A} \left( {z_{{i\left( {Z^{C} } \right)}}^{C} } \right)\left( {a_{i\left( a \right)} <_{C} p} \right). $$
  1. 4.

    If \(\left| {Z_{I} } \right| > 1\), then branch completion is detected:

    $$ \begin{gathered} a_{{xe_{{i\left( {Br} \right)}} }} = p; \hfill \\ Bx_{{i_{{i\left( {Br} \right)}} }} = Bx_{{i_{{i\left( {Br} \right)}} }} \mathop \cup \nolimits Ln | Ln \ne \emptyset ; \hfill \\ \end{gathered} $$

complete the consideration of the branch.

  1. 5.

    If \(\exists Br_{{j\left( {Br} \right)}} \left( {a_{{xB_{{j\left( {Br} \right)}} }} = p} \right)\), then a nested branch is detected:

    $$ Bx_{{i_{{i\left( {Br} \right)}} }} = Bx_{{i_{{i\left( {Br} \right)}} }} \mathop \cup \nolimits Br_{{j\left( {Br} \right)}} ; $$

go to step 6, else go to step 11.If \(a_{{out_{{j\left( {Br} \right)}} }} = \emptyset\), then fill the branching \(Br_{{j\left( {Br} \right)}}\) in accordance with the algorithm.

  1. 6.

    Set the following place for consideration:

    $$ np = a_{{xe_{{j\left( {Br} \right)}} }} . $$
  1. 7.

    Save the linear section:

    $$ Bx_{{i_{{i\left( {Br} \right)}} }} = Bx_{{i_{{i\left( {Br} \right)}} }} \mathop \cup \nolimits Ln | Ln \ne \emptyset . $$
  1. 8.

    Form a set \(Z_{In}\):

    $$ Z_{In} = \left\{ {z_{{i\left( {Z^{C} } \right)}}^{C} } \right\}|O_{A} \left( {z_{{i\left( {Z^{C} } \right)}}^{C} } \right) = np \wedge \forall a_{i\left( a \right)} \in I_{A} \left( {z_{{i\left( {Z^{C} } \right)}}^{C} } \right) \left( {a_{i\left( a \right)} <_{C} np} \right). $$
  1. 9.

    If \(\left| {Z_{In} } \right| > \left| {Bx_{{j\left( {Br} \right)}} } \right|\), then complete the consideration of the branch, else \(p = np\); continue the consideration of the branch from step 2.

  2. 10.

    If \(\exists C_{i\left( C \right)} \left( {a_{{cB_{i\left( C \right)} }} = p} \right)\), then nested cycle detected:

    $$ \begin{gathered} Bx_{{i_{{i\left( {Br} \right)}} }} = Bx_{{i_{{i\left( {Br} \right)}} }} \cup C_{i\left( C \right)} ; \hfill \\ p = a_{{out_{i\left( C \right)} }} ; \hfill \\ Bx_{{i_{{i\left( {Br} \right)}} }} = Bx_{{i_{{i\left( {Br} \right)}} }} \mathop \cup \nolimits Ln | Ln \ne \emptyset ; \hfill \\ \end{gathered} $$

continue the consideration of the branch from step 2.

  1. 11.

    Fill in the linear section:

    $$ Ln = Ln\mathop \cup \nolimits p. $$
  1. 12.

    Set the next place for consideration:

    $$ p = a_{i\left( a \right)} |\exists z_{{i\left( {Z^{C} } \right)}}^{C} \left( {I_{A} \left( {z_{{i\left( {Z^{C} } \right)}}^{C} } \right) = p \wedge O_{A} \left( {z_{{i\left( {Z^{C} } \right)}}^{C} } \right) = a_{i\left( a \right)} } \right); $$

continue the consideration of the branch from step 3.

The described methodology will make it possible to form data structures that allow to unambiguously determine the presence and place of nonlinear structures in the process model, which, at the transformation stage, will facilitate the introduction of the hierarchy into the network by replacing the whole structure with one place.

6 The Example of Structural Analysis of the Process

Let’s consider the process of structural analysis using the example of the technological process of repairing a truck. Figure 4 shows an ExPNSR that simulates this process. Structural analysis does not need the study of information and material relations, therefore the presented net includes transitions by only control relation in order to make the reading of the graph easier.

In accordance with the generalized structural analysis algorithm, the starting place of the network is the first determined. Since the place 0 fulfills the condition \(\exists z_{{i\left( {z^{C} } \right)}}^{C} \left( {I_{A} \left( {z_{{i\left( {z^{C} } \right)}}^{C} } \right) = a_{S} } \right) \wedge \;\;\;{\nexists }z_{{j\left( {z^{C} } \right)}}^{C} \left( {O_{A} \left( {z_{{j\left( {z^{C} } \right)}}^{C} } \right) = a_{S} } \right)\), then \(a_{S} = 0\).

At the next stage, the initial places of the cycles are determined. as a result of which structures of the following type are formed:

$$ C_{0} = \left\{ {a_{cB} = 3,a_{cond} = \emptyset ,a_{out} = \emptyset ,Cp = \emptyset } \right\}; $$
$$ C_{1} = \left\{ {a_{cB} = 10,a_{cond} = \emptyset ,a_{out} = \emptyset ,Cp = \emptyset } \right\}; $$
$$ C_{2} = \left\{ {a_{cB} = 20,a_{cond} = \emptyset ,a_{out} = \emptyset ,Cp = \emptyset } \right\}; $$
$$ C_{3} = \left\{ {a_{cB} = 32,a_{cond} = \emptyset ,a_{out} = \emptyset ,Cp = \emptyset } \right\}. $$

Next, the initial places that allows to choose the further development of the process are determined and the branches are formed:

$$ Br_{0} = \left\{ {a_{xB} = 4,\left\{ {B_{0} = \emptyset ,B_{1} = \emptyset } \right\}, a_{xe} = \emptyset } \right\}; $$
$$ Br_{1} = \left\{ {a_{xB} = 11,\left\{ {B_{0} = \emptyset ,B_{1} = \emptyset } \right\}, a_{xe} = \emptyset } \right\}; $$
$$ Br_{2} = \left\{ {a_{xB} = 21,\left\{ {B_{0} = \emptyset ,B_{1} = \emptyset } \right\}, a_{xe} = \emptyset } \right\}. $$

As a result, the definition of cycle conditions, previously formed structures are supplemented to the following form:

$$ C_{0} = \left\{ {a_{cB} = 3,a_{cond} = 3,a_{out} = 31,Cp = \emptyset } \right\}; $$
$$ C_{1} = \left\{ {a_{cB} = 10,a_{cond} = 10,a_{out} = 30,Cp = \emptyset } \right\}; $$
$$ C_{2} = \left\{ {a_{cB} = 20,a_{cond} = 20,a_{out} = 25,Cp = \emptyset } \right\}; $$
$$ C_{3} = \left\{ {a_{cB} = 32,a_{cond} = 32,a_{out} = 34,Cp = \emptyset } \right\}. $$
Fig. 4.
figure 4

Technological process diagram of a truck repair.

When filling out the branches, linear sections are formed that belong to the every variant of the process development, and the nested cycles and branches are determined:

$$ Br_{0} = \left\{ {a_{xB} = 4,\left\{ {B_{0} = \left\{ {Ln_{0} } \right\},B_{1} = \left\{ {Ln_{1} ,C_{1} } \right\}} \right\}, a_{xe} = 30} \right\}; $$
$$ Br_{1} = \left\{ {a_{xB} = 11,\left\{ {B_{0} = \left\{ {Ln_{2} } \right\},B_{1} = \left\{ {Ln_{3} ,C_{2} ,Ln_{4} } \right\}} \right\}, a_{xe} = 29} \right\}; $$
$$ Ln_{0} = \left\{ {5, 6, 7} \right\}; $$
$$ Ln_{1} = \left\{ {8, 9} \right\}; $$
$$ Ln_{2} = \left\{ {12, 13, 14} \right\}; $$
$$ Ln_{3} = \left\{ {15, 16, 17, 18, 19} \right\}; $$
$$ Ln_{4} = \left\{ {25, 26, 27, 28} \right\}; $$
$$ Ln_{5} = \left\{ {22} \right\}; $$
$$ Ln_{6} = \left\{ {23} \right\}. $$

The same actions are performed when filling the body of the cycles. As a result the following structures are formed:

$$ C_{0} = \left\{ {a_{cB} = 3,a_{cond} = 3,a_{out} = 31,Cp = \left\{ {Br_{0} ,Ln_{7} } \right\}} \right\}; $$
$$ C_{1} = \left\{ {a_{cB} = 10,a_{cond} = 10,a_{out} = 30,Cp = \left\{ {Br_{1} ,Ln_{8} } \right\}} \right\}; $$
$$ C_{2} = \left\{ {a_{cB} = 20,a_{cond} = 20,a_{out} = 25,Cp = \left\{ {Br_{2} ,Ln_{9} } \right\}} \right\}; $$
$$ C_{3} = \left\{ {a_{cB} = 32,a_{cond} = 32,a_{out} = 34,Cp = \left\{ {Ln_{10} } \right\}} \right\}; $$
$$ Ln_{7} = \left\{ {30} \right\}; $$
$$ Ln_{8} = \left\{ {29} \right\}; $$
$$ Ln_{9} = \left\{ {24} \right\}; $$
$$ Ln_{10} = \left\{ {33} \right\}. $$

The sets of positions {0, 1, 2}, {31} and {34, 35} are linear sections that do not belong to cycles or branches, and are not separated into separate structures. Thus, the general structure of the algorithm is as follows:

$$ Alg = \left\{ {\left\{ {0,1,2} \right\},C_{0} ,\left\{ {31} \right\},C_{3} ,\left\{ {34, 35} \right\}} \right\}. $$

7 Conclusion

The paper describes the main nonlinear structures found in the model of a process based on ExPNSR. A method for analyzing the ExPNSR for the presence of nonlinear structures is proposed, which can be used during the optimization of production processes. The information obtained as a result of its application will make it possible to more efficiently distribute the resources available to the enterprise at the stage of planning the modernization of production or when developing new projects.