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