Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
05/14/10 17:47:49 (15 years ago)
Author:
abeham
Message:

#893

  • fixed BestKnownQuality tracking in tabu search and local search
Location:
trunk/sources/HeuristicLab.Algorithms.TabuSearch/3.3
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Algorithms.TabuSearch/3.3/TabuNeighborhoodAnalyzer.cs

    r3659 r3809  
    4848    public override IOperation Apply() {
    4949      ItemArray<BoolValue> tabu = IsTabuParameter.ActualValue;
    50       PercentValue value = PercentTabuParameter.ActualValue;
    51       if (value == null) {
    52         value = new PercentValue();
    53         PercentTabuParameter.ActualValue = value;
    54       }
    55       value.Value = tabu.Where(x => x.Value).Count() / (double)tabu.Length;
    56       ResultCollection results = ResultsParameter.ActualValue;
    57       if (results != null) {
    58         IResult result = null;
    59         results.TryGetValue(PercentTabuParameter.ActualName, out result);
    60         if (result != null)
    61           result.Value = value;
    62         else
    63           results.Add(new Result(PercentTabuParameter.ActualName, "Indicates how much of the neighborhood is tabu.", (IItem)value.Clone()));
     50      if (tabu.Length > 0) {
     51        PercentValue value = PercentTabuParameter.ActualValue;
     52        if (value == null) {
     53          value = new PercentValue();
     54          PercentTabuParameter.ActualValue = value;
     55        }
     56        value.Value = tabu.Where(x => x.Value).Count() / (double)tabu.Length;
     57        ResultCollection results = ResultsParameter.ActualValue;
     58        if (results != null) {
     59          IResult result = null;
     60          results.TryGetValue(PercentTabuParameter.ActualName, out result);
     61          if (result != null)
     62            result.Value = value;
     63          else
     64            results.Add(new Result(PercentTabuParameter.ActualName, "Indicates how much of the neighborhood is tabu.", (IItem)value.Clone()));
     65        }
    6466      }
    6567      return base.Apply();
  • trunk/sources/HeuristicLab.Algorithms.TabuSearch/3.3/TabuSearch.cs

    r3750 r3809  
    8181      get { return (ValueParameter<IntValue>)Parameters["SampleSize"]; }
    8282    }
    83     private ValueParameter<MultiAnalyzer> MoveAnalyzerParameter {
    84       get { return (ValueParameter<MultiAnalyzer>)Parameters["MoveAnalyzer"]; }
    85     }
    8683    private ValueParameter<MultiAnalyzer> AnalyzerParameter {
    8784      get { return (ValueParameter<MultiAnalyzer>)Parameters["Analyzer"]; }
     
    125122      get { return MaximumIterationsParameter.Value; }
    126123      set { MaximumIterationsParameter.Value = value; }
    127     }
    128     public MultiAnalyzer MoveAnalyzer {
    129       get { return MoveAnalyzerParameter.Value; }
    130       set { MoveAnalyzerParameter.Value = value; }
    131124    }
    132125    public MultiAnalyzer Analyzer {
     
    161154      Parameters.Add(new ValueParameter<IntValue>("MaximumIterations", "The maximum number of generations which should be processed.", new IntValue(1000)));
    162155      Parameters.Add(new ValueParameter<IntValue>("SampleSize", "The neighborhood size for stochastic sampling move generators", new IntValue(100)));
    163       Parameters.Add(new ValueParameter<MultiAnalyzer>("MoveAnalyzer", "The operator used to analyze the moves.", new MultiAnalyzer()));
    164156      Parameters.Add(new ValueParameter<MultiAnalyzer>("Analyzer", "The operator used to analyze the solution.", new MultiAnalyzer()));
    165157     
     
    187179      tsMainLoop.RandomParameter.ActualName = RandomCreator.RandomParameter.ActualName;
    188180      tsMainLoop.ResultsParameter.ActualName = "Results";
    189       tsMainLoop.MoveAnalyzerParameter.ActualName = MoveAnalyzerParameter.Name;
    190181      tsMainLoop.AnalyzerParameter.ActualName = AnalyzerParameter.Name;
    191182
     
    392383    private void UpdateAnalyzers() {
    393384      Analyzer.Operators.Clear();
    394       MoveAnalyzer.Operators.Clear();
    395       MoveAnalyzer.Operators.Add(moveQualityAnalyzer);
    396       MoveAnalyzer.Operators.Add(tabuNeighborhoodAnalyzer);
    397385      if (Problem != null) {
    398386        foreach (IAnalyzer analyzer in Problem.Operators.OfType<IAnalyzer>().OrderBy(x => x.Name)) {
     
    402390        }
    403391      }
     392      Analyzer.Operators.Add(moveQualityAnalyzer);
     393      Analyzer.Operators.Add(tabuNeighborhoodAnalyzer);
    404394    }
    405395    private void ClearMoveParameters() {
  • trunk/sources/HeuristicLab.Algorithms.TabuSearch/3.3/TabuSearchMainLoop.cs

    r3750 r3809  
    7777      get { return (ValueLookupParameter<IOperator>)Parameters["TabuMaker"]; }
    7878    }
    79     public ValueLookupParameter<IOperator> MoveAnalyzerParameter {
    80       get { return (ValueLookupParameter<IOperator>)Parameters["MoveAnalyzer"]; }
    81     }
    8279    public ValueLookupParameter<IOperator> AnalyzerParameter {
    8380      get { return (ValueLookupParameter<IOperator>)Parameters["Analyzer"]; }
     
    112109      Parameters.Add(new ValueLookupParameter<IOperator>("TabuMaker", "The operator that declares a move tabu."));
    113110
    114       Parameters.Add(new ValueLookupParameter<IOperator>("MoveAnalyzer", "The operator used to analyze the moves."));
    115       Parameters.Add(new ValueLookupParameter<IOperator>("Analyzer", "The operator used to analyze the solution."));
     111      Parameters.Add(new ValueLookupParameter<IOperator>("Analyzer", "The operator used to analyze the solution and moves."));
    116112      Parameters.Add(new ValueLookupParameter<VariableCollection>("Results", "The variable collection where results should be stored."));
    117113      #endregion
     
    130126      IntCounter evaluatedMovesCounter = new IntCounter();
    131127      Placeholder tabuChecker = new Placeholder();
    132       Placeholder moveAnalyzer = new Placeholder();
    133128      SubScopesSorter moveQualitySorter = new SubScopesSorter();
    134129      TabuSelector tabuSelector = new TabuSelector();
    135130      ConditionalBranch emptyNeighborhoodBranch1 = new ConditionalBranch();
    136       RightReducer rightReducer = new RightReducer();
    137131      SubScopesProcessor moveMakingProcessor = new SubScopesProcessor();
     132      UniformSubScopesProcessor selectedMoveMakingProcesor = new UniformSubScopesProcessor();
    138133      Placeholder tabuMaker = new Placeholder();
    139134      Placeholder moveMaker = new Placeholder();
     135      MergingReducer mergingReducer = new MergingReducer();
     136      Placeholder analyzer2 = new Placeholder();
    140137      SubScopesRemover subScopesRemover = new SubScopesRemover();
    141138      ConditionalBranch emptyNeighborhoodBranch2 = new ConditionalBranch();
     
    143140      IntCounter iterationsCounter = new IntCounter();
    144141      Comparator iterationsComparator = new Comparator();
    145       SubScopesProcessor subScopesProcessor1 = new SubScopesProcessor();
    146       Placeholder analyzer2 = new Placeholder();
    147142      ResultsCollector resultsCollector3 = new ResultsCollector();
    148143      ConditionalBranch iterationsTermination = new ConditionalBranch();
     
    182177      tabuChecker.Name = "TabuChecker (placeholder)";
    183178      tabuChecker.OperatorParameter.ActualName = TabuCheckerParameter.Name;
    184 
    185       moveAnalyzer.Name = "MoveAnalyzer (placeholder)";
    186       moveAnalyzer.OperatorParameter.ActualName = MoveAnalyzerParameter.Name;
    187179
    188180      moveQualitySorter.DescendingParameter.ActualName = MaximizationParameter.Name;
     
    208200      moveMaker.OperatorParameter.ActualName = MoveMakerParameter.Name;
    209201
     202      analyzer2.Name = "Analyzer (placeholder)";
     203      analyzer2.OperatorParameter.ActualName = AnalyzerParameter.Name;
     204
    210205      subScopesRemover.RemoveAllSubScopes = true;
    211206
     
    225220      iterationsComparator.ResultParameter.ActualName = "Terminate";
    226221
    227       analyzer2.Name = "Analyzer (placeholder)";
    228       analyzer2.OperatorParameter.ActualName = AnalyzerParameter.Name;
    229 
    230222      resultsCollector3.CopyValue = new BoolValue(true);
    231223      resultsCollector3.CollectedValues.Add(new LookupParameter<IntValue>("Evaluated Moves", null, "EvaluatedMoves"));
     
    244236      subScopesProcessor0.Operators.Add(bestQualityInitializer);
    245237      subScopesProcessor0.Successor = resultsCollector1;
     238      bestQualityInitializer.Successor = analyzer1;
     239      analyzer1.Successor = null;
    246240      resultsCollector1.Successor = resultsCollector2;
    247241      resultsCollector2.Successor = solutionProcessor;
     
    250244      moveGenerator.Successor = moveEvaluationProcessor;
    251245      moveEvaluationProcessor.Operator = moveEvaluator;
    252       moveEvaluationProcessor.Successor = moveAnalyzer;
     246      moveEvaluationProcessor.Successor = moveQualitySorter;
    253247      moveEvaluator.Successor = evaluatedMovesCounter;
    254248      evaluatedMovesCounter.Successor = tabuChecker;
    255249      tabuChecker.Successor = null;
    256       moveAnalyzer.Successor = moveQualitySorter;
    257250      moveQualitySorter.Successor = tabuSelector;
    258251      tabuSelector.Successor = emptyNeighborhoodBranch1;
    259       emptyNeighborhoodBranch1.FalseBranch = rightReducer;
     252      emptyNeighborhoodBranch1.FalseBranch = moveMakingProcessor;
    260253      emptyNeighborhoodBranch1.TrueBranch = null;
    261254      emptyNeighborhoodBranch1.Successor = subScopesRemover;
    262       rightReducer.Successor = moveMakingProcessor;
    263       moveMakingProcessor.Operators.Add(tabuMaker);
    264       moveMakingProcessor.Successor = null;
     255      moveMakingProcessor.Operators.Add(new EmptyOperator());
     256      moveMakingProcessor.Operators.Add(selectedMoveMakingProcesor);
     257      moveMakingProcessor.Successor = mergingReducer;
     258      selectedMoveMakingProcesor.Operator = tabuMaker;
     259      selectedMoveMakingProcesor.Successor = null;
    265260      tabuMaker.Successor = moveMaker;
    266261      moveMaker.Successor = null;
     262      mergingReducer.Successor = analyzer2;
     263      analyzer2.Successor = null;
    267264      subScopesRemover.Successor = null;
    268265      iterationsCounter.Successor = iterationsComparator;
    269       iterationsComparator.Successor = subScopesProcessor1;
    270       subScopesProcessor1.Operators.Add(analyzer2);
    271       subScopesProcessor1.Successor = resultsCollector3;
     266      iterationsComparator.Successor = resultsCollector3;
    272267      resultsCollector3.Successor = emptyNeighborhoodBranch2;
    273268      emptyNeighborhoodBranch2.TrueBranch = null;
Note: See TracChangeset for help on using the changeset viewer.