Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
05/10/17 11:23:05 (8 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/Views/PushDebuggerView.cs

    r14914 r14952  
    1818
    1919    private PooledPushInterpreter interpreter;
    20     private PooledPushInterpreter interpreter2; // used to determine noops
    2120    private PushInterpreterPool pool;
    2221
    23     private const string GroupBoxTextStringFormat = "{0}[{1}]";
     22    private const string GROUP_BOX_TEXT_STRING_FORMAT = "{0}[{1}]";
     23    private const string EXEC_COUNT_LABEL_FORMAT = "{0}/{1} max. expressions evaluated";
    2424
    2525    public event EventHandler<IPushInterpreter> OnReset;
     
    3232    ~PushDebuggerView() {
    3333      interpreter.Dispose();
    34       interpreter2.Dispose();
    3534    }
    3635
     
    5251      if (interpreter != null) {
    5352        interpreter.Dispose();
    54         interpreter2.Dispose();
    5553      }
    5654
    5755      interpreter = pool.Create(Content.Random);
    58       interpreter2 = pool.Create(Content.Random);
    59 
    6056
    6157      InitDebugLists(Content.Config);
     
    6662    }
    6763
     64    private void UpdateExecCountLabel() {
     65      execCountLabel.Text = string.Format(
     66        EXEC_COUNT_LABEL_FORMAT,
     67        interpreter.ExecCounter,
     68        Content.Config.EvalPushLimit);
     69    }
     70
    6871    private void InitEvents() {
    6972      runButton.Click += RunButtonClick;
     
    7881
    7982      interpreter.Resume();
    80 
    81       ResetDebugging();
     83      UpdateStep();
     84    }
     85
     86    private void StepButtonClick(object sender, EventArgs e) {
     87      if (interpreter == null || stepWidthBox.Value <= 0)
     88        return;
     89
     90      var count = Math.Min(stepWidthBox.Value, interpreter.ExecStack.Count);
     91
     92      for (var i = 0; i < count; i++) {
     93        SkipNoops();
     94
     95        // run next none noop expression
     96        interpreter.Step();
     97      }
     98
     99      // skip trailing noops so next expression is a none noop in debugger
     100      SkipNoops();
     101
     102      stepWidthBox.Maximum = Math.Max(1, interpreter.ExecStack.Count);
     103      UpdateStep();
     104    }
     105
     106    private void UpdateStep() {
    82107      UpdateExecList();
    83108      UpdateDebugLists();
     109      UpdateExecCountLabel();
    84110      CheckIfButtonsCanBeEnabled();
    85111    }
    86112
    87     private void StepButtonClick(object sender, EventArgs e) {
    88       if (interpreter == null || stepWidthBox.Value <= 0)
    89         return;
    90 
    91       var count = Math.Min(stepWidthBox.Value, interpreter.ExecStack.Count);
    92 
    93       if (!interpreter.CanStep)
    94         return;
    95 
    96       // skip leading noops
    97       if (interpreter2.ExecCounter == (Content.Program.IsProgram ? 1 : 0) &&
    98           skipNoopsCheckBox.Checked &&
    99           SkipNoops()) {
    100         count = 0; // no entries left, cause all were noops
    101       }
    102 
    103       for (var i = 0; i < count; i++) {
    104         if (skipNoopsCheckBox.Checked) {
     113    private void SkipNoops() {
     114      // skip noops
     115      if (skipNoopsCheckBox.Checked) {
     116        while (interpreter.CanStep && interpreter.ExecStack.Top.IsNoop(interpreter)) {
    105117          interpreter.Step();
    106 
    107           if (SkipNoops())
    108             break;
    109         } else {
    110           interpreter.Step();
    111           interpreter2.Step();
    112118        }
    113119      }
    114 
    115       stepWidthBox.Maximum = Math.Max(1, interpreter.ExecStack.Count);
    116 
    117       UpdateExecList();
    118       UpdateDebugLists();
    119       CheckIfButtonsCanBeEnabled();
    120     }
    121 
    122     private bool SkipNoops() {
    123       var skipCount = 0;
    124       bool isNoop;
    125 
    126       do {
    127         skipCount++;
    128         isNoop = !interpreter2.Step();
    129       } while (interpreter2.CanStep && isNoop);
    130 
    131       if (isNoop) {
    132         interpreter.Step(skipCount);
    133       } else if (skipCount > 1) {
    134         interpreter.Step(skipCount - 1);
    135       }
    136 
    137       return isNoop;
    138120    }
    139121
     
    162144      if (interpreter != null) {
    163145        interpreter.Reset();
    164         interpreter2.Reset();
    165146      }
    166147
    167148      if (OnReset != null) {
    168149        OnReset(this, interpreter);
    169         OnReset(this, interpreter2);
    170150      }
    171151
    172152      interpreter.Run(Content.Program, true);
    173       interpreter2.Run(Content.Program, true);
    174153
    175154      stepWidthBox.Maximum = interpreter.ExecStack.Count;
    176 
    177       UpdateDebugLists();
    178       UpdateExecList();
    179       CheckIfButtonsCanBeEnabled();
     155      UpdateStep();
    180156    }
    181157
     
    194170
    195171      execList.Items.AddRange(expressions);
    196       execGroupBox.Text = string.Format(GroupBoxTextStringFormat, Enum.GetName(typeof(StackTypes), StackTypes.Exec), interpreter.ExecStack.Count);
     172      execGroupBox.Text = string.Format(GROUP_BOX_TEXT_STRING_FORMAT, Enum.GetName(typeof(StackTypes), StackTypes.Exec), interpreter.ExecStack.Count);
    197173    }
    198174
     
    224200
    225201      var list = new ListBox {
    226         Dock = DockStyle.Fill,
    227         DrawMode = DrawMode.OwnerDrawFixed
     202        Dock = DockStyle.Fill
    228203      };
    229204
     
    232207      if (stackEntryType == typeof(double) ||
    233208          stackEntryType == typeof(long)) {
     209        list.DrawMode = DrawMode.OwnerDrawFixed;
    234210        list.DrawItem += (sender, e) => {
    235211          if (e.Index <= -1) return;
     
    271247
    272248      foreach (var pair in debugControlDict) {
    273         var stack = interpreter.Stacks[pair.Key];
    274249        var name = Enum.GetName(typeof(StackTypes), pair.Key);
    275 
    276         pair.Value.Items.AddRange(stack.AsObjects().Reverse().ToArray());
    277         ((GroupBox)pair.Value.Parent).Text = string.Format(GroupBoxTextStringFormat, name, pair.Value.Items.Count);
     250        var items = InterpreterStackStringifier.StringifyStack(interpreter, pair.Key).ToArray();
     251
     252        pair.Value.Items.AddRange(items);
     253        ((GroupBox)pair.Value.Parent).Text = string.Format(GROUP_BOX_TEXT_STRING_FORMAT, name, pair.Value.Items.Count);
    278254      }
    279255    }
Note: See TracChangeset for help on using the changeset viewer.