Automatic prediction of player choice
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
lib
source
tests
tools
web
.babelrc
.env
.gitignore
README.md
package-lock.json
package.json
webpack.config.js

README.md

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

Демоверсия

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

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

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

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

Более подробно о гадалке и алгоритме можно прочитать на сайте 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