Update readme

This commit is contained in:
Anton Vakhrushev 2018-06-30 17:56:07 +03:00
parent 86da536acd
commit d12f9cbac2

View File

@ -1,15 +1,62 @@
# Гадалка
# Электронная гадалка
Вариант электронной гадалки Шеннона, реализованный на основе
[описания алгоритма](https://sites.google.com/site/ltwood/projects/heshby/algorithm).
[Демоверсия][demo]
Игрок задаывает один из двух вариантов, а программа пытается его угадать.
Алгоритм, который противостоит человеку, и на основе ходов пытается предсказать
следующих ход человека.
Игрок загаывает один из двух вариантов, а робот пытается его угадать.
Если программе удалось угадать, то игрок теряет очко.
Если же программа не смогла предсказать выбор человека, то игрок зарабатывает очко.
Интересно то, что программу невероятно сложно обыграть. Кажется, что игрок выбирает вариант хода случайно,
но на самом деле его выбор можно предсказать на основе прошлых ходов.
Алгоритм реализован на основе [описания][algorithm]. В процессе реализации алгоритм слегка изменился.
В отличие от описания, здесь можно допольнительно указать количество вариантов.
С двумя вариантами будет игра "Чет - нечет", а с тремя - "Камень, ножницы, бумага".
* Более подробно о гадалке и алгоритме можно прочитать
на сайте [ltwood](https://sites.google.com/site/ltwood/projects/heshby).
* [Демоверсия](http://vakhrushev.me/projects/predictor/)
Интересно то, что программу сложно обыграть. Игрок пытается обставить робота, но все равно
делает свои ходы не случайно. Именно эта "неслучайность" позволяет быстро приспосабливаться и эффективно
противостоять игроку.
Более подробно о гадалке и алгоритме можно прочитать на сайте [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](http://vakhrushev.me/projects/predictor/)
[about](https://sites.google.com/site/ltwood/projects/heshby)