![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Xdelphic |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 20.2.2016 Репутация: нет Всего: нет |
Здравствуйте. Замучился с функцией 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 (убрал её для простоты восприятия кода, так как на полном переборе выше, результат всё такой же прискорбный) |
||||
|
|||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |