private void PrepareIteration()
        {
            Fingerprints = new Dictionary <double, RunItem <PositionData, ActionData, CheckPointType> >();
            CheckPoints  = new List <LocalCheckPoint>();

            RunnerPool.Clear();
            RunnerPool.AddRange(Pool.RequestRunItems(PreSolutions.Select(ps => ps.Position)));

            RunnerPool.Each(rI => rI.OnTargetReached = (item) => EndPositionDiscovered(item.Position));
        }
        private void Prepare()
        {
            random = new Random(2016);
            ComputationInfo.Progress = 0;
            BestResult = null;
            RunnerPool.Clear();
            CheckPoints.Clear();
            CategoryEvaluationLogic.Reset();
            LastGeneration = new List <PreSolution <PositionData, ActionData, CheckPointType> >();
            PreSolutions   = new List <PreSolution <PositionData, ActionData, CheckPointType> >();
            var startPos = MandatoryActionExecuter.ExecuteMandatoryActions(new GWPosition <PositionData, ActionData>(Input.CreateStartPosition(), 0, null));

            PreSolutions.AddRange(startPos.Select(pos => new PreSolution <PositionData, ActionData, CheckPointType>(pos)));
            ProgressEstimator.Init(PreSolutions.First().Position.Data);
        }