Я делаю небольшой проект по игре 4x4 tic-tac-toe. Я использую Alpha Beta Search для поиска следующего лучшего шага. В альфа-бета поиска, я использую функцию оценки обрезания, который вызывается в функции «полезности» следующего алгоритмаФункция не возвращает отрицательное значение
я реализовал все успешно, но проблема в том, функция полезности не вернуть отрицательное значение, и я действительно не знаю, почему! Ниже приводится функция
private static int utility(GameTreeNode gtn, bool isMin = false)
{
int nodeValue = 0;
switch (gtn.NodeBoard.getBoardStatus())
{
case Status.Success:
nodeValue = 50;
if (isMin) nodeValue = -50; /// here
break;
case Status.Incomplete:
if (isMin)
nodeValue = gtn.evaluate(State.X);
else
nodeValue = gtn.evaluate(State.O);
break;
}
// case Status.Draw:
return nodeValue;
}
isMin
установлена истина, когда она вызывается из функции MinValue
isMin
является ход O и движение ИИ является X. Если O выигрывает утилита должна возвращать -50. Но он возвращает только 0. Я отлаживал программу, и она фактически присваивает от -50 до nodeValue
(nodeValue
изменений в отладчике до -50), но когда я получаю в функции Min или Max, она равна нулю.
Примечание: весь int, используемый во всем проекте, составляет signed int
. Нет unsigned
не используется ключевое слово, если вы думаете, функция-абонент беззнаковое
Полный код альфа-бета поиска здесь: http://pastie.org/8538015
Пожалуйста, друзья, помочь как можно скорее.
Я не вижу вызовы 'Utility' с' isMin', установленными в 'true' в псевдокоде ... – MiMo
В моем коде он делает, чтобы дифференцировать вызов от MinValue и MaxValue (чтобы дифференцировать перемещение of O из X) –