Example #1
0
        public MCTSSearchFlow(MCTSManager manager, MCTSIterator context)
        {
            Manager = manager;
            Context = context;

            int numSelectors = context.ParamsSearch.Execution.FlowDirectOverlapped ? 2 : 1;

            batchingManagers = new MCTSBatchParamsManager[numSelectors];

            for (int i = 0; i < numSelectors; i++)
            {
                batchingManagers[i] = new MCTSBatchParamsManager(manager.Context.ParamsSelect.UseDynamicVLoss);
            }

            bool shouldCache = context.EvaluatorDef.CacheMode != Chess.PositionEvalCaching.PositionEvalCache.CacheMode.None;

            string instanceID = "0";

            //Params.Evaluator1 : Params.Evaluator2;
            const bool      LOW_PRIORITY_PRIMARY = false;
            LeafEvaluatorNN nodeEvaluator1       = new LeafEvaluatorNN(context.EvaluatorDef, context.NNEvaluators.Evaluator1, shouldCache,
                                                                       LOW_PRIORITY_PRIMARY, context.Tree.PositionCache, null);// context.ParamsNN.DynamicNNSelectorFunc);

            BlockNNEval1 = new MCTSNNEvaluator(nodeEvaluator1, true);

            if (context.ParamsSearch.Execution.FlowDirectOverlapped)
            {
                // Create a second evaluator (configured like the first) on which to do overlapping.
                LeafEvaluatorNN nodeEvaluator2 = new LeafEvaluatorNN(context.EvaluatorDef, context.NNEvaluators.Evaluator2, shouldCache,
                                                                     false, context.Tree.PositionCache, null);// context.ParamsNN.DynamicNNSelectorFunc);
                BlockNNEval2 = new MCTSNNEvaluator(nodeEvaluator2, true);
            }

            if (context.EvaluatorDef.SECONDARY_NETWORK_ID != null)
            {
                throw new NotImplementedException();
                //NodeEvaluatorNN nodeEvaluatorSecondary = new NodeEvaluatorNN(context.EvaluatorDef, context.ParamsNN.Evaluators.EvaluatorSecondary, false, false, null, null);
                //BlockNNEvalSecondaryNet = new MCTSNNEvaluate(nodeEvaluatorSecondary, false);
            }

            BlockApply = new MCTSApply(context.FirstMoveSampler);

            if (context.ParamsSearch.Execution.RootPreloadDepth > 0)
            {
                rootPreloader = new MCTSRootPreloader();
            }

            if (context.ParamsSearch.Execution.SmartSizeBatches)
            {
                context.NNEvaluators.CalcStatistics(true, 1f);
            }
        }
Example #2
0
 public MCTSNNEvaluator(LeafEvaluatorNN evaluator, bool targetPrimary)
 {
     Evaluator    = evaluator;
     resultTarget = targetPrimary ? LeafEvaluatorNN.EvalResultTarget.PrimaryEvalResult : LeafEvaluatorNN.EvalResultTarget.SecondaryEvalResult;
 }