Dark Mode

Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

dfleta/rock-paper-scissors-markov-chain

Repository files navigation

Prediccion de Jugadas en Piedra, Papel o Tijeras usando Cadenas de Markov

Este proyecto implementa un sistema de prediccion de jugadas para el juego Piedra, Papel o Tijeras utilizando cadenas de Markov. El sistema analiza el historial de jugadas del usuario para predecir su siguiente movimiento.

Estructura del Proyecto

El proyecto esta organizado en tres archivos principales:

  • model_rps_computed.py: Implementa el modelo de cadena de Markov
  • probabilities_rps_computed.py: Calcula las probabilidades de transicion
  • file_handler.py: Gestiona el almacenamiento y lectura del historial de jugadas

Implementacion

Modelo de Markov (model_rps_computed.py)

El modelo utiliza la biblioteca pomegranate para implementar una cadena de Markov de orden 1. Las caracteristicas principales son:

  • Representacion de jugadas:

    • Piedra (Rock) = 0
    • Papel (Paper) = 1
    • Tijeras (Scissors) = 2
  • El modelo se inicializa con datos de entrenamiento basicos y se actualiza con el historial de jugadas del usuario.

  • Utiliza tensores de PyTorch para el manejo eficiente de los datos.

Analisis de Probabilidades (probabilities_rps_computed.py)

La clase RPSProbabilityAnalyzer proporciona metodos para analizar las probabilidades de transicion:

  • transition_probability: Calcula la probabilidad de transicion entre dos jugadas
  • max_post_action_probability: Obtiene la maxima probabilidad de transicion desde una jugada
  • most_likely_post_action: Predice la jugada mas probable despues de una jugada dada
  • most_likely_initial_action: Determina la jugada inicial mas probable

Gestion de Datos (file_handler.py)

El UserActionsFileHandler maneja la persistencia de datos:

  • Almacena el historial de jugadas en un archivo de texto
  • Lee el historial para entrenar el modelo
  • Maneja la creacion del directorio y archivo si no existen

Funcionamiento

  1. El sistema se inicializa con datos de entrenamiento basicos
  2. Se cargan las jugadas historicas del usuario
  3. El modelo se entrena con estos datos
  4. Se pueden realizar predicciones sobre:
    • La probabilidad de transicion entre jugadas
    • La jugada mas probable despues de una jugada especifica
    • La jugada inicial mas probable

Ejemplo de Uso

analyzer = RPSProbabilityAnalyzer()

# Obtener probabilidad de transicion
prob = analyzer.transition_probability(PAPER, PAPER)

# Obtener la jugada mas probable despues de Papel
next_action = analyzer.most_likely_post_action(PAPER)

# Obtener la probabilidad maxima despues de una jugada
max_prob = analyzer.max_post_action_probability(PAPER)

Instalacion

Es necesario el uso del paquete Pomegranate:

Pomegranate is a python package which implements fast, efficient, and extremely flexible probabilistic models ranging from probability distributions to Bayesian networks to mixtures of hidden Markov models.

python -m venv venv

source venv/bin/activate

Instalar la version estricta de pomegranate v1.0.4:

pip install -r requirements.txt

o

pip install pomegranate

Uso

cd rps
rps% python3 RPS_spock_lizard.py

Pick a choice (ROCK[0], PAPER[1], SCISSORS[2]): 1
Computer picked SCISSORS.
SCISSORS wins PAPER. You lost!

Another round? (y/n): y

Pick a choice (ROCK[0], PAPER[1], SCISSORS[2]): 0
Computer picked ROCK.
User and computer picked ROCK. Draw game!

Another round? (y/n): y

Pick a choice (ROCK[0], PAPER[1], SCISSORS[2]): 1
Computer picked ROCK.
PAPER wins ROCK. You win!

Another round? (y/n): n

['PAPER', 'PAPER', 'ROCK', 'SCISSORS', 'SCISSORS', 'SCISSORS', 'PAPER']
# historico de partidas guardadas en el fichero user_actions_history.txt
[1, 2, 0, 1, 2, 0]
...

About

Playing rock, paper, scissors using Markov chains to predict the human opponent's next move.

Topics

Resources

Readme

Stars

Watchers

Forks

Releases

No releases published

Packages

Contributors

Languages