示例#1
0
        public void selectAction()
        {
            List <Node> visited = new List <Node>();
            Node        cur     = this; // root

            visited.Add(cur);
            while (!(cur.isLeaf()))
            {
                cur = cur.select();
                visited.Add(cur);
                if (cur is NondeterministicNode)
                {
                    cur = ((NondeterministicNode)cur.select()).selected;
                    visited.Add(cur);
                }
            }

            cur.expand();
            double value           = cur.rollOut();
            int    panjangSimulasi = (cur as DeterministicNode).s;

            foreach (Node node in visited)
            {
                node.updateStatus(value, panjangSimulasi);
            }

            Interlocked.CompareExchange(ref ((DeterministicNode)cur).isLock, Available, Taken);
        }
示例#2
0
        static void testParallelSSAB()
        {
            for (int xy = 0; xy < 1; xy++)
            {
                Console.WriteLine(xy + " uuuuuu");
                time = new Stopwatch();
                time.Start();
                Board board = new Board();
                board.flip(0, 0);
                SimpleTP.DeterministicNode.side = board.sideToMove;
                SimpleTP.DeterministicNode b = new SimpleTP.DeterministicNode(board.getBoardState(), null, Constant.NONE, Constant.NONE);
                double x = 0;
                int    u = 0;
                List <SimpleTP.Node> visited = new List <SimpleTP.Node>();
                SimpleTP.Node        cur     = b;
                visited.Add(cur);
                cur.expand();
                //cur.updateStatus(cur.rollOut(cur));
                object          a  = new object();
                ParallelOptions po = new ParallelOptions();
                po.MaxDegreeOfParallelism = 2;

                List <string> threadid = new List <string>();
                Parallel.For(0, 2000, po, i =>
                {
                    u++;
                    Console.WriteLine(u);
                    b.selectAction();
                }
                             );
                time.Stop();
                SimpleTP.Node.PGL = x / 500;
                Console.WriteLine("PGL:" + SimpleTP.Node.PGL);
                Console.WriteLine(time.Elapsed.TotalSeconds);
            }
        }