Модераторы: Rickert

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите реализовать AI для игры шашки 
:(
    Опции темы
Lirius
Дата 10.12.2008, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 5.1.2007

Репутация: нет
Всего: нет



Пишу игру шашки, уже реализовал вывод доски, ход, рубку. Не могу сделать AI для шашек. Пишу на с++, с использованием графического движка.Кто-нибудь может обьяснить какой-нибудь простой алгоритм или дать примеры.
PM MAIL   Вверх
bems
Дата 11.12.2008, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: нет
Всего: 88



Ну если "простой алгоритм", то сохраняешь копию доски, отключаешь вывод на экран, делаешь первый возможный ход, оцениваешь результаты (изменение общего количества белых, изменение количества дамок белых и то же самое для черных). Восстанавливаеш доску из сохраненной копии и делаешь слендующий возможный ход. Так повторяешь для всех вариантов. Потом из результататов оценки выбираеш лучший, включаешь вывод на экран и делаешь этот ход. Для увеличения качества результата потом можешь увеличить глубину перебора и продумывать на большее число ходов вперед. 
Но это все равно очень по простому, действительно крутые шашечные движки вытворяют страшные вещи  smile 


--------------------
Обижено школьников: 8
PM MAIL   Вверх
Gongex
Дата 19.1.2009, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 81
Регистрация: 1.1.2008

Репутация: нет
Всего: 0



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

Я взял 64 PictureBox,и придал шашкам цифру,так как комп думает по цифровому.
Белые это 1 черные -2 и пустая клетка -0......комп ходит так у меня......берет из ума число до 64 и проверяет есть ли шашка,то есть клетка равно ли двум.....потом смотрит куда пойти налево или направо..у шашки два варианта хода, вариант тоже из ума берется....если клетка пустая то ходит.Перерисовываем клетку.И при этом изменяем данные этой клетки...........надо написать все варианты как комп бьет как ходит и потом как дамки бьют....это вариантов 200.получится 200 строк....и если включить опцию " играют два компа" то все ходы переделать надо на белые шашки..дам ссылку на прогу,посмотришь


M
arilou
а можно как-то попонятнее написать? а то этот поток сознания нечитабелен


Это сообщение отредактировал(а) arilou - 20.1.2009, 02:48
PM MAIL   Вверх
DeMoNN
Дата 26.1.2009, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 21.3.2008

Репутация: 1
Всего: 2




Модератор: Сообщение скрыто.

PM MAIL ICQ   Вверх
Kakadu
Дата 29.1.2009, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 273
Регистрация: 19.3.2008

Репутация: нет
Всего: 7



Насколько я знаю, современные шашечные программы имеют в себе базу позиций на все случаи жизни (книгу дебютов). С некоторых пор обучение шашкам среди людей превращается в тупую зубрёжку дебютов, иначе ты ошибешься и проиграешь. В шахматах дерево позиций много больше, но всёравно начало партий изучено на 20 ходов вперед, а для окончаний где по 5 фигур на доске даже построено дерево позиций с характеристикой результата при ходе той или иной стороны. короче, ИМХО, шашки умирают.

В принципе, если автор не хочет писать непобедимый комп, а просто хочет поразвлечься с ИИ, он может этим не пользоваться и писать ИИ без базы позиций.


--------------------
Добрые мариносы долго кормили украдкой маленьких зерлингов. От этой украдки зерлинги пухли и дохли
PM MAIL   Вверх
bems
Дата 29.1.2009, 18:12 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: нет
Всего: 88



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


--------------------
Обижено школьников: 8
PM MAIL   Вверх
Dims
Дата 8.2.2009, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1016
Регистрация: 21.11.2006

Репутация: нет
Всего: 11



Самый простой алгоритм -- это рекурсивный перебор вариантов в будущее с выбором наилучшего хода для себя и наихудшего (для тебя) для противника.

Назовём функцию "выбрать ход". У этой функции будет два параметра: исходная позиция, чей ход (цвет шашки).
Возвращать функция будет оценку хода (число, которое, тем больше, чем лучше ход).

На первом этапе функция смотрит, какие ходы может сделать заданный цвет и генерирует все новые комбинации, возникающие при этих ходах. Затем она каждую получившуюся комбинацию передаёт самой себе (рекурсия), заменяя только цвет шашки на обратный.

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

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

Но перебрать все варианты невозможно. Во-первых, их очень много разных, никакой компьютер не сможет их перебрать за обозримое время. Во-вторых, варианты повторяются (шашки могут ходить взад вперёд). 

Поэтому, рекурсию нужно ограничить по глубине. Думаю, 3-4 уровней будет достаточно. Кроме того, нужно добавить функции эмпирической оценки позиции и хода, которая бы оценивала ситуацию как есть, без перебора. Например, можно в эту функцию включить учёт количества шашек -- чем больше шашек у тебя и чем меньше у противника, тем больше оценка. Или можно учесть, что всегда хорошо съесть шашку противника и плохо отдать свою. Потом надо учесть, что попасть в дамки -- это явный плюс. И так далее.

Оценки можно подбирать, настраивая программу на наилучшую игру.

То есть, скомбинировав эмпирическую оценку и неглубокий перебор вариантов, можно получить реально работающий алгоритм, вполне достаточный, чтобы программа играла более-менее разумно.
PM MAIL   Вверх
bems
Дата 8.2.2009, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: нет
Всего: 88



Цитата(Dims @  8.2.2009,  15:48 Найти цитируемый пост)
Поэтому, рекурсию нужно ограничить по глубине. Думаю, 3-4 уровней будет достаточно

у лидеров не меньше 12. А с повторяющимися позициями борятся по-другому.
Цитата(Dims @  8.2.2009,  15:48 Найти цитируемый пост)
Например, можно в эту функцию включить учёт количества шашек -- чем больше шашек у тебя и чем меньше у противника, тем больше оценка. Или можно учесть, что всегда хорошо съесть шашку противника и плохо отдать свою. Потом надо учесть, что попасть в дамки -- это явный плюс
ну и еще есть веса клеток, когда занять одну клетку считается более перспективным, чем другую. Конкретные значения весов для разных клеток авторы шашечных программ не сообщают smile



--------------------
Обижено школьников: 8
PM MAIL   Вверх
Dims
Дата 8.2.2009, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1016
Регистрация: 21.11.2006

Репутация: нет
Всего: 11



Ну да, я слышал об этом. И про повторы понятно, что нужно бороться иначе. Просто, как я понял, топикстартеру нужно было простейший алгоритм предложить. Думаю, моё описание подходит под эту просьбу...
PM MAIL   Вверх
bems
Дата 8.2.2009, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: нет
Всего: 88



Ну есть еще правило чио при третьем повторе одного положения на доске объявляется ничья, поэтому повторы все-равно искать нужно


--------------------
Обижено школьников: 8
PM MAIL   Вверх
Xela
Дата 3.3.2009, 00:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 2.6.2005

Репутация: нет
Всего: нет



Цитата(Lirius @ 10.12.2008,  18:28)
Пишу игру шашки, уже реализовал вывод доски, ход, рубку. Не могу сделать AI для шашек. Пишу на с++, с использованием графического движка.Кто-нибудь может обьяснить какой-нибудь простой алгоритм или дать примеры.

Уже создан алгоритм игры в шашки у которого не возможно выиграть в принципе.
PM MAIL   Вверх
bems
Дата 3.3.2009, 02:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: нет
Всего: 88



Для русских шашек это не верно


--------------------
Обижено школьников: 8
PM MAIL   Вверх
pelikesha
Дата 2.10.2010, 08:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 22.6.2010

Репутация: нет
Всего: нет



Подскажите плиз наиболее простой алгоритм для реализации дамок и их взятий. 

По поводу алгоритма "у которого невозможно выиграть в принципе" - это только про чеккерс (английские шашки). И там не алгоритм, там тупой перебор с отбрасыванием "плохих" продолжений, который не гарантирует выигрыша, но гарантированно не проигрывает - это разные вещи.
PM MAIL   Вверх
NSSerg
Дата 5.10.2010, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 25.9.2010
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Есть сильные движки в русские шашки с открытыми исходниками - KestoG  и Скифи.
и есть очень простой - SiDra
http://igorkorshunov.narod.ru/Draughts/index.html
Они входят в комплект Каллисто4.
http://www.igorkorshunov.narod.ru/Kallisto4.rar

Добавлено @ 19:14
Цитата(bems @  3.3.2009,  02:10 Найти цитируемый пост)
Для русских шашек это не верно 

И для чеккерса тоже. Они просто нашли беспроигрышные варианты (построили беспроигрышное дерево)
из нескольких позиций входящих в стандартную жеребьевку дебютов.
При этом выиграть, если соперник совершит роковую ошибку - Чинук сможет далеко не всегда.
В любой игре, и даже в шахматах, есть позиции в которых программы не проигрывают. И чеккерс не исключение.
За счет чего так раздули их "достижение" совершенно непонятно.



Это сообщение отредактировал(а) NSSerg - 5.10.2010, 19:15
PM MAIL WWW   Вверх
pelikesha
Дата 5.4.2011, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 22.6.2010

Репутация: нет
Всего: нет



Цитата(pelikesha @ 2.10.2010,  08:10)
Подскажите плиз наиболее простой алгоритм для реализации дамок и их взятий.

Эх...так никто и не откликнулся(
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование игр, графики и искуственного интеллекта"
Rickert

НА ЗЛОБУ ДНЯ: Дорогие посетители, прошу обратить внимание что новые темы касающиеся новых вопросов создаются кнопкой "Новая тема" а не "Ответить"! Любые оффтопиковые вопросы, заданные в текущих тематических темах будут удалены а их авторы, при рецедиве, забанены.

  • Литературу, связанную с программированием графики, обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы связанные с программированием графики и мультимедии на языках С++ и Delphi
  • Вопросы по реализации алгоритмов рассматриваются здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rickert.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование игр, графики и искусственного интеллекта | Следующая тема »


 




[ Время генерации скрипта: 0.0918 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.