Changeset 2226
- Timestamp:
- 08/03/09 15:18:36 (16 years ago)
- Location:
- trunk/sources
- Files:
-
- 1 added
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified trunk/sources/HeuristicLab.GP.StructureIdentification/3.3/HL3TreeEvaluator.cs ¶
r2222 r2226 22 22 using System; 23 23 using System.Diagnostics; 24 using HeuristicLab.Modeling; // double.IsAlmost extension 24 25 25 26 namespace HeuristicLab.GP.StructureIdentification { … … 29 30 /// </summary> 30 31 public class HL3TreeEvaluator : TreeEvaluatorBase { 31 32 33 32 protected override double EvaluateBakedCode() { 34 33 Instr currInstr = codeArr[PC++]; … … 36 35 case EvaluatorSymbolTable.VARIABLE: { 37 36 int row = sampleIndex + currInstr.i_arg1; 38 if (row < 0 || row >= dataset.Rows) return double.NaN;37 if (row < 0 || row >= dataset.Rows) throw new InvalidOperationException("Out of range access to dataset row: " + row); 39 38 else return currInstr.d_arg0 * dataset.GetValue(row, currInstr.i_arg0); 40 39 } … … 44 43 case EvaluatorSymbolTable.DIFFERENTIAL: { 45 44 int row = sampleIndex + currInstr.i_arg1; 46 if (row < 0 || row >= dataset.Rows) return double.NaN;45 if (row < 0 || row >= dataset.Rows) throw new InvalidOperationException("Out of range access to dataset row: " + row); 47 46 else if (row < 1) return 0.0; 48 47 else { … … 117 116 return Math.Tan(EvaluateBakedCode()); 118 117 } 119 case EvaluatorSymbolTable.AND: { // only defined for inputs 1 and 0118 case EvaluatorSymbolTable.AND: { 120 119 double result = EvaluateBakedCode(); 121 120 for (int i = 1; i < currInstr.arity; i++) { 122 if (result ==0.0) SkipBakedCode();121 if (result < 0.0) SkipBakedCode(); 123 122 else { 124 123 result = EvaluateBakedCode(); 125 124 } 126 Debug.Assert(result == 0.0 || result == 1.0);127 125 } 128 return result;126 return Math.Sign(result); 129 127 } 130 128 case EvaluatorSymbolTable.EQU: { 131 129 double x = EvaluateBakedCode(); 132 130 double y = EvaluateBakedCode(); 133 if ( Math.Abs(x - y) < EPSILON) return 1.0; else return 0.0;131 if (x.IsAlmost(y)) return 1.0; else return -1.0; 134 132 } 135 133 case EvaluatorSymbolTable.GT: { … … 137 135 double y = EvaluateBakedCode(); 138 136 if (x > y) return 1.0; 139 else return 0.0;137 else return -1.0; 140 138 } 141 case EvaluatorSymbolTable.IFTE: { // only defined for condition 0 or 1139 case EvaluatorSymbolTable.IFTE: { 142 140 double condition = EvaluateBakedCode(); 143 Debug.Assert(condition == 0.0 || condition == 1.0);144 141 double result; 145 if (condition ==0.0) {142 if (condition < 0.0) { 146 143 result = EvaluateBakedCode(); SkipBakedCode(); 147 144 } else { … … 154 151 double y = EvaluateBakedCode(); 155 152 if (x < y) return 1.0; 156 else return 0.0;153 else return -1.0; 157 154 } 158 case EvaluatorSymbolTable.NOT: { // only defined for inputs 0 or 1 159 double result = EvaluateBakedCode(); 160 Debug.Assert(result == 0.0 || result == 1.0); 161 return Math.Abs(result - 1.0); 155 case EvaluatorSymbolTable.NOT: { 156 return -EvaluateBakedCode(); 162 157 } 163 case EvaluatorSymbolTable.OR: { // only defined for inputs 0 or 1158 case EvaluatorSymbolTable.OR: { 164 159 double result = EvaluateBakedCode(); 165 160 for (int i = 1; i < currInstr.arity; i++) { 166 if (result > 0.0) SkipBakedCode();161 if (result >= 0.0) SkipBakedCode(); 167 162 else { 168 163 result = EvaluateBakedCode(); 169 Debug.Assert(result == 0.0 || result == 1.0);170 164 } 171 165 } 172 return result;166 return Math.Sign(result); 173 167 } 174 case EvaluatorSymbolTable.XOR: { // only defined for inputs 0 or 1168 case EvaluatorSymbolTable.XOR: { 175 169 double x = EvaluateBakedCode(); 176 170 double y = EvaluateBakedCode(); 177 return Math.Abs(x - y); 171 if (x > y) { 172 double tmp = x; 173 x = y; 174 y = tmp; 175 } 176 // invariant y >= x 177 if (y < 0.0 || x > 0.0) return -1.0; 178 else return 1.0; 178 179 } 179 180 default: { -
TabularUnified trunk/sources/HeuristicLab.LinearRegression/3.2/LinearRegressionOperator.cs ¶
r2222 r2226 26 26 using HeuristicLab.Data; 27 27 using HeuristicLab.DataAnalysis; 28 using HeuristicLab.Modeling; 28 29 using HeuristicLab.GP; 29 30 using HeuristicLab.GP.StructureIdentification; … … 54 55 double[] coefficients = CalculateCoefficients(inputMatrix, targetVector); 55 56 IFunctionTree tree = CreateModel(coefficients, allowedColumns.Select(i => dataset.GetVariableName(i)).ToList()); 56 57 57 58 scope.AddVariable(new HeuristicLab.Core.Variable(scope.TranslateName("LinearRegressionModel"), new GeneticProgrammingModel(tree))); 58 59 return null; 59 }60 61 private bool IsAlmost(double x, double y) {62 return Math.Abs(x - y) < 1.0E-12;63 60 } 64 61 … … 125 122 for (int i = 0; i < dataset.Columns; i++) { 126 123 if (i == targetVariable) continue; 127 if (! IsAlmost(dataset.GetMinimum(i, start, end),0.0) ||128 ! IsAlmost(dataset.GetMaximum(i, start, end),0.0))124 if (!dataset.GetMinimum(i, start, end).IsAlmost(0.0) || 125 !dataset.GetMaximum(i, start, end).IsAlmost(0.0)) 129 126 allowedColumns.Add(i); 130 127 } -
TabularUnified trunk/sources/HeuristicLab.Modeling/3.2/HeuristicLab.Modeling-3.2.csproj ¶
r2041 r2226 83 83 <ItemGroup> 84 84 <Compile Include="ClassificationProblemInjector.cs" /> 85 <Compile Include="DoubleExtensions.cs" /> 85 86 <Compile Include="VariableImpactCalculatorBase.cs" /> 86 87 <Compile Include="VariableEvaluationImpactCalculator.cs" /> -
TabularUnified trunk/sources/HeuristicLab.Modeling/3.2/SimpleEvaluatorBase.cs ¶
r2136 r2226 31 31 32 32 public abstract double Evaluate(double[,] values); 33 34 protected static bool IsAlmost(double x, double y) {35 return Math.Abs(x - y) < 1.0E-12;36 }37 33 } 38 34 } -
TabularUnified trunk/sources/HeuristicLab.Modeling/3.2/SimpleMeanAbsolutePercentageOfRangeErrorEvaluator.cs ¶
r2136 r2226 53 53 double range = Statistics.Range(originalValues); 54 54 if (double.IsInfinity(range)) throw new ArgumentException("Range of elements in values is infinity"); 55 if ( IsAlmost(range,0.0)) throw new ArgumentException("Range of elements in values is zero");55 if (range.IsAlmost(0.0)) throw new ArgumentException("Range of elements in values is zero"); 56 56 57 57 for (int i = 0; i < values.GetLength(0); i++) { -
TabularUnified trunk/sources/HeuristicLab.Modeling/3.2/SimpleVarianceAccountedForEvaluator.cs ¶
r2136 r2226 69 69 double errorsVariance = Statistics.Variance(errors); 70 70 double originalsVariance = Statistics.Variance(originalTargetVariableValues); 71 if ( IsAlmost(originalsVariance,0.0))72 if ( IsAlmost(errorsVariance,0.0)) {71 if (originalsVariance.IsAlmost(0.0)) 72 if (errorsVariance.IsAlmost(0.0)) { 73 73 return 1.0; 74 74 } else { -
TabularUnified trunk/sources/HeuristicLab.Modeling/3.2/VariableEvaluationImpactCalculator.cs ¶
r2165 r2226 64 64 protected override double[] PostProcessImpacts(double[] impacts) { 65 65 double mseSum = impacts.Sum(); 66 if ( IsAlmost(mseSum,0.0)) mseSum = 1.0;66 if (mseSum.IsAlmost(0.0)) mseSum = 1.0; 67 67 for (int i = 0; i < impacts.Length; i++) { 68 68 impacts[i] = impacts[i] / mseSum;
Note: See TracChangeset
for help on using the changeset viewer.