Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
01/17/11 19:17:51 (14 years ago)
Author:
cneumuel
Message:

#1215

  • changed AlgorithType and ProblemType to actually be types not objects. this eliminates redundant views for MetaOptimizationProblem
  • import algorithm for MetaOptimizationProblem
  • nicer dialog for combination creation
  • fixed iconimage for ParameterConfigurations
  • fixed ValidValues
Location:
branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3
Files:
2 added
6 edited

Legend:

Unmodified
Added
Removed
  • branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encoding/ParameterConfigurationTree.cs

    r5303 r5313  
    105105    }
    106106
     107    [Storable]
     108    protected string name;
     109    public string Name {
     110      get { return name; }
     111      set { name = value; }
     112    }
     113
    107114    #region constructors and cloning
    108115    public ParameterConfigurationTree(EngineAlgorithm algorithm)
     
    110117      this.Optimize = true; // root must always be optimized
    111118      this.parameters = new Dictionary<string, IItem>();
    112 
     119      this.Name = algorithm.ItemName;
    113120      PopulateParameterConfigurations(algorithm);
    114121    }
     
    119126    protected ParameterConfigurationTree(ParameterConfigurationTree original, Cloner cloner)
    120127      : base(original, cloner) {
     128      this.name = original.name;
    121129      this.bestQualities = cloner.Clone(original.BestQualities);
    122130      this.averageQualities = cloner.Clone(original.averageQualities);
     
    186194        if (createBatchRuns) {
    187195          BatchRun batchRun = new BatchRun(string.Format("BatchRun: {0}", combination.ParameterInfoString));
    188           batchRun.Algorithm = clonedAlg;
     196          batchRun.Optimizer = clonedAlg;
    189197          batchRun.Repetitions = repetitions;
    190198          experiment.Optimizers.Add(batchRun);
     
    218226      return allOptimizables[random.Next(allOptimizables.Count)];
    219227    }
     228
     229    public override string ToString() {
     230      return this.Name;
     231    }
    220232  }
    221233}
  • branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encoding/ParameterConfigurations/ParameterConfiguration.cs

    r5303 r5313  
    1313using HeuristicLab.Optimization;
    1414using HeuristicLab.Collections;
     15using System.Drawing;
    1516
    1617namespace HeuristicLab.Problems.MetaOptimization {
     
    4344
    4445    [Storable]
     46    private Image itemImage;
     47    public virtual Image ItemImage {
     48      get { return itemImage ?? base.ItemImage; }
     49    }
     50
     51    [Storable]
    4552    protected string parameterName;
    4653    public string ParameterName {
     
    133140      this.validTypes = GetValidTypes(valueParameter).ToArray();
    134141      this.IsNullable = valueParameter.ItemName.StartsWith("Optional");
     142      this.itemImage = valueParameter.ItemImage;
    135143      if (IsNullable) {
    136144        validTypes = new List<Type>(validTypes) { typeof(NullValue) }.ToArray();
    137145      }
    138       this.ValueConfigurations = new CheckedValueConfigurationList();
     146      this.ValueConfigurations = new CheckedValueConfigurationList(this.validValues ?? CreateValidValues());
    139147      this.ActualValue = new ConstrainedValue(
    140148        valueParameter.Value != null ? (IItem)valueParameter.Value.Clone() : null,
     
    162170      this.actualValueConfigurationIndex = original.actualValueConfigurationIndex;
    163171      this.isNullable = original.isNullable;
     172      this.itemImage = original.itemImage;
    164173      if (this.valueConfigurations != null) RegisterValueConfigurationEvents();
    165174    }
     
    246255    }
    247256
    248     private ItemSet<IItem> CreateValidValues() {
     257    private IItemSet<IItem> CreateValidValues() {
    249258      var validValues = new ItemSet<IItem>();
    250259      foreach (Type t in this.validTypes) {
     
    295304    }
    296305    public override string ItemDescription {
    297       //get { return parameter != null ? parameter.Description : base.ItemDescription; }
    298306      get { return base.ItemDescription; }
    299307    }
    300     public override System.Drawing.Image ItemImage {
    301       //get { return parameter != null ? parameter.ItemImage : base.ItemImage; }
    302       get { return base.ItemImage; }
    303     }
    304308    public override string ItemName {
    305       //get { return parameter != null ?parameter.ItemName : base.ItemName; }
    306309      get { return base.ItemName; }
    307310    }
  • branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Encoding/ValueConfigurations/CheckedValueConfigurationCollection.cs

    r5277 r5313  
    2525    }
    2626
    27     public CheckedValueConfigurationList(ItemSet<IItem> validValues) {
     27    public CheckedValueConfigurationList(IItemSet<IItem> validValues) {
    2828      this.validValues = validValues;
    2929      RegisterEvents();
  • branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/Evaluators/ParameterConfigurationEvaluator.cs

    r5303 r5313  
    2727      get { return (ILookupParameter<DoubleValue>)Parameters["Quality"]; }
    2828    }
    29     public ILookupParameter<EngineAlgorithm> AlgorithmParameter {
    30       get { return (ILookupParameter<EngineAlgorithm>)Parameters[MetaOptimizationProblem.AlgorithmTypeParameterName]; }
     29    public ILookupParameter<TypeValue> AlgorithmTypeParameter {
     30      get { return (ILookupParameter<TypeValue>)Parameters[MetaOptimizationProblem.AlgorithmTypeParameterName]; }
    3131    }
    3232    public ILookupParameter<IItemList<ISingleObjectiveProblem>> ProblemsParameter {
     
    5757      : base() {
    5858      Parameters.Add(new LookupParameter<DoubleValue>("Quality", "The evaluated quality of the ParameterVector."));
    59       Parameters.Add(new LookupParameter<EngineAlgorithm>(MetaOptimizationProblem.AlgorithmTypeParameterName, "Missing description."));
     59      Parameters.Add(new LookupParameter<TypeValue>(MetaOptimizationProblem.AlgorithmTypeParameterName, "Missing description."));
    6060      Parameters.Add(new LookupParameter<IItemList<ISingleObjectiveProblem>>(MetaOptimizationProblem.ProblemsParameterName, "Missing description."));
    6161      Parameters.Add(new LookupParameter<ParameterConfigurationTree>("ParameterConfigurationTree", "Missing description."));
     
    7777    public override IOperation Apply() {
    7878      ParameterConfigurationTree parameterConfiguration = ParameterConfigurationParameter.ActualValue;
    79       EngineAlgorithm algorithm = (EngineAlgorithm)AlgorithmParameter.ActualValue;
     79      EngineAlgorithm algorithm = (EngineAlgorithm)Activator.CreateInstance(AlgorithmTypeParameter.ActualValue.Value);
    8080      IItemList<ISingleObjectiveProblem> problems = ProblemsParameter.ActualValue;
    8181      ItemDictionary<StringValue, RunCollection> runsCache = ResultsParameter.ActualValue.ContainsKey("Runs") ? (ItemDictionary<StringValue, RunCollection>)ResultsParameter.ActualValue["Runs"].Value : null;
  • branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/HeuristicLab.Problems.MetaOptimization-3.3.csproj

    r5303 r5313  
    133133  <ItemGroup>
    134134    <Compile Include="Analyzers\BestParameterConfigurationAnalyzer.cs" />
     135    <Compile Include="ConstrainedTypeValue.cs" />
     136    <Compile Include="TypeValue.cs" />
    135137    <None Include="Properties\AssemblyInfo.cs.frame" />
    136138    <None Include="HeuristicLabProblemsMetaOptimizationPlugin.cs.frame" />
  • branches/HeuristicLab.MetaOptimization/HeuristicLab.Problems.MetaOptimization/3.3/MetaOptimizationProblem.cs

    r5303 r5313  
    4040    public const string ProblemTypeParameterName = "ProblemType";
    4141    public const string ProblemsParameterName = "Problems";
    42     public const string ParameterConfigurationTreeParameterName = "InitialParameterConfigurationTree";
     42    public const string ParameterConfigurationTreeParameterName = "ParameterConfigurationTree";
    4343    public const string RepetitionsParameterName = "Repetitions";
    4444
     
    4949
    5050    #region Parameter Properties
    51     public IValueParameter<EngineAlgorithm> AlgorithmTypeParameter {
    52       get { return (ValueParameter<EngineAlgorithm>)Parameters[AlgorithmTypeParameterName]; }
    53     }
    54     public IValueParameter<ISingleObjectiveProblem> ProblemTypeParameter {
    55       get { return (ValueParameter<ISingleObjectiveProblem>)Parameters[ProblemTypeParameterName]; }
     51    public IValueParameter<ConstrainedTypeValue<EngineAlgorithm>> AlgorithmTypeParameter {
     52      get { return (ValueParameter<ConstrainedTypeValue<EngineAlgorithm>>)Parameters[AlgorithmTypeParameterName]; }
     53    }
     54    public IValueParameter<ConstrainedTypeValue<ISingleObjectiveProblem>> ProblemTypeParameter {
     55      get { return (ValueParameter<ConstrainedTypeValue<ISingleObjectiveProblem>>)Parameters[ProblemTypeParameterName]; }
    5656    }
    5757    public IValueParameter<ConstrainedItemList<ISingleObjectiveProblem>> ProblemsParameter {
     
    7676    #region Properties
    7777    public EngineAlgorithm Algorithm {
     78      get { return CreateAlgorithm(AlgorithmType.Value, ProblemType.Value); }
     79    }
     80    public ConstrainedTypeValue<EngineAlgorithm> AlgorithmType {
    7881      get { return AlgorithmTypeParameter.Value; }
    7982      set { AlgorithmTypeParameter.Value = value; }
    8083    }
    81     public ISingleObjectiveProblem Problem {
     84    public ConstrainedTypeValue<ISingleObjectiveProblem> ProblemType {
    8285      get { return ProblemTypeParameter.Value; }
    8386      set { ProblemTypeParameter.Value = value; }
     
    108111    public MetaOptimizationProblem()
    109112      : base() {
    110       Parameters.Add(new ValueParameter<EngineAlgorithm>(AlgorithmTypeParameterName, "The algorithm which's parameters should be optimized.", new GeneticAlgorithm()));
    111       Parameters.Add(new ValueParameter<ISingleObjectiveProblem>(ProblemTypeParameterName, "The problem type.", new SingleObjectiveTestFunctionProblem()));
     113      Parameters.Add(new ValueParameter<ConstrainedTypeValue<EngineAlgorithm>>(AlgorithmTypeParameterName, "The algorithm which's parameters should be optimized.", new ConstrainedTypeValue<EngineAlgorithm>(typeof(GeneticAlgorithm))));
     114      Parameters.Add(new ValueParameter<ConstrainedTypeValue<ISingleObjectiveProblem>>(ProblemTypeParameterName, "The problem type.", new ConstrainedTypeValue<ISingleObjectiveProblem>(typeof(SingleObjectiveTestFunctionProblem))));
    112115      Parameters.Add(new ValueParameter<ConstrainedItemList<ISingleObjectiveProblem>>(ProblemsParameterName, "The problems that should be evaluated.", new ConstrainedItemList<ISingleObjectiveProblem>()));
    113116      Parameters.Add(new ValueParameter<ParameterConfigurationTree>(ParameterConfigurationTreeParameterName, "Tree of algorithm parameters that should be optimized."));
     
    134137      ParameterizeOperators();
    135138
    136       Problems.Type = Problem.GetType();
    137       Algorithm.Problem = Problem;
    138       ParameterConfigurationTreeParameter.ActualValue = new ParameterConfigurationTree(Algorithm);
     139      ProblemTypeParameter_ValueChanged(this, EventArgs.Empty);
    139140    }
    140141
     
    143144    private MetaOptimizationProblem(MetaOptimizationProblem original, Cloner cloner)
    144145      : base(original, cloner) {
    145       // todo
    146146      this.RegisterParameterEvents();
    147147    }
     
    160160      Evaluator.QualityParameter.ActualNameChanged += new EventHandler(Evaluator_QualityParameter_ActualNameChanged);
    161161      AlgorithmTypeParameter.ValueChanged += new EventHandler(AlgorithmTypeParameter_ValueChanged);
     162      AlgorithmType.ValueChanged += new EventHandler(AlgorithmType_ValueChanged);
    162163      ProblemTypeParameter.ValueChanged += new EventHandler(ProblemTypeParameter_ValueChanged);
     164      ProblemType.ValueChanged += new EventHandler(ProblemType_ValueChanged);
    163165    }
    164166
     
    215217      ParameterizeAnalyzer();
    216218    }
    217     void AlgorithmTypeParameter_ValueChanged(object sender, EventArgs e) {
    218       Algorithm.Problem = Problem;
    219       ParameterConfigurationTreeParameter.ActualValue = new ParameterConfigurationTree(Algorithm);
    220     }
    221     void ProblemTypeParameter_ValueChanged(object sender, EventArgs e) {
    222       Problems.Type = Problem.GetType();
    223       Algorithm.Problem = Problem;
    224       ParameterConfigurationTreeParameter.ActualValue = new ParameterConfigurationTree(Algorithm);
    225     }
    226     #endregion
     219    private void AlgorithmTypeParameter_ValueChanged(object sender, EventArgs e) {
     220      AlgorithmType_ValueChanged(sender, e);
     221    }
     222
     223    private void AlgorithmType_ValueChanged(object sender, EventArgs e) {
     224      ParameterConfigurationTreeParameter.ActualValue = new ParameterConfigurationTree(CreateAlgorithm(AlgorithmType.Value, ProblemType.Value));
     225    }
     226
     227    private void ProblemTypeParameter_ValueChanged(object sender, EventArgs e) {
     228      ProblemType_ValueChanged(sender, e);
     229    }
     230
     231    private void ProblemType_ValueChanged(object sender, EventArgs e) {
     232      Problems.Clear();
     233      Problems.Type = ProblemType.Value;
     234      ParameterConfigurationTreeParameter.ActualValue = new ParameterConfigurationTree(CreateAlgorithm(AlgorithmType.Value, ProblemType.Value));
     235    }
     236    #endregion
     237
     238    private EngineAlgorithm CreateAlgorithm(Type algorithmType, Type problemType) {
     239      EngineAlgorithm algorithm = (EngineAlgorithm)Activator.CreateInstance(algorithmType);
     240      algorithm.Problem = (IProblem)Activator.CreateInstance(problemType);
     241      return algorithm;
     242    }
     243
     244    public void ImportAlgorithm(EngineAlgorithm algorithm) {
     245      AlgorithmType.Value = algorithm.GetType();
     246      if(algorithm.Problem != null) ProblemType.Value = algorithm.Problem.GetType();
     247      ParameterConfigurationTreeParameter.ActualValue = new ParameterConfigurationTree(algorithm);
     248      if(algorithm.Problem != null) Problems.Add((ISingleObjectiveProblem)algorithm.Problem);
     249    }
    227250  }
    228251}
Note: See TracChangeset for help on using the changeset viewer.