Fin de la population de la base (fonctionnel)

This commit is contained in:
Amaël Kesteman
2025-11-19 10:39:03 +01:00
parent de531aa85e
commit 3c0ca9ab64

View File

@@ -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": {