Fin de la population de la base (fonctionnel)
This commit is contained in:
91
Main.ipynb
91
Main.ipynb
@@ -15,7 +15,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 8,
|
"execution_count": 2,
|
||||||
"id": "78fdf40a",
|
"id": "78fdf40a",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [],
|
"outputs": [],
|
||||||
@@ -42,7 +42,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 4,
|
"execution_count": 16,
|
||||||
"id": "338f123d",
|
"id": "338f123d",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"outputs": [
|
"outputs": [
|
||||||
@@ -150,28 +150,66 @@
|
|||||||
"Récupération des positions de la tablebase KRPvKP\n",
|
"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 KRvK\n",
|
||||||
"Récupération des positions de la tablebase KRvKB\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"
|
"Ajoute de toutes les positions des tablebases dans Redis terminé!\n"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"source": [
|
"source": [
|
||||||
"def get_250_random_position(tablebases,max_moves = 20):\n",
|
"def get_250_random_position(tablebases, config):\n",
|
||||||
" '''récupère 250 positions aléatoires de chaque table base'''\n",
|
|
||||||
" positions = []\n",
|
" positions = []\n",
|
||||||
" attempts = 0\n",
|
" tries = 0\n",
|
||||||
" max_attempts = 1000 #Pour éviter les boucles infinies\n",
|
"\n",
|
||||||
" while len(positions) < 250 and attempts < max_attempts:\n",
|
" while len(positions) < 250 and tries < 5000:\n",
|
||||||
" board = chess.Board() #LIGNE A CHANGER\n",
|
" board = generate_board_from_config(config)\n",
|
||||||
|
"\n",
|
||||||
" try:\n",
|
" try:\n",
|
||||||
" if tablebases.probe_wdl(board) is not None:\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",
|
" except KeyError:\n",
|
||||||
" pass\n",
|
" pass\n",
|
||||||
" attempts += 1 \n",
|
"\n",
|
||||||
" \n",
|
" tries += 1\n",
|
||||||
" \n",
|
" \n",
|
||||||
" return positions \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",
|
"\n",
|
||||||
"def add_tabblebase_to_redis():\n",
|
"def add_tabblebase_to_redis():\n",
|
||||||
" #Connect to Redis server\n",
|
" #Connect to Redis server\n",
|
||||||
@@ -188,21 +226,36 @@
|
|||||||
" all_positions = []\n",
|
" all_positions = []\n",
|
||||||
" for config in configs:\n",
|
" for config in configs:\n",
|
||||||
" print(f\"Récupération des positions de la tablebase {config}\")\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",
|
" all_positions.extend(position) #Ajout des positions générées à la liste globale\n",
|
||||||
" \n",
|
" \n",
|
||||||
" print(f\"Total positions récupérées: {len(all_positions)}\")\n",
|
" print(f\"Total positions récupérées: {len(all_positions)}\")\n",
|
||||||
" for position in all_positions:\n",
|
" for position in all_positions:\n",
|
||||||
" fen = position.fen()\n",
|
" try:\n",
|
||||||
" wdl = tablebases.probe_wdl(position)\n",
|
" fen = position.fen()\n",
|
||||||
" dtz = tablebases.probe_dtz(position)\n",
|
" wdl = tablebases.probe_wdl(position)\n",
|
||||||
" redis_server.hset(fen, mapping={\"wdl\": wdl, \"dtz\": dtz}) \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",
|
" \n",
|
||||||
" print(\"Ajoute de toutes les positions des tablebases dans Redis terminé!\")\n",
|
" print(\"Ajoute de toutes les positions des tablebases dans Redis terminé!\")\n",
|
||||||
"\n",
|
"\n",
|
||||||
"if __name__ == \"__main__\":\n",
|
"if __name__ == \"__main__\":\n",
|
||||||
" add_tabblebase_to_redis() "
|
" 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": {
|
"metadata": {
|
||||||
|
|||||||
Reference in New Issue
Block a user