Changeset 14747 for branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Interpreter/PushInterpreter.cs
- Timestamp:
- 03/12/17 13:16:56 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/PushGP/HeuristicLab.PushGP/HeuristicLab.Problems.ProgramSynthesis/Push/Interpreter/PushInterpreter.cs
r14746 r14747 19 19 private Task currentTask; 20 20 21 public PushInterpreter(IReadonlyPushConfiguration config = null, IRandom random = null ) {21 public PushInterpreter(IReadonlyPushConfiguration config = null, IRandom random = null, ManagedPoolProvider<PushProgram> pushProgramPoolProvider = null) { 22 22 Random = random ?? new FastRandom(); 23 23 … … 45 45 46 46 CustomExpressions = new Dictionary<string, Expression>(); 47 48 PushProgramPoolProvider = pushProgramPoolProvider ?? new ManagedPoolProvider<PushProgram>(1024); 49 50 if (pushProgramPoolProvider == null) 51 { 52 PushProgramPoolProvider.InitDummyPartition(() => new PushProgram()); 53 } 47 54 } 48 55 … … 86 93 } 87 94 88 public IManagedPool<PushProgram> PushProgramPool { get; set; } 95 private readonly ManagedPoolProvider<PushProgram> PushProgramPoolProvider; 96 public IManagedPool<PushProgram> PushProgramPool { get; private set; } 89 97 90 98 public IReadonlyPushConfiguration Configuration { get; protected set; } … … 127 135 128 136 public void Run(Expression program, bool stepwise = false) { 129 IsPaused = stepwise; 130 131 /* Push top expression so the loop is able to enter 132 * If the top expression is a single statement then the loop has nothing to do 133 * Otherwise the expand expression will be evaluated and pushes code onto the EXEC stack */ 134 ExecStack.Push(program); 135 136 if (Configuration.TopLevelPushCode) CodeStack.Insert(0, program); 137 138 // run top expression 139 DoStep(); 140 141 Interpret(); 137 using (PushProgramPool = PushProgramPoolProvider.CreatePool()) { 138 IsPaused = stepwise; 139 140 /* Push top expression so the loop is able to enter 141 * If the top expression is a single statement then the loop has nothing to do 142 * Otherwise the expand expression will be evaluated and pushes code onto the EXEC stack */ 143 ExecStack.Push(program); 144 145 if (Configuration.TopLevelPushCode) CodeStack.Insert(0, program); 146 147 // run top expression 148 DoStep(); 149 150 Interpret(); 151 } 142 152 } 143 153 … … 146 156 147 157 IsAborted = true; 158 159 if (PushProgramPool != null) PushProgramPool.Dispose(); 148 160 149 161 if (currentTask != null) await currentTask;
Note: See TracChangeset
for help on using the changeset viewer.