Ответы пользователя по тегу Математика
  • Придумал настольную игру, какой посоветуете алгоритм для соперника-бота?

    ProgramCodePav
    @ProgramCodePav
    Front-end developer. Love open source
    Есть просто идея:)

    Можно сделать заранее много наиболее эффективных (или по сложности) семлов. А также бот будет записывать каждый примененный семпл в файл. На основе данных файла может быть осуществлен алгоритм псевдохитрости соперника. Например, 3 раза один семпл (или похожие) работают, а в четвертый раз самый страшный семпл для игрока, который подстроится под предыдущие 3 варианта. Также для одного из 5 вариантов бота можно сделать случайным. Это все для первого шага.

    Далее нужно небольшое исследование эффективности. Вообще бот может читерить, но если игра честная, то алгоритм должен быть человеческий.

    Например, первый этап:
    вариант 1 и 2 начинаются ровно в центре, но вариант 2 в верхней горизонтали на 1 клетку правее для оценки разницы в верхней горизонтали. Если меньше, то в следующий раз - дважды влево.

    Второй пример выходит из первого: можно сначала проверить все 5 горизонталей, выдвигая левее и правее лишь одну точку в варианте Б.

    Да, первый вариант получается бездействует, что нехорошо, но дает точность в оценке.

    Второй этап:
    После оценки всех горизонталей можно резко выдвинуть в положительные стороны все варианты ответов (например, 5 точек варианта 1, все до края - влево, вправо, влево, влево, влево - это на основе анализа результатов первого этапа, а 5 точек варианта 2 - тоже самое, что у варианта 1, но деленное на 2).

    Третий этап: (fail)
    совмещать варианты 1 и 2 по шагам.
    например, вариант 1 выиграл более, чем вариант 2.
    Напомню расположение варианта 1 (от центра): влево, вправо, влево, влево, влево .
    А это расположение варианта 2 (от центра): влево/2, вправо/2, влево/2, влево/2, влево/2 .
    Значит первая (верхняя) горизонталь варианта 2 двигается влево на расстояние влево/4 (то есть на клетку). Если Ва... тут я сломался:) потому что возвращаемые данные не цифры, а bool. ( я додумать его попробую, просто дам ответ лучше по-раньше, вдруг вы поймаете направление и справитесь лучше )

    -----------

    Еще один алгоритм: последовательный.

    Первый этап аналогичный предыдущему алгоритму, то есть оба варианта одинаково расположены с отклонением в одну клетку, на одной горизонтали, потом на другой и до конца, чтобы собрать данные.

    Отличие в том, что если исследует карту вариант 2, то вариант 1 становится на выигрышную точку вместе с вариантом 2.

    например:
    Расположение всех точек, шаг 1:
    Вариант 1 <=> вариант 2
    Центр <=> Центр+1клетка вправо
    Центр <=> Центр
    Центр <=> Центр
    Центр <=> Центр
    Центр <=> Центр

    Вариант 2 выиграл. Значит в первой горизонтали стандартной точкой становится Центр+1клетка вправо. То есть:
    Расположение всех точек, шаг 2:
    Вариант 1 <=> вариант 2
    Центр+1клетка вправо<=> Центр+1клетка вправо
    Центр <=> Центр+1клетка вправо
    Центр <=> Центр
    Центр <=> Центр
    Центр <=> Центр

    Вариант 2 проиграл.
    Расположение всех точек, шаг 3:
    Вариант 1 <=> вариант 2
    Центр+1клетка вправо<=> Центр+1клетка вправо
    Центр <=> Центр+1клетка влево
    Центр <=> Центр
    Центр <=> Центр
    Центр <=> Центр

    Если вариант 2 проиграл, то точка второй горизонтали оказалась по центру. И в таком плане.

    --

    Плюсы и минусы. У первого варианта, очевидно, больше эффективность, но он не продуман до конца, а второй вариант 100% рабочий, но достаточно долгий.
    Конечно, можно совместить 1 и 2 вариант. Таким образом После первого этапа (оценки ближних от центра клеток), можно перемещать точки в крайние положения.

    Что я не продумал - вероятно есть способ использовать оба вариант, а не когда один в простое :)
    Ответ написан
    Комментировать