65 lines
3.4 KiB
Markdown
65 lines
3.4 KiB
Markdown
# Электронная гадалка
|
||
|
||
[](https://circleci.com/gh/anwinged/predictor/tree/master)
|
||
|
||
[Демоверсия][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
|