AI-алгоритм на основе массива гомоку?
путь назад (думаю, 20+ лет) я столкнулся с исходным кодом игры гомоку в журнале, который я набрал для своего компьютера, и мне было очень весело.
игру было трудно выиграть, но основной алгоритм для компьютерного ИИ был действительно просто и не учитывал много кода. Интересно, знает ли кто-нибудь этот алгоритм и есть ли ссылки на какой-то источник или теорию об этом.
то, что я помню, было то, что он в основном выделил массив, который охватывал весь Совет. Затем, всякий раз, когда я или она помещали фигуру, она добавляла несколько весов ко всем местам на доске, на которые фигура могла бы ударить.
например (обратите внимание, что веса определенно неправильны, поскольку я их не помню):
1 1 1
2 2 2
3 3 3
444
1234X4321
3 3 3
2 2 2
1 1 1
затем он просто сканировал массив для открытого местоположения с самым низким или самым высоким значением.
вещи, которые я нечетко:
- возможно, у него было два массива, один для меня и один для сам и был мин / макс взвешивание?
- возможно, в алгоритме было больше, но по своей сути он был в основном массивом и взвешенными числами
это вообще кому-нибудь напоминает? Кто-нибудь знает что может помочь?
6 ответов
читая ваше описание и немного подумав об этом, я думаю, что он, вероятно, работает с одним массивом, точно так, как вы описали.
для достижения цели получения пять-в-ряд вы должны (а) предотвратить противника от успеха и (б) добиться успеха самостоятельно.
чтобы добиться успеха, вы должны разместить камни рядом с другими камнями, которые у вас уже есть на доске, поэтому имеет смысл добавить положительный балл для полей рядом с вашими камнями, которые могут участвовать в ряд. Либо линейный пример, который вы дали, либо что-то квадратичное, вероятно, будет работать хорошо.
чтобы ваш противник не преуспел, вы должны поместить камни рядом с его / ее камни. Это особенно хорошо, если вы ударяете двух птиц одним камнем, поэтому камни противника должны увеличить ценность окружающих полей так же, как и ваши-чем больше камней он уже выстроил, тем выше оценка и тем более вероятен алгоритм постараюсь отрезать соперника.
самое главное здесь-это взвешивание различных полей и то, взвешиваются ли камни противника по-разному, чем ваши. К сожалению, я не могу помочь с этим, но значения должны быть достаточно простыми, чтобы выяснить методом проб и ошибок после написания самой игры.
однако это очень простой подход и будет превзойден алгоритмом поиска дерева. Поиск в Google, есть связанный бумага по поиску угроз, что, по-видимому, хорошо работает для гомоку. Бумага находится за стеной оплаты, хотя:/
Я не читал статью, но из описания мое предположение было бы какой-то формой алгоритм минимакса
Я видел этот алгоритм, о котором вы упомянули, - он был довольно простым и быстрым (без возврата: -)), и он играл очень хорошо :-) у меня должен быть источник где-то, но это много лет назад... Были веса для ваших камней в зависимости от того, сколько других камней было рядом, и веса oponent камней. Они были ниже, поэтому алгоритм предпочитал атакующую стратегию.
но это, конечно, очень тривиальный алгоритм. Выигрышная стратегия уже найдена. См. этот документ: L. Виктор Эллис, Х. J. ван ден Херик, М. П. Х. Хантьенс. Go-Moku и угроза-космический Поиск. Это очень помогло мне, когда я писал свою собственную программу. Таким образом, Вы сможете написать программу, которая очень хороша в атаке противника и поиске выигрышных комбинаций.
Это древняя игра - я нашел код Исходный Код Планеты. Я играл в эту игру во время колледжа, и в 286 дней была базовая версия.
вот программа, которую вы ищете ftp://ftp.mrynet.com/USENIX/80.1/boulder/dpw/gomoku.c
ему почти 40 лет
работа над версией с открытым исходным кодом для iPhone.
хит меня, если заинтересованы в присоединении!