## 3 The MOFOA-HS for the Multi-Objective F-MSRCPSP
### Population Initialization  
During population initialization, a multiple individual strategy is adopted. The population consists of _NS_ individuals, which are represented by a two-list, i.e., activity sequence list \(\lambda\) and resource pattern list \(\sigma\). In addition, employ the Pareto archive (PA) to store and update the Pareto solutions generated by each iteration. In order to realize the uniform distribution of the solution in the solution space but not affect the quality of the solution, we adopt the random and the heuristic strategies, as well as propose an activity list extension algorithm to generate the activity sequence list. For the resource pattern list, there are three initialization methods: GSS is chosen for all activities of the solution (\(\sum\limits_{j\in J}\sigma(j)=0\)); all activities of the solution choose NGSS (\(\sum\limits_{j\in J}\sigma(j)=n_{j}\)); some activities choose GSS, and the others choose NGSS (\(0<\sum\limits_{j\in J}\sigma(j)<n_{j}\)). Randomly select one of the three initialization methods to a generate resource pattern list. The basic idea of the activity list extension algorithm is that an activity is selected in sequence from the candidate set and inserted into the list, where the constraint is not violated until all the activities are ordered. The candidate set \(A^{\prime}\) is obtained by disorderly arranging the active set \(A\). Before starting the algorithm, we need to classify all activities according to \(P_{i}\) and \(S_{j}\) of activities and divide them into the following four activity categories: the set \(S1(P_{j}\
eq\varnothing,S_{j}=\varnothing)\) with predecessor constraints only, the set \(S2(P_{j}=\varnothing,S\
eq\varnothing)\) with successor constraints only, the set \(S3(P_{j}=\varnothing,S_{j}=\varnothing)\) with both predecessor and successor constraints, and the set \(S4(P_{j}\
eq\varnothing,S_{j}\
eq\varnothing)\) with no constraint. The pseudo code of the activity sequence list extension algorithm is shown in Algorithm 3. ```
1. \(\lambda=[]\)
2. For\(A_{j}\) in sequence of \(A^{\prime}\)do
3. If\(A_{j}\in S1\)then
4. If\(P_{j}\cap



Step 3: The activity \(A_{j}\) belongs to \(S1\). The insertion position \(I_{j}\) of \(A_{j}\) can be any position after the last predecessor activity of \(A_{j}\) if it is in \(\lambda\). Otherwise, it can be anywhere. Step 4: The activity \(A_{j}\) belongs to \(S2\). The insertion position \(I_{j}\) of \(A_{j}\) can be any position before the first successor activity of \(A_{j}\) if it is in \(\lambda\). Otherwise, it can be anywhere. Step 5: The activity \(A_{j}\) belongs to \(S3\). The insertion position \(I_{j}\) of \(A_{j}\) can be anywhere in \(\lambda\). Step 6: The activity \(A_{j}\) belongs to \(S4\). The insertion position \(I_{j}\) of \(A_{j}\) should be any position anywhere between the last predecessor activity and the first successor activity of \(A_{j}\) in \(\lambda\). If there is only no successor activity in \(\lambda\), the procedure is similar to Step 3; if there is only no predecessor activity in \(\lambda\), the procedure is similar to Step 4; if neither, the procedure is similar to Step 5. Step 7: Insert the activity \(A_{j}\) into the specified position \(I_{j}\) in the list, and then go back to Step 3 until all activities are in \(\lambda\). ### Improved Operation Operators

#### 3.5.1 Rejoining Operator

An effective method to implement a neighborhood search of the activity sequence is proposed, which employs an operator by rejoining any activity in \(\lambda\) without violating the activity constraint. Randomly select an activity \(A_{j}\) from \(\lambda\), and rejoin the activity to any position within the scope that is determined by the category of the activity.