From the mathematical point of view, the resulting basic problem setting belongs to linear programming class. The variables

${c}_{k}\in \{0,1\}$,

$k=1,\dots \phantom{\rule{0.166667em}{0ex}},K$ form a combinatorial set of subordinate optimization problems [

8]. However, we must suppress that the combinatorial set

${c}_{k}\in \{0,1\}$,

$k=1,\dots \phantom{\rule{0.166667em}{0ex}},K$, is not full as the sequence of operations within each order is dictated by manufacturing procedure. Consequently, the number of combinations is restricted only to those variants when the operations of different orders trade places without changing their queue within one order. Let us research possible ways to solve the given combinatorial set of problems. In this article, the optimization will be conducted with “makespan” criterion formalized with the formula:

#### 2.3.1. Enumeration and Branch-and-Bound Approach

Enumerating the full set of combinations for all competing operations is an exercise of exponential complexity [

9]. However, as we have mentioned above the number of combinations in constraint (

3) is restricted due to other constraints (

2) and (

1). The precedence graph constraint (

1) excludes the permutations of competing operations within one order making the linear problem setting non-feasible for corresponding combinations. The way we enumerate the combinations and choose the starting point of enumeration also influences the flow of computations significantly. The common approach to reducing the number of iterations in enumeration is to detect the forbidden areas where the optimal solution problem does not exist (e.g., the constraints form a non-feasible problem or multiple solutions exist). The most widely spread variant of the technique described is branch-and-bound method [

10] and its different variations.

Let us choose the strategy of enumerating permutations of operations in such a way that it explicitly and easily affords to apply branch-and-bound method. The starting point of the enumeration will be the most obvious positioning of orders in a row as shown in

Figure 2. We start from the point where the problem is guaranteed to be solvable—when all orders are planned in a row—which means that the first operation of the next order starts only after the last operation of the previous order is finished. If the preceding graph is correct and the resources are enough that means the single order can be placed on the resources that are totally free (the problem is solvable—we do not consider the unpractical case when the graph and/or resources are not enough to fulfill a single order). Infeasibility here can be reached only in the case when we start mixing the orders. This guarantees that the linear programming problem is solvable, however, this combination is far from being optimal/reasonable.

The enumeration is organized by shifting the operations of the last order to the left in such a way that they trade their places with previous competing operations of preceding orders (see

Figure 3). As soon as the operation reaches its leftmost feasible position and the current combination corresponds to a linear programming problem with no solution we roll back to the previous combination, stop shifting operations of the last order and switch to the operations of the previous order. After the enumeration for orders on the current resource is over, we proceed the same iterations with the next resource. The formal presentation of the designed branch-and-bound algorithm is described by Procedure 1.

**Procedure 1: branch-and-bound**
1. **Find the initial solution** of the **LP problem** (1)–(3) for the combination ${c}_{k}\in \{0,1\}$, $k=1,\dots \phantom{\rule{0.166667em}{0ex}},K$ that corresponds to the case when all orders are in a row (first operation of the following order starts only after the last operation of preceding order is completed).
2. **Remember** the solution and keep the value of objective function $\Phi $ as temporarily best result $Opt=\Phi $.
3. **Select the last** order $f=\left|F\right|$.
4. **Select the resource** $r=\left|R\right|$ that is used by last operation $i=\left|J\right|$ of the precedence graph G of the manufacturing process.
5. **The branch** $<i,r,f>$ is now formulated.
6. **Condition**: Does the selected resource r have more than one operation in the manufacturing procedure that allocates it?
6.1. **If** yes **then**
**Begin** evaluating branch $<i,r,f>$
**Shift** the operation i one competing position to the left
**Find** the solution of the **LP problem** (1)–(3) for current combination and calculate the objective function $\Phi $
**Condition**: is the solution feasible?
**If** feasible **then**
**Condition**: Is the objective function value $\Phi $ better than temporarily best result $Opt$?
**If** yes **then**
**save current solution** as the new best result $Opt=\Phi $.
**End of condition**
**Switch to the preceding operation** $i=i-1$ of currently selected order f for the currently selected resource r.
Go to the p. 5 and **start evaluating the new branch**
**If** not feasible **then**
Stop evaluating branch $<i,r,f>$
Switch to the preceding resource $r=r-1$
Go to the p. 5 and **start evaluating the new branch**
**End of condition**: is the solution feasible?
**End of condition**: p. 6
7. **Switch to the preceding order** $f=f-1$
8. **Repeat** pp. 4–7 **until** no more branches $<i,r,f>$ are available
9. **Repeat** pp. 3–8 **until** no more feasible shifts are possible for all operations in all branches.

