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

    r14908 r14952  
    44
    55  using Attributes;
     6
     7  using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
     8
    69  using Interpreter;
    710  using Stack;
     
    1215  /// </summary>
    1316  /// <typeparam name="T">Stacktype</typeparam>
     17  [StorableClass]
    1418  public abstract class DefineExpression<T> : StatelessExpression {
    15     protected bool Eval(
     19    protected DefineExpression() { }
     20    [StorableConstructor]
     21    protected DefineExpression(bool deserializing) : base(deserializing) { }
     22
     23    protected void Eval(
    1624      IPushStack<T> stack,
    1725      IPushStack<string> nameStack,
    1826      IDictionary<string, Expression> customExpressions,
    1927      Func<T, Expression> creator) {
    20       // not enough arguments on stack
    21       if ((nameStack.Count == 0) || (stack.Count < 1)) return false;
    22 
    2328      var name = nameStack.Pop();
    2429      var expression = creator(stack.Top);
     
    2631      if (customExpressions.ContainsKey(name)) customExpressions[name] = expression;
    2732      else customExpressions.Add(name, expression);
    28 
    29       return true;
    3033    }
    3134  }
    3235
    3336  [PushExpression(StackTypes.Code, "CODE.DEFINE", StackTypes.Name)]
     37  [StorableClass]
    3438  public class CodeDefineExpression : DefineExpression<Expression> {
    35     public override bool Eval(IInternalPushInterpreter interpreter) {
    36       if (interpreter.Configuration.TopLevelPushCode && (interpreter.CodeStack.Count < 2)) return false;
    37 
     39    public CodeDefineExpression() { }
     40    [StorableConstructor]
     41    protected CodeDefineExpression(bool deserializing) : base(deserializing) { }
     42
     43    public override bool IsNoop(IInternalPushInterpreter interpreter) {
     44      return (interpreter.Configuration.TopLevelPushCode && interpreter.CodeStack.Count < 2) ||
     45             interpreter.CodeStack.IsEmpty ||
     46             interpreter.NameStack.IsEmpty;
     47    }
     48
     49    public override void Eval(IInternalPushInterpreter interpreter) {
    3850      Eval(
    3951        interpreter.CodeStack,
     
    4355
    4456      interpreter.CodeStack.Pop();
    45 
    46       return true;
    4757    }
    4858  }
    4959
    5060  [PushExpression(StackTypes.Exec, "EXEC.DEFINE", StackTypes.Name)]
     61  [StorableClass]
    5162  public class ExecDefineExpression : DefineExpression<Expression> {
    52     public override bool Eval(IInternalPushInterpreter interpreter) {
    53       if (interpreter.ExecStack.Count < 2) return false;
    54 
    55       var noop = Eval(
     63    public ExecDefineExpression() { }
     64    [StorableConstructor]
     65    protected ExecDefineExpression(bool deserializing) : base(deserializing) { }
     66
     67    public override bool IsNoop(IInternalPushInterpreter interpreter) {
     68      return interpreter.ExecStack.Count < 2 ||
     69             interpreter.NameStack.IsEmpty;
     70    }
     71
     72    public override void Eval(IInternalPushInterpreter interpreter) {
     73      Eval(
    5674        interpreter.ExecStack,
    5775        interpreter.NameStack,
     
    5977        v => new ExecPushExpression(v));
    6078
    61       if (!noop)
    62         interpreter.ExecStack.Pop();
    63 
    64       return noop;
     79      interpreter.ExecStack.Pop();
    6580    }
    6681  }
    6782
    6883  [PushExpression(StackTypes.Float, "FLOAT.DEFINE", StackTypes.Name)]
     84  [StorableClass]
    6985  public class FloatDefineExpression : DefineExpression<double> {
    70 
    71     public override bool Eval(IInternalPushInterpreter interpreter) {
    72       return Eval(
     86    public FloatDefineExpression() { }
     87    [StorableConstructor]
     88    protected FloatDefineExpression(bool deserializing) : base(deserializing) { }
     89
     90    public override bool IsNoop(IInternalPushInterpreter interpreter) {
     91      return interpreter.FloatStack.IsEmpty ||
     92             interpreter.NameStack.IsEmpty;
     93    }
     94
     95    public override void Eval(IInternalPushInterpreter interpreter) {
     96      Eval(
    7397        interpreter.FloatStack,
    7498        interpreter.NameStack,
     
    79103
    80104  [PushExpression(StackTypes.Integer, "INTEGER.DEFINE", StackTypes.Name)]
     105  [StorableClass]
    81106  public class IntegerDefineExpression : DefineExpression<long> {
    82     public override bool Eval(IInternalPushInterpreter interpreter) {
    83       return Eval(
     107    public IntegerDefineExpression() { }
     108    [StorableConstructor]
     109    protected IntegerDefineExpression(bool deserializing) : base(deserializing) { }
     110
     111    public override bool IsNoop(IInternalPushInterpreter interpreter) {
     112      return interpreter.IntegerStack.IsEmpty ||
     113             interpreter.NameStack.IsEmpty;
     114    }
     115
     116    public override void Eval(IInternalPushInterpreter interpreter) {
     117      Eval(
    84118        interpreter.IntegerStack,
    85119        interpreter.NameStack,
     
    90124
    91125  [PushExpression(StackTypes.Boolean, "BOOLEAN.DEFINE", StackTypes.Name)]
     126  [StorableClass]
    92127  public class BooleanDefineExpression : DefineExpression<bool> {
    93     public override bool Eval(IInternalPushInterpreter interpreter) {
    94       return Eval(
     128    public BooleanDefineExpression() { }
     129    [StorableConstructor]
     130    protected BooleanDefineExpression(bool deserializing) : base(deserializing) { }
     131
     132    public override bool IsNoop(IInternalPushInterpreter interpreter) {
     133      return interpreter.BooleanStack.IsEmpty ||
     134             interpreter.NameStack.IsEmpty;
     135    }
     136
     137    public override void Eval(IInternalPushInterpreter interpreter) {
     138      Eval(
    95139        interpreter.BooleanStack,
    96140        interpreter.NameStack,
     
    101145
    102146  [PushExpression(StackTypes.Char, "CHAR.DEFINE", StackTypes.Name)]
     147  [StorableClass]
    103148  public class CharDefineExpression : DefineExpression<char> {
    104     public override bool Eval(IInternalPushInterpreter interpreter) {
    105       return Eval(
     149    public CharDefineExpression() { }
     150    [StorableConstructor]
     151    protected CharDefineExpression(bool deserializing) : base(deserializing) { }
     152
     153    public override bool IsNoop(IInternalPushInterpreter interpreter) {
     154      return interpreter.CharStack.IsEmpty ||
     155             interpreter.NameStack.IsEmpty;
     156    }
     157
     158    public override void Eval(IInternalPushInterpreter interpreter) {
     159      Eval(
    106160        interpreter.CharStack,
    107161        interpreter.NameStack,
     
    112166
    113167  [PushExpression(StackTypes.String, "STRING.DEFINE", StackTypes.Name)]
     168  [StorableClass]
    114169  public class StringDefineExpression : DefineExpression<string> {
    115     public override bool Eval(IInternalPushInterpreter interpreter) {
    116       return Eval(
     170    public StringDefineExpression() { }
     171    [StorableConstructor]
     172    protected StringDefineExpression(bool deserializing) : base(deserializing) { }
     173
     174    public override bool IsNoop(IInternalPushInterpreter interpreter) {
     175      return interpreter.StringStack.IsEmpty ||
     176             interpreter.NameStack.IsEmpty;
     177    }
     178
     179    public override void Eval(IInternalPushInterpreter interpreter) {
     180      Eval(
    117181        interpreter.StringStack,
    118182        interpreter.NameStack,
     
    123187
    124188  [PushExpression(StackTypes.IntegerVector, "INTEGER[].DEFINE", StackTypes.Name)]
     189  [StorableClass]
    125190  public class IntegerVectorDefineExpression : DefineExpression<List<long>> {
    126     public override bool Eval(IInternalPushInterpreter interpreter) {
    127       return Eval(
     191    public IntegerVectorDefineExpression() { }
     192    [StorableConstructor]
     193    protected IntegerVectorDefineExpression(bool deserializing) : base(deserializing) { }
     194
     195    public override bool IsNoop(IInternalPushInterpreter interpreter) {
     196      return interpreter.IntegerVectorStack.IsEmpty ||
     197             interpreter.NameStack.IsEmpty;
     198    }
     199
     200    public override void Eval(IInternalPushInterpreter interpreter) {
     201      Eval(
    128202        interpreter.IntegerVectorStack,
    129203        interpreter.NameStack,
     
    134208
    135209  [PushExpression(StackTypes.FloatVector, "FLOAT[].DEFINE", StackTypes.Name)]
     210  [StorableClass]
    136211  public class FloatVectorDefineExpression : DefineExpression<List<double>> {
    137     public override bool Eval(IInternalPushInterpreter interpreter) {
    138       return Eval(
     212    public FloatVectorDefineExpression() { }
     213    [StorableConstructor]
     214    protected FloatVectorDefineExpression(bool deserializing) : base(deserializing) { }
     215
     216    public override bool IsNoop(IInternalPushInterpreter interpreter) {
     217      return interpreter.FloatVectorStack.IsEmpty ||
     218             interpreter.NameStack.IsEmpty;
     219    }
     220
     221    public override void Eval(IInternalPushInterpreter interpreter) {
     222      Eval(
    139223        interpreter.FloatVectorStack,
    140224        interpreter.NameStack,
     
    145229
    146230  [PushExpression(StackTypes.BooleanVector, "BOOLEAN[].DEFINE", StackTypes.Name)]
     231  [StorableClass]
    147232  public class BooleanVectorDefineExpression : DefineExpression<List<bool>> {
    148     public override bool Eval(IInternalPushInterpreter interpreter) {
    149       return Eval(
     233    public BooleanVectorDefineExpression() { }
     234    [StorableConstructor]
     235    protected BooleanVectorDefineExpression(bool deserializing) : base(deserializing) { }
     236
     237    public override bool IsNoop(IInternalPushInterpreter interpreter) {
     238      return interpreter.BooleanVectorStack.IsEmpty ||
     239             interpreter.NameStack.IsEmpty;
     240    }
     241
     242    public override void Eval(IInternalPushInterpreter interpreter) {
     243      Eval(
    150244        interpreter.BooleanVectorStack,
    151245        interpreter.NameStack,
     
    156250
    157251  [PushExpression(StackTypes.StringVector, "STRING[].DEFINE", StackTypes.Name)]
     252  [StorableClass]
    158253  public class StringVectorDefineExpression : DefineExpression<List<string>> {
    159     public override bool Eval(IInternalPushInterpreter interpreter) {
    160       return Eval(
     254    public StringVectorDefineExpression() { }
     255    [StorableConstructor]
     256    protected StringVectorDefineExpression(bool deserializing) : base(deserializing) { }
     257
     258    public override bool IsNoop(IInternalPushInterpreter interpreter) {
     259      return interpreter.StringVectorStack.IsEmpty ||
     260             interpreter.NameStack.IsEmpty;
     261    }
     262
     263    public override void Eval(IInternalPushInterpreter interpreter) {
     264      Eval(
    161265        interpreter.StringVectorStack,
    162266        interpreter.NameStack,
Note: See TracChangeset for help on using the changeset viewer.