Skip to content

anwinged/predictor

Repository files navigation

Электронная гадалка

CircleCI

Демоверсия

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

Игрок загадывает один из двух вариантов, а робот пытается его угадать. Если программе удалось угадать, то игрок теряет очко. Если программа не смогла предсказать выбор человека, то игрок зарабатывает очко.

Алгоритм реализован на основе описания. В процессе реализации алгоритм слегка изменился. В отличие от описания, здесь можно дополнительно указать количество вариантов. С двумя вариантами будет игра "Чет - нечет", а с тремя - "Камень, ножницы, бумага".

Интересно то, что программу сложно обыграть. Игрок пытается обставить робота, но все равно делает свои ходы не случайно. Именно эта "неслучайность" позволяет быстро приспосабливаться и эффективно противостоять игроку.

Более подробно о гадалке и алгоритме можно прочитать на сайте ltwood.

Использование

import Predictor from "predictor";

// Создание гадалки
const predictor = new Predictor(config);

// Передача значения, которое выбрал пользователь,
// и получение предсказание для этого значения
const prediction = predictor.pass(1);

// Получение текущего счета
const score = predictor.score;

// Получение количества сделанных ходов
const sc = predictor.stepCount();

Конфигурация

  • config.base - количество вариантов хода. Число большее 2. Чем больше вариантов, тем больше ходов алгоритм тратит на приспособление к ходам человека.
  • config.daemons - настройка списка демонов.
    • config.daemons.human - количество анализируемых ходов человека,
    • config.daemons.robot - количество анализируемых ходов робота,
    • config.daemons.epsilon - вес вознаграждения правильного ответа.
  • config.supervisor_epsilon - вес вознаграждения демона за правильный ответ.

Сборка

tools/build-docker
tools/npm run build

Тестирование

tools/npm run test