## 5 Discussion and Conclusions  
In this paper, we proposed a new mutation operator for use by EA and other related algorithms, such as SA, when evolving permutations. This new operator is called cycle mutation, and includes two variations: Cycle(\(\alpha\)) and Cycle(\(kmax\)). Cycle mutation induces a random permutation cycle. The difference between the two operators is in how the cycle length is chosen. The Cycle(\(kmax\)) operator has a small maximum cycle length, while Cycle(\(\alpha\)) does not impose any maximum cycle length. Thus, Cycle(\(\alpha\)) has a significantly larger neighborhood size, while retaining a low average cycle length. The runtime of cycle mutation in the worst case is linear, similar to insertion, reversal, and scramble mutation; but unlike those operators, cycle mutation's average runtime is constant. Therefore, the computational time to use cycle mutation within an EA is little more than that of the constant time swap. Helping to achieve this efficient runtime, cycle mutation relies on a new algorithm for sampling \(k\) elements from an \(n\) element set, called insertion sampling, which is faster than existing alternatives for low \(k\). The fitness landscape analysis showed that cycle mutation is well suited to permutation problems such as the QAP and LCS, where absolute positions more greatly impact fitness than relative ordering. The fitness landscape analysis also showed that cycle mutation may be relevant to relative ordering problems such as the TSP, provided cycle length is kept low. While undertaking the fitness landscape analysis, we developed three new measures of permutation distance: cycle distance, \(k\)-cycle distance, and cycle edit distance. Validating the fitness landscape analysis, cycle mutation experimentally outperformed the others for QAP and LCS within an EA, especially for long runs, finding lower-cost solutions with fewer evaluations. Furthermore, while swap suffers from a premature convergence effect due to small neighborhood, cycle mutation continues to make optimization progress even for the longest runs; and the Cycle(\(\alpha\)) form of cycle mutation is especially good at managing local optima, due to its very large neighborhood size enabling it to make large jumps when necessary. Thus, Cycle(\(\alpha\)) exhibits superior convergence effect. Figure 6: Results on the LCS problem with strongly regular graphs for (**a**) \((1+1)\)-EA, and (**b**) SA. Cycle mutation does have limitations. Cycle mutation does not show any advantage within SA, although its rate of convergence is similar to that of swap in SA so it may be worth considering for SA nonetheless. Additionally, within an EA, Cycle(\(kmax\)) may exhibit a premature convergence effect for some problems if \(kmax\) is set too low, such as what we saw with Cycle(3) for the LCS. However, Cycle(\(\alpha\)) overcomes this limitation. Our Java implementations of cycle mutation are integrated into an open source library, Chips-n-Salsa [30], and our Java implementations of cycle distance, \(k\)-cycle distance, and cycle edit distance are integrated into the open source JavaPermutationTools [31] library. By disseminating the implementations in open source libraries, we hope to contribute not only to the research literature, but also to the state of practice. Additionally, all of the code to reproduce the experiments, and to analyze the results, is available in a GitHub repository, [[https://github.com/cicirello/cycle-mutation-experiments](https://github.com/cicirello/cycle-mutation-experiments)]([https://github.com/cicirello/cycle-mutation-experiments](https://github.com/cicirello/cycle-mutation-experiments)) (accessed on 26 May 2022). This research received no external funding. Not applicable.