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/IntegerExpressions.cs

    r14875 r14952  
    22  using System;
    33
     4  using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
    45  using HeuristicLab.Problems.ProgramSynthesis.Push.Attributes;
    56  using HeuristicLab.Problems.ProgramSynthesis.Push.Stack;
     
    1112  /// </summary>
    1213  [PushExpression(StackTypes.Integer, "INTEGER.+")]
     14  [StorableClass]
    1315  public class IntegerAddExpression : StatelessExpression {
    14     public override bool Eval(IInternalPushInterpreter interpreter) {
    15       if (interpreter.IntegerStack.Count < 2)
    16         return false;
    17 
     16    public IntegerAddExpression() { }
     17    [StorableConstructor]
     18    protected IntegerAddExpression(bool deserializing) : base(deserializing) { }
     19
     20    public override bool IsNoop(IInternalPushInterpreter interpreter) {
     21      return interpreter.IntegerStack.Count < 2;
     22    }
     23
     24    public override void Eval(IInternalPushInterpreter interpreter) {
    1825      var first = interpreter.IntegerStack.Pop();
    1926      var second = interpreter.IntegerStack.Top;
     
    2128
    2229      interpreter.IntegerStack.SetTop(result);
    23       return true;
    2430    }
    2531  }
     
    2935  /// </summary>
    3036  [PushExpression(StackTypes.Integer, "INTEGER.-")]
     37  [StorableClass]
    3138  public class IntegerSubtractExpression : StatelessExpression {
    32     public override bool Eval(IInternalPushInterpreter interpreter) {
    33       if (interpreter.IntegerStack.Count < 2)
    34         return false;
    35 
     39    public IntegerSubtractExpression() { }
     40    [StorableConstructor]
     41    protected IntegerSubtractExpression(bool deserializing) : base(deserializing) { }
     42
     43    public override bool IsNoop(IInternalPushInterpreter interpreter) {
     44      return interpreter.IntegerStack.Count < 2;
     45    }
     46
     47    public override void Eval(IInternalPushInterpreter interpreter) {
    3648      var first = interpreter.IntegerStack.Pop();
    3749      var second = interpreter.IntegerStack.Top;
     
    3951
    4052      interpreter.IntegerStack.SetTop(result);
    41       return true;
    4253    }
    4354  }
     
    4758  /// </summary>
    4859  [PushExpression(StackTypes.Integer, "INTEGER.*")]
     60  [StorableClass]
    4961  public class IntegerMultiplyExpression : StatelessExpression {
    50     public override bool Eval(IInternalPushInterpreter interpreter) {
    51       if (interpreter.IntegerStack.Count < 2)
    52         return false;
    53 
     62    public IntegerMultiplyExpression() { }
     63    [StorableConstructor]
     64    protected IntegerMultiplyExpression(bool deserializing) : base(deserializing) { }
     65
     66    public override bool IsNoop(IInternalPushInterpreter interpreter) {
     67      return interpreter.IntegerStack.Count < 2;
     68    }
     69
     70    public override void Eval(IInternalPushInterpreter interpreter) {
    5471      var first = interpreter.IntegerStack.Pop();
    5572      var second = interpreter.IntegerStack.Top;
     
    5774
    5875      interpreter.IntegerStack.SetTop(result);
    59       return true;
    6076    }
    6177  }
     
    6682  /// </summary>
    6783  [PushExpression(StackTypes.Integer, "INTEGER./")]
     84  [StorableClass]
    6885  public class IntegerDivideExpression : StatelessExpression {
    69     public override bool Eval(IInternalPushInterpreter interpreter) {
    70       if (interpreter.IntegerStack.Count < 2 ||
    71           interpreter.IntegerStack.Top == 0)
    72         return false;
    73 
     86    public IntegerDivideExpression() { }
     87    [StorableConstructor]
     88    protected IntegerDivideExpression(bool deserializing) : base(deserializing) { }
     89
     90    public override bool IsNoop(IInternalPushInterpreter interpreter) {
     91      return interpreter.IntegerStack.Count < 2 || interpreter.IntegerStack.Top == 0;
     92    }
     93
     94    public override void Eval(IInternalPushInterpreter interpreter) {
    7495      var first = interpreter.IntegerStack.Pop();
    7596      var second = interpreter.IntegerStack.Top;
     
    7798
    7899      interpreter.IntegerStack.SetTop(result);
    79       return true;
    80100    }
    81101  }
     
    88108  /// </summary>
    89109  [PushExpression(StackTypes.Integer, "INTEGER.%")]
     110  [StorableClass]
    90111  public class IntegerModuloExpression : StatelessExpression {
    91     public override bool Eval(IInternalPushInterpreter interpreter) {
    92       if (interpreter.IntegerStack.Count < 2 ||
    93           interpreter.IntegerStack.Top == 0)
    94         return false;
    95 
     112    public IntegerModuloExpression() { }
     113    [StorableConstructor]
     114    protected IntegerModuloExpression(bool deserializing) : base(deserializing) { }
     115
     116    public override bool IsNoop(IInternalPushInterpreter interpreter) {
     117      return interpreter.IntegerStack.Count < 2 || interpreter.IntegerStack.Top == 0;
     118    }
     119
     120    public override void Eval(IInternalPushInterpreter interpreter) {
    96121      var first = interpreter.IntegerStack.Pop();
    97122      var second = interpreter.IntegerStack.Top;
     
    99124
    100125      interpreter.IntegerStack.SetTop(result);
    101       return true;
    102126    }
    103127  }
     
    107131  /// </summary>
    108132  [PushExpression(StackTypes.Integer, "INTEGER.MIN")]
     133  [StorableClass]
    109134  public class IntegerMinExpression : StatelessExpression {
    110     public override bool Eval(IInternalPushInterpreter interpreter) {
    111       if (interpreter.IntegerStack.Count < 2)
    112         return false;
    113 
     135    public IntegerMinExpression() { }
     136    [StorableConstructor]
     137    protected IntegerMinExpression(bool deserializing) : base(deserializing) { }
     138
     139    public override bool IsNoop(IInternalPushInterpreter interpreter) {
     140      return interpreter.IntegerStack.Count < 2;
     141    }
     142
     143    public override void Eval(IInternalPushInterpreter interpreter) {
    114144      var first = interpreter.IntegerStack.Pop();
    115145      var second = interpreter.IntegerStack.Top;
     
    117147
    118148      interpreter.IntegerStack.SetTop(result);
    119       return true;
    120149    }
    121150  }
     
    125154  /// </summary>
    126155  [PushExpression(StackTypes.Integer, "INTEGER.MAX")]
     156  [StorableClass]
    127157  public class IntegerMaxExpression : StatelessExpression {
    128     public override bool Eval(IInternalPushInterpreter interpreter) {
    129       if (interpreter.IntegerStack.Count < 2)
    130         return false;
    131 
     158    public IntegerMaxExpression() { }
     159    [StorableConstructor]
     160    protected IntegerMaxExpression(bool deserializing) : base(deserializing) { }
     161
     162    public override bool IsNoop(IInternalPushInterpreter interpreter) {
     163      return interpreter.IntegerStack.Count < 2;
     164    }
     165
     166    public override void Eval(IInternalPushInterpreter interpreter) {
    132167      var first = interpreter.IntegerStack.Pop();
    133168      var second = interpreter.IntegerStack.Top;
     
    135170
    136171      interpreter.IntegerStack.SetTop(result);
    137       return true;
    138172    }
    139173  }
     
    143177  /// </summary>
    144178  [PushExpression(StackTypes.Integer, "INTEGER.<", StackTypes.Boolean)]
     179  [StorableClass]
    145180  public class IntegerSmallerThanExpression : StatelessExpression {
    146     public override bool Eval(IInternalPushInterpreter interpreter) {
    147       if (interpreter.IntegerStack.Count < 2)
    148         return false;
    149 
     181    public IntegerSmallerThanExpression() { }
     182    [StorableConstructor]
     183    protected IntegerSmallerThanExpression(bool deserializing) : base(deserializing) { }
     184
     185    public override bool IsNoop(IInternalPushInterpreter interpreter) {
     186      return interpreter.IntegerStack.Count < 2;
     187    }
     188
     189    public override void Eval(IInternalPushInterpreter interpreter) {
    150190      var first = interpreter.IntegerStack.Top;
    151191      var second = interpreter.IntegerStack[1];
     
    154194      var result = second < first;
    155195      interpreter.BooleanStack.Push(result);
    156       return true;
    157196    }
    158197  }
     
    162201  /// </summary>
    163202  [PushExpression(StackTypes.Integer, "INTEGER.>", StackTypes.Boolean)]
     203  [StorableClass]
    164204  public class IntegerGreaterThanExpression : StatelessExpression {
    165     public override bool Eval(IInternalPushInterpreter interpreter) {
    166       if (interpreter.IntegerStack.Count < 2)
    167         return false;
    168 
     205    public IntegerGreaterThanExpression() { }
     206    [StorableConstructor]
     207    protected IntegerGreaterThanExpression(bool deserializing) : base(deserializing) { }
     208
     209    public override bool IsNoop(IInternalPushInterpreter interpreter) {
     210      return interpreter.IntegerStack.Count < 2;
     211    }
     212
     213    public override void Eval(IInternalPushInterpreter interpreter) {
    169214      var first = interpreter.IntegerStack.Top;
    170215      var second = interpreter.IntegerStack[1];
     
    173218      var result = second > first;
    174219      interpreter.BooleanStack.Push(result);
    175       return true;
    176220    }
    177221  }
     
    181225  /// </summary>
    182226  [PushExpression(StackTypes.Integer, "INTEGER.FROMBOOLEAN", StackTypes.Boolean)]
     227  [StorableClass]
    183228  public class IntegerFromBooleanExpression : StatelessExpression {
    184     public override bool Eval(IInternalPushInterpreter interpreter) {
    185       if (interpreter.BooleanStack.Count == 0)
    186         return false;
    187 
     229    public IntegerFromBooleanExpression() { }
     230    [StorableConstructor]
     231    protected IntegerFromBooleanExpression(bool deserializing) : base(deserializing) { }
     232
     233    public override bool IsNoop(IInternalPushInterpreter interpreter) {
     234      return interpreter.BooleanStack.IsEmpty;
     235    }
     236
     237    public override void Eval(IInternalPushInterpreter interpreter) {
    188238      var condition = interpreter.BooleanStack.Pop();
    189239      var value = condition ? 1 : 0;
    190240      interpreter.IntegerStack.Push(value);
    191       return true;
    192241    }
    193242  }
     
    197246  /// </summary>
    198247  [PushExpression(StackTypes.Integer, "INTEGER.FROMFLOAT", StackTypes.Float)]
     248  [StorableClass]
    199249  public class IntegerFromFloatExpression : StatelessExpression {
    200     public override bool Eval(IInternalPushInterpreter interpreter) {
    201       if (interpreter.FloatStack.Count == 0)
    202         return false;
    203 
     250    public IntegerFromFloatExpression() { }
     251    [StorableConstructor]
     252    protected IntegerFromFloatExpression(bool deserializing) : base(deserializing) { }
     253
     254    public override bool IsNoop(IInternalPushInterpreter interpreter) {
     255      return interpreter.FloatStack.IsEmpty;
     256    }
     257
     258    public override void Eval(IInternalPushInterpreter interpreter) {
    204259      var value = (int)interpreter.FloatStack.Pop();
    205260      interpreter.IntegerStack.Push(value);
    206       return true;
    207261    }
    208262  }
Note: See TracChangeset for help on using the changeset viewer.