|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
20.02.2016, 00:12 | #1 |
Пользователь
Регистрация: 11.08.2011
Сообщений: 67
|
функция поиска лучшего хода minimax(depth)
Здравствуйте. Замучился с функцией minimax-a для русских шашек. Точнее она работает и вроде бы как надо, находит самый сильный ход, но лишь тогда, когда общее количество шашек на поле приблизительно больше 8 (т.е, например, осталось 4 белых и столько же черных, или же все шашки в начале просчета на местах), тогда никаких нареканий, находит самые неожиданные и сильные многоходовки для компа.
Если же, к примеру, как вариант эндшпиля, вручную выставить на поле всего 2 шашки (черную и белую) в позицию -1 (минус один) ход черной (цвет компьютера) до позиции - "друг на против друга" (т.е. когда уже будут должны ходить белые, а некуда, что естесно означает поражение белым), то в некоторых полях доски черная шашка делает наиглупейший ход в сторону, что можно расценивать, как сведение к ничьей, вместо явного выигрыша. Другими словами, оценочная функция дает сбой. Но ГДЕ и КАК найти так и не смог. Сама оценочная функция проста и тривиальна: Код:
А вот сама главная функция minimax-а (закомментировал всё что можно и нельзя, для большего понимания): Код:
запускаю, к примеру, так: deep:= maxlongint; best_index:= 0; smart(true,deep); *) Методом проб и ошибок, кажется понял, что, по крайней мере - косвенная вина проблемы в самом начальном условии smart(depth), где if depth = 0 then ... Дело в том, что оно просто не выполняется для небольшого количества шашек на доске, как я писал в начале. Собственно, понял я это уже давно, но меня это мало чем осенило... ))) Пробовал делать оценку allcount() чуть ли не на каждом витке рекурсии, результата никакого. Понимаю, что глупо, но отследить до конца всю работу данной функции, со всеми её рекурсивными вызовами, в голове..., не получается. Просьба ткнуть лбом, - где искать ошибку либо упущение.. Как я уже писал, от дебютного состояния игры и ~ до мительшпиля включительно, программа работает отлично, разумеется после оптимизации alpha-beta для функции smart (убрал её для простоты восприятия кода, так как на полном переборе выше, результат всё такой же прискорбный) |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Алгоритм поиска лучшего хода в шахматах | Foxpronet | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 2 | 06.04.2014 10:44 |
DirectX11 depth | Антон-Царевич | Общие вопросы C/C++ | 0 | 02.04.2014 23:50 |
Алгоритм выбора лучшего хода | tanyhaftv | Помощь студентам | 4 | 09.06.2011 17:55 |
функция поиска (С++) | _Aranel_ | Помощь студентам | 2 | 31.01.2010 19:04 |
Пузырьки:алгоритм лучшего хода | SynEnergizer | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 2 | 05.12.2009 16:18 |