Changeset 10910 for stable/HeuristicLab.Problems.DataAnalysis.Symbolic
- Timestamp:
- 05/28/14 15:19:54 (11 years ago)
- Location:
- stable
- Files:
-
- 9 edited
- 1 copied
Legend:
- Unmodified
- Added
- Removed
-
stable
- Property svn:mergeinfo changed
/trunk/sources merged: 10774,10788-10791
- Property svn:mergeinfo changed
-
stable/HeuristicLab.Problems.DataAnalysis.Symbolic
- Property svn:mergeinfo changed
/trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic merged: 10774,10788-10789,10791
- Property svn:mergeinfo changed
-
stable/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Grammars/FullFunctionalExpressionGrammar.cs
r9456 r10910 99 99 var or = new Or(); 100 100 var not = new Not(); 101 var xor = new Xor(); 101 102 102 103 var timeLag = new TimeLag(); … … 122 123 var allSymbols = new List<Symbol>() { add, sub, mul, div, mean, sin, cos, tan, log, square, pow, sqrt, root, exp, 123 124 airyA, airyB, bessel, cosineIntegral, dawson, erf, expIntegralEi, fresnelCosineIntegral, fresnelSineIntegral, gamma, hypCosineIntegral, hypSineIntegral, norm, psi, sineIntegral, 124 @if, gt, lt, and, or, not, timeLag, integral, derivative, constant, variableSymbol, laggedVariable,autoregressiveVariable, variableCondition };125 @if, gt, lt, and, or, not,xor, timeLag, integral, derivative, constant, variableSymbol, laggedVariable,autoregressiveVariable, variableCondition }; 125 126 var unaryFunctionSymbols = new List<Symbol>() { square, sqrt, sin, cos, tan, log, exp, not, timeLag, integral, derivative, 126 127 airyA, airyB, bessel, cosineIntegral, dawson, erf, expIntegralEi, fresnelCosineIntegral, fresnelSineIntegral, gamma, hypCosineIntegral, hypSineIntegral, norm, psi, sineIntegral … … 128 129 129 130 var binaryFunctionSymbols = new List<Symbol>() { pow, root, gt, lt, variableCondition }; 130 var ternarySymbols = new List<Symbol>() { add, sub, mul, div, mean, and, or };131 var ternarySymbols = new List<Symbol>() { add, sub, mul, div, mean, and, or, xor }; 131 132 var terminalSymbols = new List<Symbol>() { variableSymbol, constant, laggedVariable, autoregressiveVariable }; 132 133 -
stable/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Grammars/TypeCoherentExpressionGrammar.cs
r10020 r10910 93 93 var or = new Or(); 94 94 var not = new Not(); 95 var xor = new Xor(); 95 96 var variableCondition = new VariableCondition(); 96 97 … … 120 121 var conditionSymbols = new GroupSymbol(ConditionsName, new List<ISymbol> { @if, variableCondition }); 121 122 var comparisonSymbols = new GroupSymbol(ComparisonsName, new List<ISymbol> { gt, lt }); 122 var booleanOperationSymbols = new GroupSymbol(BooleanOperatorsName, new List<ISymbol> { and, or, not });123 var booleanOperationSymbols = new GroupSymbol(BooleanOperatorsName, new List<ISymbol> { and, or, not, xor }); 123 124 var conditionalSymbols = new GroupSymbol(ConditionalSymbolsName, new List<ISymbol> { conditionSymbols, comparisonSymbols, booleanOperationSymbols }); 124 125 … … 148 149 SetSubtreeCount(or, 2, 2); 149 150 SetSubtreeCount(not, 1, 1); 151 SetSubtreeCount(xor, 2, 2); 150 152 151 153 SetSubtreeCount(timeLag, 1, 1); … … 237 239 Symbols.First(s => s is Average).Enabled = false; 238 240 Symbols.First(s => s is VariableCondition).Enabled = false; 241 Symbols.First(s => s is Xor).Enabled = false; 239 242 Symbols.First(s => s.Name == TrigonometricFunctionsName).Enabled = false; 240 243 Symbols.First(s => s.Name == ExponentialFunctionsName).Enabled = false; -
stable/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4.csproj
r9976 r10910 178 178 <Compile Include="Symbols\AiryB.cs" /> 179 179 <Compile Include="Symbols\Bessel.cs" /> 180 <Compile Include="Symbols\Xor.cs" /> 180 181 <Compile Include="Symbols\Erf.cs" /> 181 182 <Compile Include="Symbols\Norm.cs" /> -
stable/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/OpCodes.cs
r9456 r10910 46 46 public const byte OR = 14; 47 47 public const byte NOT = 15; 48 public const byte XOR = 45; 48 49 49 50 … … 99 100 { typeof(Or), OpCodes.OR }, 100 101 { typeof(Not), OpCodes.NOT}, 102 { typeof(Xor),OpCodes.XOR}, 101 103 { typeof(Average), OpCodes.Average}, 102 104 { typeof(InvokeFunction), OpCodes.Call }, -
stable/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/SymbolicDataAnalysisExpressionTreeILEmittingInterpreter.cs
r9976 r10910 447 447 il.Emit(System.Reflection.Emit.OpCodes.Sub); 448 448 il.Emit(System.Reflection.Emit.OpCodes.Neg); // * -1 449 return; 450 } 451 case OpCodes.XOR: { 452 CompileInstructions(il, state, ds); 453 il.Emit(System.Reflection.Emit.OpCodes.Ldc_I4_0); 454 il.Emit(System.Reflection.Emit.OpCodes.Cgt);// > 0 455 456 for (int i = 1; i < nArgs; i++) { 457 CompileInstructions(il, state, ds); 458 il.Emit(System.Reflection.Emit.OpCodes.Ldc_I4_0); 459 il.Emit(System.Reflection.Emit.OpCodes.Cgt);// > 0 460 il.Emit(System.Reflection.Emit.OpCodes.Xor); 461 } 462 il.Emit(System.Reflection.Emit.OpCodes.Ldc_R8, 2.0); // * 2 463 il.Emit(System.Reflection.Emit.OpCodes.Mul); 464 il.Emit(System.Reflection.Emit.OpCodes.Ldc_R8, 1.0); // - 1 465 il.Emit(System.Reflection.Emit.OpCodes.Sub); 449 466 return; 450 467 } -
stable/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/SymbolicDataAnalysisExpressionTreeInterpreter.cs
r9976 r10910 344 344 return Evaluate(dataset, ref row, state) > 0.0 ? -1.0 : 1.0; 345 345 } 346 case OpCodes.XOR: { 347 //mkommend: XOR on multiple inputs is defined as true if the number of positive signals is odd 348 // this is equal to a consecutive execution of binary XOR operations. 349 int positiveSignals = 0; 350 for (int i = 0; i < currentInstr.nArguments; i++) { 351 if (Evaluate(dataset, ref row, state) > 0.0) positiveSignals++; 352 } 353 return positiveSignals % 2 != 0 ? 1.0 : -1.0; 354 } 346 355 case OpCodes.GT: { 347 356 double x = Evaluate(dataset, ref row, state); -
stable/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/SymbolicDataAnalysisExpressionTreeLinearInterpreter.cs
r9976 r10910 311 311 } else if (instr.opCode == OpCodes.NOT) { 312 312 instr.value = code[instr.childIndex].value > 0.0 ? -1.0 : 1.0; 313 } else if (instr.opCode == OpCodes.XOR) { 314 int positiveSignals = 0; 315 for (int j = 0; j < instr.nArguments; j++) { 316 if (code[instr.childIndex + j].value > 0.0) positiveSignals++; 317 } 318 instr.value = positiveSignals % 2 != 0 ? 1.0 : -1.0; 313 319 } else if (instr.opCode == OpCodes.GT) { 314 320 double x = code[instr.childIndex].value;
Note: See TracChangeset
for help on using the changeset viewer.