Changeset 11396


Ignore:
Timestamp:
09/27/14 18:30:43 (5 years ago)
Author:
abeham
Message:

#2174:

  • Added analyzer operator that will call into the analyze function
  • Added helper class for creating a parameter vector
  • Added parameters to the interfaces and improved wiring
Location:
branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3
Files:
3 added
6 edited

Legend:

Unmodified
Added
Removed
  • branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/HeuristicLab.Problems.Programmable-3.3.csproj

    r11393 r11396  
    138138    <Compile Include="Datastructures\ParameterConfiguration.cs" />
    139139    <Compile Include="Datastructures\ParameterVector.cs" />
     140    <Compile Include="Helper.cs" />
    140141    <Compile Include="Interfaces\IParameterVectorMoveOperator.cs" />
    141142    <Compile Include="Interfaces\ISingleObjectiveProblemDefinitionHost.cs" />
     143    <Compile Include="Interfaces\ISingleObjectiveProgrammableProblemAnalyzer.cs" />
    142144    <Compile Include="Interfaces\ISingleObjectiveProgrammableProblemEvaluator.cs" />
    143145    <Compile Include="Operators\ParameterVectorManipulator.cs" />
     
    146148    <Compile Include="Operators\ParameterVectorMoveGenerator.cs" />
    147149    <Compile Include="Operators\ParameterVectorMoveMaker.cs" />
     150    <Compile Include="Operators\SingleObjectiveAnalyzer.cs" />
    148151    <Compile Include="Operators\SingleObjectiveEvaluator.cs" />
    149152    <Compile Include="Operators\ParameterVectorCreater.cs" />
  • branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/Interfaces/ISingleObjectiveProgrammableProblemEvaluator.cs

    r10753 r11396  
    2020#endregion
    2121
     22using HeuristicLab.Core;
    2223using HeuristicLab.Optimization;
    2324
    2425namespace HeuristicLab.Problems.Programmable {
    2526  public interface ISingleObjectiveProgrammableProblemEvaluator : ISingleObjectiveEvaluator {
     27    ILookupParameter<ISingleObjectiveProblemDefinitionHost> ProblemDefinitionParameter { get; }
     28    ILookupParameter<Configuration> ConfigurationParameter { get; }
    2629  }
    2730}
  • branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/Operators/ParameterVectorMoveEvaluator.cs

    r11393 r11396  
    2121
    2222using System;
    23 using System.Collections.Generic;
    2423using HeuristicLab.Common;
    2524using HeuristicLab.Core;
    2625using HeuristicLab.Data;
    27 using HeuristicLab.Encodings.BinaryVectorEncoding;
    28 using HeuristicLab.Encodings.IntegerVectorEncoding;
    29 using HeuristicLab.Encodings.PermutationEncoding;
    30 using HeuristicLab.Encodings.RealVectorEncoding;
    3126using HeuristicLab.Operators;
    3227using HeuristicLab.Optimization;
     
    7974      if (host.Instance == null) throw new InvalidOperationException("Problem definition instance is null.");
    8075      var config = ConfigurationParameter.ActualValue;
    81       var binDict = new Dictionary<string, BinaryVector>();
    82       var intDict = new Dictionary<string, IntegerVector>();
    83       var realDict = new Dictionary<string, RealVector>();
    84       var permDict = new Dictionary<string, Permutation>();
    85       foreach (var param in config.Parameters) {
    86         var binConfig = param.Value as BinaryParameterConfiguration;
    87         if (binConfig != null) {
    88           binDict.Add(param.Key, (BinaryVector)ExecutionContext.Scope.Variables[param.Key].Value);
    89           continue;
    90         }
    91         var intConfig = param.Value as IntegerParameterConfiguration;
    92         if (intConfig != null) {
    93           intDict.Add(param.Key, (IntegerVector)ExecutionContext.Scope.Variables[param.Key].Value);
    94           continue;
    95         }
    96         var realConfig = param.Value as RealParameterConfiguration;
    97         if (realConfig != null) {
    98           realDict.Add(param.Key, (RealVector)ExecutionContext.Scope.Variables[param.Key].Value);
    99           continue;
    100         }
    101         var permConfig = param.Value as PermutationParameterConfiguration;
    102         if (permConfig != null) {
    103           permDict.Add(param.Key, (Permutation)ExecutionContext.Scope.Variables[param.Key].Value);
    104           continue;
    105         }
    106         throw new InvalidOperationException("Parameter " + param.Key + " not found.");
    107       }
    108       var vector = new ParameterVector(
    109         binaryVectors: binDict.Count > 0 ? binDict : null,
    110         integerVectors: intDict.Count > 0 ? intDict : null,
    111         realVectors: realDict.Count > 0 ? realDict : null,
    112         permutations: permDict.Count > 0 ? permDict : null);
     76      var vector = Helper.Extract(ExecutionContext.Scope, config);
    11377      MoveQualityParameter.ActualValue = new DoubleValue(host.Instance.Evaluate(random, vector));
    11478      return base.InstrumentedApply();
  • branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/Operators/ParameterVectorMoveGenerator.cs

    r11393 r11396  
    2121
    2222using System;
    23 using System.Collections.Generic;
    2423using System.Linq;
    2524using HeuristicLab.Common;
    2625using HeuristicLab.Core;
    2726using HeuristicLab.Data;
    28 using HeuristicLab.Encodings.BinaryVectorEncoding;
    29 using HeuristicLab.Encodings.IntegerVectorEncoding;
    30 using HeuristicLab.Encodings.PermutationEncoding;
    31 using HeuristicLab.Encodings.RealVectorEncoding;
    3227using HeuristicLab.Operators;
    3328using HeuristicLab.Optimization;
     
    7772      var sampleSize = SampleSizeParameter.ActualValue.Value;
    7873      var config = ConfigurationParameter.ActualValue;
    79       var binDict = new Dictionary<string, BinaryVector>();
    80       var intDict = new Dictionary<string, IntegerVector>();
    81       var realDict = new Dictionary<string, RealVector>();
    82       var permDict = new Dictionary<string, Permutation>();
    83       foreach (var param in config.Parameters) {
    84         var binConfig = param.Value as BinaryParameterConfiguration;
    85         if (binConfig != null) {
    86           binDict.Add(param.Key, (BinaryVector)ExecutionContext.Scope.Variables[param.Key].Value);
    87           continue;
    88         }
    89         var intConfig = param.Value as IntegerParameterConfiguration;
    90         if (intConfig != null) {
    91           intDict.Add(param.Key, (IntegerVector)ExecutionContext.Scope.Variables[param.Key].Value);
    92           continue;
    93         }
    94         var realConfig = param.Value as RealParameterConfiguration;
    95         if (realConfig != null) {
    96           realDict.Add(param.Key, (RealVector)ExecutionContext.Scope.Variables[param.Key].Value);
    97           continue;
    98         }
    99         var permConfig = param.Value as PermutationParameterConfiguration;
    100         if (permConfig != null) {
    101           permDict.Add(param.Key, (Permutation)ExecutionContext.Scope.Variables[param.Key].Value);
    102           continue;
    103         }
    104         throw new InvalidOperationException("Parameter " + param.Key + " not found.");
    105       }
    106       var vector = new ParameterVector(
    107         binaryVectors: binDict.Count > 0 ? binDict : null,
    108         integerVectors: intDict.Count > 0 ? intDict : null,
    109         realVectors: realDict.Count > 0 ? realDict : null,
    110         permutations: permDict.Count > 0 ? permDict : null);
     74      var vector = Helper.Extract(ExecutionContext.Scope, config);
    11175      var nbhood = host.Instance.GetNeighbors(random, vector).Take(sampleSize).ToList();
    11276
  • branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/Operators/SingleObjectiveEvaluator.cs

    r11393 r11396  
    2121
    2222using System;
    23 using System.Collections.Generic;
    2423using HeuristicLab.Common;
    2524using HeuristicLab.Core;
    2625using HeuristicLab.Data;
    27 using HeuristicLab.Encodings.BinaryVectorEncoding;
    28 using HeuristicLab.Encodings.IntegerVectorEncoding;
    29 using HeuristicLab.Encodings.PermutationEncoding;
    30 using HeuristicLab.Encodings.RealVectorEncoding;
    3126using HeuristicLab.Operators;
    3227using HeuristicLab.Optimization;
     
    7469      if (host.Instance == null) throw new InvalidOperationException("Script instance is null, maybe the code doesn't compile.");
    7570      var config = ConfigurationParameter.ActualValue;
    76       var binDict = new Dictionary<string, BinaryVector>();
    77       var intDict = new Dictionary<string, IntegerVector>();
    78       var realDict = new Dictionary<string, RealVector>();
    79       var permDict = new Dictionary<string, Permutation>();
    80       foreach (var param in config.Parameters) {
    81         var binConfig = param.Value as BinaryParameterConfiguration;
    82         if (binConfig != null) {
    83           binDict.Add(param.Key, (BinaryVector)ExecutionContext.Scope.Variables[param.Key].Value);
    84           continue;
    85         }
    86         var intConfig = param.Value as IntegerParameterConfiguration;
    87         if (intConfig != null) {
    88           intDict.Add(param.Key, (IntegerVector)ExecutionContext.Scope.Variables[param.Key].Value);
    89           continue;
    90         }
    91         var realConfig = param.Value as RealParameterConfiguration;
    92         if (realConfig != null) {
    93           realDict.Add(param.Key, (RealVector)ExecutionContext.Scope.Variables[param.Key].Value);
    94           continue;
    95         }
    96         var permConfig = param.Value as PermutationParameterConfiguration;
    97         if (permConfig != null) {
    98           permDict.Add(param.Key, (Permutation)ExecutionContext.Scope.Variables[param.Key].Value);
    99           continue;
    100         }
    101         throw new InvalidOperationException("Parameter " + param.Key + " not found.");
    102       }
    103       var vector = new ParameterVector(
    104         binaryVectors: binDict.Count > 0 ? binDict : null,
    105         integerVectors: intDict.Count > 0 ? intDict : null,
    106         realVectors: realDict.Count > 0 ? realDict : null,
    107         permutations: permDict.Count > 0 ? permDict : null);
     71      var vector = Helper.Extract(ExecutionContext.Scope, config);
    10872      QualityParameter.ActualValue = new DoubleValue(host.Instance.Evaluate(random, vector));
    10973      return base.Apply();
  • branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/SingleObjectiveProgrammableProblem.cs

    r11395 r11396  
    8787
    8888      Operators.Add(new BestScopeSolutionAnalyzer());
     89      Operators.Add(new SingleObjectiveAnalyzer());
    8990      Operators.Add(Evaluator);
    9091      Operators.Add(SolutionCreator);
     
    127128      base.OnNameChanged();
    128129      ProblemDefinitionParameter.Value.Name = Name;
     130    }
     131
     132    protected override void OnEvaluatorChanged() {
     133      base.OnEvaluatorChanged();
     134      Parameterize();
    129135    }
    130136
     
    143149      ConfigurationParameter.Value = configuration;
    144150      Maximization.Value = instance.IsMaximizationProblem;
     151
     152      Evaluator.ConfigurationParameter.ActualName = ConfigurationParameter.Name;
     153      Evaluator.ProblemDefinitionParameter.ActualName = ProblemDefinitionParameter.Name;
     154      foreach (var evalOp in Operators.OfType<ISingleObjectiveProgrammableProblemEvaluator>()) {
     155        evalOp.ConfigurationParameter.ActualName = ConfigurationParameter.Name;
     156        evalOp.ProblemDefinitionParameter.ActualName = ProblemDefinitionParameter.Name;
     157      }
     158      foreach (var analyzeOp in Operators.OfType<ISingleObjectiveProgrammableProblemAnalyzer>()) {
     159        analyzeOp.ConfigurationParameter.ActualName = ConfigurationParameter.Name;
     160        analyzeOp.ProblemDefinitionParameter.ActualName = ProblemDefinitionParameter.Name;
     161        analyzeOp.QualityParameter.ActualName = Evaluator.QualityParameter.ActualName;
     162      }
    145163
    146164      var solutionCreators = UpdateDynamicConfigurationParameters(configuration);
Note: See TracChangeset for help on using the changeset viewer.