3.3.3. Constraints

Equation (16) is the equation of state variable *Bik*(*t*), which represents the amount of resources *k* remaining at each resource supply point at the end of each time period *t*. Equation (17) demonstrates that the quantity of resources at each supply point is the maximum supply capacity of the supply point at the beginning, and that the quantity of resources is non-negative throughout the entire process. Equation (18) indicates that the quantity of resources transported to each demand point must satisfy the demand level of project scheduling in terms of the total quantity. Equation (19) indicates that the quantity of transported resources cannot exceed the maximum supply. Equation (20) represents the delivery-date constraint. Equation (21) is a logical constraint.

$$B\_{ik}(t) = B\_{ik}(t-1) - \sum\_{s=1}^{S} v\_{isk}(t), \forall i \in I \tag{16}$$

$$B\_{ik}(0) = P\_{ik\prime} B\_{ik}(t) \ge 0, \forall i \in I \tag{17}$$

$$\sum\_{i=1}^{I} \upsilon\_{isk}(t) \ge \sum\_{t=1}^{Ft} \sum\_{j=1}^{J} \sum\_{m=1}^{M\_j} r\_{jmk} d\_{jm} \mathbf{x}\_{jmt} \,\forall s \in S, \forall k \in K \tag{18}$$

$$\sum\_{s=1}^{S} \upsilon\_{isk}(t) \le P\_{ik\prime} \forall i \in I, s \in S \tag{19}$$

$$\max \sum\_{k=1}^{K} t\_{isk} v\_{isk}(t) \le T(t) \tag{20}$$

$$0 \le \upsilon\_{\rm isk}(t) \le R\_{k'} \forall k \in \mathcal{K}, t \in FT \tag{21}$$

#### *3.4. Global Dynamic Game Optimization Model*

After analyzing project scheduling and resource supply, the objective function and constraints are integrated into a dynamic game optimization model, which is more consistent with the coexistence of cooperation and conflict among supply chain members. This provides a theoretical basis for the sustainable operation of the engineering supply chain to improve technological innovation ability, cooperation, and management abilities among the upstream and downstream members.

When all constraints on project scheduling are set to A and resource supply constraints are set to B, then the overall dynamic game optimization model is as follows.

$$\begin{array}{c} \min\{F\_t, F\_t\} \\ \text{s.t.} \begin{cases} A \\ \min\{Z\_t, Z\_t\} \\ \text{s.t.} \{B\} \end{cases} \end{array} \tag{22}$$

#### **4. Algorithm Design**

The MRCPSP-MPSCP integrated system is an NP-hard problem. GA and PSO have been mentioned as the most practical methods to solve this kind of problem. For the problem with the 0–1 decision variable, Sakawa et al. [31] proved that a GA with Double Strings (GADS) shows superior convergence to the simple GA. Therefore, this study draws on several excellent algorithm ideas and proposes a hybrid GAPSO algorithm to solve the dynamic game optimization problem in the engineering supply chain. Specifically, GADS is used to solve the upper MRCPSP, and a Dynamically adjusted Inertial Weight PSO (DIWPSO) is used to solve the underlying MPSCP.

#### *4.1. GADS*

In this section, GADS is used to analyze and solve project scheduling. Its primary objective is to determine the execution priority of each activity and arrange the activities. Appropriate encoding methods and decoding rules were selected according to the characteristics of the problem, and the corresponding selection, crossover, mutation, and evolution termination conditions were designed.

#### 4.1.1. Coding Design

To express the execution order of each activity and the characteristics of multiple models in the MRCPSP more reasonably, the algorithm uses the activity-linked list and the corresponding activity-mode-linked list as the code and composes the chromosome. To improve the efficiency of the algorithm, activity *J* was first stratified according to its priority. The level of each activity is determined as follows: the smaller the tier, the higher the priority of the activities within that tier. In the process of coding, the activities of the small level are always arranged before the activities of the large level, so that the chromosome can ensure the precedence constraint in the subsequent genetic operation and avoid the generation of infeasible solutions. As demonstrated in Table 1, there are nine activities on this chromosome, divided into four levels. The priority of the three activities in level one is higher than those of the other three levels, and the priority of the two activities in level two is higher than those of the three and four levels.

**Table 1.** Coding design.


The priority of the project job is then encoded by numerical coding; that is, the length of the code is equal to the number of project activities, the position of the code represents the priority of activity *J* in this chromosome, and the number on this position represents the activity number. The higher the order of the activity *J*, the higher the priority. As indicated in Table 1, the priority of Activity 1 is *J*<sup>1</sup> = 1, which has the highest priority. Activity 9 has the lowest priority.

The job modes of an activity are encoded in a linked list of modes. *mj* represents a set of modes of activity *J*.
