Комментарии 7
А почему бы не добавить еще других ботов, которые анализируют ситуацию иначе?
К примеру я обычно играю так:
- Выбираем направление стандартное (к примеру вниз).
- Делаем ходы в стандартном направлении.
- Если сделать ход более не можем, то делаем наиболее выгодный ход перпендикулярно стандартному направлению (в моем примере это влево или вправо) и переходим ко 2-ому пункту.
Такая стратегия давала хороший результат при минимуме размышлений.
А почему бы не добавить еще других ботов, которые анализируют ситуацию иначе?
Будет много простых ботов с разными алгоритмами и примерно одинаковым результатом. Я тестировал пять вариантов третьего бота т.к. он показывал слишком маленький результат по сравнению с четвёртым. Для сложных ботов где есть дерево ходов на котором можно реализовать хотя бы минмакс у питона не хватает производительности. И сам код написан неэффективно. Для этого нужно писать бота на С++. А для этого нужно переписывать класс поля или наследовать новый. Всё это сложно, долго и тянет на отдельную статью.
К примеру я обычно играю так:
import board
def choice_best(a, x, y):
b = a.copy()
s1 = b.move(x)
b = a.copy()
s2 = b.move(y)
if s1 > s2:
return x
else:
return y
def f(a):
ans = 3
if not a.deadlock(ans):
return ans
else:
ans = choice_best(a, 2, 4)
if not a.deadlock(ans):
return ans
elif not a.deadlock(list({2, 4} - {ans})[0]):
return list({2, 4} - {ans})[0]
elif not a.deadlock(1):
return 1
else:
return 0
board.main(f)
Тестировал только 100 раз и на более загруженной системе. Средний результат где-то между вторым и третьим ботом.
Average:
Steps: 281 Score: 3428 Time: 233
Min:
Steps: 76 Score: 520 Time: 82
Max:
Steps: 589 Score: 8640 Time: 552
Хах, спасибо =) Немного неожиданный результат.
Интересно уже, а какая схема самая оптимальная (даже если в плане размышлений не учень удобна)?
Просто 4-ый вариант, что представлен в статье, кажется слегка недоработанным.
Что будет, если научить такой вариант наперед проверять (моделировать "в уме") вероятность исхода, например:
- Есть вероятность тупика (и к примеру вычисляется численная вероятность такого исхода).
- Таблица вероятностей различных схлапываний фигур.
Т.е. позволить боту размышлять и выбирать оптимальный вариант с учетом возможного будущего?
Сравнение стратегий игры 2048