Ejemplo n.º 1
0
        public static string uci_pv(cPosicion pos, int depth, val alpha, val beta)
        {
            StringBuilder s = new StringBuilder();
              long elaspsed = cReloj.Now() - SearchTime + 1;
              int uciPVSize = Math.Min(cMotor.m_mapConfig["MultiPV"].Get(), RootMoves.Count);
              int selDepth = 0;
              for (int i = 0; i < cMotor.m_Threads.Count; ++i)
            if (cMotor.m_Threads[i].m_nMaxPly > selDepth)
              selDepth = cMotor.m_Threads[i].m_nMaxPly;
              for (int i = 0; i < uciPVSize; ++i)
              {
            bool updated = (i <= PVIdx);
            if (depth == 1 && !updated)
              continue;
            int d = (updated ? depth : depth - 1);
            if (RootMoves[i].m_PV.Count > 0 && RootMoves[i].m_PV[0] != cMovType.MOV_NAN && 0 < d)
            {
              val v = (updated ? RootMoves[i].m_nVal : RootMoves[i].m_LastVal);
              if (s.Length != 0)
            s.Append(cTypes.LF);
              /*bool bShow = true;
              for (int j = 0; j < d; ++j)
              {
            if (RootMoves[i].m_PV.Count > j && RootMoves[i].m_PV[j] == cMovType.MOV_NAN)
              bShow = false;
              }*/
              if (RootMoves[i].m_PV[0] != cMovType.MOV_NAN)
              {
            s.Append("info depth ");
            s.Append(d);
            s.Append(" score ");
            s.Append((i == PVIdx ? cUci.Puntos(v, alpha, beta) : cUci.Puntos(v, -cValoresJuego.INFINITO, cValoresJuego.INFINITO)));
            s.Append(" nodes ");
            s.Append(pos.GetNodos());
            s.Append(" nps ");
            s.Append((pos.GetNodos() * 1000 / (UInt64)elaspsed).ToString());
            s.Append(" time ");
            s.Append(elaspsed);
            s.Append(" cpuload ");
            s.Append(Program.m_CPU.Get() * 10);
            s.Append(" hashfull ");
            s.Append(cMotor.m_TablaHash.HashFullPercent());
            //if (bShow)
            {
              if (i > 0)
              {
                s.Append(" multipv ");
                s.Append(i + 1);
              }
              s.Append(" pv");

              for (int j = 0; RootMoves[i].m_PV.Count > j && RootMoves[i].m_PV[j] != cMovType.MOV_NAN && j < d; ++j)
              {
                s.Append(" ");
                s.Append(cUci.GetMovimiento(RootMoves[i].m_PV[j], pos.IsChess960() != false));
              }
            }
              }
            }
              }
              return s.ToString();
        }