Это - вопрос, с которым я играл в течение приблизительно одной недели, предложенный коллегой:
Вообразите игру играемой на 36x36 сетка. Цель игры состоит в том, чтобы создать четыре угла квадрата любого размера (например, 2x2, 3x3, 4x4, и так далее). Первый плеер помещает игровую часть куда угодно кроме центра четыре пробелов сетки. После первого шага плееры могут поместить свою игровую часть куда угодно на сетку. Игровые части не могут быть перемещены после того, как они будут размещены. И вот именно; игра проста и забавна.
Я пытался придумать алгоритм, чтобы победить, или по крайней мере преуспеть в этой игре. Какие-либо предложения?
Это партия совершенной информации, в которой игроки по очереди, как и в шахматы, применяют тот же подход, что и в шахматных движках. Используйте алгоритм minimax (с альфа-бета-обрезкой вероятно) для поиска дерева действительных ходов. Вы можете использовать некоторую функцию оценки, чтобы направлять поиск, отдавая предпочтение позициям, которые имеют наиболее близкие к завершению квадраты.
Как и Foglebird, написал MiniMax Algorithm, будет работать лучше всего. Проблема заключается в том, как оценить счет нынешней платы. Игра довольно сложна, что начнется более тысячи областей. В небольшой игре, такой как Tic Tac Toe, вы можете вычислить все возможные перемещения до конца дерева поиска в MiniMax, вы даете 1 указать на выигрышную плееру и A -1 к проигрыше и возврату дерева, чтобы найти ваш лучший ход. В этой игре вам нужен какой-то эвристический , чтобы рассчитать оценку для доски после спускания трех 10 ходов.
У меня нет много информации о игре, чтобы я мог только догадываться только хорошей эвристики:
Возможна много эвристики, и большая часть времени вам понадобится смесь некоторых из них.
Хорошо, я читаю мусор в игру .. как его неоднозначный .. Я предполагаю, что эта игра похожа на «точки и линии», где пространство перемещения состоит в том, чтобы соединить 2 соседних точка с линией. Таким образом, 2x2 Grid будет иметь 9 вершин, 4-х 1х1 выигрышных позиций и 1 2x2 Win Position. С игрой, заканчивающейся победой для человека, который завершает квадрат, и галстук, когда оба игрока исчерпали заверенные решения.
Так как ваши рабочие квадраты некоторые из логики приятно. Вы можете рассчитать членство в любой строке на все возможные коробки. Таким образом, в 2X2 примере пример радиала будет иметь членство в 2 ящиках 1x1, а сторона будет иметь членство в одном 1x1 и один 2x2. Это членство становится важным.
При начале игры вы генерируете все члены для всех слоев сегментов. Сделайте 2 экземпляра .. (например, играть в линкоре), копия противника будет инициаторирована на количество поворотов, он оставил, чтобы закончить каждую коробку .. так что на 36x36 будет оставаться 144 хода, чтобы закончить большую коробку 4 набора 140-мэвей, чтобы закончить 4 35x35 коробки
Во время его движений вы уменьшаете все пораженные коробки на копии противника Во время вашего перемещения любой шаг вы делаете Invalidates, все ящики, содержащие ваш ход. Вы устанавливаете их в отрицательный 1, или бесконечный или 2 миллиарда ... просто что-то знать, что эти квадраты невозможны.
Теперь вы создаете антипригарную копию, которая является обратной стороной вражеской копии .. Это содержит сколько ходов, чтобы завершить данный квадрат.
Для данного движения .. Сначала проверьте на победу. Если вы можете двигаться и выиграть. (Антиемые с квадратом в одном) Затем проверьте, необходим ли блок. (Доска противника с любым квадратом в одном)
Теперь добавьте функцию типа MiniMax, если настолько наклонены ..
или использовать поиск, чтобы найти позиции, которые уничтожают как можно больше низких финишных квадратов, или создать строку, которая уменьшает Несколько низких квадратов на анти-вражеской доске. Это должно работать разумно, так как он не пытается завершить какой-либо конкретный квадрат, но минимакс, где ваша оба стрельба для низкой оценки будет лучшим сценарием.
Вам нужно заполнить квадрат или просто поместить его в углами?
, например, является следующим выигрышем?
.......................
.X..X..................
.......................
.......................
.X..X..................
.......................
или следующее?
.......................
.XXXX..................
.X..X..................
.X..X..................
.XXXX..................
.......................
или следующее?
.......................
.XXXX..................
.XXXX..................
.XXXX..................
.XXXX..................
.......................