internal void Work()
        {
            try
            {
                Prepare();

                while (CheckForAnotherIteration())
                {
                    CheckInbox();

                    PrepareIteration();

                    foreach (var champ in RunnerPool)
                    {
                        for (int positionIndex = 0; positionIndex < champ.PreSolutions.Count; positionIndex++)
                        {
                            //champ.RunUntilMeetTargetOrEnd(Targets, CancelCriteria, TargetOptCenterParams.RunItemSearchDepth);
                            //champ.RunUntilNewArea(AreaGuide, positionIndex);
                            champ.RunDoOneThing(AreaGuide, positionIndex);
                            addToNextGenForFollowUp(champ);
                        }
                        champ.PreSolutions.Clear();
                    }
                    ComputationInfo.Progress = RunnerPool.Average(it => ProgressEstimator.ExecuteAction(it?.Position?.Data));

                    EvaluateCheckpoints();

                    FilterCheckPoints();

                    //feedback to runItems
                    //foreach (var checkpoint in CheckPoints)
                    //{
                    //    foreach (var item in checkpoint.Positions)
                    //    {
                    //        //item.RunItemPath.Last().Gold++;
                    //    }
                    //}

                    finishIteration();

                    //GatherMetaInfo();
                }

                LastGeneration.Each(i => EndPositionDiscovered(i.Position));

                //PostRunFeedbackToChamps();

                Pool.RefreshPoolPopulation(TargetOptCenterParams.PoolPopRefreshRatio);
                //save champs
                Pool.Store();
            }
            catch (Exception e)
            {
                Log.Error(e);
            }
        }
        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);
        }
        public TargetOptimizationCenter(GWActionExecuter <PositionData, ActionData> actionExecuter, IEnumerable <GWActionFinder <PositionData, ActionData> > actionFinders, IEnumerable <GWActionEvaluator <PositionData, ActionData> > actionEvaluators, GWPositionEvaluator <PositionData, ActionData> endPositionEvaluator, GWProgressEstimator <PositionData> progressEstimator, GWPositionCategorizer <PositionData, ActionData> positionCategorizer, GWActionCategorizer <PositionData, ActionData> actionCategorizer, CategoryEvaluator <PositionData, ActionData, CheckPointType> categoryEvaluationLogic, CancelCriteria cancelCriteria, string id, TargetOptCenterParams optCenterParams, PositionGuide <PositionData> areaGuide, MandatoryActionExecuter <PositionData, ActionData, CheckPointType> mandatoryActionExecuter, RunnerPool <PositionData, ActionData, CheckPointType> runnerPool) : base()
        {
            MandatoryActionExecuter = mandatoryActionExecuter;
            AreaGuide             = areaGuide;
            Id                    = id;
            ProgressEstimator     = progressEstimator;
            PositionCategorizer   = positionCategorizer;
            CancelCriteria        = cancelCriteria;
            TargetOptCenterParams = optCenterParams;

            EndPositionEvaluator    = endPositionEvaluator;
            CategoryEvaluationLogic = categoryEvaluationLogic;

            Pool = runnerPool;
            Pool.OnEndpositionDiscovered = (item) => EndPositionDiscovered(item.Position);
        }
Esempio n. 5
0
        //public static IOptimizationCenter<PositionData, ActionData> PhalanxCenter<PositionData, ActionData>(int phalanxSize, int resultsSize, double[] feedBack, GWActionExecuter<PositionData, ActionData> actionExecuter, IEnumerable<GWActionFinder<PositionData, ActionData>> actionFinders, IEnumerable<GWActionEvaluator<PositionData, ActionData>> actionEvaluators, IEnumerable<GWPositionEvaluator<PositionData, ActionData>> endPositionEvaluators)
        //     where PositionData : Cloneable<PositionData>
        //{
        //    var phalanxCenter = new GWPhalanxOptimizationCenter<PositionData, ActionData>(phalanxSize, resultsSize, feedBack, actionExecuter, actionFinders, actionEvaluators, endPositionEvaluators);

        //    return phalanxCenter;
        //}
        public static ITargetOptCenter <PositionData, ActionData, CheckPointType> TargetOptimizationCenter <PositionData, ActionData, CheckPointType>(GWActionExecuter <PositionData, ActionData> actionExecuter, IEnumerable <GWActionFinder <PositionData, ActionData> > actionFinders, IEnumerable <GWActionEvaluator <PositionData, ActionData> > actionEvaluators, GWPositionEvaluator <PositionData, ActionData> endPositionEvaluator, GWProgressEstimator <PositionData> progressEstimator, GWPositionCategorizer <PositionData, ActionData> positionCategorizer, GWActionCategorizer <PositionData, ActionData> actionCategorizer, CategoryEvaluator <PositionData, ActionData, CheckPointType> categoryEvaluationLogic, CancelCriteria cancelCriteria, string id, TargetOptCenterParams optCenterParams, PositionGuide <PositionData> areaGuide, MandatoryActionExecuter <PositionData, ActionData, CheckPointType> mandatoryActionExecuter, RunnerPool <PositionData, ActionData, CheckPointType> runnerPool)
            where PositionData : BasePositionData <PositionData, ActionData, CheckPointType>, Cloneable <PositionData>, IHasFingerprint
            where ActionData : BaseActionData <PositionData, ActionData, CheckPointType>
            where CheckPointType : CheckPoint <PositionData>
        {
            var optCenter = new TargetOptimizationCenter <PositionData, ActionData, CheckPointType>(actionExecuter, actionFinders, actionEvaluators, endPositionEvaluator, progressEstimator, positionCategorizer, actionCategorizer, categoryEvaluationLogic, cancelCriteria, id, optCenterParams, areaGuide, mandatoryActionExecuter, runnerPool);

            return(optCenter);
        }