2015-11-06 20 views
1

Для повышения производительности Минимакса алгоритма с альфа-бета отсечением, я реализовал Итерационное Углубление:Реализация итеративного углубление

public Integer iterativeDeepening(int maxDepth, boolean isFirstPlayer) { 

    Integer bestCell = -1; 

    for (Integer depth = 1; depth <= maxDepth; depth++) { 
     bestCell = alphabeta.minimax(depth, false, Integer.MIN_VALUE, Integer.MAX_VALUE)[1]; 
    } 

    return bestCell; 
} 

где метод iterativeDeepening просто возвращает идентификатор лучшего хода.

Во-первых, я не уверен, что это правильный способ реализации итерационного углубления.

Во-вторых, я заметил, что ИИ начал делать неправильные ходы. Возможно ли, что Итерационное углубление влияет на принятие решений?

При работе с таблицами транспонирования и итерационным углублением я измеряю значительные улучшения скорости алгоритма, но я действительно не хочу жертвовать качеством ИИ для скорости.

ответ

2

Во-первых, я не уверен, что это правильный способ реализации Итеративный Углубление.

Я думаю, что это правильно, но если вы хотите, чтобы итерационное углубление ускоряло ваш алгоритм, вы также должны добавить к нему порядок перемещения. Идея состоит в том, что вы используете результаты более мелкого поиска и поисковые ходы, которые кажутся лучшими, как на первой итерации. Это означает лучший шанс для быстрых отключений в вашем альфа-бета-алгоритме.

Во-вторых, я заметил, что ИИ начал совершать неправильные действия. Возможно ли, что для Итеративного углубления повлияет на принятие решений?

Внедрение итеративного углубления для альфа-бета-алгоритма не должно влиять на принятие решений вообще. Должно быть что-то не так с вашей реализацией, но информации недостаточно, чтобы сказать, что это такое.