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.

хит меня, если заинтересованы в присоединении!

https://github.com/kigster/kigomoku