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

[Демоверсия][demo]

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

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

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

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

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

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

```javascript
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

[algorithm]: https://sites.google.com/site/ltwood/projects/heshby/algorithm
[demo]: https://vakhrushev.me/articles/2019-05-01-predictor/
[about]: https://sites.google.com/site/ltwood/projects/heshby