Как стать автором
Обновить

Комментарии 7

А почему бы не добавить еще других ботов, которые анализируют ситуацию иначе?


К примеру я обычно играю так:


  1. Выбираем направление стандартное (к примеру вниз).
  2. Делаем ходы в стандартном направлении.
  3. Если сделать ход более не можем, то делаем наиболее выгодный ход перпендикулярно стандартному направлению (в моем примере это влево или вправо) и переходим ко 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-ый вариант, что представлен в статье, кажется слегка недоработанным.


Что будет, если научить такой вариант наперед проверять (моделировать "в уме") вероятность исхода, например:


  1. Есть вероятность тупика (и к примеру вычисляется численная вероятность такого исхода).
  2. Таблица вероятностей различных схлапываний фигур.

Т.е. позволить боту размышлять и выбирать оптимальный вариант с учетом возможного будущего?

Можно будет диссертацию писать, вот что будет.

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


Можно конечно к этой задаче подойти еще с точки зрения оптимизации, тогда да, объем для размышлений большой.

Было бы ещё интересно на вероятностные распределения очков посмотреть.
Оказалось, что datawrapper не умеет сохранять картинки. Пришлось импровизировать чтобы заново всё не переделывать. Если есть желание самому визуализацию сделать, то могу полную статистику скинуть.
Бот 1


Бот 2


Бот 3


Бот 4


Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории