Automatic prediction of player choice
Go to file
2020-03-22 12:40:58 +03:00
.circleci Add junit report 2020-03-22 10:12:05 +03:00
src Restore tests 2020-03-22 12:40:58 +03:00
tests Restore tests 2020-03-22 12:40:58 +03:00
tools Restore tests 2020-03-22 12:40:58 +03:00
.env Add circle ci 2020-03-21 20:05:17 +03:00
.gitignore Add junit report 2020-03-22 10:12:05 +03:00
.mocharc.json Rewrite lib with typescript 2020-03-21 17:59:41 +03:00
Makefile Rewrite lib with typescript 2020-03-21 17:59:41 +03:00
package-lock.json Add junit report 2020-03-22 10:12:05 +03:00
package.json Add junit report 2020-03-22 10:12:05 +03:00
README.md Fix spellcheck 2020-03-22 10:48:29 +03:00
tsconfig.json Add circle ci 2020-03-21 20:05:17 +03:00
webpack.config.js Add circle ci 2020-03-21 20:05:17 +03:00

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

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