Iterating combinations for one order on one resource can be considered as evaluating one branch of the algorithm [

10]. Finding the leftmost position for an operation is similar to detecting a bound. Switching between branches and stopping on bounds is formalized with a general branch-and-bound procedure.

#### 2.3.2. Gradient-Alike Algorithm

The opposite of the mentioned above approach would be searching for a local minimum among all combinations with a gradient algorithm [

11]. Here, we will compute an analogue of the derivative that is used to define the search direction at each point [

12]. ‘Derivative’ for each competing operation is calculated by trying to shift it by one position to the left. In case the objective function reduces (or increases for maximization problems) we shift the operation to the left with the defined step (the step ratio is measured in a number of position operation skips moving to the left). The formal presentation of the designed gradient-alike algorithm is described by Procedure 2.

**Procedure 2: gradient algorithm**
1. **Find the initial solution** of the **LP problem** (1)–(3) for the combination ${c}_{k}\in \{0,1\}$, $k=1,\dots \phantom{\rule{0.166667em}{0ex}},K$ that corresponds to the case when all orders are in a row (first operation of the following order starts only after the last operation of preceding order is completed).
2. **Remember** the solution and keep the value of objective function $\Phi $ as temporarily best result $Opt=\Phi $.
3. **Select the last** order $f=\left|F\right|$.
4. **Select the resource** $r=\left|R\right|$ that is used by first operation $i=1$ of the sequence graph of the manufacturing process.
5. **The current optimization variable for gradient optimization is selected**—position of operation i of the order f on the resource r$<i,r,f>$.
6. **Condition**: Does the selected resource r have more than one operation in the manufacturing procedure that allocates it?
6.1. **If** yes **then**
**Begin** optimizing position $<i,r,f>$
6.1.1. **Set the step of shifting** the operation to maximum (shifting to the leftmost position). $D(i,r,f)=max$
6.1.2. **Find the ‘derivative’ of shifting** the operation i to the left
**Shift** the operation i one position to the left
**Find** the solution of the **LP problem** (1)–(3) for current combination and calculate the objective function $\Phi $
**Condition A**: is the solution feasible?
**If** feasible **then**
**Condition B**: Is the objective function value $\Phi $ better than temporarily best result $Opt$?
**If** yes **then**
We found the optimization direction for position $<i,r,f>$, proceed to p. 6.1.3
**If** not **then**
No optimization direction for the current position $<i,r,f>$
**stop** optimizing position $<i,r,f>$
**switch** to the next operation $i=i+1$
**go to p 6 and repeat search for position**
$<i+1,r,f>$
**End of condition B**
**If** not feasible **then**
No optimization direction for the current position $<i,r,f>$
**stop** optimizing position $<i,r,f>$
**switch** to the next operation $i=i+1$
**go to p 6 and repeat search for position**
$<i+1,r,f>$
**End of condition A**
6.1.3. **Define the maximum possible optimization step** for the current position $<i,r,f>$, initial step value $D(i,r,f)=max$
**Shift** the operation i left using the step $D(i,r,f)$.
**Find** the solution of the **LP problem** (1)–(3) for current combination and calculate the objective function $\Phi $
**Condition C**: Is the solution feasible and objective function value $\Phi $ better than temporarily best result $Opt$?
**If** yes **then**
**save current solution** as the new best result $Opt=\Phi $
**stop** optimizing position $<i,r,f>$
**switch** to the next operation $i=i+1$
**go to p 6 and repeat search for position**
$<i+1,r,f>$
**If** not **then**
reduce the step twice $D(i,r,f)=\frac{D(i,r,f)}{2}$ and repeat operations starting from p. 6.1.3
**End of condition C**
**Switch to the next operation**$i=i+1$, go to p. 6 and optimize position $<i,r,f>$
7. **Switch to the preceding resource** $r=r-1$
8. **Repeat** pp. 5–7 for currently selected resource $<i,r-1,f>$
9. **Switch to the preceding order** $f=f-1$
10. **Repeat** pp. 4–9 for currently selected order $<i,r,f-1>$.
11. **Repeat** pp. 3–10 **until** no improvements and/or no more feasible solutions exist.

The optimization variables in gradient algorithm represent positions of all competing operations relative to each other. The maximum optimization step for each iteration is detected on-the-fly by trying to shift the current operation to the leftmost position (as it is shown in

Figure 4) that shows the LP problem (1)–(3) is solvable and the objective function is improved.