The testing of the 4 minimization methods on 10 greedy algorithm generated permutations. The functions can be found in TestingFunction.nb.

First generate greedy algorithm-generated permutations. Note, for a better optimization, the function JonesResult should be used. Using JonesOptimize is essentially useless.

checkGreedyDataSet = Table[bestGreedy[sampleKnot, {factor -> JonesOptimize, tries -> 1000}], {i, 10}];

JonesResult[#] &/@ checkGreedyDataSet

Local Minimization Testing - Each process is repeated twice, in the second run the first number in each bracket shows the time it takes to perform the Local Minimization Process

JonesResult @ localOptimization[PD @@ #, 
{startPt -> convertToList, invariantCriteria -> JonesOptimize, optSize -> 3}] &/@ checkGreedyDataSet

(Timing @ (JonesResult @ localOptimization[PD @@ #, 
{startPt -> convertToList, invariantCriteria -> JonesOptimize, optSize -> 3}])) &/@ checkGreedyDataSet

JonesResult @ localOptimization[PD @@ #, 
{startPt -> convertToList, invariantCriteria -> JonesOptimize, optSize -> 4}] &/@ checkGreedyDataSet

(Timing @ (JonesResult @ localOptimization[PD @@ #, 
{startPt -> convertToList, invariantCriteria -> JonesOptimize, optSize -> 4}])) &/@ checkGreedyDataSet

JonesResult @ localOptimization[PD @@ #, 
{startPt -> convertToList, invariantCriteria -> JonesOptimize, optSize -> 5}] &/@ checkGreedyDataSet

(Timing @ (JonesResult @ localOptimization[PD @@ #, 
{startPt -> convertToList, invariantCriteria -> JonesOptimize, optSize -> 5}])) &/@ checkGreedyDataSet

JonesResult @ localOptimization[PD @@ #, 
{startPt -> convertToList, invariantCriteria -> JonesOptimize, optSize -> 6}] &/@ checkGreedyDataSet

(Timing @ (JonesResult @ localOptimization[PD @@ #, 
{startPt -> convertToList, invariantCriteria -> JonesOptimize, optSize -> 6}])) &/@ checkGreedyDataSet

JonesResult @ localOptimization[PD @@ #, 
{startPt -> convertToList, invariantCriteria -> JonesOptimize, optSize -> 7}] &/@ checkGreedyDataSet

(Timing @ (JonesResult @ localOptimization[PD @@ #, 
{startPt -> convertToList, invariantCriteria -> JonesOptimize, optSize -> 7}])) &/@ checkGreedyDataSet

JonesResult @ localOptimization[PD @@ #, 
{startPt -> convertToList, invariantCriteria -> JonesOptimize, optSize -> 8}] &/@ checkGreedyDataSet

Partial Local Minimization - because this can have fluctuation, we will proceed

N@ Mean[Table[JonesResult @ partialLO[PD @@ #, 
{startPt -> convertToList, invariantCriteria -> PartialJonesOptimize, optSize -> 3, partialPortion -> 0.1, rounds -> 10}], {i, 10}]]&/@ checkGreedyDataSet

N@ Mean[Table[JonesResult @ partialLO[PD @@ #, 
{startPt -> convertToList, invariantCriteria -> PartialJonesOptimize, optSize -> 4, partialPortion -> 0.1, rounds -> 10}], {i, 10}]]&/@ checkGreedyDataSet

N@ Mean[Table[JonesResult @ partialLO[PD @@ #, 
{startPt -> convertToList, invariantCriteria -> PartialJonesOptimize, optSize -> 5, partialPortion -> 0.1, rounds -> 10}], {i, 10}]]&/@ checkGreedyDataSet

N@ Mean[Table[JonesResult @ partialLO[PD @@ #, 
{startPt -> convertToList, invariantCriteria -> PartialJonesOptimize, optSize -> 6, partialPortion -> 0.1, rounds -> 10}], {i, 10}]]&/@ checkGreedyDataSet

N@ Mean[Table[JonesResult @ partialLO[PD @@ #, 
{startPt -> convertToList, invariantCriteria -> PartialJonesOptimize, optSize -> 7, partialPortion -> 0.1, rounds -> 10}], {i, 10}]]&/@ checkGreedyDataSet

Reverse Local Minimization

storedGreedy = checkGreedyDataSet;

JonesResult @ reverseLocalOptimization[PD @@ #, 
{startPt -> convertToList, invariantCriteria -> JonesOptimize, optSize -> 3}] &/@ storedGreedy

JonesResult @ reverseLocalOptimization[PD @@ #, 
{startPt -> convertToList, invariantCriteria -> JonesOptimize, optSize -> 4}] &/@ storedGreedy

JonesResult @ reverseLocalOptimization[PD @@ #, 
{startPt -> convertToList, invariantCriteria -> JonesOptimize, optSize -> 5}] &/@ storedGreedy

JonesResult @ reverseLocalOptimization[PD @@ #, 
{startPt -> convertToList, invariantCriteria -> JonesOptimize, optSize -> 6}] &/@ storedGreedy

JonesResult @ reverseLocalOptimization[PD @@ #, 
{startPt -> convertToList, invariantCriteria -> JonesOptimize, optSize -> 7}] &/@ storedGreedy

Reverse Partial Local Minimization

convertToList[pd_PD] := List @@ pd;

Protect[startPt, invariantCriteria, optSize, partialPortion, rounds];

Options[backwardsPLO] := {startPt -> convertToList, invariantCriteria -> PartialJonesOptimize, optSize -> 3, partialPortion -> 0.1, rounds -> 3};

backwardsPLO[pd_PD, opts: OptionsPattern[backwardsPLO]] := 
Module[{s, k, sBest, optimizeList, optimizeResult, widths, width, round},
s = OptionValue[startPt][pd];
k = Length[s] - OptionValue[optSize] + 1;
round = 1;
sBest = s;
While[round ≤ OptionValue[rounds],
widths = FoldList[Complement [#1 ⋃ #2, #1 ⋂ #2] &, {}, List @@@ sBest];
While[k ≥ 1,
optimizeList = sBest[[k;;k+OptionValue[optSize] - 1]];
width =  widths[[k]];
optimizeResult = OptionValue[invariantCriteria][width, optimizeList,k, OptionValue[partialPortion]];
sBest = Join[If[k == 1, {}, sBest[[1;;k-1]]], optimizeResult, If[k == Length[s] - OptionValue[optSize] + 1, {}, sBest[[k + OptionValue[optSize];;-1]]]];
k = k - 1;
];
round = round + 1;
k  = Length[s] - OptionValue[optSize] + 1;
];
sBest]

N@ Mean[Table[JonesResult @ backwardsPLO[PD @@ #, 
{startPt -> convertToList, invariantCriteria -> PartialJonesOptimize, optSize -> 3, partialPortion -> 0.1, rounds -> 10}], {i, 10}]]&/@ storedGreedy

N@ Mean[Table[JonesResult @ backwardsPLO[PD @@ #, 
{startPt -> convertToList, invariantCriteria -> PartialJonesOptimize, optSize -> 4, partialPortion -> 0.1, rounds -> 10}], {i, 10}]]&/@ storedGreedy

N@ Mean[Table[JonesResult @ backwardsPLO[PD @@ #, 
{startPt -> convertToList, invariantCriteria -> PartialJonesOptimize, optSize -> 5, partialPortion -> 0.1, rounds -> 10}], {i, 10}]]&/@ storedGreedy

N@ Mean[Table[JonesResult @ backwardsPLO[PD @@ #, 
{startPt -> convertToList, invariantCriteria -> PartialJonesOptimize, optSize -> 6, partialPortion -> 0.1, rounds -> 10}], {i, 10}]]&/@ storedGreedy

N@ Mean[Table[JonesResult @ backwardsPLO[PD @@ #, 
{startPt -> convertToList, invariantCriteria -> PartialJonesOptimize, optSize -> 7, partialPortion -> 0.1, rounds -> 10}], {i, 10}]]&/@ storedGreedy

Plots Comparing the 4 Methods

Plot 1: Effect of LM

ListLinePlot[{{212, 212, 211, 210, 134, 133, 131,  128}, 
{709, 709, 686, 570, 548, 540, 458, 331}, 
{524, 524, 460, 455, 454, 373, 365, 360}, 
{43, 43, 39, 33, 33, 31, 31, 16}, 
{858,858,858,839,286,254, 246, 246}, 
{61, 61, 48, 44, 44, 44, 36,36}, 
{41, 41, 25, 25, 25, 20, 19, 19}, 
{329, 329, 219, 208, 163, 157, 151, 64}, 
{116, 116, 115, 115, 115, 108, 52, 51}, 
{5927, 5927, 1552, 1552, 546, 217, 206, 205}}, {AxesLabel -> {x, "S_{sigma_K}(in millions)"}}]

Plot 2: LM vs PLM

ListPlot[{{133, 540, 373, 31, 254, 44, 20, 157, 108, 217}, {125, 385, 161, 21, 237, 64, 19, 34, 49, 190}}, {AxesLabel -> {"SampleNumber", "S_{sigma_K}(in millions)"}, PlotLegends -> {"LM", "PLM"}}]

Plot 3: Comparison of the 3 Methods

ListPlot[{{133, 540, 373, 31, 254, 44, 20, 157, 108, 217}, {125, 385, 161, 21, 237, 64, 19, 34, 49, 190}, {165, 526, 396, 35, 399, 50, 23, 64, 108, 574},{120, 455, 330, 29, 103, 31, 19, 38, 46, 176}}, {AxesLabel -> {"SampleNumber", "S_{sigma_K}(in millions)"}, PlotLegends -> {"LM", "PLM", "RLM", "PRLM"}}]