Ejemplo n.º 1
0
        public ByteTreeSearchBenchmarks()
        {
            var comparator       = new Comparator();
            var brancher         = new Brancher();
            var evaluator        = new Evaluator();
            var stateTransitions = new StateTransitions();

            _serial = new SerialAlfaBetaSearch <ByteNode, sbyte, sbyte>(
                evaluator,
                brancher,
                comparator,
                stateTransitions,
                sbyte.MaxValue,
                sbyte.MinValue);

            _serialTree = TreeGenerator.ReadTree();

            _dynamic = new DynamicTreeSplitting <AlfaBetaByteNode, sbyte, sbyte>(
                evaluator,
                brancher,
                comparator,
                stateTransitions
                );

            _dynamicTree = TreeGenerator.ReadAlfaBetaTree();

            _cts = new CancellationTokenSource();
        }
Ejemplo n.º 2
0
        public static AlfaBetaByteNode ParseAlfaBetaTree(string tree, byte branchingFactor)
        {
            var bytes = tree.Split(' ');

            var depth = -1;
            var sum   = 0;

            while (sum < bytes.Length)
            {
                depth++;
                sum += (int)Math.Pow(branchingFactor, depth);
            }

            if (sum != bytes.Length)
            {
                throw new ArgumentException("Tree of unequal depth");
            }

            var queue        = new Queue <AlfaBetaByteNode>();
            var startDequeue = false;
            var bottomLevel  = (int)Math.Pow(branchingFactor, depth);

            for (var i = bytes.Length - 1; i >= 0; i--)
            {
                AlfaBetaByteNode node;

                if (queue.Count == bottomLevel)
                {
                    startDequeue = true;
                }

                if (startDequeue)
                {
                    var children = new AlfaBetaByteNode[branchingFactor];
                    for (var j = 0; j < branchingFactor; j++)
                    {
                        children[j] = queue.Dequeue();
                    }

                    node = new AlfaBetaByteNode(sbyte.Parse(bytes[i]), !children[0].IsMaxPlayer, children);
                }
                else
                {
                    var children = new AlfaBetaByteNode[0];
                    node = new AlfaBetaByteNode(sbyte.Parse(bytes[i]), depth % 2 == 0, children);
                }

                queue.Enqueue(node);
            }

            return(queue.Dequeue());
        }