예제 #1
0
        public virtual MoveNode runOneStepAheadAnalysis(Type assessor)
        {
            AssessmentManager manager = new AssessmentManager(config, assessor, currentPos.PossibilitySize);
            SymmetryEnvironment symmetryEnvironment = new SymmetryEnvironment(currentPos);
            ResultSet resultSet = new ResultSet(symmetryEnvironment, config);
            Parallel.For(short.MinValue, short.MinValue + config.combinations, m => {
                MoveNode testMove = currentPos.addTemporarySubMove((short)m);
                PossibilityDivisionAssessor assess = manager.getSetAssessor();
                if (!resultSet.symmetryEnvironment.checkSymmetry(testMove))
                {
                    return;
                }
                for (int i = 0; i < resultSet.config.grades; i++)
                {
                    MoveNode.GradeNode tempGrade = testMove.addSubGrade(i);
                    if (tempGrade.PossibilitySize == 0)
                    {
                        tempGrade.unregister();
                        continue;
                    }
                    assess.updateNextIndividual(tempGrade.PossibilitySize);
                    if (!assess.check(resultSet.config.grades - i - 1))
                    {
                        return;
                    }
                }
                lock (resultSet)
                {
                    if (!assess.check(0))
                    {
                        return;
                    }
                    assess.updateBestValue();
                    testMove.AssessmentValue = assess.CurrentSetValue;
                    resultSet.BestMove = testMove;
                }
            });

            currentPos.addSubNode(resultSet.BestMove);
            return resultSet.BestMove;
        }
예제 #2
0
 public ResultSet(SymmetryEnvironment symmetryEnvironment, Config config)
 {
     this.symmetryEnvironment = symmetryEnvironment;
     this.config = config;
 }
예제 #3
0
 public ResultSet(SymmetryEnvironment symmetryEnvironment, Config config)
 {
     this.symmetryEnvironment = symmetryEnvironment;
     this.config = config;
 }