Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
02/16/12 16:00:07 (13 years ago)
Author:
abeham
Message:

#1614: simplified GRASP+PR operator graph, replaced IMerger with an IPopulationReducer

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/GeneralizedQAP/HeuristicLab.Problems.GeneralizedQuadraticAssignment.Algorithms/3.3/GRASPWithPathRelinking.cs

    r7438 r7478  
    2727using HeuristicLab.Data;
    2828using HeuristicLab.Optimization;
     29using HeuristicLab.Optimization.Operators;
    2930using HeuristicLab.Parameters;
    3031using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
     
    7980      get { return (ConstrainedValueParameter<ICrossover>)Parameters["PathRelinking"]; }
    8081    }
    81     public ConstrainedValueParameter<IMerger> EliteSetMergerParameter {
    82       get { return (ConstrainedValueParameter<IMerger>)Parameters["EliteSetMerger"]; }
     82    public ConstrainedValueParameter<IPopulationReducer> EliteSetReducerParameter {
     83      get { return (ConstrainedValueParameter<IPopulationReducer>)Parameters["EliteSetReducer"]; }
    8384    }
    8485    #endregion
     
    109110      get { return (RandomCreator)OperatorGraph.InitialOperator; }
    110111    }
     112    private SolutionsCreator SolutionsCreator {
     113      get { return (SolutionsCreator)RandomCreator.Successor; }
     114    }
    111115    private GRASPWithPathRelinkingMainLoop MainLoop {
    112       get { return RandomCreator.Successor as GRASPWithPathRelinkingMainLoop; }
     116      get { return SolutionsCreator.Successor as GRASPWithPathRelinkingMainLoop; }
    113117    }
    114118    #endregion
     
    135139      Parameters.Add(new FixedValueParameter<IntValue>("MinimumEliteSetSize", "(ρ) The minimum amount of elites for performing path relinking.", new IntValue(2)));
    136140      Parameters.Add(new ConstrainedValueParameter<ICrossover>("PathRelinking", "The operator that performs the path relinking."));
    137       Parameters.Add(new ConstrainedValueParameter<IMerger>("EliteSetMerger", "The operator that merges new solutions into the elite set."));
     141      Parameters.Add(new ConstrainedValueParameter<IPopulationReducer>("EliteSetReducer", "The operator that reduces the old elite set and the new solution(s) to a new elite set."));
    138142
    139143      analyzer = new BestAverageWorstQualityAnalyzer();
    140144      Analyzer.Operators.Add(analyzer);
    141145
    142       RandomCreator randomCreator = new RandomCreator();
     146      var randomCreator = new RandomCreator();
    143147      OperatorGraph.InitialOperator = randomCreator;
    144148
     
    149153      randomCreator.SetSeedRandomlyParameter.Value = null;
    150154
     155      var solutionsCreator = new SolutionsCreator();
     156      solutionsCreator.NumberOfSolutionsParameter.ActualName = MinimumEliteSetSizeParameter.Name;
     157      solutionsCreator.ParallelParameter.Value = new BoolValue(true);
     158      randomCreator.Successor = solutionsCreator;
     159
    151160      var mainLoop = new GRASPWithPathRelinkingMainLoop();
    152161      mainLoop.AnalyzerParameter.ActualName = AnalyzerParameter.Name;
    153       mainLoop.EliteSetMergerParameter.ActualName = EliteSetMergerParameter.Name;
     162      mainLoop.EliteSetReducerParameter.ActualName = EliteSetReducerParameter.Name;
    154163      mainLoop.EliteSetSizeParameter.ActualName = EliteSetSizeParameter.Name;
    155164      mainLoop.EvaluatedSolutionsParameter.ActualName = "EvaluatedSolutions";
     
    158167      mainLoop.PathRelinkingParameter.ActualName = PathRelinkingParameter.Name;
    159168      mainLoop.ResultsParameter.ActualName = "Results";
    160       randomCreator.Successor = mainLoop;
     169      solutionsCreator.Successor = mainLoop;
    161170
    162171      InitializeOperators();
     
    219228        InitializeFromInstallation(LocalImprovementParameter, x => x.ProblemType.IsAssignableFrom(Problem.GetType()));
    220229        InitializeFromProblem(PathRelinkingParameter);
    221         InitializeFromProblem(EliteSetMergerParameter);
     230        InitializeFromProblem(EliteSetReducerParameter);
    222231      } else {
    223232        LocalImprovementParameter.ValidValues.Clear();
    224233        PathRelinkingParameter.ValidValues.Clear();
    225         EliteSetMergerParameter.ValidValues.Clear();
     234        EliteSetReducerParameter.ValidValues.Clear();
    226235      }
    227236      Analyzer.Operators.Add(analyzer);
     
    232241    private void Parameterize() {
    233242      if (Problem != null) {
     243        SolutionsCreator.EvaluatorParameter.ActualName = Problem.EvaluatorParameter.Name;
     244        SolutionsCreator.SolutionCreatorParameter.ActualName = Problem.SolutionCreatorParameter.Name;
     245
    234246        MainLoop.EvaluatorParameter.ActualName = Problem.EvaluatorParameter.Name;
    235247        MainLoop.SolutionCreatorParameter.ActualName = Problem.SolutionCreatorParameter.Name;
     
    245257        localImprovement.ResultsParameter.ActualName = "Results";
    246258      }
    247       foreach (var merger in EliteSetMergerParameter.ValidValues) {
    248         merger.PopulationSizeParameter.ActualName = EliteSetSizeParameter.Name;
     259      foreach (var reducer in EliteSetReducerParameter.ValidValues) {
     260        reducer.MinimumPopulationSizeParameter.ActualName = MinimumEliteSetSizeParameter.Name;
     261        reducer.MaximumPopulationSizeParameter.ActualName = EliteSetSizeParameter.Name;
    249262      }
    250263    }
Note: See TracChangeset for help on using the changeset viewer.