Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
03/17/10 13:24:11 (14 years ago)
Author:
swagner
Message:

Implemented first version of best and best known quality handling (#920)

Location:
trunk/sources/HeuristicLab.Algorithms.SGA/3.3
Files:
2 edited

Legend:

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

    r3076 r3080  
    249249    }
    250250    private void ParameterizeSGAMainLoop() {
     251      SGAMainLoop.BestKnownQualityParameter.ActualName = Problem.BestKnownQualityParameter.Name;
    251252      SGAMainLoop.EvaluatorParameter.ActualName = Problem.EvaluatorParameter.Name;
    252253      SGAMainLoop.MaximizationParameter.ActualName = Problem.MaximizationParameter.Name;
  • trunk/sources/HeuristicLab.Algorithms.SGA/3.3/SGAMainLoop.cs

    r3048 r3080  
    3636  [Creatable("Test")]
    3737  [StorableClass]
    38   public class SGAMainLoop : AlgorithmOperator {
     38  public sealed class SGAMainLoop : AlgorithmOperator {
    3939    #region Parameter properties
    4040    public ValueLookupParameter<IRandom> RandomParameter {
     
    4747      get { return (SubScopesLookupParameter<DoubleValue>)Parameters["Quality"]; }
    4848    }
     49    public ValueLookupParameter<DoubleValue> BestKnownQualityParameter {
     50      get { return (ValueLookupParameter<DoubleValue>)Parameters["BestKnownQuality"]; }
     51    }
    4952    public ValueLookupParameter<IOperator> SelectorParameter {
    5053      get { return (ValueLookupParameter<IOperator>)Parameters["Selector"]; }
     
    8083    #endregion
    8184
     85    [StorableConstructor]
     86    private SGAMainLoop(bool deserializing) : base() { }
    8287    public SGAMainLoop()
    8388      : base() {
     89      Initialize();
     90    }
     91
     92    private void Initialize() {
    8493      #region Create parameters
    8594      Parameters.Add(new ValueLookupParameter<IRandom>("Random", "A pseudo random number generator."));
    8695      Parameters.Add(new ValueLookupParameter<BoolValue>("Maximization", "True if the problem is a maximization problem, otherwise false."));
    8796      Parameters.Add(new SubScopesLookupParameter<DoubleValue>("Quality", "The value which represents the quality of a solution."));
     97      Parameters.Add(new ValueLookupParameter<DoubleValue>("BestKnownQuality", "The best known quality value found so far."));
    8898      Parameters.Add(new ValueLookupParameter<IOperator>("Selector", "The operator used to select solutions for reproduction."));
    8999      Parameters.Add(new ValueLookupParameter<IOperator>("Crossover", "The operator used to cross solutions."));
     
    97107      #endregion
    98108
    99       #region Create operator graph
     109      #region Create operators
    100110      VariableCreator variableCreator = new VariableCreator();
     111      BestQualityMemorizer bestQualityMemorizer1 = new BestQualityMemorizer();
     112      BestAverageWorstQualityCalculator bestAverageWorstQualityCalculator1 = new BestAverageWorstQualityCalculator();
     113      DataTableValuesCollector dataTableValuesCollector1 = new DataTableValuesCollector();
    101114      ResultsCollector resultsCollector = new ResultsCollector();
    102115      SubScopesSorter subScopesSorter1 = new SubScopesSorter();
     
    117130      IntCounter intCounter = new IntCounter();
    118131      Comparator comparator = new Comparator();
    119       BestAverageWorstQualityCalculator bestAverageWorstQualityCalculator = new BestAverageWorstQualityCalculator();
    120       DataTableValuesCollector dataTableValuesCollector = new DataTableValuesCollector();
     132      BestQualityMemorizer bestQualityMemorizer2 = new BestQualityMemorizer();
     133      BestAverageWorstQualityCalculator bestAverageWorstQualityCalculator2 = new BestAverageWorstQualityCalculator();
     134      DataTableValuesCollector dataTableValuesCollector2 = new DataTableValuesCollector();
    121135      ConditionalBranch conditionalBranch = new ConditionalBranch();
    122136
    123       OperatorGraph.InitialOperator = variableCreator;
    124 
    125137      variableCreator.CollectedValues.Add(new ValueParameter<IntValue>("Generations", new IntValue(0)));
    126       variableCreator.CollectedValues.Add(new ValueParameter<DoubleValue>("Best Quality", new DoubleValue(0)));
    127       variableCreator.CollectedValues.Add(new ValueParameter<DoubleValue>("Average Quality", new DoubleValue(0)));
    128       variableCreator.CollectedValues.Add(new ValueParameter<DoubleValue>("Worst Quality", new DoubleValue(0)));
    129       variableCreator.CollectedValues.Add(new ValueParameter<DataTable>("Qualities", new DataTable("Qualities")));
    130       variableCreator.Successor = resultsCollector;
     138
     139      bestQualityMemorizer1.BestQualityParameter.ActualName = "Best Quality";
     140      bestQualityMemorizer1.MaximizationParameter.ActualName = "Maximization";
     141      bestQualityMemorizer1.QualityParameter.ActualName = "Quality";
     142
     143      bestAverageWorstQualityCalculator1.AverageQualityParameter.ActualName = "Current Average Quality";
     144      bestAverageWorstQualityCalculator1.BestQualityParameter.ActualName = "Current Best Quality";
     145      bestAverageWorstQualityCalculator1.MaximizationParameter.ActualName = "Maximization";
     146      bestAverageWorstQualityCalculator1.QualityParameter.ActualName = "Quality";
     147      bestAverageWorstQualityCalculator1.WorstQualityParameter.ActualName = "Current Worst Quality";
     148
     149      dataTableValuesCollector1.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Best Quality"));
     150      dataTableValuesCollector1.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Average Quality"));
     151      dataTableValuesCollector1.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Worst Quality"));
     152      dataTableValuesCollector1.CollectedValues.Add(new LookupParameter<DoubleValue>("Best Quality"));
     153      dataTableValuesCollector1.CollectedValues.Add(new LookupParameter<DoubleValue>("Best Known Quality", null, "BestKnownQuality"));
     154      dataTableValuesCollector1.DataTableParameter.ActualName = "Qualities";
    131155
    132156      resultsCollector.CollectedValues.Add(new LookupParameter<IntValue>("Generations"));
     157      resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Best Quality"));
     158      resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Average Quality"));
     159      resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Worst Quality"));
    133160      resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Best Quality"));
    134       resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Average Quality"));
    135       resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Worst Quality"));
     161      resultsCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Best Known Quality", null, "BestKnownQuality"));
    136162      resultsCollector.CollectedValues.Add(new LookupParameter<DataTable>("Qualities"));
    137163      resultsCollector.ResultsParameter.ActualName = "Results";
    138       resultsCollector.Successor = subScopesSorter1;
    139164
    140165      subScopesSorter1.DescendingParameter.ActualName = "Maximization";
    141166      subScopesSorter1.ValueParameter.ActualName = "Quality";
    142       subScopesSorter1.Successor = selector;
    143167
    144168      selector.Name = "Selector";
    145169      selector.OperatorParameter.ActualName = "Selector";
    146       selector.Successor = sequentialSubScopesProcessor1;
    147 
    148       sequentialSubScopesProcessor1.Operators.Add(new EmptyOperator());
    149       sequentialSubScopesProcessor1.Operators.Add(childrenCreator);
    150       sequentialSubScopesProcessor1.Successor = sequentialSubScopesProcessor2;
    151170
    152171      childrenCreator.ParentsPerChild = new IntValue(2);
    153       childrenCreator.Successor = uniformSequentialSubScopesProcessor;
    154 
    155       uniformSequentialSubScopesProcessor.Operator = crossover;
    156       uniformSequentialSubScopesProcessor.Successor = subScopesSorter2;
    157172
    158173      crossover.Name = "Crossover";
    159174      crossover.OperatorParameter.ActualName = "Crossover";
    160       crossover.Successor = stochasticBranch;
    161 
    162       stochasticBranch.FirstBranch = mutator;
     175
    163176      stochasticBranch.ProbabilityParameter.ActualName = "MutationProbability";
    164177      stochasticBranch.RandomParameter.ActualName = "Random";
    165       stochasticBranch.SecondBranch = null;
    166       stochasticBranch.Successor = evaluator;
    167178
    168179      mutator.Name = "Mutator";
    169180      mutator.OperatorParameter.ActualName = "Mutator";
    170       mutator.Successor = null;
    171181
    172182      evaluator.Name = "Evaluator";
    173183      evaluator.OperatorParameter.ActualName = "Evaluator";
    174       evaluator.Successor = subScopesRemover;
    175184
    176185      subScopesRemover.RemoveAllSubScopes = true;
    177       subScopesRemover.Successor = null;
    178186
    179187      subScopesSorter2.DescendingParameter.ActualName = "Maximization";
    180188      subScopesSorter2.ValueParameter.ActualName = "Quality";
    181       subScopesSorter2.Successor = null;
    182 
    183       sequentialSubScopesProcessor2.Operators.Add(leftSelector);
    184       sequentialSubScopesProcessor2.Operators.Add(new EmptyOperator());
    185       sequentialSubScopesProcessor2.Successor = mergingReducer;
    186189
    187190      leftSelector.CopySelected = new BoolValue(false);
    188191      leftSelector.NumberOfSelectedSubScopesParameter.ActualName = "Elites";
    189       leftSelector.Successor = rightReducer;
    190 
    191       rightReducer.Successor = null;
    192 
    193       mergingReducer.Successor = intCounter;
    194192
    195193      intCounter.Increment = new IntValue(1);
    196194      intCounter.ValueParameter.ActualName = "Generations";
    197       intCounter.Successor = comparator;
    198195
    199196      comparator.Comparison = new Comparison(ComparisonType.GreaterOrEqual);
     
    201198      comparator.ResultParameter.ActualName = "Terminate";
    202199      comparator.RightSideParameter.ActualName = "MaximumGenerations";
    203       comparator.Successor = bestAverageWorstQualityCalculator;
    204 
    205       bestAverageWorstQualityCalculator.AverageQualityParameter.ActualName = "Average Quality";
    206       bestAverageWorstQualityCalculator.BestQualityParameter.ActualName = "Best Quality";
    207       bestAverageWorstQualityCalculator.MaximizationParameter.ActualName = "Maximization";
    208       bestAverageWorstQualityCalculator.QualityParameter.ActualName = "Quality";
    209       bestAverageWorstQualityCalculator.WorstQualityParameter.ActualName = "Worst Quality";
    210       bestAverageWorstQualityCalculator.Successor = dataTableValuesCollector;
    211 
    212       dataTableValuesCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Best Quality"));
    213       dataTableValuesCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Average Quality"));
    214       dataTableValuesCollector.CollectedValues.Add(new LookupParameter<DoubleValue>("Worst Quality"));
    215       dataTableValuesCollector.DataTableParameter.ActualName = "Qualities";
    216       dataTableValuesCollector.Successor = conditionalBranch;
     200
     201      bestQualityMemorizer2.BestQualityParameter.ActualName = "Best Quality";
     202      bestQualityMemorizer2.MaximizationParameter.ActualName = "Maximization";
     203      bestQualityMemorizer2.QualityParameter.ActualName = "Quality";
     204
     205      bestAverageWorstQualityCalculator2.AverageQualityParameter.ActualName = "Current Average Quality";
     206      bestAverageWorstQualityCalculator2.BestQualityParameter.ActualName = "Current Best Quality";
     207      bestAverageWorstQualityCalculator2.MaximizationParameter.ActualName = "Maximization";
     208      bestAverageWorstQualityCalculator2.QualityParameter.ActualName = "Quality";
     209      bestAverageWorstQualityCalculator2.WorstQualityParameter.ActualName = "Current Worst Quality";
     210
     211      dataTableValuesCollector2.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Best Quality"));
     212      dataTableValuesCollector2.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Average Quality"));
     213      dataTableValuesCollector2.CollectedValues.Add(new LookupParameter<DoubleValue>("Current Worst Quality"));
     214      dataTableValuesCollector2.CollectedValues.Add(new LookupParameter<DoubleValue>("Best Quality"));
     215      dataTableValuesCollector2.CollectedValues.Add(new LookupParameter<DoubleValue>("Best Known Quality", null, "BestKnownQuality"));
     216      dataTableValuesCollector2.DataTableParameter.ActualName = "Qualities";
    217217
    218218      conditionalBranch.ConditionParameter.ActualName = "Terminate";
     219      #endregion
     220
     221      #region Create operator graph
     222      OperatorGraph.InitialOperator = variableCreator;
     223      variableCreator.Successor = bestQualityMemorizer1;
     224      bestQualityMemorizer1.Successor = bestAverageWorstQualityCalculator1;
     225      bestAverageWorstQualityCalculator1.Successor = dataTableValuesCollector1;
     226      dataTableValuesCollector1.Successor = resultsCollector;
     227      resultsCollector.Successor = subScopesSorter1;
     228      subScopesSorter1.Successor = selector;
     229      selector.Successor = sequentialSubScopesProcessor1;
     230      sequentialSubScopesProcessor1.Operators.Add(new EmptyOperator());
     231      sequentialSubScopesProcessor1.Operators.Add(childrenCreator);
     232      sequentialSubScopesProcessor1.Successor = sequentialSubScopesProcessor2;
     233      childrenCreator.Successor = uniformSequentialSubScopesProcessor;
     234      uniformSequentialSubScopesProcessor.Operator = crossover;
     235      uniformSequentialSubScopesProcessor.Successor = subScopesSorter2;
     236      crossover.Successor = stochasticBranch;
     237      stochasticBranch.FirstBranch = mutator;
     238      stochasticBranch.SecondBranch = null;
     239      stochasticBranch.Successor = evaluator;
     240      mutator.Successor = null;
     241      evaluator.Successor = subScopesRemover;
     242      subScopesRemover.Successor = null;
     243      subScopesSorter2.Successor = null;
     244      sequentialSubScopesProcessor2.Operators.Add(leftSelector);
     245      sequentialSubScopesProcessor2.Operators.Add(new EmptyOperator());
     246      sequentialSubScopesProcessor2.Successor = mergingReducer;
     247      leftSelector.Successor = rightReducer;
     248      rightReducer.Successor = null;
     249      mergingReducer.Successor = intCounter;
     250      intCounter.Successor = comparator;
     251      comparator.Successor = bestQualityMemorizer2;
     252      bestQualityMemorizer2.Successor = bestAverageWorstQualityCalculator2;
     253      bestAverageWorstQualityCalculator2.Successor = dataTableValuesCollector2;
     254      dataTableValuesCollector2.Successor = conditionalBranch;
    219255      conditionalBranch.FalseBranch = subScopesSorter1;
    220256      conditionalBranch.TrueBranch = null;
Note: See TracChangeset for help on using the changeset viewer.