Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
05/10/17 11:23:05 (7 years ago)
Author:
pkimmesw
Message:

#2665 Added IsNoop to Expression, Made Expressions storable, Fixed Debugger, Fixed and improved problem data and result visualisation, Added custom ErcOption view, Added problem difficulty to problem data name

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Expressions/BooleanExpressions.cs

    r14905 r14952  
    33
    44  using Attributes;
     5
     6  using HeuristicLab.Common;
     7  using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
     8
    59  using Interpreter;
    610  using Stack;
     
    1014  /// </summary>
    1115  [PushExpression(StackTypes.Boolean, "BOOLEAN.AND")]
     16  [StorableClass]
    1217  public class BooleanAndExpression : StatelessExpression {
    13     public bool IsNoop(IInternalPushInterpreter interpreter) {
     18    public BooleanAndExpression() { }
     19    [StorableConstructor]
     20    public BooleanAndExpression(bool deserializing) : base(deserializing) { }
     21
     22    public override bool IsNoop(IInternalPushInterpreter interpreter) {
    1423      return interpreter.BooleanStack.Count < 2;
    1524    }
    1625
    17     public void TryEval(IInternalPushInterpreter interpreter) {
     26    public override void Eval(IInternalPushInterpreter interpreter) {
    1827      var first = interpreter.BooleanStack.Pop();
    1928      var second = interpreter.BooleanStack.Top;
     
    2130
    2231      interpreter.BooleanStack.SetTop(result);
    23     }
    24 
    25     public override bool Eval(IInternalPushInterpreter interpreter) {
    26       if (IsNoop(interpreter))
    27         return false;
    28 
    29       TryEval(interpreter);
    30       return true;
    3132    }
    3233  }
     
    3637  /// </summary>
    3738  [PushExpression(StackTypes.Boolean, "BOOLEAN.OR")]
     39  [StorableClass]
    3840  public class BooleanOrExpression : StatelessExpression {
    39     public override bool Eval(IInternalPushInterpreter interpreter) {
    40       if (interpreter.BooleanStack.Count < 2)
    41         return false;
     41    public BooleanOrExpression() { }
     42    [StorableConstructor]
     43    public BooleanOrExpression(bool deserializing) : base(deserializing) { }
    4244
     45    public override bool IsNoop(IInternalPushInterpreter interpreter) {
     46      return interpreter.BooleanStack.Count < 2;
     47    }
     48
     49    public override void Eval(IInternalPushInterpreter interpreter) {
    4350      var first = interpreter.BooleanStack.Pop();
    4451      var second = interpreter.BooleanStack.Top;
     
    4653
    4754      interpreter.BooleanStack.SetTop(result);
    48       return true;
    4955    }
    5056  }
     
    5460  /// </summary>
    5561  [PushExpression(StackTypes.Boolean, "BOOLEAN.NOT")]
     62  [StorableClass]
    5663  public class BooleanNotExpression : StatelessExpression {
    57     public override bool Eval(IInternalPushInterpreter interpreter) {
    58       if (interpreter.BooleanStack.IsEmpty)
    59         return false;
     64    public BooleanNotExpression() { }
     65    [StorableConstructor]
     66    public BooleanNotExpression(bool deserializing) : base(deserializing) { }
    6067
     68    public override bool IsNoop(IInternalPushInterpreter interpreter) {
     69      return interpreter.BooleanStack.IsEmpty;
     70    }
     71
     72    public override void Eval(IInternalPushInterpreter interpreter) {
    6173      interpreter.BooleanStack.SetTop(!interpreter.BooleanStack.Top);
    62       return true;
    6374    }
    6475  }
     
    6879  /// </summary>
    6980  [PushExpression(StackTypes.Boolean, "BOOLEAN.FROMFLOAT", StackTypes.Float)]
     81  [StorableClass]
    7082  public class BooleanFromFloatExpression : StatelessExpression {
    71     public override bool Eval(IInternalPushInterpreter interpreter) {
    72       if (interpreter.FloatStack.Count == 0) return false;
     83    public BooleanFromFloatExpression() { }
     84    [StorableConstructor]
     85    public BooleanFromFloatExpression(bool deserializing) : base(deserializing) { }
    7386
    74       var value = Math.Abs(interpreter.FloatStack.Pop()) > 0.0000001;
     87    public override bool IsNoop(IInternalPushInterpreter interpreter) {
     88      return interpreter.FloatStack.Count == 0;
     89    }
    7590
     91    public override void Eval(IInternalPushInterpreter interpreter) {
     92      var value = !Math.Abs(interpreter.FloatStack.Pop()).IsAlmost(0);
    7693      interpreter.BooleanStack.Push(value);
    77       return true;
    7894    }
    7995  }
     
    8399  /// </summary>
    84100  [PushExpression(StackTypes.Boolean, "BOOLEAN.FROMINTEGER", StackTypes.Integer)]
     101  [StorableClass]
    85102  public class BooleanFromIntegerExpression : StatelessExpression {
    86     public override bool Eval(IInternalPushInterpreter interpreter) {
    87       if (interpreter.IntegerStack.Count == 0) return false;
     103    public BooleanFromIntegerExpression() { }
     104    [StorableConstructor]
     105    public BooleanFromIntegerExpression(bool deserializing) : base(deserializing) { }
    88106
     107    public override bool IsNoop(IInternalPushInterpreter interpreter) {
     108      return interpreter.IntegerStack.Count == 0;
     109    }
     110
     111    public override void Eval(IInternalPushInterpreter interpreter) {
    89112      var value = interpreter.IntegerStack.Pop() != 0;
    90 
    91113      interpreter.BooleanStack.Push(value);
    92       return true;
    93114    }
    94115  }
     
    98119  /// </summary>
    99120  [PushExpression(StackTypes.Boolean, "BOOLEAN.INVERT_FIRST_THEN_AND")]
     121  [StorableClass]
    100122  public class BooleanInvertFirstThenAnd : StatelessExpression {
    101     public override bool Eval(IInternalPushInterpreter interpreter) {
    102       if (interpreter.BooleanStack.Count < 2)
    103         return false;
     123    public BooleanInvertFirstThenAnd() { }
     124    [StorableConstructor]
     125    public BooleanInvertFirstThenAnd(bool deserializing) : base(deserializing) { }
    104126
     127    public override bool IsNoop(IInternalPushInterpreter interpreter) {
     128      return interpreter.BooleanStack.Count < 2;
     129    }
     130
     131    public override void Eval(IInternalPushInterpreter interpreter) {
    105132      var first = interpreter.BooleanStack.Pop();
    106133      var second = interpreter.BooleanStack.Top;
     
    108135
    109136      interpreter.BooleanStack.SetTop(result);
    110       return true;
    111137    }
    112138  }
     
    116142  /// </summary>
    117143  [PushExpression(StackTypes.Boolean, "BOOLEAN.INVERT_SECOND_THEN_AND")]
     144  [StorableClass]
    118145  public class BooleanInvertSecondThenAnd : StatelessExpression {
    119     public override bool Eval(IInternalPushInterpreter interpreter) {
    120       if (interpreter.BooleanStack.Count < 2)
    121         return false;
     146    public BooleanInvertSecondThenAnd() { }
     147    [StorableConstructor]
     148    public BooleanInvertSecondThenAnd(bool deserializing) : base(deserializing) { }
    122149
     150    public override bool IsNoop(IInternalPushInterpreter interpreter) {
     151      return interpreter.BooleanStack.Count < 2;
     152    }
     153
     154    public override void Eval(IInternalPushInterpreter interpreter) {
    123155      var first = interpreter.BooleanStack.Pop();
    124156      var second = interpreter.BooleanStack.Top;
     
    126158
    127159      interpreter.BooleanStack.SetTop(result);
    128       return true;
    129160    }
    130161  }
     
    135166  /// </summary>
    136167  [PushExpression(StackTypes.Boolean, "BOOLEAN.XOR")]
     168  [StorableClass]
    137169  public class BooleanXorExpression : StatelessExpression {
    138     public override bool Eval(IInternalPushInterpreter interpreter) {
    139       if (interpreter.BooleanStack.Count < 2)
    140         return false;
     170    public BooleanXorExpression() { }
     171    [StorableConstructor]
     172    public BooleanXorExpression(bool deserializing) : base(deserializing) { }
    141173
     174    public override bool IsNoop(IInternalPushInterpreter interpreter) {
     175      return interpreter.BooleanStack.Count < 2;
     176    }
     177
     178    public override void Eval(IInternalPushInterpreter interpreter) {
    142179      var first = interpreter.BooleanStack.Pop();
    143180      var second = interpreter.BooleanStack.Top;
     
    145182
    146183      interpreter.BooleanStack.SetTop(result);
    147       return true;
    148184    }
    149185  }
Note: See TracChangeset for help on using the changeset viewer.