Мой ИИ зевает детские маты, не знаю как написать Nega Max Написал первичную логику, алгоритм видит угрозы, уходит с угроз, видит куда атаковать, атакует дорогую фигуру, дешевую фигуру под защитой не трогает, уходит из под шахов
Не могу даже мысленно представить, как начать писать алгоритм Nega Max
Сгенерировать все возможные ходы, и расставить оценки? Например при атаке на ладью оценка 40, при атаке на ферзя оценка 200 Да? Потом выбрать лучший ход
Я читал уроки на initit.ru, там в алгоритме древо ходов с оценками
Вот я собираюсь сделать шах компьютеру - могу написать что компьютер этот шах увидит, буду писать "грозит шах от ферзя", и что дальше? Приказывать ходить королем? Ломаю голову
Когда будет ясный мысленный план, тогда займусь написанием
Кажется, там за взятие каждой фигуры начисляются баллы каждому ходу, ответу и так далее - по дереву. Только движение идёт от края дерева - вниз. Выбираются самые эффективные ходы на последнем уровне глубины расчёта, запоминаются его оценки, спускаются эти оценки на уровень ниже, в основание ветки, снова повторяется то же самое и так далее - до самого основания дерева. Здесь выбирается ход с самым высоким баллом и программа воспроизводит его на доске. Но это minimax, кажется.
Ещё не помешает добавить определение матов. Типа, если ходы где-то кончились, значит игрок проиграл и этой ветке присваивается самый высокий балл на предыдущем уровне. Тут ещё проблема небольшая есть. Если, допустим, анализ не более 3-х ходов, то мат можно предвидеть максимум на два хода вперёд: ход-ответ-ответ невозможен. В то время как обычный расчёт учитывает преимущества взятия фигур на уровень выше. Именно это позволяет так просто ставить маты программе с очень ограниченной видимостью или обманывать её, уступая фигуры на максимальном уровне видимости программы.
Также можно ещё добавить разную небольшую эвристику. Какие-то ходы ведут к позиционным недостаткам, вроде невозможности сделать рокировку - им можно добавить небольшую отрицательную оценку.
Кажется, примерно так может быть устроен простой шахматный движок.
Честно говоря, мало что понял из вопроса. Тут проще самому что-то сделать, особенно когда пишешь свой движок, чем объяснить другим и получить дельный совет. Опять же, если нужно чтобы работало - надо брать готовое, что уже написано и отлажено. Если же нужен именно свой движок, ради того, чтобы сделать его самому, то помощь здесь некстати. Не будет полной радости от успеха, если в итоге что-то получится.