Exemple #1
0
        //----------------------------------------------------------------------------------------
        public void Init(cControlReloj control, int nPly, color nColor)
        {
            int nCalculoDeHorizonte  = cMotor.m_mapConfig["CONTROL_DE_HORIZONTE"].Get();
              int nEmergencia          = cMotor.m_mapConfig["CONTROL_DE_EMERGENCIA"].Get();
              int nTiempoExtra         = cMotor.m_mapConfig["TIEMPO_EXTRA"].Get();
              int nTiempoMinimo        = cMotor.m_mapConfig["TIEMPO_MINIMO"].Get();
              int nJuegoLento          = cMotor.m_mapConfig["TIEMPO_LENTO"].Get();

              m_nFactorInestabilidad = 1;
              m_nTiempoDisponible = m_nTiempoMaximo = Math.Max(control.time[nColor], nTiempoMinimo);

              for (int i = 1; i <= (control.movestogo != 0 ? Math.Min(control.movestogo, 50) : 50); ++i)
              {
            int nTiempo = control.time[nColor] + control.inc[nColor] * (i - 1) - nEmergencia - nTiempoExtra * Math.Min(i, nCalculoDeHorizonte);
            nTiempo = Math.Max(nTiempo, 0);

            int t1 = nTiempoMinimo + TiempoRestante(nTiempo, i, nPly, nJuegoLento, TipoReloj.OPTIMO);
            int t2 = nTiempoMinimo + TiempoRestante(nTiempo, i, nPly, nJuegoLento, TipoReloj.MAXIMO);

            m_nTiempoDisponible = Math.Min(m_nTiempoDisponible, t1);
            m_nTiempoMaximo = Math.Min(m_nTiempoMaximo, t2);
              }

              if (cMotor.m_mapConfig["Ponder"].Get() != 0)
            m_nTiempoDisponible += m_nTiempoDisponible / 4;

              m_nTiempoDisponible = Math.Min(m_nTiempoDisponible, m_nTiempoMaximo);
        }
Exemple #2
0
        //---------------------------------------------------------------------------------------------
        public static void Test()
        {
            cControlReloj limits = new cControlReloj();
              List<string> posicionesFEN = new List<string>();

              m_mapConfig["Hash"].setCurrentValue("128");
              m_TablaHash.Clear();

              m_mapConfig["Threads"].setCurrentValue("8");

              //-- Tiempo en milisegundos
              limits.movetime = 1000 * 10;

              posicionesFEN.AddRange(Defaults);

              Int64 nodes = 0;

              Stack<cPosInfo> st = new Stack<cPosInfo>();
              long elapsed = cReloj.Now();

              for (int i = 0; i < posicionesFEN.Count; ++i)
              {
            cPosicion posicion = new cPosicion(posicionesFEN[i], m_mapConfig["UCI_Chess960"].Get() != 0 ? true : false, m_Threads.Principal());

            m_Consola.Print(cTypes.LF + (i + 1).ToString() + "/" + posicionesFEN.Count.ToString() + ": ", AccionConsola.NADA);
            m_Consola.Print(posicionesFEN[i], AccionConsola.NADA);
            m_Consola.Print(cTypes.LF, AccionConsola.NADA);

            m_Threads.Analizando(posicion, limits, st);
            m_Threads.WaitAnalizando();
            nodes += (Int64)cSearch.RootPos.GetNodos();
              }

              elapsed = cReloj.Now() - elapsed + 1;

              m_Consola.Print(cTypes.LF + "===========================", AccionConsola.NADA);
              m_Consola.Print(cTypes.LF + "Tiempo transcurrido: " + elapsed.ToString(), AccionConsola.NADA);
              m_Consola.Print(cTypes.LF + "Nodos analizados   : " + nodes.ToString(), AccionConsola.NADA);
        }
Exemple #3
0
        //---------------------------------------------------------------------------------
        public static void GoUCI(cPosicion pos, Stack<string> lista_valores)
        {
            cControlReloj control = new cControlReloj();

              string token = string.Empty;

              while (lista_valores.Count > 0)
              {
            token = lista_valores.Pop();
            if (token == "searchmoves")
              while ((token = lista_valores.Pop()) != null)
            control.searchmoves.Add(cUci.GetFromUCI(pos, token));

            else if (token == "wtime")
              control.time[cColor.BLANCO] = int.Parse(lista_valores.Pop());
            else if (token == "btime")
              control.time[cColor.NEGRO] = int.Parse(lista_valores.Pop());
            else if (token == "winc")
              control.inc[cColor.BLANCO] = int.Parse(lista_valores.Pop());
            else if (token == "binc")
              control.inc[cColor.NEGRO] = int.Parse(lista_valores.Pop());
            else if (token == "movestogo")
              control.movestogo = int.Parse(lista_valores.Pop());
            else if (token == "depth")
              control.depth = int.Parse(lista_valores.Pop());
            else if (token == "nodes")
              control.nodes = int.Parse(lista_valores.Pop());
            else if (token == "movetime")
              control.movetime = int.Parse(lista_valores.Pop());
            else if (token == "mate")
              control.mate = int.Parse(lista_valores.Pop());
            else if (token == "infinite")
              control.infinite = 1;
            else if (token == "ponder")
              control.ponder = 1;
              }

              cMotor.m_Threads.Analizando(pos, control, SetupStates);
        }