Exemplo n.º 1
0
        private static void GetCacheLineEmptySumMerges(int line)
        {
            double sumPower   = Weights.SumPower;
            var    levels     = BitBoardHandler.ToLevels((Line)line);
            double lineSum    = 0;
            double lineEmpty  = 0;
            double lineMerges = 0;

            int preLevel = 0;
            int counter  = 0;

            for (int i = 0; i < 4; ++i)
            {
                int level = levels[i];
                lineSum += Math.Pow(level, sumPower);
                if (level == 0)
                {
                    ++lineEmpty;
                }
                else
                {
                    if (preLevel == level)
                    {
                        ++counter;
                    }
                    else if (counter > 0)
                    {
                        lineMerges += (1 + counter);
                        counter     = 0;
                    }
                    preLevel = level;
                }
            }
            if (counter > 0)
            {
                lineMerges += (1 + counter);
            }
            moveScores[line] +=
                lineEmpty * Weights.EmptyWeight
                + lineMerges * Weights.MergeWeight
                - lineSum * Weights.SumWeight;
        }
Exemplo n.º 2
0
        private static void GetCacheLineMono(int line)
        {
            double monoPower     = Weights.MoveMonoPower;
            var    levels        = BitBoardHandler.ToLevels((Line)line);
            double lineMonoLeft  = 0;
            double lineMonoRight = 0;

            for (int i = 1; i < 4; ++i)
            {
                if (levels[i - 1] > levels[i])
                {
                    lineMonoLeft += Math.Pow(levels[i - 1], monoPower) - Math.Pow(levels[i], monoPower);
                }
                else
                {
                    lineMonoRight += Math.Pow(levels[i], monoPower) - Math.Pow(levels[i - 1], monoPower);
                }
            }
            moveScores[line] -= Math.Min(lineMonoLeft, lineMonoRight) * Weights.MonoWeight;
        }
Exemplo n.º 3
0
        private static void CacheLineSmooth(int line)
        {
            double smoothPower = Weights.SmoothPower;
            var    levels      = BitBoardHandler.ToLevels((Line)line);
            double lineSmooth  = 0;

            for (int i = 0; i < 3; ++i)
            {
                if (levels[i] > 0)
                {
                    for (int j = i + 1; j < 4; ++j)
                    {
                        if (levels[j] > 0)
                        {
                            lineSmooth -= Math.Pow(Math.Abs(levels[i] - levels[j]), smoothPower);
                            break;
                        }
                    }
                }
            }
            addScores[line] = lineSmooth * Weights.SmoothWeight;
        }