public SymmetryEnvironment(MoveNode.GradeNode lowestNode)
        {
            this.lowestNode = lowestNode;
            config = lowestNode.MoveNode.config;

            colorFalse = new bool[config.colors];
            colorUsed = new bool[config.colors];
            init();
        }
Esempio n. 2
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);
        }
Esempio n. 3
0
        public virtual void addGradedMove(int[] pegs, int whites, int blacks)
        {
            MoveNode tmpMove = currentPos.addSubMove(config.makePegSet(pegs));

            currentPos = tmpMove.addSubGrade(config.array2id[blacks][whites]);
        }
Esempio n. 4
0
 /* Functionality Methods */
 public virtual void selectGrade(int blacks, int whites)
 {
     currentPos = currentPos.followingMoves.GetEnumerator().Current.pruneSubGrades(config.array2id[blacks][whites]);
 }
Esempio n. 5
0
 public MasterMind(int pegs, int colors)
 {
     config     = new Config(pegs, colors);
     root       = new RootNode.RootGrade((new RootNode(config)));
     currentPos = root;
 }