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

    r14875 r14952  
    44
    55  using Attributes;
     6
     7  using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
     8
    69  using Interpreter;
    710  using Stack;
    811
     12  [StorableClass]
    913  public abstract class ShoveExpression<T> : StatelessExpression {
    10     protected bool Eval(IPushStack<T> stack, IPushStack<long> integerStack) {
    11       if ((stack == integerStack && integerStack.Count < 3) ||
    12           (stack != integerStack && (integerStack.IsEmpty || stack.Count < 2)))
    13         return false;
    14 
     14    protected ShoveExpression() { }
     15    [StorableConstructor]
     16    protected ShoveExpression(bool deserializing) : base(deserializing) { }
     17
     18    protected void Eval(IPushStack<T> stack, IPushStack<long> integerStack) {
    1519      var index = (int)Math.Abs(integerStack.Pop() % stack.Count);
    1620      var item = stack.Pop();
    1721      stack.Insert(index, item);
    18       return true;
    1922    }
    2023  }
    2124
    2225  [PushExpression(StackTypes.Integer, "INTEGER.SHOVE")]
     26  [StorableClass]
    2327  public class IntegerShoveExpression : ShoveExpression<long> {
    24     public override bool Eval(IInternalPushInterpreter interpreter) {
    25       return Eval(interpreter.IntegerStack, interpreter.IntegerStack);
     28    public IntegerShoveExpression() { }
     29    [StorableConstructor]
     30    protected IntegerShoveExpression(bool deserializing) : base(deserializing) { }
     31
     32    public override bool IsNoop(IInternalPushInterpreter interpreter) {
     33      return interpreter.IntegerStack.Count < 3;
     34    }
     35
     36    public override void Eval(IInternalPushInterpreter interpreter) {
     37      Eval(interpreter.IntegerStack, interpreter.IntegerStack);
    2638    }
    2739  }
    2840
    2941  [PushExpression(StackTypes.Float, "FLOAT.SHOVE", StackTypes.Integer)]
     42  [StorableClass]
    3043  public class FloatShoveExpression : ShoveExpression<double> {
    31     public override bool Eval(IInternalPushInterpreter interpreter) {
    32       return Eval(interpreter.FloatStack, interpreter.IntegerStack);
     44    public FloatShoveExpression() { }
     45    [StorableConstructor]
     46    protected FloatShoveExpression(bool deserializing) : base(deserializing) { }
     47
     48    public override bool IsNoop(IInternalPushInterpreter interpreter) {
     49      return interpreter.IntegerStack.IsEmpty || interpreter.FloatStack.Count < 2;
     50    }
     51
     52    public override void Eval(IInternalPushInterpreter interpreter) {
     53      Eval(interpreter.FloatStack, interpreter.IntegerStack);
    3354    }
    3455  }
    3556
    3657  [PushExpression(StackTypes.Boolean, "BOOLEAN.SHOVE", StackTypes.Integer)]
     58  [StorableClass]
    3759  public class BooleanShoveExpression : ShoveExpression<bool> {
    38     public override bool Eval(IInternalPushInterpreter interpreter) {
    39       return Eval(interpreter.BooleanStack, interpreter.IntegerStack);
     60    public BooleanShoveExpression() { }
     61    [StorableConstructor]
     62    protected BooleanShoveExpression(bool deserializing) : base(deserializing) { }
     63
     64    public override bool IsNoop(IInternalPushInterpreter interpreter) {
     65      return interpreter.IntegerStack.IsEmpty || interpreter.BooleanStack.Count < 2;
     66    }
     67
     68    public override void Eval(IInternalPushInterpreter interpreter) {
     69      Eval(interpreter.BooleanStack, interpreter.IntegerStack);
    4070    }
    4171  }
    4272
    4373  [PushExpression(StackTypes.Name, "NAME.SHOVE", StackTypes.Integer)]
     74  [StorableClass]
    4475  public class NameShoveExpression : ShoveExpression<string> {
    45     public override bool Eval(IInternalPushInterpreter interpreter) {
    46       return Eval(interpreter.NameStack, interpreter.IntegerStack);
     76    public NameShoveExpression() { }
     77    [StorableConstructor]
     78    protected NameShoveExpression(bool deserializing) : base(deserializing) { }
     79
     80    public override bool IsNoop(IInternalPushInterpreter interpreter) {
     81      return interpreter.IntegerStack.IsEmpty || interpreter.NameStack.Count < 2;
     82    }
     83
     84    public override void Eval(IInternalPushInterpreter interpreter) {
     85      Eval(interpreter.NameStack, interpreter.IntegerStack);
    4786    }
    4887  }
    4988
    5089  [PushExpression(StackTypes.Exec, "EXEC.SHOVE", StackTypes.Integer)]
     90  [StorableClass]
    5191  public class ExecShoveExpression : ShoveExpression<Expression> {
    52     public override bool Eval(IInternalPushInterpreter interpreter) {
    53       return Eval(interpreter.ExecStack, interpreter.IntegerStack);
     92    public ExecShoveExpression() { }
     93    [StorableConstructor]
     94    protected ExecShoveExpression(bool deserializing) : base(deserializing) { }
     95
     96    public override bool IsNoop(IInternalPushInterpreter interpreter) {
     97      return interpreter.IntegerStack.IsEmpty || interpreter.ExecStack.Count < 2;
     98    }
     99
     100    public override void Eval(IInternalPushInterpreter interpreter) {
     101      Eval(interpreter.ExecStack, interpreter.IntegerStack);
    54102    }
    55103  }
    56104
    57105  [PushExpression(StackTypes.Code, "CODE.SHOVE", StackTypes.Integer)]
     106  [StorableClass]
    58107  public class CodeShoveExpression : ShoveExpression<Expression> {
    59     public override bool Eval(IInternalPushInterpreter interpreter) {
    60       return Eval(interpreter.CodeStack, interpreter.IntegerStack);
     108    public CodeShoveExpression() { }
     109    [StorableConstructor]
     110    protected CodeShoveExpression(bool deserializing) : base(deserializing) { }
     111
     112    public override bool IsNoop(IInternalPushInterpreter interpreter) {
     113      return interpreter.IntegerStack.IsEmpty || interpreter.CodeStack.Count < 2;
     114    }
     115
     116    public override void Eval(IInternalPushInterpreter interpreter) {
     117      Eval(interpreter.CodeStack, interpreter.IntegerStack);
    61118    }
    62119  }
    63120
    64121  [PushExpression(StackTypes.Char, "CHAR.SHOVE", StackTypes.Integer)]
     122  [StorableClass]
    65123  public class CharShoveExpression : ShoveExpression<char> {
    66     public override bool Eval(IInternalPushInterpreter interpreter) {
    67       return Eval(interpreter.CharStack, interpreter.IntegerStack);
     124    public CharShoveExpression() { }
     125    [StorableConstructor]
     126    protected CharShoveExpression(bool deserializing) : base(deserializing) { }
     127
     128    public override bool IsNoop(IInternalPushInterpreter interpreter) {
     129      return interpreter.IntegerStack.IsEmpty || interpreter.CharStack.Count < 2;
     130    }
     131
     132    public override void Eval(IInternalPushInterpreter interpreter) {
     133      Eval(interpreter.CharStack, interpreter.IntegerStack);
    68134    }
    69135  }
    70136
    71137  [PushExpression(StackTypes.String, "STRING.SHOVE", StackTypes.Integer)]
     138  [StorableClass]
    72139  public class StringShoveExpression : ShoveExpression<string> {
    73     public override bool Eval(IInternalPushInterpreter interpreter) {
    74       return Eval(interpreter.StringStack, interpreter.IntegerStack);
     140    public StringShoveExpression() { }
     141    [StorableConstructor]
     142    protected StringShoveExpression(bool deserializing) : base(deserializing) { }
     143
     144    public override bool IsNoop(IInternalPushInterpreter interpreter) {
     145      return interpreter.IntegerStack.IsEmpty || interpreter.StringStack.Count < 2;
     146    }
     147
     148    public override void Eval(IInternalPushInterpreter interpreter) {
     149      Eval(interpreter.StringStack, interpreter.IntegerStack);
    75150    }
    76151  }
    77152
    78153  [PushExpression(StackTypes.IntegerVector, "INTEGER[].SHOVE", StackTypes.Integer)]
     154  [StorableClass]
    79155  public class IntegerVectorShoveExpression : ShoveExpression<List<long>> {
    80     public override bool Eval(IInternalPushInterpreter interpreter) {
    81       return Eval(interpreter.IntegerVectorStack, interpreter.IntegerStack);
     156    public IntegerVectorShoveExpression() { }
     157    [StorableConstructor]
     158    protected IntegerVectorShoveExpression(bool deserializing) : base(deserializing) { }
     159
     160    public override bool IsNoop(IInternalPushInterpreter interpreter) {
     161      return interpreter.IntegerStack.IsEmpty || interpreter.IntegerVectorStack.Count < 2;
     162    }
     163
     164    public override void Eval(IInternalPushInterpreter interpreter) {
     165      Eval(interpreter.IntegerVectorStack, interpreter.IntegerStack);
    82166    }
    83167  }
    84168
    85169  [PushExpression(StackTypes.FloatVector, "FLOAT[].SHOVE", StackTypes.Integer)]
     170  [StorableClass]
    86171  public class FloatVectorShoveExpression : ShoveExpression<List<double>> {
    87     public override bool Eval(IInternalPushInterpreter interpreter) {
    88       return Eval(interpreter.FloatVectorStack, interpreter.IntegerStack);
     172    public FloatVectorShoveExpression() { }
     173    [StorableConstructor]
     174    protected FloatVectorShoveExpression(bool deserializing) : base(deserializing) { }
     175
     176    public override bool IsNoop(IInternalPushInterpreter interpreter) {
     177      return interpreter.IntegerStack.IsEmpty || interpreter.FloatVectorStack.Count < 2;
     178    }
     179
     180    public override void Eval(IInternalPushInterpreter interpreter) {
     181      Eval(interpreter.FloatVectorStack, interpreter.IntegerStack);
    89182    }
    90183  }
    91184
    92185  [PushExpression(StackTypes.BooleanVector, "BOOLEAN[].SHOVE", StackTypes.Integer)]
     186  [StorableClass]
    93187  public class BooleanVectorShoveExpression : ShoveExpression<List<bool>> {
    94     public override bool Eval(IInternalPushInterpreter interpreter) {
    95       return Eval(interpreter.BooleanVectorStack, interpreter.IntegerStack);
     188    public BooleanVectorShoveExpression() { }
     189    [StorableConstructor]
     190    protected BooleanVectorShoveExpression(bool deserializing) : base(deserializing) { }
     191
     192    public override bool IsNoop(IInternalPushInterpreter interpreter) {
     193      return interpreter.IntegerStack.IsEmpty || interpreter.BooleanVectorStack.Count < 2;
     194    }
     195
     196    public override void Eval(IInternalPushInterpreter interpreter) {
     197      Eval(interpreter.BooleanVectorStack, interpreter.IntegerStack);
    96198    }
    97199  }
    98200
    99201  [PushExpression(StackTypes.StringVector, "STRING[].SHOVE", StackTypes.Integer)]
     202  [StorableClass]
    100203  public class StringVectorShoveExpression : ShoveExpression<List<string>> {
    101     public override bool Eval(IInternalPushInterpreter interpreter) {
    102       return Eval(interpreter.StringVectorStack, interpreter.IntegerStack);
     204    public StringVectorShoveExpression() { }
     205    [StorableConstructor]
     206    protected StringVectorShoveExpression(bool deserializing) : base(deserializing) { }
     207
     208    public override bool IsNoop(IInternalPushInterpreter interpreter) {
     209      return interpreter.IntegerStack.IsEmpty || interpreter.StringVectorStack.Count < 2;
     210    }
     211
     212    public override void Eval(IInternalPushInterpreter interpreter) {
     213      Eval(interpreter.StringVectorStack, interpreter.IntegerStack);
    103214    }
    104215  }
Note: See TracChangeset for help on using the changeset viewer.