From facd6eb36a9c1a846fc184d59dc09d7943fe5cb1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=A0=95=EC=8B=9C=EC=9B=90?= Date: Thu, 7 May 2026 02:02:56 +0900 Subject: [PATCH] =?UTF-8?q?Deep=20CFR=20traversal=20=EC=9E=AC=EA=B7=80=20?= =?UTF-8?q?=ED=95=9C=EB=8F=84=20=EB=B3=B4=EA=B0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../games/classic/deep_cfr/traverser.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/coolrl_lost_cities/games/classic/deep_cfr/traverser.py b/src/coolrl_lost_cities/games/classic/deep_cfr/traverser.py index 07d9a51..82334bf 100644 --- a/src/coolrl_lost_cities/games/classic/deep_cfr/traverser.py +++ b/src/coolrl_lost_cities/games/classic/deep_cfr/traverser.py @@ -1,5 +1,6 @@ from __future__ import annotations +import sys from dataclasses import dataclass, field import numpy as np @@ -162,6 +163,15 @@ class DeepCFRTraverser: if self.opponent_policy == "safe_heuristic" or self.self_play_anchor_probability > 0.0 else None ) + self._ensure_recursion_limit() + + def _ensure_recursion_limit(self) -> None: + target_depth = self.max_depth if self.max_depth is not None else self.max_nodes + if target_depth is None: + target_depth = 10_000 + desired_limit = min(max(int(target_depth) + 1_000, 2_000), 200_000) + if sys.getrecursionlimit() < desired_limit: + sys.setrecursionlimit(desired_limit) def traverse( self, state: GameState, traverser: int, iteration: int