## 3 Developed Solution Approach
### A Novel Bi-Objective Tabu Search
```
1:functionBi-TS(\(\mathbb{S}\))
2:Input: MOSP solution: \(\mathbb{S}\)
3:Output: Improved solution: \(\mathbb{S}\)
4: Start with empty tabu list
5:\(\mathbb{S}=\mathbb{S}\), \(\hat{C}=C_{max}(\mathbb{S})\), \(\hat{F}=MWFT(\mathbb{S})\)
6:\(n^{C}_{imp}=n^{F}_{imp}=1\)
7:\(itr=itrao\_imp}=itr^{rand}=0\)
8:while\(itr<n^{TS}_{maxity}\)do
9:\(prob^{NS}=\frac{n^{C}_{imp}}{n^{C}_{imp}+n^{C}_{imp}}\)
10:If\(flip(prob^{NS})\)then BestMoves = ordered list of at most \(n^{best\_moves}\) non-tabu neighborhood moves from all possible applications of \(\mathcal{N}_{1}\) and \(\mathcal{N}_{2}\) on \(\mathbb{S}\) resulting in--and ordered according to--the lowest \(C_{max}\) estimates
11:Else BestMoves = ordered list of at most \(n^{best\_moves}\) non-tabu neighborhood moves from all possible applications of \(\mathcal{N}_{3}\) and \(\mathcal{N}_{4}\) on \(\mathbb{S}\) resulting in--and ordered according to--the lowest \(MWFT\) estimates
12:If\(itr^{no\_imp}=n^{no\_imp}_{maxity}\)then\(itr^{rand}=n^{rand\_moves}\) and \(itr^{no\_imp}=0\)
13:If\(itr^{rand}\
eq 0\)then NSMove = randomly selected move from BestMoves
14:and\(itr^{rand}=itr^{rand}-1\)
15:Else NSMove = the first (best) move from BestMoves
16:\(\mathbb{S}^{\prime}\) = resultant solution of applying NSMove to \(\mathbb{S}\)
17:NSMove\({}^{intv}\) = inverse of NSMove that is needed to transform \(\mathbb{S}^{\prime}\) back to \(\mathbb{S}\)
18:If NSMove\({}^{intv}\) is not tabu, then update the tabu list by adding NSMove\({}^{int}\)
19:Else update the tabu list by adding NSMove
20:\(\delta C=sign(\hat{C}-C_{max}(\mathbb{S}^{\prime}))\)
21:\(\delta F=sign(\hat{F}-MWFT(\mathbb{S}^{\prime}))\)
22:If(\(\delta C>0\)and\(\delta F\geq 0\)) or(\(\delta F>0\)and\(\delta C\geq 0\)) then \(\hat{S}=\mathbb{S}^{\prime}\), \(\hat{C}=C_{max}(\mathbb{S})\), \(\hat{F}=MWFT(\mathbb{S})\), \(itr^{no\_imp}=-1\) Check and update set \(\mathcal{D}\) based on \(\mathbb{S}\)
23:Else It (\(\delta C>0\) and \(\delta F<0\)) or(\(\delta F>0\)and\(\delta C<0\)) Check and update set \(\mathcal{D}\) based on \(\mathbb{S}^{\prime}\) If\(\mathbb{S}^{\prime}\) is added to set \(\mathcal{D}\) then \(\hat{S}=\mathbb{S}^{\prime}\), \(\hat{C}=C_{max}(\mathbb{S})\), \(\hat{F}=MWFT(\mathbb{S})\), \(itr^{no\_imp}=-1\) End If
24:End If
25:If\(\delta C>0\)then\(n^{C}_{imp}=n^{C}_{imp}+1\)
26:If\(\delta F>0\)then\(n^{F}_{imp}=n^{F}_{imp}+1\)
27:\(\mathbb{S}=\mathbb{S}^{\prime}\), \(itr^{no\_imp}=itr^{no\_imp}+1\), \(itr=itr+1\)
28:endwhile
29:return\(\mathbb{S}\)
30:endfunction
```  
**Algorithm 2** Bi-objective Tabu search for the Bi-DMOSP  
Within the main loop, the algorithm keeps a record of the number of times each objective value is improved as a result of applying the neighborhood search functions. This is done by updating two variables, \(n^{C}_{imp}\) and \(n^{F}_{imp}\), for recording improvements in the makespan and the MWFT objective values, respectively. These two variables are used to probabilistically determine which set of neighborhood search functions will be applied in each iteration: either \(\{\mathcal{N}_{1},\mathcal{N}_{2}\}\) or \(\{\mathcal{N}_{3},\mathcal{N}_{4}\}\). This is done in step 10 by calling the \(flip(p)\) function, which is a Boolean function that returns \(true\) if a randomly generated number within the range from 0 to 1 is found to be less than the passed value \(p\) and returns \(false\) otherwise. Accordingly, the ordered list _BestMoves_ is used to store the best non-tabu neighborhood moves based on the current solution \(\mathbb{S}\). The maximum number of neighborhood moves that can be stored in the _BestMoves_ list is denoted \(n^{\textit{best\_moves}}\), which is one of the control parameters of the developed Bi-TS. From the _BestMoves_ list, either the first (best) neighborhood move or a random one is selected. Random move selection is permitted to allow for a more diversified search whenever the repeated selection of the best moves does not improve the dominance of the incumbent solution for \(n^{\textit{no\_imp}}_{\textit{maxitr}}\) iterations.