Beispiel #1
0
        public void RunUntilNewArea(PositionGuide <PositionData> guide, int positionCase = 0)
        {
            HasMoved        = false;
            PositionCounter = positionCase;
            int stepsDone = 0;

            while (true)
            {
                //var fallbackDone = false;
                int areaId = guide.PositionAreaId(Position.Data);

                var options = new List <GWAction <PositionData, ActionData> >();
                foreach (var actionFinder in ActionHandling.ActionFinders)
                {
                    // filter actions that have been researched
                    var newOptions = actionFinder.FindActions(Position);
                    options.AddRange(newOptions);
                    //options.AddRange(newOptions.Where(a => !Position.Data.ActionsTried.Contains(a.Data.FingerPrint)));
                }


                if (HasMoved)
                {
                    options = (options.Where(op => op.HasImpactOnTarget)).ToList();
                }
                //TODO: filter double actions (from several actionFinders)
                if (options.NullOrEmpty())
                {   //no more options that help reach a target, can stop searching
                    break;
                }

                if (options.NullOrEmpty())
                {   //no more options that help reach a target, can stop searching
                    break;
                }

                //choose by multievaluation:
                ChosenAction = MultiEvaluation.Do(options, ActionHandling.ActionEvaluators, Weights, 1, MultiEvaluationOptions).First();


                PreSolution.Position = ActionHandling.ActionExecuter.CreateNewPosition(ChosenAction);
                HasMoved             = true;
                stepsDone++;

                //check if new area is reached
                int newAreaId = guide.PositionAreaId(Position.Data);
                if (areaId != newAreaId)
                {
                    MovedToNewArea         = true;
                    Position.IsEndPosition = guide.IsEndPosition(Position.Data);
                    OnTargetReached(this);
                    break;
                }
            }
            //PreSolution.InternalCanBeFiltered = MovedToNewArea;
            //Score = Position.Data.NextCheckPoint.Score(Position.Data);
        }
Beispiel #2
0
        public void RunDoOneThing(PositionGuide <PositionData> guide, int positionCase = 0)
        {
            HasMoved        = false;
            PositionCounter = positionCase;
            int stepsDone = 0;

            while (stepsDone == 0)
            {
                //int areaId = guide.PositionAreaId(Position.Data);

                var options = new List <GWAction <PositionData, ActionData> >();
                foreach (var actionFinder in ActionHandling.ActionFinders)
                {
                    // filter actions that have been researched
                    var newOptions = actionFinder.FindActions(Position);
                    options.AddRange(newOptions);
                    //options.AddRange(newOptions.Where(a => !Position.Data.ActionsTried.Contains(a.Data.FingerPrint)));
                }

                if (options.NullOrEmpty())
                {   //no more options that help reach a target, can stop searching
                    break;
                }

                // choose by multievaluation:
                if (options.Count > 1)
                {
                    ChosenAction = MultiEvaluation.Do(options, ActionHandling.ActionEvaluators, Weights, 1, MultiEvaluationOptions).First();
                }
                else
                {
                    ChosenAction = options.First();
                }

                // execute action
                PreSolution.Position = ActionHandling.ActionExecuter.CreateNewPosition(ChosenAction);
                HasMoved             = true;
                stepsDone++;

                //check if new area is reached
                //int newAreaId = guide.PositionAreaId(Position.Data);
                //if (areaId != newAreaId)
                {
                    Position.IsEndPosition = guide.IsEndPosition(Position.Data);
                    OnTargetReached(this);
                    break;
                }
            }
        }
        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);
        }
Beispiel #4
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);
        }