# Dual-Neighborhood Tabu Search for Computing Stable Extensions in Abstract Argumentation Frameworks
## 4 Algorithm Details
### Neighborhood Move Execution  
During the evaluation process, the algorithm evaluates the arguments based on their labeled flips and inserts the evaluation results sequentially into a heap data structure. The top element of the heap thus represents the current optimal choice, i.e., the argument that needs to be flipped. After completing the neighborhood move selection, the argument is removed from the heap and the heap structure is readjusted to maintain the ordering by evaluation result. The neighborhood move is then executed to flip the label of that argument. Specifically, the selected argument label is flipped to out if it is in, or to in if it is out.  
Algorithm 5 explains how a move is implemented. The top element of the heap represents the argument with the smallest evaluation value (\(\Delta P\)), and it is implemented by flipping the label of that argument. After selecting the argument for which a neighborhood move is to be executed, the label of that argument is first identified and then the corresponding flip operation is executed.  
After flipping the label of the selected argument, we make the neighborhood move tabu through the function \(\mathit{TabuAction}\). The tabu search algorithm utilizes the tabu strategy to implement a memory function in the search process, marking explored local optima and avoiding these solutions for a subsequent period. This memory and tabu functionality not only enhances the effect of local search but also helps to prevent the search process from becoming trapped in local optima, thereby facilitating the discovery of global optimal solutions. Specifically, after each flip operation, the involved arguments are temporarily tabued to prevent them from being flipped again in the short term. The details will be illustrated in Section 4.5.  
Setting the tabu length too long may result in missing the opportunity to flip a key argument, which in turn wastes a lot of time, while setting it too short may cause the argument to be unblocked too quickly, leading the algorithm to fall into a local loop. Therefore, the tabu length has a significant impact on the performance of the algorithm, and the determination of the tabu length needs to rely on extensive experimental research.  
```
1:\(v\), \(iter\), \(L\)
2:\(L\)
3:procedureEXECUTINGMOVE
4:if\(L(v)\) is inthen
5:\(L(v)\)\(\leftarrow\)\(change\_label(v,out)\)
6:\(TabuAction(v,out,iter)\)
7:else\(L(v)\) is out
8:\(L(v)\)\(\leftarrow\)\(change\_label(v,in)\)
9:\(TabuAction(v,in,iter)\)
10:for\(u\in Neighbors(v)\)do
11:if\(L(v)\) is in and \(l(v)\
eq Grounded(u)\)then
12:\(L(u)\)\(\leftarrow\)\(change\_label(u,out)\)
13:endif
14:endfor
15:endif
16:return\(L\)
17:endprocedure
```  
**Algorithm 5** Executing Move  
Any argument attacking a in labeled argument should be labeled as out; in labeled arguments cannot attack other in labeled arguments. Therefore, after executing a neighborhood move, the algorithm further modifies the neighbors of the moved argument. When the label of an argument is flipped from out to in, we uniformly flip all the neighboring argument labels of that argument to out. The time complexity of this module is \(O(|u|)\).