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); }
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); }
//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); }