Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
03/03/10 06:46:30 (14 years ago)
Author:
swagner
Message:

Operator architecture refactoring (#95)

  • implemented reviewers' comments
Location:
trunk/sources/HeuristicLab.Algorithms.SGA/3.3
Files:
3 edited

Legend:

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

    r2891 r2917  
    108108      OperatorGraph.InitialOperator = randomCreator;
    109109
    110       var selectors = ApplicationManager.Manager.GetInstances<ISelector>().Where(x => !(x is IMultiObjectiveSelector));
    111       foreach (ISelector selector in selectors) {
    112         selector.CopySelected = new BoolData(true);
    113         selector.NumberOfSelectedSubScopesParameter.Value = new IntData(2 * (PopulationSizeParameter.Value.Value - ElitesParameter.Value.Value));
    114         if (selector is IStochasticOperator) ((IStochasticOperator)selector).RandomParameter.ActualName = "Random";
    115         SelectorParameter.ValidValues.Add(selector);
     110      if (ApplicationManager.Manager != null) {
     111        var selectors = ApplicationManager.Manager.GetInstances<ISelector>().Where(x => !(x is IMultiObjectiveSelector)).OrderBy(x => x.Name);
     112        foreach (ISelector selector in selectors) {
     113          selector.CopySelected = new BoolData(true);
     114          selector.NumberOfSelectedSubScopesParameter.Value = new IntData(2 * (PopulationSizeParameter.Value.Value - ElitesParameter.Value.Value));
     115          if (selector is IStochasticOperator) ((IStochasticOperator)selector).RandomParameter.ActualName = "Random";
     116          SelectorParameter.ValidValues.Add(selector);
     117        }
    116118      }
    117119    }
     
    159161      }
    160162
     163      ICrossover oldCrossover = CrossoverParameter.Value;
    161164      CrossoverParameter.ValidValues.Clear();
    162       foreach (ICrossover crossover in Problem.Operators.OfType<ICrossover>())
     165      foreach (ICrossover crossover in Problem.Operators.OfType<ICrossover>().OrderBy(x => x.Name))
    163166        CrossoverParameter.ValidValues.Add(crossover);
    164 
     167      if (oldCrossover != null) {
     168        CrossoverParameter.Value = CrossoverParameter.ValidValues.FirstOrDefault(x => x.GetType() == oldCrossover.GetType());
     169      }
     170
     171      IManipulator oldMutator = MutatorParameter.Value;
    165172      MutatorParameter.ValidValues.Clear();
    166       foreach (IManipulator mutator in Problem.Operators.OfType<IManipulator>())
     173      foreach (IManipulator mutator in Problem.Operators.OfType<IManipulator>().OrderBy(x => x.Name))
    167174        MutatorParameter.ValidValues.Add(mutator);
     175      if (oldMutator != null) {
     176        MutatorParameter.Value = MutatorParameter.ValidValues.FirstOrDefault(x => x.GetType() == oldMutator.GetType());
     177      }
    168178
    169179      base.OnProblemChanged();
  • trunk/sources/HeuristicLab.Algorithms.SGA/3.3/Tests/UnitTest.cs

    r2916 r2917  
    2222using System;
    2323using System.Threading;
     24using HeuristicLab.Common;
    2425using HeuristicLab.Optimization;
    2526using HeuristicLab.Persistence.Default.Xml;
     
    7677
    7778    private EventWaitHandle trigger = new AutoResetEvent(false);
     79    private Exception ex;
    7880
    7981    [TestMethod]
    8082    [DeploymentItem(@"SGA.hl")]
    8183    public void SGAPerformanceTest() {
     84      ex = null;
    8285      IAlgorithm sga = (IAlgorithm)XmlParser.Deserialize("SGA.hl");
     86      sga.ExceptionOccurred += new EventHandler<EventArgs<Exception>>(sga_ExceptionOccurred);
    8387      sga.Stopped += new EventHandler(sga_Stopped);
    8488      sga.Prepare();
     
    8690      trigger.WaitOne();
    8791      TestContext.WriteLine("Runtime: {0}", sga.ExecutionTime.ToString());
     92      if (ex != null) throw ex;
     93    }
     94
     95    void sga_ExceptionOccurred(object sender, EventArgs<Exception> e) {
     96      ex = e.Value;
    8897    }
    8998
Note: See TracChangeset for help on using the changeset viewer.