diff --git a/Main.ipynb b/Main.ipynb index 349c799..6813c0e 100644 --- a/Main.ipynb +++ b/Main.ipynb @@ -15,7 +15,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 2, "id": "78fdf40a", "metadata": {}, "outputs": [], @@ -42,7 +42,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 16, "id": "338f123d", "metadata": {}, "outputs": [ @@ -150,28 +150,66 @@ "Récupération des positions de la tablebase KRPvKP\n", "Récupération des positions de la tablebase KRvK\n", "Récupération des positions de la tablebase KRvKB\n", - "Total positions récupérées: 0\n", + "Total positions récupérées: 2250\n", "Ajoute de toutes les positions des tablebases dans Redis terminé!\n" ] } ], "source": [ - "def get_250_random_position(tablebases,max_moves = 20):\n", - " '''récupère 250 positions aléatoires de chaque table base'''\n", + "def get_250_random_position(tablebases, config):\n", " positions = []\n", - " attempts = 0\n", - " max_attempts = 1000 #Pour éviter les boucles infinies\n", - " while len(positions) < 250 and attempts < max_attempts:\n", - " board = chess.Board() #LIGNE A CHANGER\n", + " tries = 0\n", + "\n", + " while len(positions) < 250 and tries < 5000:\n", + " board = generate_board_from_config(config)\n", + "\n", " try:\n", " if tablebases.probe_wdl(board) is not None:\n", - " positions.append(board) #Ajout de la position à la liste si elle est dans la tablebase\n", + " positions.append(board)\n", " except KeyError:\n", " pass\n", - " attempts += 1 \n", - " \n", - " \n", - " return positions \n", + "\n", + " tries += 1\n", + " \n", + " return positions\n", + "\n", + "def generate_board_from_config(config):\n", + " \"\"\"\n", + " Génère un board contenant exactement le matériel d'une config Syzygy. Exemples de config :\n", + " - 'KQvK', 'KPvKP'\n", + " Cette fonction est important car il faut générer les positions qui dont les informations sont dans la tablebases.\n", + " \"\"\"\n", + "\n", + " piece_map = {\"K\": chess.KING,\"Q\": chess.QUEEN,\"R\": chess.ROOK,\"B\": chess.BISHOP,\"N\": chess.KNIGHT,\"P\": chess.PAWN,}\n", + "\n", + " white_str, black_str = config.split(\"v\")\n", + "\n", + " board = chess.Board(None) # plateau vide\n", + "\n", + " # Placer les pièces blanches\n", + " for p in white_str:\n", + " piece = piece_map[p]\n", + " sq = random.choice([s for s in chess.SQUARES if board.piece_at(s) is None])\n", + " board.set_piece_at(sq, chess.Piece(piece, chess.WHITE))\n", + "\n", + " # Placer les pièces noires\n", + " for p in black_str:\n", + " piece = piece_map[p]\n", + " sq = random.choice([s for s in chess.SQUARES if board.piece_at(s) is None])\n", + " board.set_piece_at(sq, chess.Piece(piece, chess.BLACK))\n", + "\n", + " # désactive les règles des échecs.\n", + " board.castling_rights = 0\n", + " board.ep_square = None\n", + "\n", + " # Couleur aléatoire\n", + " board.turn = random.choice([chess.WHITE, chess.BLACK])\n", + "\n", + " # Vérifier que la position est légale\n", + " if not board.is_valid():\n", + " return generate_board_from_config(config) # retry\n", + "\n", + " return board\n", "\n", "def add_tabblebase_to_redis():\n", " #Connect to Redis server\n", @@ -188,21 +226,36 @@ " all_positions = []\n", " for config in configs:\n", " print(f\"Récupération des positions de la tablebase {config}\")\n", - " position = get_250_random_position(tablebases,max_moves=20)\n", + " position = get_250_random_position(tablebases,config)\n", " all_positions.extend(position) #Ajout des positions générées à la liste globale\n", " \n", " print(f\"Total positions récupérées: {len(all_positions)}\")\n", " for position in all_positions:\n", - " fen = position.fen()\n", - " wdl = tablebases.probe_wdl(position)\n", - " dtz = tablebases.probe_dtz(position)\n", - " redis_server.hset(fen, mapping={\"wdl\": wdl, \"dtz\": dtz}) \n", + " try:\n", + " fen = position.fen()\n", + " wdl = tablebases.probe_wdl(position)\n", + " dtz = tablebases.probe_dtz(position)\n", + " redis_server.hset(fen, mapping={\"wdl\": wdl, \"dtz\": dtz}) \n", + " except (KeyError,chess.syzygy.MissingTableError):\n", + " continue \n", " \n", " print(\"Ajoute de toutes les positions des tablebases dans Redis terminé!\")\n", "\n", "if __name__ == \"__main__\":\n", " add_tabblebase_to_redis() " ] + }, + { + "cell_type": "markdown", + "id": "1b443c8c", + "metadata": {}, + "source": [ + "## Accès à Redis\n", + "\n", + "Nous avons rajouter 250 positions apparentant à chacune des tablesbases présent dans le dossier. Il y a des configurations ayant 3,4 ainsi que 5 pièces pour voir si cela a une incidence sur le temps d'accès à Redis.\n", + "\n", + "Pour la suite, nous allons donc pouvoir passer sur Redis pour vérifier cette hypothèse et faire d'autres tests sur notre base." + ] } ], "metadata": {