- Timestamp:
- 06/09/09 14:34:56 (15 years ago)
- Location:
- trunk/sources/HeuristicLab.GP.StructureIdentification/3.3
- Files:
-
- 2 deleted
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/AlgorithmBase.cs
r1922 r2034 147 147 IOperator initialization = CreateInitialization(); 148 148 IOperator funLibInjector = CreateFunctionLibraryInjector(); 149 IOperator treeEvaluatorInjector = new HL2TreeEvaluatorInjector();150 149 151 150 IOperator mainLoop = CreateMainLoop(); … … 170 169 seq.AddSubOperator(globalInjector); 171 170 seq.AddSubOperator(funLibInjector); 172 seq.AddSubOperator(treeEvaluatorInjector);173 171 seq.AddSubOperator(initialization); 174 172 seq.AddSubOperator(mainLoop); … … 215 213 injector.AddVariable(new HeuristicLab.Core.Variable("PunishmentFactor", new DoubleData())); 216 214 injector.AddVariable(new HeuristicLab.Core.Variable("UseEstimatedTargetValue", new BoolData())); 215 injector.AddVariable(new HeuristicLab.Core.Variable("TreeEvaluator", new HL2TreeEvaluator())); 217 216 return injector; 218 217 } -
trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Evaluators/EarlyStoppingMeanSquaredErrorEvaluator.cs
r1891 r2034 45 45 // evaluates the function-tree for the given target-variable and the whole dataset and returns the MSE 46 46 public override void Evaluate(IScope scope, ITreeEvaluator evaluator, HeuristicLab.DataAnalysis.Dataset dataset, int targetVariable, int start, int end, bool updateTargetValues) { 47 double qualityLimit = GetVariableValue<DoubleData>("QualityLimit", scope, false).Data;47 double qualityLimit = GetVariableValue<DoubleData>("QualityLimit", scope, true).Data; 48 48 DoubleData mse = GetVariableValue<DoubleData>("MSE", scope, false, false); 49 49 if (mse == null) { -
trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Evaluators/GPEvaluatorBase.cs
r1891 r2034 40 40 AddVariableInfo(new VariableInfo("PunishmentFactor", "Punishment factor for invalid estimations", typeof(DoubleData), VariableKind.In)); 41 41 AddVariableInfo(new VariableInfo("TotalEvaluatedNodes", "Number of evaluated nodes", typeof(DoubleData), VariableKind.In | VariableKind.Out)); 42 AddVariableInfo(new VariableInfo("TrainingSamplesStart", "Start index of training samples in dataset", typeof(IntData), VariableKind.In)); 43 AddVariableInfo(new VariableInfo("TrainingSamplesEnd", "End index of training samples in dataset", typeof(IntData), VariableKind.In)); 42 44 AddVariableInfo(new VariableInfo("SamplesStart", "Start index of samples in dataset to evaluate", typeof(IntData), VariableKind.In)); 43 45 AddVariableInfo(new VariableInfo("SamplesEnd", "End index of samples in dataset to evaluate", typeof(IntData), VariableKind.In)); … … 51 53 IFunctionTree functionTree = GetVariableValue<IFunctionTree>("FunctionTree", scope, true); 52 54 double punishmentFactor = GetVariableValue<DoubleData>("PunishmentFactor", scope, true).Data; 53 int treeSize = scope.GetVariableValue<IntData>("TreeSize", false).Data;55 int treeSize = scope.GetVariableValue<IntData>("TreeSize", true).Data; 54 56 double totalEvaluatedNodes = scope.GetVariableValue<DoubleData>("TotalEvaluatedNodes", true).Data; 57 int trainingStart = GetVariableValue<IntData>("TrainingSamplesStart", scope, true).Data; 58 int trainingEnd = GetVariableValue<IntData>("TrainingSamplesEnd", scope, true).Data; 55 59 int start = GetVariableValue<IntData>("SamplesStart", scope, true).Data; 56 60 int end = GetVariableValue<IntData>("SamplesEnd", scope, true).Data; 57 61 bool useEstimatedValues = GetVariableValue<BoolData>("UseEstimatedTargetValue", scope, true).Data; 58 62 ITreeEvaluator evaluator = GetVariableValue<ITreeEvaluator>("TreeEvaluator", scope, true); 59 evaluator.PrepareForEvaluation( functionTree);63 evaluator.PrepareForEvaluation(dataset, targetVariable, trainingStart, trainingEnd, punishmentFactor, functionTree); 60 64 61 65 double[] backupValues = null; -
trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/Evaluators/UncertainMeanSquaredErrorEvaluator.cs
r1891 r2034 51 51 // evaluates the function-tree for the given target-variable and the whole dataset and returns the MSE 52 52 public override void Evaluate(IScope scope, ITreeEvaluator evaluator, HeuristicLab.DataAnalysis.Dataset dataset, int targetVariable, int start, int end, bool updateTargetValues) { 53 double qualityLimit = GetVariableValue<DoubleData>("QualityLimit", scope, false).Data;53 double qualityLimit = GetVariableValue<DoubleData>("QualityLimit", scope, true).Data; 54 54 int minSamples = GetVariableValue<IntData>("MinEvaluatedSamples", scope, true).Data; 55 55 MersenneTwister mt = GetVariableValue<MersenneTwister>("Random", scope, true); -
trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/HeuristicLab.GP.StructureIdentification-3.3.csproj
r1908 r2034 91 91 <Compile Include="TreeEvaluatorBase.cs" /> 92 92 <Compile Include="HL2TreeEvaluator.cs" /> 93 <Compile Include="HL2TreeEvaluatorInjector.cs" />94 <Compile Include="TreeEvaluatorInjector.cs" />95 93 <Compile Include="ITreeEvaluator.cs" /> 96 94 <Compile Include="Evaluators\MeanAbsolutePercentageOfRangeErrorEvaluator.cs" /> -
trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/ITreeEvaluator.cs
r1891 r2034 31 31 namespace HeuristicLab.GP.StructureIdentification { 32 32 public interface ITreeEvaluator : IItem { 33 void ResetEvaluator(Dataset dataset, int targetVariable, int start, int end, double punishmentFactor); 34 void PrepareForEvaluation(IFunctionTree functionTree); 33 void PrepareForEvaluation(Dataset dataset, int targetVariable, int start, int end, double punishmentFactor, IFunctionTree functionTree); 35 34 double Evaluate(int sampleIndex); 36 35 } -
trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/TreeEvaluatorBase.cs
r1891 r2034 35 35 public abstract class TreeEvaluatorBase : ItemBase, ITreeEvaluator { 36 36 protected const double EPSILON = 1.0e-7; 37 protected double estimatedValueMax;38 protected double estimatedValueMin;37 protected double maxValue; 38 protected double minValue; 39 39 40 40 protected class Instr { … … 52 52 protected int sampleIndex; 53 53 54 public void ResetEvaluator(Dataset dataset, int targetVariable, int start, int end, double punishmentFactor) {54 public void PrepareForEvaluation(Dataset dataset, int targetVariable, int start, int end, double punishmentFactor, IFunctionTree functionTree) { 55 55 this.dataset = dataset; 56 double maximumPunishment = punishmentFactor * dataset.GetRange(targetVariable, start, end); 56 // calculate upper and lower bounds for the estimated value (mean +/- punishmentFactor * range) 57 double mean = dataset.GetMean(targetVariable, start, end); 58 double range = dataset.GetRange(targetVariable, start, end); 59 maxValue = mean + punishmentFactor * range; 60 minValue = mean - punishmentFactor * range; 57 61 58 // get the mean of the values of the target variable to determine the max and min bounds of the estimated value59 double targetMean = dataset.GetMean(targetVariable, start, end);60 estimatedValueMin = targetMean - maximumPunishment;61 estimatedValueMax = targetMean + maximumPunishment;62 }63 64 public void PrepareForEvaluation(IFunctionTree functionTree) {65 62 BakedFunctionTree bakedTree = functionTree as BakedFunctionTree; 66 63 if (bakedTree == null) throw new ArgumentException("TreeEvaluators can only evaluate BakedFunctionTrees"); … … 103 100 104 101 double estimated = EvaluateBakedCode(); 105 if (double.IsNaN(estimated) || double.IsInfinity(estimated)) { 106 estimated = estimatedValueMax; 107 } else if (estimated > estimatedValueMax) { 108 estimated = estimatedValueMax; 109 } else if (estimated < estimatedValueMin) { 110 estimated = estimatedValueMin; 111 } 102 if (double.IsNaN(estimated) || double.IsInfinity(estimated)) estimated = maxValue; 103 else if (estimated < minValue) estimated = minValue; 104 else if (estimated > maxValue) estimated = maxValue; 112 105 return estimated; 113 106 } … … 123 116 124 117 protected abstract double EvaluateBakedCode(); 125 126 public override object Clone(IDictionary<Guid, object> clonedObjects) {127 TreeEvaluatorBase clone = (TreeEvaluatorBase)base.Clone(clonedObjects);128 if (!clonedObjects.ContainsKey(dataset.Guid)) {129 clone.dataset = (Dataset)dataset.Clone(clonedObjects);130 } else {131 clone.dataset = (Dataset)clonedObjects[dataset.Guid];132 }133 clone.estimatedValueMax = estimatedValueMax;134 clone.estimatedValueMin = estimatedValueMin;135 return clone;136 }137 138 public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) {139 XmlNode node = base.GetXmlNode(name, document, persistedObjects);140 XmlAttribute minEstimatedValueAttr = document.CreateAttribute("MinEstimatedValue");141 minEstimatedValueAttr.Value = XmlConvert.ToString(estimatedValueMin);142 node.Attributes.Append(minEstimatedValueAttr);143 144 XmlAttribute maxEstimatedValueAttr = document.CreateAttribute("MaxEstimatedValue");145 maxEstimatedValueAttr.Value = XmlConvert.ToString(estimatedValueMax);146 node.Attributes.Append(maxEstimatedValueAttr);147 148 node.AppendChild(PersistenceManager.Persist("Dataset", dataset, document, persistedObjects));149 return node;150 }151 152 public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) {153 base.Populate(node, restoredObjects);154 estimatedValueMax = XmlConvert.ToDouble(node.Attributes["MaxEstimatedValue"].Value);155 estimatedValueMin = XmlConvert.ToDouble(node.Attributes["MinEstimatedValue"].Value);156 157 dataset = (Dataset)PersistenceManager.Restore(node.SelectSingleNode("Dataset"), restoredObjects);158 }159 118 } 160 119 }
Note: See TracChangeset
for help on using the changeset viewer.