Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
05/08/13 14:12:00 (11 years ago)
Author:
sforsten
Message:

#1980:

  • added ProportionalTournamentSelector for XCS
  • fixed bug: if an initial population is created in XCS, the initial population also creates general classifier, not only specific ones
  • merged r9204:9466 HeuristicLab.Core from trunk to branch
Location:
branches/LearningClassifierSystems
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/LearningClassifierSystems

  • branches/LearningClassifierSystems/HeuristicLab.Algorithms.LearningClassifierSystems/3.3/LearningClassifierSystem.cs

    r9242 r9467  
    118118      get { return (ValueParameter<IntValue>)Parameters["MaxIterations"]; }
    119119    }
     120    public IConstrainedValueParameter<ISelector> SelectorParameter {
     121      get { return (IConstrainedValueParameter<ISelector>)Parameters["Selector"]; }
     122    }
    120123    public IConstrainedValueParameter<ICrossover> CrossoverParameter {
    121124      get { return (IConstrainedValueParameter<ICrossover>)Parameters["Crossover"]; }
     
    213216      get { return FinalAnalyzerParameter.Value; }
    214217      set { FinalAnalyzerParameter.Value = value; }
     218    }
     219    public ISelector Selector {
     220      get { return SelectorParameter.Value; }
     221      set { SelectorParameter.Value = value; }
    215222    }
    216223    public ICrossover Crossover {
     
    254261      Parameters.Add(new ValueParameter<MultiAnalyzer>("FinalAnalyzer", "The operator used to analyze the last generation.", new MultiAnalyzer()));
    255262      Parameters.Add(new ValueParameter<IntValue>("MaxIterations", "The maximum number of iterations.", new IntValue(1000)));
     263      Parameters.Add(new ConstrainedValueParameter<ISelector>("Selector", "The operator used to select solutions."));
    256264      Parameters.Add(new ConstrainedValueParameter<ICrossover>("Crossover", "The operator used to cross solutions."));
    257265      Parameters.Add(new ConstrainedValueParameter<IManipulator>("Mutator", "The operator used to mutate solutions."));
     
    276284      mainLoop.FinalAnalyzerParameter.ActualName = FinalAnalyzerParameter.Name;
    277285      mainLoop.MaxIterationsParameter.ActualName = MaxIterationsParameter.Name;
     286      mainLoop.SelectorParameter.ActualName = SelectorParameter.Name;
    278287      mainLoop.CrossoverParameter.ActualName = CrossoverParameter.Name;
    279288      mainLoop.MutatorParameter.ActualName = MutatorParameter.Name;
     
    303312        ParameterizeEvaluator(Problem.Evaluator);
    304313        MainLoop.SetCurrentProblem(Problem);
     314        UpdateSelectors();
    305315        UpdateCrossovers();
    306316        UpdateMutators();
    307317        UpdateAnalyzers();
     318        ParameterizeSelectors();
    308319        ParameterizeManipulator();
    309320      }
     
    311322    }
    312323
    313     private void ParameterizeManipulator() {
    314       foreach (var op in Problem.Operators.OfType<IProbabilityMutatorOperator>()) {
    315         op.ProbabilityParameter.ActualName = MutationProbabilityParameter.Name;
    316       }
    317     }
    318324    protected override void Problem_EvaluatorChanged(object sender, EventArgs e) {
    319325      ParameterizeEvaluator(Problem.Evaluator);
     
    326332    }
    327333    protected override void Problem_OperatorsChanged(object sender, EventArgs e) {
     334      UpdateSelectors();
    328335      UpdateCrossovers();
    329336      UpdateMutators();
    330337      UpdateAnalyzers();
     338      ParameterizeSelectors();
    331339      ParameterizeManipulator();
    332340      base.Problem_OperatorsChanged(sender, e);
    333341    }
    334342
     343    private void ParameterizeSelectors() {
     344      foreach (ISelector selector in SelectorParameter.ValidValues) {
     345        selector.CopySelected = new BoolValue(true);
     346        selector.NumberOfSelectedSubScopesParameter.Value = new IntValue(4);
     347        selector.NumberOfSelectedSubScopesParameter.Hidden = true;
     348        ParameterizeStochasticOperator(selector);
     349      }
     350      if (Problem != null) {
     351        foreach (IXCSSelector selector in SelectorParameter.ValidValues.OfType<IXCSSelector>()) {
     352          selector.NumerosityParameter.ActualName = Problem.Evaluator.NumerosityParameter.ActualName;
     353          selector.NumerosityParameter.Hidden = true;
     354        }
     355        foreach (ISingleObjectiveSelector selector in SelectorParameter.ValidValues.OfType<ISingleObjectiveSelector>()) {
     356          selector.MaximizationParameter.ActualName = Problem.MaximizationParameter.Name;
     357          selector.MaximizationParameter.Hidden = true;
     358          selector.QualityParameter.ActualName = Problem.Evaluator.FitnessParameter.ActualName;
     359          selector.QualityParameter.Hidden = true;
     360        }
     361      }
     362    }
     363    private void ParameterizeManipulator() {
     364      foreach (var op in Problem.Operators.OfType<IProbabilityMutatorOperator>()) {
     365        op.ProbabilityParameter.ActualName = MutationProbabilityParameter.Name;
     366      }
     367    }
    335368    private void ParameterizeEvaluator(IXCSEvaluator evaluator) {
    336369      evaluator.ActualTimeParameter.ActualName = "Iteration";
     
    339372      evaluator.PowerParameter.ActualName = PowerParameter.Name;
    340373      evaluator.ErrorZeroParameter.ActualName = ErrorZeroParameter.Name;
     374    }
     375    private void ParameterizeStochasticOperator(IOperator op) {
     376      IStochasticOperator stochasticOp = op as IStochasticOperator;
     377      if (stochasticOp != null) {
     378        stochasticOp.RandomParameter.ActualName = RandomCreator.RandomParameter.ActualName;
     379        stochasticOp.RandomParameter.Hidden = true;
     380      }
     381    }
     382
     383    private void UpdateSelectors() {
     384      ISelector oldSelector = SelectorParameter.Value;
     385      SelectorParameter.ValidValues.Clear();
     386      ISelector defaultSelector = Problem.Operators.OfType<IXCSSelector>().FirstOrDefault();
     387      if (defaultSelector == null) {
     388        defaultSelector = Problem.Operators.OfType<ISelector>().FirstOrDefault();
     389      }
     390
     391      foreach (ISelector selector in Problem.Operators.OfType<ISelector>().OrderBy(x => x.Name))
     392        SelectorParameter.ValidValues.Add(selector);
     393
     394      if (oldSelector != null) {
     395        ISelector selector = SelectorParameter.ValidValues.FirstOrDefault(x => x.GetType() == oldSelector.GetType());
     396        if (selector != null) SelectorParameter.Value = selector;
     397        else oldSelector = null;
     398      }
     399      if (oldSelector == null && defaultSelector != null)
     400        SelectorParameter.Value = defaultSelector;
    341401    }
    342402
Note: See TracChangeset for help on using the changeset viewer.