## Appendix C Description of the Variant of MOEA/D Used in Solving Problem 1
The operators used are the following ones:  
One-point crossover: the two randomly chosen parents combine its chromosomes by designating a point in the bit string that represents them. The operator swaps between the two parents the bits in their encoding to the right of that point. The results are a new offspring of two children. Flip mutation: This mutation process generates a random value for each allele in the bit string encoding the solution; every time that the generated value lies under a given probability (e.g., the probability of 0.02 used in this work), the bit value in the encoding is inverted. After the application of the genetic operators, the created solution is subject to a repair and improvement phase, which is performed by the repair and improvement operator (_RIO_). The _RIO_ combines the processes that might repair and improve a portfolio; in detail, it turns an infeasible solution into a quasi-feasible solution that is feasible with respect to the used budget but may not be feasible with respect to in the satisfaction degree of the DMs, i.e., it might not warranty that \(N_{sat}\geq N_{dis}\). The _RIO_ sorts the projects in the portfolio by the fitness ratio _FR_, and from the lowest _FR_ to the highest, it eliminates projects one by one until the budget becomes feasible. After that, using a threshold parameter (set to 0.50) it also eliminates a proportion of the remaining projects. Then, from the highest FR to the lowest, the improvement algorithm adds projects into the portfolio while keeping the budget feasible. The fitness ratio _FR_ is a generalized measure of the fitness of a solution based on its objectives; first, for the \(i\)-th project, the procedure computes the ratio \(f_{cij}=\mathit{fitness}/\mathit{cost}\) for each objective j; then, it computes \(f_{ci}\) which is the median among the m values \(f_{cij}\) previously computed. The value \(f_{cij}\) becomes the value of _FR_. The final step is to check the stopping condition; if it is satisfied, the algorithm finishes and reports the _EP_ as its output; otherwise, the algorithm returns to the second step. The stop criterion is fulfilled when a maximum number of evaluations of the objective function vector (100,000) is reached. During each iteration, the algorithm conveniently updates \(B\), _EP_, \(z\), and in the end, it returns the non-dominated set found in _EP_. Lines 1 to 8 in Algorithm A2 describe the main loop of MOEA/D, and Table A9 details its time complexity based on a worst-case scenario. The analysis considers the variables \(S\), \(N\), \(P\), and \(\mathrm{n_{g}}\) as the size of the population, the number of criteria on the project portfolio optimization, the number of candidate projects, and the number of DMs, respectively. The construction of the set _EP_ was left outside the main loop. Note that, based on the analysis shown in Table A9, the complexity of MOEA/D linearly scales w.r.t. to the number of candidate projects \(P\) and the number of DMs \(n_{g}\) in the decision group. The linear growth in the number of members of a decision group favors this approach in scenarios with large groups of decision-makers.