Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
09/26/14 22:57:18 (10 years ago)
Author:
abeham
Message:

#2174: enabled possibility to set different problem definitions than just scripted ones

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/SingleObjectiveProgrammableProblem.cs

    r11363 r11393  
    5555    }
    5656
    57     public IValueParameter<SingleObjectiveScript> ScriptParameter {
    58       get { return (IValueParameter<SingleObjectiveScript>)Parameters["Script"]; }
    59     }
    60 
    61     public IValueParameter<Configuration> ConfigurationParameter {
     57    public IValueParameter<ISingleObjectiveProblemDefinitionHost> ProblemDefinitionParameter {
     58      get { return (IValueParameter<ISingleObjectiveProblemDefinitionHost>)Parameters["ProblemDefinition"]; }
     59    }
     60
     61    protected IValueParameter<Configuration> ConfigurationParameter {
    6262      get { return (IValueParameter<Configuration>)Parameters["Configuration"]; }
     63    }
     64
     65    public ISingleObjectiveProblemDefinitionHost ProblemDefinition {
     66      get { return ProblemDefinitionParameter.Value; }
     67      set { ProblemDefinitionParameter.Value = value; }
    6368    }
    6469
     
    7681    public SingleObjectiveProgrammableProblem()
    7782      : base(new SingleObjectiveEvaluator(), new ParameterVectorCreater()) {
    78       Parameters.Add(new ValueParameter<SingleObjectiveScript>("Script", "Defines the problem.", new SingleObjectiveScript() { Name = Name }));
     83      Parameters.Add(new ValueParameter<ISingleObjectiveProblemDefinitionHost>("ProblemDefinition", "Defines the problem.", new SingleObjectiveProblemDefinitionScript() { Name = Name }));
    7984      Parameters.Add(new ValueParameter<Configuration>("Configuration", "Describes which parameters exist, what they're called, what type they are and their bounds if any."));
    8085
     
    100105
    101106    private void RegisterEventHandlers() {
    102       ScriptParameter.ValueChanged += ScriptParameterOnValueChanged;
    103       RegisterScriptInstanceChanges();
    104     }
    105 
    106     private void ScriptParameterOnValueChanged(object sender, EventArgs eventArgs) {
    107       RegisterScriptInstanceChanges();
    108     }
    109 
    110     private void RegisterScriptInstanceChanges() {
    111       ScriptParameter.Value.InstanceChanged += ScriptOnInstanceChanged;
    112       ScriptParameter.Value.NameChanged += ScriptOnNameChanged;
    113     }
    114 
    115     private void ScriptOnNameChanged(object sender, EventArgs eventArgs) {
    116       if (sender != ScriptParameter.Value) return;
    117       Name = ScriptParameter.Value.Name;
     107      ProblemDefinitionParameter.ValueChanged += ProblemDefinitionParameterOnValueChanged;
     108      RegisterHostInstanceChanges();
     109    }
     110
     111    private void ProblemDefinitionParameterOnValueChanged(object sender, EventArgs eventArgs) {
     112      RegisterHostInstanceChanges();
     113      Parameterize();
     114    }
     115
     116    private void RegisterHostInstanceChanges() {
     117      ProblemDefinitionParameter.Value.InstanceChanged += ProblemDefinitionHostOnInstanceChanged;
     118      ProblemDefinitionParameter.Value.NameChanged += ProblemDefinitionHostOnNameChanged;
     119    }
     120
     121    private void ProblemDefinitionHostOnNameChanged(object sender, EventArgs eventArgs) {
     122      if (sender != ProblemDefinitionParameter.Value) return;
     123      Name = ProblemDefinitionParameter.Value.Name;
    118124    }
    119125
    120126    protected override void OnNameChanged() {
    121127      base.OnNameChanged();
    122       ScriptParameter.Value.Name = Name;
    123     }
    124 
    125     protected virtual void ScriptOnInstanceChanged(object sender, EventArgs eventArgs) {
    126       var instance = ScriptParameter.Value.Instance;
     128      ProblemDefinitionParameter.Value.Name = Name;
     129    }
     130
     131    protected virtual void ProblemDefinitionHostOnInstanceChanged(object sender, EventArgs eventArgs) {
     132      Parameterize();
     133    }
     134
     135    protected virtual void Parameterize() {
     136      var instance = ProblemDefinitionParameter.Value.Instance;
    127137      if (instance == null) return;
    128138
    129       var configuration = instance.GetConfiguration();
     139      Configuration configuration;
     140      try {
     141        configuration = instance.GetConfiguration();
     142      } catch { return; }
    130143      ConfigurationParameter.Value = configuration;
    131144      Maximization.Value = instance.IsMaximizationProblem;
     
    602615      var generator = new ParameterVectorMoveGenerator();
    603616      generator.ConfigurationParameter.ActualName = ConfigurationParameter.Name;
    604       generator.ScriptParameter.ActualName = ScriptParameter.Name;
     617      generator.ProblemDefinitionParameter.ActualName = ProblemDefinitionParameter.Name;
    605618
    606619      var evaluator = new ParameterVectorMoveEvaluator();
    607620      evaluator.ConfigurationParameter.ActualName = ConfigurationParameter.Name;
    608621      evaluator.QualityParameter.ActualName = Evaluator.QualityParameter.ActualName;
    609       evaluator.ScriptParameter.ActualName = ScriptParameter.Name;
     622      evaluator.ProblemDefinitionParameter.ActualName = ProblemDefinitionParameter.Name;
    610623
    611624      var maker = new ParameterVectorMoveMaker();
Note: See TracChangeset for help on using the changeset viewer.