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

    r14908 r14952  
    33  using System.Collections.Generic;
    44  using Attributes;
     5
     6  using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
     7
    58  using Interpreter;
    69  using Stack;
     
    1114  /// </summary>
    1215  /// <typeparam name="T">Stacktype</typeparam>
     16  [StorableClass]
    1317  public abstract class YankDuplicateExpression<T> : StatelessExpression {
    14     public bool Eval(IPushStack<T> stack, IPushStack<long> integerStack) {
    15       if ((stack == integerStack && integerStack.Count < 2) ||
    16           (stack != integerStack && (integerStack.IsEmpty || stack.IsEmpty)))
    17         return false;
    18 
     18    protected YankDuplicateExpression() { }
     19    [StorableConstructor]
     20    protected YankDuplicateExpression(bool deserializing) : base(deserializing) { }
     21
     22    protected bool IsNoop(IPushStack<T> stack, IPushStack<long> integerStack) {
     23      return (stack == integerStack && integerStack.Count < 3) ||
     24             (stack != integerStack && (integerStack.IsEmpty || stack.Count < 2));
     25    }
     26
     27    protected void Eval(IPushStack<T> stack, IPushStack<long> integerStack) {
    1928      var index = (int)Math.Abs(integerStack.Pop() % stack.Count);
    2029      stack.Push(stack[index]);
    21       return true;
    22     }
    23   }
    24 
     30    }
     31  }
     32
     33  [StorableClass]
    2534  [PushExpression(StackTypes.Integer, "INTEGER.YANKDUP")]
    2635  public class IntegerYankDuplicateExpression : YankDuplicateExpression<long> {
    27     public override bool Eval(IInternalPushInterpreter interpreter) {
    28       return Eval(interpreter.IntegerStack, interpreter.IntegerStack);
    29     }
    30   }
    31 
     36    public IntegerYankDuplicateExpression() { }
     37    [StorableConstructor]
     38    protected IntegerYankDuplicateExpression(bool deserializing) : base(deserializing) { }
     39
     40    public override bool IsNoop(IInternalPushInterpreter interpreter) {
     41      return IsNoop(interpreter.IntegerStack, interpreter.IntegerStack);
     42    }
     43
     44    public override void Eval(IInternalPushInterpreter interpreter) {
     45      Eval(interpreter.IntegerStack, interpreter.IntegerStack);
     46    }
     47  }
     48
     49  [StorableClass]
    3250  [PushExpression(StackTypes.Float, "FLOAT.YANKDUP", StackTypes.Integer)]
    3351  public class FloatYankDuplicateExpression : YankDuplicateExpression<double> {
    34     public override bool Eval(IInternalPushInterpreter interpreter) {
    35       return Eval(interpreter.FloatStack, interpreter.IntegerStack);
    36     }
    37   }
    38 
     52    public FloatYankDuplicateExpression() { }
     53    [StorableConstructor]
     54    protected FloatYankDuplicateExpression(bool deserializing) : base(deserializing) { }
     55
     56    public override bool IsNoop(IInternalPushInterpreter interpreter) {
     57      return IsNoop(interpreter.FloatStack, interpreter.IntegerStack);
     58    }
     59
     60    public override void Eval(IInternalPushInterpreter interpreter) {
     61      Eval(interpreter.FloatStack, interpreter.IntegerStack);
     62    }
     63  }
     64
     65  [StorableClass]
    3966  [PushExpression(StackTypes.Boolean, "BOOLEAN.YANKDUP", StackTypes.Integer)]
    4067  public class BooleanYankDuplicateExpression : YankDuplicateExpression<bool> {
    41     public override bool Eval(IInternalPushInterpreter interpreter) {
    42       return Eval(interpreter.BooleanStack, interpreter.IntegerStack);
    43     }
    44   }
    45 
     68    public BooleanYankDuplicateExpression() { }
     69    [StorableConstructor]
     70    protected BooleanYankDuplicateExpression(bool deserializing) : base(deserializing) { }
     71
     72    public override bool IsNoop(IInternalPushInterpreter interpreter) {
     73      return IsNoop(interpreter.BooleanStack, interpreter.IntegerStack);
     74    }
     75
     76    public override void Eval(IInternalPushInterpreter interpreter) {
     77      Eval(interpreter.BooleanStack, interpreter.IntegerStack);
     78    }
     79  }
     80
     81  [StorableClass]
    4682  [PushExpression(StackTypes.Name, "NAME.YANKDUP", StackTypes.Integer)]
    4783  public class NameYankDuplicateExpression : YankDuplicateExpression<string> {
    48     public override bool Eval(IInternalPushInterpreter interpreter) {
    49       return Eval(interpreter.NameStack, interpreter.IntegerStack);
    50     }
    51   }
    52 
     84    public NameYankDuplicateExpression() { }
     85    [StorableConstructor]
     86    protected NameYankDuplicateExpression(bool deserializing) : base(deserializing) { }
     87
     88    public override bool IsNoop(IInternalPushInterpreter interpreter) {
     89      return IsNoop(interpreter.NameStack, interpreter.IntegerStack);
     90    }
     91
     92    public override void Eval(IInternalPushInterpreter interpreter) {
     93      Eval(interpreter.NameStack, interpreter.IntegerStack);
     94    }
     95  }
     96
     97  [StorableClass]
    5398  [PushExpression(StackTypes.Exec, "EXEC.YANKDUP", StackTypes.Integer)]
    5499  public class ExecYankDuplicateExpression : YankDuplicateExpression<Expression> {
    55     public override bool Eval(IInternalPushInterpreter interpreter) {
    56       return Eval(interpreter.ExecStack, interpreter.IntegerStack);
    57     }
    58   }
    59 
     100    public ExecYankDuplicateExpression() { }
     101    [StorableConstructor]
     102    protected ExecYankDuplicateExpression(bool deserializing) : base(deserializing) { }
     103
     104    public override bool IsNoop(IInternalPushInterpreter interpreter) {
     105      return IsNoop(interpreter.ExecStack, interpreter.IntegerStack);
     106    }
     107
     108    public override void Eval(IInternalPushInterpreter interpreter) {
     109      Eval(interpreter.ExecStack, interpreter.IntegerStack);
     110    }
     111  }
     112
     113  [StorableClass]
    60114  [PushExpression(StackTypes.Code, "CODE.YANKDUP", StackTypes.Integer)]
    61115  public class CodeYankDuplicateExpression : YankDuplicateExpression<Expression> {
    62     public override bool Eval(IInternalPushInterpreter interpreter) {
    63       return Eval(interpreter.CodeStack, interpreter.IntegerStack);
    64     }
    65   }
    66 
     116    public CodeYankDuplicateExpression() { }
     117    [StorableConstructor]
     118    protected CodeYankDuplicateExpression(bool deserializing) : base(deserializing) { }
     119
     120    public override bool IsNoop(IInternalPushInterpreter interpreter) {
     121      return IsNoop(interpreter.CodeStack, interpreter.IntegerStack);
     122    }
     123
     124    public override void Eval(IInternalPushInterpreter interpreter) {
     125      Eval(interpreter.CodeStack, interpreter.IntegerStack);
     126    }
     127  }
     128
     129  [StorableClass]
    67130  [PushExpression(StackTypes.Char, "CHAR.YANKDUP", StackTypes.Integer)]
    68131  public class CharYankDuplicateExpression : YankDuplicateExpression<char> {
    69     public override bool Eval(IInternalPushInterpreter interpreter) {
    70       return Eval(interpreter.CharStack, interpreter.IntegerStack);
    71     }
    72   }
    73 
     132    public CharYankDuplicateExpression() { }
     133    [StorableConstructor]
     134    protected CharYankDuplicateExpression(bool deserializing) : base(deserializing) { }
     135
     136    public override bool IsNoop(IInternalPushInterpreter interpreter) {
     137      return IsNoop(interpreter.CharStack, interpreter.IntegerStack);
     138    }
     139
     140    public override void Eval(IInternalPushInterpreter interpreter) {
     141      Eval(interpreter.CharStack, interpreter.IntegerStack);
     142    }
     143  }
     144
     145  [StorableClass]
    74146  [PushExpression(StackTypes.String, "STRING.YANKDUP", StackTypes.Integer)]
    75147  public class StringYankDuplicateExpression : YankDuplicateExpression<string> {
    76     public override bool Eval(IInternalPushInterpreter interpreter) {
    77       return Eval(interpreter.StringStack, interpreter.IntegerStack);
    78     }
    79   }
    80 
     148    public StringYankDuplicateExpression() { }
     149    [StorableConstructor]
     150    protected StringYankDuplicateExpression(bool deserializing) : base(deserializing) { }
     151
     152    public override bool IsNoop(IInternalPushInterpreter interpreter) {
     153      return IsNoop(interpreter.StringStack, interpreter.IntegerStack);
     154    }
     155
     156    public override void Eval(IInternalPushInterpreter interpreter) {
     157      Eval(interpreter.StringStack, interpreter.IntegerStack);
     158    }
     159  }
     160
     161  [StorableClass]
    81162  [PushExpression(StackTypes.IntegerVector, "INTEGER[].YANKDUP", StackTypes.Integer)]
    82163  public class IntegerVectorYankDuplicateExpression : YankDuplicateExpression<List<long>> {
    83     public override bool Eval(IInternalPushInterpreter interpreter) {
    84       return Eval(interpreter.IntegerVectorStack, interpreter.IntegerStack);
    85     }
    86   }
    87 
     164    public IntegerVectorYankDuplicateExpression() { }
     165    [StorableConstructor]
     166    protected IntegerVectorYankDuplicateExpression(bool deserializing) : base(deserializing) { }
     167
     168    public override bool IsNoop(IInternalPushInterpreter interpreter) {
     169      return IsNoop(interpreter.IntegerVectorStack, interpreter.IntegerStack);
     170    }
     171
     172    public override void Eval(IInternalPushInterpreter interpreter) {
     173      Eval(interpreter.IntegerVectorStack, interpreter.IntegerStack);
     174    }
     175  }
     176
     177  [StorableClass]
    88178  [PushExpression(StackTypes.FloatVector, "FLOAT[].YANKDUP", StackTypes.Integer)]
    89179  public class FloatVectorYankDuplicateExpression : YankDuplicateExpression<List<double>> {
    90     public override bool Eval(IInternalPushInterpreter interpreter) {
    91       return Eval(interpreter.FloatVectorStack, interpreter.IntegerStack);
    92     }
    93   }
    94 
     180    public FloatVectorYankDuplicateExpression() { }
     181    [StorableConstructor]
     182    protected FloatVectorYankDuplicateExpression(bool deserializing) : base(deserializing) { }
     183
     184    public override bool IsNoop(IInternalPushInterpreter interpreter) {
     185      return IsNoop(interpreter.FloatVectorStack, interpreter.IntegerStack);
     186    }
     187
     188    public override void Eval(IInternalPushInterpreter interpreter) {
     189      Eval(interpreter.FloatVectorStack, interpreter.IntegerStack);
     190    }
     191  }
     192
     193  [StorableClass]
    95194  [PushExpression(StackTypes.BooleanVector, "BOOLEAN[].YANKDUP", StackTypes.Integer)]
    96195  public class BooleanVectorYankDuplicateExpression : YankDuplicateExpression<List<bool>> {
    97     public override bool Eval(IInternalPushInterpreter interpreter) {
    98       return Eval(interpreter.BooleanVectorStack, interpreter.IntegerStack);
    99     }
    100   }
    101 
     196    public BooleanVectorYankDuplicateExpression() { }
     197    [StorableConstructor]
     198    protected BooleanVectorYankDuplicateExpression(bool deserializing) : base(deserializing) { }
     199
     200    public override bool IsNoop(IInternalPushInterpreter interpreter) {
     201      return IsNoop(interpreter.BooleanVectorStack, interpreter.IntegerStack);
     202    }
     203
     204    public override void Eval(IInternalPushInterpreter interpreter) {
     205      Eval(interpreter.BooleanVectorStack, interpreter.IntegerStack);
     206    }
     207  }
     208
     209  [StorableClass]
    102210  [PushExpression(StackTypes.StringVector, "STRING[].YANKDUP", StackTypes.Integer)]
    103211  public class StringVectorYankDuplicateExpression : YankDuplicateExpression<List<string>> {
    104     public override bool Eval(IInternalPushInterpreter interpreter) {
    105       return Eval(interpreter.StringVectorStack, interpreter.IntegerStack);
     212    public StringVectorYankDuplicateExpression() { }
     213    [StorableConstructor]
     214    protected StringVectorYankDuplicateExpression(bool deserializing) : base(deserializing) { }
     215
     216    public override bool IsNoop(IInternalPushInterpreter interpreter) {
     217      return IsNoop(interpreter.StringVectorStack, interpreter.IntegerStack);
     218    }
     219
     220    public override void Eval(IInternalPushInterpreter interpreter) {
     221      Eval(interpreter.StringVectorStack, interpreter.IntegerStack);
    106222    }
    107223  }
Note: See TracChangeset for help on using the changeset viewer.