Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
12/06/16 15:07:45 (8 years ago)
Author:
abeham
Message:

#2701:

  • Using evaluated solutions from HC as max evaluations for tabu walking in MemPR
  • Fixed some bugs in MemPR (permutation) regarding subspace calculation (true means okay, false means no)
  • Fixed bug in TSP
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/MemPRAlgorithm/HeuristicLab.Algorithms.MemPR/3.3/Binary/BinaryMemPR.cs

    r14453 r14456  
    9797    }
    9898
    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) {
    100100      var evaluations = 0;
    101101      var subset = subspace != null ? ((BinarySolutionSubspace)subspace).Subspace : null;
     
    111111      for (var i = 0; i < N; i++) tabu[i] = Tuple.Create(current[i] ? double.NaN : currentScope.Fitness, !current[i] ? double.NaN : currentScope.Fitness);
    112112      var subN = subset != null ? subset.Count(x => x) : N;
    113       if (subN == 0) return;
     113      if (subN == 0) return 0;
    114114      var order = Enumerable.Range(0, N).Where(x => subset == null || subset[x]).Shuffle(Context.Random).ToArray();
    115115
    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++) {
    117119        var allTabu = true;
    118120        var bestOfTheRestF = double.NaN;
     
    130132          if (IsBetter(after, before) && (bestOfTheWalk == null || IsBetter(after, bestOfTheWalk.Fitness))) {
    131133            bestOfTheWalk = (SingleObjectiveSolutionScope<BinaryVector>)currentScope.Clone();
     134            stepsUntilBestOfWalk = steps;
    132135          }
    133136
     
    138141          if (IsBetter(after, before) && !isTabu) {
    139142            improved = true;
     143            steps++;
    140144            tabu[idx] = current[idx] ? Tuple.Create(after, tabu[idx].Item2) : Tuple.Create(tabu[idx].Item1, after);
    141145          } else { // undo the move
     
    147151            currentScope.Fitness = before;
    148152          }
     153          if (evaluations >= maxEvals) break;
    149154        }
    150155        if (!allTabu && !improved) {
     
    153158          tabu[bestOfTheRest] = current[bestOfTheRest] ? Tuple.Create(better, tabu[bestOfTheRest].Item2) : Tuple.Create(tabu[bestOfTheRest].Item1, better);
    154159          currentScope.Fitness = bestOfTheRestF;
     160          steps++;
    155161        } else if (allTabu) break;
     162        if (evaluations >= maxEvals) break;
    156163      }
    157164
    158165      Context.IncrementEvaluatedSolutions(evaluations);
    159166      scope.Adopt(bestOfTheWalk ?? currentScope);
     167      return stepsUntilBestOfWalk;
    160168    }
    161169
Note: See TracChangeset for help on using the changeset viewer.