Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
05/28/14 15:19:54 (11 years ago)
Author:
mkommend
Message:

#2177: Merged r10774 and r10788:10791 into stable.

Location:
stable
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • stable

  • stable/HeuristicLab.Problems.DataAnalysis.Symbolic

  • stable/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/OpCodes.cs

    r9456 r10910  
    4646    public const byte OR = 14;
    4747    public const byte NOT = 15;
     48    public const byte XOR = 45;
    4849
    4950
     
    99100      { typeof(Or), OpCodes.OR },
    100101      { typeof(Not), OpCodes.NOT},
     102      { typeof(Xor),OpCodes.XOR},
    101103      { typeof(Average), OpCodes.Average},
    102104      { typeof(InvokeFunction), OpCodes.Call },
  • stable/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/SymbolicDataAnalysisExpressionTreeILEmittingInterpreter.cs

    r9976 r10910  
    447447            il.Emit(System.Reflection.Emit.OpCodes.Sub);
    448448            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);
    449466            return;
    450467          }
  • stable/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/SymbolicDataAnalysisExpressionTreeInterpreter.cs

    r9976 r10910  
    344344            return Evaluate(dataset, ref row, state) > 0.0 ? -1.0 : 1.0;
    345345          }
     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          }
    346355        case OpCodes.GT: {
    347356            double x = Evaluate(dataset, ref row, state);
  • stable/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/SymbolicDataAnalysisExpressionTreeLinearInterpreter.cs

    r9976 r10910  
    311311        } else if (instr.opCode == OpCodes.NOT) {
    312312          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;
    313319        } else if (instr.opCode == OpCodes.GT) {
    314320          double x = code[instr.childIndex].value;
Note: See TracChangeset for help on using the changeset viewer.