на главную
NegaMax

Стратегия получения лучшего хода при игре для 2-х игроков была описана еще математиком Клодом  Шенноном. Мы должны получить набор позиций-ходов из данной и перебрать их все. Каждую позицию,  полученную в результате хода нужно оценить и выбрать наилучшую, т,е, - наилучшее перемещение. Чтобы  оценить каждое перемещение, мы рекурсивно вызываем нашу же функцию, только для другого цвета фигур.  Рекурсивное углубление продолжается до тех пор, пока не найдена конечная позиция в строке (согласно  правилам игры) или пока не исчерпана глубина просчета.  В конечных точках вызывается функция,  возвращающая статическую оценку позиции. В самом простейшем случае - это просто подсчет фигур на доске.

Некоторые соглашения:
Generate - функция, генерирующая набор позиций, полученных из данной в результате легальных (согласно правилам игры) ходов.
Evaluate - статическая оценка позиции.
 

int NegaMax(int depth)
{
   int score,tmp;

   if(depth <= 0) return Evaluate();

   Generate();

   while(moveList)
   {
 
      tmp = -NegaMax(depth-1);
      if(tmp > score) score = tmp;

   }
 

   return score;
}
 

Этот алгоритм называется NegaMax. Оценка позиции инвертированная для каждой стороны. Известна еще  одна интерпритация данного алгоритма под названием MiniMax. В нем оценка одного знака, но одна сторона  максимизирует ее, а другая минимизирует.
Число позиций, рассмотренных этим алгоритмом, приблизительно равно N^D, где:
N - среднее количество легальных перемещений в каждом узле
D - глубина перебора