extra analysis options

This commit is contained in:
Sander Land committed 2020-06-25 01:17:58 +02:00
1 parent 57922ddcb4
commit f57dbcdee9
24 files changed
+145 -24

No files matched your search

+18 -3
View File
@@ -317,16 +317,29 @@ class Game:
f.write(sgf)
return i18n._("sgf written").format(file_name=file_name)
def analyze_extra(self, mode):
def analyze_extra(self, mode, **kwargs):
stones = {s.coords for s in self.stones}
cn = self.current_node
engine = self.engines[cn.next_player]
if mode == "extra":
visits = cn.analysis_visits_requested + engine.config["max_visits"]
if kwargs.get("continuous", False):
visits = max(engine.config["fast_visits"], math.ceil(cn.analysis_visits_requested * 1.1))
else:
visits = cn.analysis_visits_requested + engine.config["fast_visits"]
self.katrain.controls.set_status(i18n._("extra analysis").format(visits=visits))
cn.analyze(engine, visits=visits, priority=-1_000, time_limit=False)
return
if mode == "game":
nodes = self.root.nodes_in_tree
min_visits = min(node.analysis_visits_requested for node in nodes)
visits = min_visits + engine.config["max_visits"]
for node in nodes:
node.analyze(engine, visits=visits, priority=-1_000_000, time_limit=False)
self.katrain.controls.set_status(i18n._("game re-analysis").format(visits=visits))
return
elif mode == "sweep":
board_size_x, board_size_y = self.board_size
if cn.analysis_ready:
@@ -354,7 +367,7 @@ class Game:
visits = engine.config["fast_visits"]
self.katrain.controls.set_status(i18n._("sweep analysis").format(visits=visits))
priority = -1_000_000_000
else: # mode=='equalize':
elif mode == "equalize":
if not cn.analysis_ready:
self.katrain.controls.set_status(i18n._("wait-before-equalize"), self.current_node)
return
@@ -363,6 +376,8 @@ class Game:
visits = max(d["visits"] for d in cn.analysis["moves"].values())
self.katrain.controls.set_status(i18n._("equalizing analysis").format(visits=visits))
priority = -1_000
else:
raise ValueError("Invalid analysis mode")
for move in analyze_moves:
cn.analyze(
engine, priority, visits=visits, refine_move=move, time_limit=False
+3 -2
View File
@@ -69,8 +69,9 @@ class GameNode(SGFNode):
# various analysis functions
def analyze(self, engine, priority=0, visits=None, time_limit=True, refine_move=None, analyze_fast=False):
if visits and not refine_move:
self.analysis_visits_requested = max(visits, engine.config["max_visits"])
if not refine_move:
req_visits = visits or (engine.config["fast_visits"] if analyze_fast else engine.config["max_visits"])
self.analysis_visits_requested = max(req_visits, self.analysis_visits_requested)
engine.request_analysis(
self,
lambda result: self.set_analysis(result, refine_move),