- Timestamp:
- 12/06/16 15:07:45 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified branches/MemPRAlgorithm/HeuristicLab.Algorithms.MemPR/3.3/Binary/BinaryMemPR.cs ¶
r14453 r14456 97 97 } 98 98 99 protected override void TabuWalk(ISingleObjectiveSolutionScope<BinaryVector> scope, int steps, CancellationToken token, ISolutionSubspace<BinaryVector> subspace = null) {99 protected override int TabuWalk(ISingleObjectiveSolutionScope<BinaryVector> scope, int maxEvals, CancellationToken token, ISolutionSubspace<BinaryVector> subspace = null) { 100 100 var evaluations = 0; 101 101 var subset = subspace != null ? ((BinarySolutionSubspace)subspace).Subspace : null; … … 111 111 for (var i = 0; i < N; i++) tabu[i] = Tuple.Create(current[i] ? double.NaN : currentScope.Fitness, !current[i] ? double.NaN : currentScope.Fitness); 112 112 var subN = subset != null ? subset.Count(x => x) : N; 113 if (subN == 0) return ;113 if (subN == 0) return 0; 114 114 var order = Enumerable.Range(0, N).Where(x => subset == null || subset[x]).Shuffle(Context.Random).ToArray(); 115 115 116 for (var iter = 0; iter < steps; iter++) { 116 var steps = 0; 117 var stepsUntilBestOfWalk = 0; 118 for (var iter = 0; iter < int.MaxValue; iter++) { 117 119 var allTabu = true; 118 120 var bestOfTheRestF = double.NaN; … … 130 132 if (IsBetter(after, before) && (bestOfTheWalk == null || IsBetter(after, bestOfTheWalk.Fitness))) { 131 133 bestOfTheWalk = (SingleObjectiveSolutionScope<BinaryVector>)currentScope.Clone(); 134 stepsUntilBestOfWalk = steps; 132 135 } 133 136 … … 138 141 if (IsBetter(after, before) && !isTabu) { 139 142 improved = true; 143 steps++; 140 144 tabu[idx] = current[idx] ? Tuple.Create(after, tabu[idx].Item2) : Tuple.Create(tabu[idx].Item1, after); 141 145 } else { // undo the move … … 147 151 currentScope.Fitness = before; 148 152 } 153 if (evaluations >= maxEvals) break; 149 154 } 150 155 if (!allTabu && !improved) { … … 153 158 tabu[bestOfTheRest] = current[bestOfTheRest] ? Tuple.Create(better, tabu[bestOfTheRest].Item2) : Tuple.Create(tabu[bestOfTheRest].Item1, better); 154 159 currentScope.Fitness = bestOfTheRestF; 160 steps++; 155 161 } else if (allTabu) break; 162 if (evaluations >= maxEvals) break; 156 163 } 157 164 158 165 Context.IncrementEvaluatedSolutions(evaluations); 159 166 scope.Adopt(bestOfTheWalk ?? currentScope); 167 return stepsUntilBestOfWalk; 160 168 } 161 169
Note: See TracChangeset
for help on using the changeset viewer.