- Timestamp:
- 09/26/14 22:57:18 (10 years ago)
- Location:
- branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3
- Files:
-
- 4 added
- 2 deleted
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/HeuristicLab.Problems.Programmable-3.3.csproj
r11363 r11393 139 139 <Compile Include="Datastructures\ParameterVector.cs" /> 140 140 <Compile Include="Interfaces\IParameterVectorMoveOperator.cs" /> 141 <Compile Include="Interfaces\ISingleObjectiveProblemDefinitionHost.cs" /> 141 142 <Compile Include="Interfaces\ISingleObjectiveProgrammableProblemEvaluator.cs" /> 142 143 <Compile Include="Operators\ParameterVectorManipulator.cs" /> … … 149 150 <Compile Include="Interfaces\IProblemDefinition.cs" /> 150 151 <Compile Include="Interfaces\ISingleObjectiveProblemDefinition.cs" /> 151 <Compile Include="ProgrammableProblemScript.cs" /> 152 <Compile Include="SingleObjectiveScript.cs" /> 152 <Compile Include="ProblemDefinitionScript.cs" /> 153 <Compile Include="SingleObjectiveProblemDefinition.cs" /> 154 <Compile Include="SingleObjectiveProblemDefinitionScript.cs" /> 153 155 <Compile Include="SingleObjectiveProgrammableProblem.cs" /> 154 156 <None Include="HeuristicLab.snk" /> -
branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/Interfaces/IProblemDefinition.cs
r10856 r11393 20 20 #endregion 21 21 22 22 23 namespace HeuristicLab.Problems.Programmable { 23 24 public interface IProblemDefinition { -
branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/Interfaces/ISingleObjectiveProblemDefinition.cs
r11363 r11393 22 22 using System.Collections.Generic; 23 23 using HeuristicLab.Core; 24 using HeuristicLab.Optimization; 24 25 25 26 namespace HeuristicLab.Problems.Programmable { … … 27 28 bool IsMaximizationProblem { get; } 28 29 double Evaluate(IRandom random, ParameterVector vector); 30 void Analyze(ParameterVector[] vectors, double[] qualities, ResultCollection results); 29 31 IEnumerable<ParameterVector> GetNeighbors(IRandom random, ParameterVector vector); 30 32 } -
branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/Operators/ParameterVectorMoveEvaluator.cs
r11363 r11393 43 43 } 44 44 45 public ILookupParameter< SingleObjectiveScript> ScriptParameter {46 get { return (ILookupParameter< SingleObjectiveScript>)Parameters["Script"]; }45 public ILookupParameter<ISingleObjectiveProblemDefinitionHost> ProblemDefinitionParameter { 46 get { return (ILookupParameter<ISingleObjectiveProblemDefinitionHost>)Parameters["ProblemDefinition"]; } 47 47 } 48 48 … … 64 64 public ParameterVectorMoveEvaluator() { 65 65 Parameters.Add(new LookupParameter<IRandom>("Random", "The random number generator to use.")); 66 Parameters.Add(new LookupParameter< SingleObjectiveScript>("Script", "The script that will execute the evaluation function and define the parameter vector."));66 Parameters.Add(new LookupParameter<ISingleObjectiveProblemDefinitionHost>("ProblemDefinition", "The host that holds the problem definition.")); 67 67 Parameters.Add(new LookupParameter<Configuration>("Configuration", "An item that holds the problem's configuration.")); 68 68 Parameters.Add(new LookupParameter<DoubleValue>("Quality", "The quality of the parameter vector.")); … … 76 76 public override IOperation InstrumentedApply() { 77 77 var random = RandomParameter.ActualValue; 78 var runner = ScriptParameter.ActualValue;79 if ( runner.Instance == null) throw new InvalidOperationException("Script instance is null, maybe the code doesn't compile.");78 var host = ProblemDefinitionParameter.ActualValue; 79 if (host.Instance == null) throw new InvalidOperationException("Problem definition instance is null."); 80 80 var config = ConfigurationParameter.ActualValue; 81 81 var binDict = new Dictionary<string, BinaryVector>(); … … 111 111 realVectors: realDict.Count > 0 ? realDict : null, 112 112 permutations: permDict.Count > 0 ? permDict : null); 113 MoveQualityParameter.ActualValue = new DoubleValue( runner.Instance.Evaluate(random, vector));113 MoveQualityParameter.ActualValue = new DoubleValue(host.Instance.Evaluate(random, vector)); 114 114 return base.InstrumentedApply(); 115 115 } -
branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/Operators/ParameterVectorMoveGenerator.cs
r11363 r11393 48 48 } 49 49 50 public ILookupParameter< SingleObjectiveScript> ScriptParameter {51 get { return (ILookupParameter< SingleObjectiveScript>)Parameters["Script"]; }50 public ILookupParameter<ISingleObjectiveProblemDefinitionHost> ProblemDefinitionParameter { 51 get { return (ILookupParameter<ISingleObjectiveProblemDefinitionHost>)Parameters["ProblemDefinition"]; } 52 52 } 53 53 … … 63 63 Parameters.Add(new LookupParameter<IRandom>("Random", "The random number generator to use.")); 64 64 Parameters.Add(new ValueLookupParameter<IntValue>("SampleSize", "The number of moves to sample.")); 65 Parameters.Add(new LookupParameter< SingleObjectiveScript>("Script", "The script that will execute the evaluation function and define the parameter vector."));65 Parameters.Add(new LookupParameter<ISingleObjectiveProblemDefinitionHost>("ProblemDefinition", "The host that holds the problem definition.")); 66 66 Parameters.Add(new LookupParameter<Configuration>("Configuration", "An item that holds the problem's configuration.")); 67 67 } … … 73 73 public override IOperation InstrumentedApply() { 74 74 var random = RandomParameter.ActualValue; 75 var runner = ScriptParameter.ActualValue;76 if ( runner.Instance == null) throw new InvalidOperationException("Script instance is null, maybe the code doesn't compile.");75 var host = ProblemDefinitionParameter.ActualValue; 76 if (host.Instance == null) throw new InvalidOperationException("Problem definition instance is null."); 77 77 var sampleSize = SampleSizeParameter.ActualValue.Value; 78 78 var config = ConfigurationParameter.ActualValue; … … 109 109 realVectors: realDict.Count > 0 ? realDict : null, 110 110 permutations: permDict.Count > 0 ? permDict : null); 111 var nbhood = runner.Instance.GetNeighbors(random, vector).Take(sampleSize).ToList();111 var nbhood = host.Instance.GetNeighbors(random, vector).Take(sampleSize).ToList(); 112 112 113 113 var moveScopes = new Scope[nbhood.Count]; -
branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/Operators/ParameterVectorMoveMaker.cs
r11363 r11393 50 50 protected ParameterVectorMoveMaker(ParameterVectorMoveMaker original, Cloner cloner) : base(original, cloner) { } 51 51 public ParameterVectorMoveMaker() { 52 Parameters.Add(new LookupParameter<IRandom>("Random", "The random number generator to use."));53 Parameters.Add(new LookupParameter<SingleObjectiveScript>("Script", "The script that will execute the evaluation function and define the parameter vector."));54 52 Parameters.Add(new LookupParameter<Configuration>("Configuration", "An item that holds the problem's configuration.")); 55 53 Parameters.Add(new LookupParameter<DoubleValue>("Quality", "The quality of the parameter vector.")); -
branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/Operators/SingleObjectiveEvaluator.cs
r10850 r11393 43 43 } 44 44 45 public ILookupParameter< SingleObjectiveScript> ScriptParameter {46 get { return (ILookupParameter< SingleObjectiveScript>)Parameters["Script"]; }45 public ILookupParameter<ISingleObjectiveProblemDefinitionHost> ProblemDefinitionParameter { 46 get { return (ILookupParameter<ISingleObjectiveProblemDefinitionHost>)Parameters["ProblemDefinition"]; } 47 47 } 48 48 … … 60 60 public SingleObjectiveEvaluator() { 61 61 Parameters.Add(new LookupParameter<IRandom>("Random", "The random number generator to use.")); 62 Parameters.Add(new LookupParameter< SingleObjectiveScript>("Script", "The script that will execute the evaluation function and define the parameter vector."));62 Parameters.Add(new LookupParameter<ISingleObjectiveProblemDefinitionHost>("ProblemDefinition", "The host that holds the problem definition.")); 63 63 Parameters.Add(new LookupParameter<Configuration>("Configuration", "An item that holds the problem's configuration.")); 64 64 Parameters.Add(new LookupParameter<DoubleValue>("Quality", "The quality of the parameter vector.")); … … 71 71 public override IOperation Apply() { 72 72 var random = RandomParameter.ActualValue; 73 var runner = ScriptParameter.ActualValue;74 if ( runner.Instance == null) throw new InvalidOperationException("Script instance is null, maybe the code doesn't compile.");73 var host = ProblemDefinitionParameter.ActualValue; 74 if (host.Instance == null) throw new InvalidOperationException("Script instance is null, maybe the code doesn't compile."); 75 75 var config = ConfigurationParameter.ActualValue; 76 76 var binDict = new Dictionary<string, BinaryVector>(); … … 106 106 realVectors: realDict.Count > 0 ? realDict : null, 107 107 permutations: permDict.Count > 0 ? permDict : null); 108 QualityParameter.ActualValue = new DoubleValue( runner.Instance.Evaluate(random, vector));108 QualityParameter.ActualValue = new DoubleValue(host.Instance.Evaluate(random, vector)); 109 109 return base.Apply(); 110 110 } -
branches/ProgrammableProblem/HeuristicLab.Problems.Programmable/3.3/SingleObjectiveProgrammableProblem.cs
r11363 r11393 55 55 } 56 56 57 public IValueParameter< SingleObjectiveScript> ScriptParameter {58 get { return (IValueParameter< SingleObjectiveScript>)Parameters["Script"]; }59 } 60 61 p ublicIValueParameter<Configuration> ConfigurationParameter {57 public IValueParameter<ISingleObjectiveProblemDefinitionHost> ProblemDefinitionParameter { 58 get { return (IValueParameter<ISingleObjectiveProblemDefinitionHost>)Parameters["ProblemDefinition"]; } 59 } 60 61 protected IValueParameter<Configuration> ConfigurationParameter { 62 62 get { return (IValueParameter<Configuration>)Parameters["Configuration"]; } 63 } 64 65 public ISingleObjectiveProblemDefinitionHost ProblemDefinition { 66 get { return ProblemDefinitionParameter.Value; } 67 set { ProblemDefinitionParameter.Value = value; } 63 68 } 64 69 … … 76 81 public SingleObjectiveProgrammableProblem() 77 82 : 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 })); 79 84 Parameters.Add(new ValueParameter<Configuration>("Configuration", "Describes which parameters exist, what they're called, what type they are and their bounds if any.")); 80 85 … … 100 105 101 106 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; 118 124 } 119 125 120 126 protected override void OnNameChanged() { 121 127 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; 127 137 if (instance == null) return; 128 138 129 var configuration = instance.GetConfiguration(); 139 Configuration configuration; 140 try { 141 configuration = instance.GetConfiguration(); 142 } catch { return; } 130 143 ConfigurationParameter.Value = configuration; 131 144 Maximization.Value = instance.IsMaximizationProblem; … … 602 615 var generator = new ParameterVectorMoveGenerator(); 603 616 generator.ConfigurationParameter.ActualName = ConfigurationParameter.Name; 604 generator. ScriptParameter.ActualName = ScriptParameter.Name;617 generator.ProblemDefinitionParameter.ActualName = ProblemDefinitionParameter.Name; 605 618 606 619 var evaluator = new ParameterVectorMoveEvaluator(); 607 620 evaluator.ConfigurationParameter.ActualName = ConfigurationParameter.Name; 608 621 evaluator.QualityParameter.ActualName = Evaluator.QualityParameter.ActualName; 609 evaluator. ScriptParameter.ActualName = ScriptParameter.Name;622 evaluator.ProblemDefinitionParameter.ActualName = ProblemDefinitionParameter.Name; 610 623 611 624 var maker = new ParameterVectorMoveMaker();
Note: See TracChangeset
for help on using the changeset viewer.