From 28b8748e5f9f1d5f527dce2cf793deb2e37173b1 Mon Sep 17 00:00:00 2001 From: Sander Land Date: Fri, 9 Oct 2020 19:19:07 +0200 Subject: [PATCH] simple --- katrain/__main__.py | 2 +- katrain/config.json | 4 +- katrain/core/ai.py | 63 +++++++++--------- katrain/core/constants.py | 11 +-- katrain/core/game_node.py | 5 +- katrain/gui/popups.py | 2 +- .../i18n/locales/cn/LC_MESSAGES/katrain.mo | Bin 12173 -> 12853 bytes .../i18n/locales/cn/LC_MESSAGES/katrain.po | 17 +++++ .../i18n/locales/de/LC_MESSAGES/katrain.mo | Bin 14320 -> 15003 bytes .../i18n/locales/de/LC_MESSAGES/katrain.po | 19 +++++- .../i18n/locales/en/LC_MESSAGES/katrain.mo | Bin 13417 -> 14097 bytes .../i18n/locales/en/LC_MESSAGES/katrain.po | 16 +++++ .../i18n/locales/es/LC_MESSAGES/katrain.mo | Bin 14120 -> 14243 bytes .../i18n/locales/es/LC_MESSAGES/katrain.po | 8 +++ .../i18n/locales/fr/LC_MESSAGES/katrain.mo | Bin 15128 -> 15808 bytes .../i18n/locales/fr/LC_MESSAGES/katrain.po | 17 +++++ .../i18n/locales/jp/LC_MESSAGES/katrain.mo | Bin 15536 -> 16216 bytes .../i18n/locales/jp/LC_MESSAGES/katrain.po | 17 +++++ .../i18n/locales/ko/LC_MESSAGES/katrain.mo | Bin 15272 -> 15773 bytes .../i18n/locales/ko/LC_MESSAGES/katrain.po | 14 ++++ .../i18n/locales/ru/LC_MESSAGES/katrain.mo | Bin 19450 -> 20130 bytes .../i18n/locales/ru/LC_MESSAGES/katrain.po | 17 +++++ katrain/popups.kv | 2 +- 23 files changed, 171 insertions(+), 43 deletions(-) diff --git a/katrain/__main__.py b/katrain/__main__.py index ba081d9..7a5564e 100644 --- a/katrain/__main__.py +++ b/katrain/__main__.py @@ -351,7 +351,7 @@ class KaTrainGui(Screen, KaTrainBase): self.controls.timer.paused = True if not self.ai_settings_popup: self.ai_settings_popup = I18NPopup( - title_key="ai settings", size=[dp(600), dp(650)], content=ConfigAIPopup(self) + title_key="ai settings", size=[dp(750), dp(750)], content=ConfigAIPopup(self) ).__self__ self.ai_settings_popup.content.popup = self.ai_settings_popup self.ai_settings_popup.open() diff --git a/katrain/config.json b/katrain/config.json index 78094cb..5b7d1c9 100644 --- a/katrain/config.json +++ b/katrain/config.json @@ -92,7 +92,9 @@ "max_points_lost": 1.75, "settled_weight": 1.0, "opponent_fac": 0.5, - "min_visits": 3 + "min_visits": 3, + "attach_penalty": 1, + "tenuki_penalty": 0.5 }, "ai:p:weighted": { "weaken_fac": 1.25, diff --git a/katrain/core/ai.py b/katrain/core/ai.py index 3440d15..0183c12 100644 --- a/katrain/core/ai.py +++ b/katrain/core/ai.py @@ -18,7 +18,6 @@ from katrain.core.constants import ( AI_RANK, AI_SCORELOSS, AI_SCORELOSS_ELO, - AI_SIMPLE, AI_SIMPLE_OWNERSHIP, AI_STRATEGIES_PICK, AI_STRATEGIES_POLICY, @@ -205,13 +204,6 @@ def generate_ai_move(game: Game, ai_mode: str, ai_settings: Dict) -> Tuple[Move, game.katrain.log(f"Error getting handicap-based move", OUTPUT_ERROR) ai_mode = AI_DEFAULT - if ai_mode == AI_SIMPLE: - simple_moves = ai_settings["simple_moves"] - simple_analysis = request_ai_analysis(game, cn, {"simpleMovesBias": simple_moves, "wideRootNoise": 0.10}) - if not simple_analysis: - game.katrain.log(f"Error getting simple-biased move", OUTPUT_ERROR) - ai_mode = AI_DEFAULT - while not cn.analysis_ready: time.sleep(0.01) game.engines[cn.next_player].check_alive(exception_if_dead=True) @@ -335,18 +327,6 @@ def generate_ai_move(game: Game, ai_mode: str, ai_settings: Dict) -> Tuple[Move, candidate_ai_moves = cn.candidate_moves if ai_mode == AI_HANDICAP: candidate_ai_moves = handicap_analysis["moveInfos"] - if ai_mode == AI_SIMPLE: - candidate_ai_moves = simple_analysis["moveInfos"] - for data in candidate_ai_moves: - print( - "{order} {move}: visits {visits} utility {util} utilityLcb {lcb}".format( - visits=data["visits"], - order=data["order"], - move=data["move"], - util=data["utility"], - lcb=data["utilityLcb"], - ) - ) top_cand = Move.from_gtp(candidate_ai_moves[0]["move"], player=cn.next_player) if top_cand.is_pass and ai_mode not in [ @@ -377,31 +357,54 @@ def generate_ai_move(game: Game, ai_mode: str, ai_settings: Dict) -> Tuple[Move, aimove = topmove[2] ai_thoughts += f"ScoreLoss strategy found {len(candidate_ai_moves)} candidate moves (best {top_cand.gtp()}) and chose {aimove.gtp()} (weight {topmove[1]:.3f}, point loss {topmove[0]:.1f}) based on score weights." elif ai_mode == AI_SIMPLE_OWNERSHIP: - - def settledness(d, player_fac): - return sum([abs(o) for o in d["ownership"] if player_fac * o > 0]) - + last_player_stones = {s.coords for s in game.stones if s.player == cn.player} next_player_sign = cn.player_sign(cn.next_player) + + def settledness(d, player_sign): + return sum([abs(o) for o in d["ownership"] if player_sign * o > 0]) + + def is_attachment(d): + return any( + (d.coords[0] + dx, d.coords[1] + dy) in last_player_stones + for dx in [-1, 0, 1] + for dy in [-1, 0, 1] + if abs(dx) + abs(dy) == 1 + ) + + def is_tenuki(d): + return not any( + not node + or not node.move + or node.move.is_pass + or max(abs(last_c - cand_c) for last_c, cand_c in zip(node.move.coords, d.coords)) < 5 + for node in [cn, cn.parent] + ) + moves_with_settledness = sorted( [ ( - Move.from_gtp(d["move"], player=cn.next_player), + move, settledness(d, next_player_sign), settledness(d, -next_player_sign), + is_attachment(move), + is_tenuki(move), d, ) for d in candidate_ai_moves if d["pointsLost"] < ai_settings["max_points_lost"] and "ownership" in d and (d["order"] < 5 or d["visits"] >= ai_settings.get("min_visits", 1)) + for move in [Move.from_gtp(d["move"], player=cn.next_player)] ], - key=lambda t: t[3]["pointsLost"] + key=lambda t: t[5]["pointsLost"] + + ai_settings["attach_penalty"] * t[3] + + ai_settings["tenuki_penalty"] * t[4] - ai_settings["settled_weight"] * (t[1] + ai_settings["opponent_fac"] * t[2]), ) if moves_with_settledness: cands = [ - f"{move.gtp()} ({d['pointsLost']:.1f} pt lost, {d['visits']} visits, {settled:.1f} settledness, {oppsettled:.1f} opponent settledness)" - for move, settled, oppsettled, d in moves_with_settledness[:5] + f"{move.gtp()} ({d['pointsLost']:.1f} pt lost, {d['visits']} visits, {settled:.1f} settledness, {oppsettled:.1f} opponent settledness{', attachment' if isattach else ''}{', tenuki' if istenuki else ''})" + for move, settled, oppsettled, isattach, istenuki, d in moves_with_settledness[:5] ] ai_thoughts += f"Simple ownership strategy. Top 5 Candidates {', '.join(cands)} " aimove = moves_with_settledness[0][0] @@ -411,14 +414,12 @@ def generate_ai_move(game: Game, ai_mode: str, ai_settings: Dict) -> Tuple[Move, ) aimove = top_cand else: - if ai_mode not in [AI_DEFAULT, AI_HANDICAP, AI_SIMPLE]: + if ai_mode not in [AI_DEFAULT, AI_HANDICAP]: game.katrain.log(f"Unknown AI mode {ai_mode} or policy missing, using default.", OUTPUT_INFO) ai_thoughts += f"Strategy {ai_mode} not found or unexpected fallback." aimove = top_cand if ai_mode == AI_HANDICAP: ai_thoughts += f"Handicap strategy found {len(candidate_ai_moves)} moves returned from the engine and chose {aimove.gtp()} as top move. PDA based score {cn.format_score(handicap_analysis['rootInfo']['scoreLead'])} and win rate {cn.format_winrate(handicap_analysis['rootInfo']['winrate'])}" - elif ai_mode == AI_SIMPLE: - ai_thoughts += f"Simple moves strategy found {len(candidate_ai_moves)} moves returned from the engine and chose {aimove.gtp()} as top move. " else: ai_thoughts += f"Default strategy found {len(candidate_ai_moves)} moves returned from the engine and chose {aimove.gtp()} as top move" game.katrain.log(f"AI thoughts: {ai_thoughts}", OUTPUT_DEBUG) diff --git a/katrain/core/constants.py b/katrain/core/constants.py index 540fde0..c31a41d 100644 --- a/katrain/core/constants.py +++ b/katrain/core/constants.py @@ -33,12 +33,11 @@ AI_TENUKI = "ai:p:tenuki" AI_INFLUENCE = "ai:p:influence" AI_TERRITORY = "ai:p:territory" AI_RANK = "ai:p:rank" -AI_SIMPLE = "ai:disabled" AI_SIMPLE_OWNERSHIP = "ai:simple" AI_CONFIG_DEFAULT = AI_RANK -AI_STRATEGIES_ENGINE = [AI_DEFAULT, AI_HANDICAP, AI_SIMPLE, AI_SCORELOSS, AI_JIGO] +AI_STRATEGIES_ENGINE = [AI_DEFAULT, AI_HANDICAP, AI_SCORELOSS, AI_JIGO] AI_STRATEGIES_PICK = [AI_PICK, AI_LOCAL, AI_TENUKI, AI_INFLUENCE, AI_TERRITORY, AI_RANK] AI_STRATEGIES_POLICY = [AI_WEIGHTED, AI_POLICY] + AI_STRATEGIES_PICK AI_STRATEGIES = AI_STRATEGIES_ENGINE + AI_STRATEGIES_POLICY @@ -90,11 +89,13 @@ AI_OPTION_VALUES = { "automatic": "bool", "pda": [(x / 10, f"{'W' if x<0 else 'B'}+{abs(x/10):.1f}") for x in range(-30, 31)], "max_points_lost": [x / 10 for x in range(51)], - "settled_weight": [x / 4 for x in range(1, 17)], + "settled_weight": [x / 4 for x in range(0, 17)], "opponent_fac": [x / 10 for x in range(-20, 11)], - "min_visits": range(1,10) + "min_visits": range(1, 10), + "attach_penalty": [x / 10 for x in range(-10, 51)], + "tenuki_penalty": [x / 10 for x in range(-10, 51)], } -AI_KEY_PROPERTIES = {"kyu_rank", "strength", "weaken_fac", "pick_frac", "pick_n", "automatic"} +AI_KEY_PROPERTIES = {"kyu_rank", "strength", "weaken_fac", "pick_frac", "pick_n", "automatic","max_points_lost","min_visits"} CALIBRATED_RANK_ELO = [ diff --git a/katrain/core/game_node.py b/katrain/core/game_node.py index 0a73a3b..3e5a9c0 100644 --- a/katrain/core/game_node.py +++ b/katrain/core/game_node.py @@ -211,11 +211,12 @@ class GameNode(SGFNode): top_pv = self.analysis_ready and self.candidate_moves[0].get("pv") if top_pv: text += i18n._("Info:undo predicted PV").format(pv=f"{self.next_player}{' '.join(top_pv)}") + "\n" - if self.ai_thoughts and (sgf or details): - text += "\n" + i18n._("Info:AI thoughts").format(thoughts=self.ai_thoughts) else: text = i18n._("No analysis available") if sgf else i18n._("Analyzing move...") + if self.ai_thoughts and (sgf or details): + text += "\n" + i18n._("Info:AI thoughts").format(thoughts=self.ai_thoughts) + if "C" in self.properties: text += "\n[u]SGF Comments:[/u]\n" + "\n".join(self.properties["C"]) diff --git a/katrain/gui/popups.py b/katrain/gui/popups.py index f8808c0..0663a35 100644 --- a/katrain/gui/popups.py +++ b/katrain/gui/popups.py @@ -342,7 +342,7 @@ class ConfigAIPopup(QuickConfigGui): self.options_grid.clear_widgets() self.help_label.text = i18n._(strategy.replace("ai:", "aihelp:")) for k, v in sorted(mode_settings.items(), key=lambda kv: (kv[0] not in AI_KEY_PROPERTIES, kv[0])): - self.options_grid.add_widget(DescriptionLabel(text=k, size_hint_x=0.25)) + self.options_grid.add_widget(DescriptionLabel(text=k, size_hint_x=0.275)) if k in AI_OPTION_VALUES: values = AI_OPTION_VALUES[k] if values == "bool": diff --git a/katrain/i18n/locales/cn/LC_MESSAGES/katrain.mo b/katrain/i18n/locales/cn/LC_MESSAGES/katrain.mo index 36b69165066ea48d79e687bf941727e3a892e268..feb3a9ae40de8a5d78b182b498a2eb2f77560d88 100644 GIT binary patch delta 3840 zcmZ|Q4{Vjy8OQMxz|ofeL1iEe>lvVJu`R{9>AGo=WT+#k86caIb#HIqwlCb?x7_zF zrHOjM`JW+7LCk0jB03hvHm!3a425K?M(t)YGcnV+j6br4#l^^`%f`OHdmo3}GV=C* z&N=Tn&pGEg=Uz6n|FpC4_BrFWIQ|{vZ#sXoKBby-jg@DdLa~YZr|~OzHr|ZqVJ}X= zyR7~Io?FMF&PJt zSnhrthucsK+>Yx13{JzBa1tItCUhU7`jt_sW`0*oK|5-~a%@8lxE9CaH&Hw6u=hFC z!q!;(w^2LVh&*m9AA0`;D&CXkK2)4vAdh>Ek1FPO?@&<3KcjZ^H>;mTS}3|2REBE# zP=IFC4qH+07a^N+%gq(Y}V(l5!gsV{F@38lqt^G07xMz^Zy*N?lPvI~%1v-MNzmLkqKT$iL zz^F2ug6ii{6U;%Sz75syYSi6Wj9T~#tFJ{uxvl0dd%yQ=@~_nY$~qo4-$P9>p6yU{ zQ&52$P#KtqJnlNH2Ud?!<8DWddjPeOou~yoiHdUwKZA!06qMQzkjIr%(GI7Z7o!HY zqIS3tm7!&*jC9!hm8ihCppNiC3EJ%aji`loA&=|lLz%n}HGVT{Lp!bgXXZiFMqWlTQ*ghfpp_l54j-UWe7e-Z zRdJ9CG!50S$-EM^!0S={mtZj?$m3S>p#`l&jazT^A=HsPffMxoAEv-u?s@Y!s2!g` zo#A^}{KaDX3Rr>K!6Z~5Z|zN}i7rF^VqSw<__wS*L5;fuwct%ysqgxwg3n5B79*g`PYh$ z)1V!Xr)0EMWy;_ya5lOQdM(4gRvI%ejBR&aqP#ZQ4`K49Xi{&sH18_W#+5q zGPBcMRj|Ts=6dsCRKUlr{zG#w-cS24aVst*P1@N>+=NZuxu4(xd>LcTX+3^vhI4P= z2&&)qnS2AVFn1Qar|<@L;ED@zjB~G|cGyCGIX>5hI-;+mG8LF9YR7k@cDlvfVefy8 z%ETem@5`&!ejFKBa37TluB@TdVKORE3o7sxSdI%(8Ci;YzufAP)%(m_&HK!)sJpS# z>d#?0^%0z`@BeEQw4--%HvZk}7g6EI(R~p$;UZMOo6KIEM|~|SLkE#0x;L$U8ucwX z@8Z(9R^-&&B2@pZ+L_fLny3RS@op@~%~pTJ z+>P4#v#5zjk&Ew6;zTTOBLC_zje=}JrFa2W;v&>aZ^9}}Q192F-rr+xK`m^D`4n<} z+#%FN?_wE#h#EJhxfG|Snf$9^G7WMjY9}pLZ#Az*EpQ2H0V_}wu0oINP&?aU?FUd9 z9ku#tRK{xNl;*h z;oi6QiL8SA?aoIX!2;B{(99PoXyT8(%jz4<&8WMu&FUlOsQEf7;P1>6)_%(T2iEX@ z96zILa1yHj26O)RC}^kOw}$6X3mU;{9JThhP?`86s=vFWl!FR97x8zVnOI!E89Zwzh11;f8E5nE2j!b(r|HCrEuZ3_5)p z`(l`=YcR@n^CI*eagguyNgAYKv%kLUKZe9f=o#7@C#kRN4c4^x#ZfLz+Oss&`BKFP zxlTV2r9JA&B*m^#A=kb-N}@EWYxI5juq({}PvEX_fYwrwMxTUfnhkwCkn?Gn&qryT zA7n^A^!3HyY%tEJK`s+o*Ut8VFzW6}8_taF>x*+?F0Et7h5w52e~0_oKDKebE65Nn zSRF@XD$Mn-jC_4@2_!J*Kkt*iAQL8y{u9AU-P-%YT#!u%HJWS?p+JZrO@mBNFDpuX z{U^qpY5(`QX1}bsnZ#$9sU!5cuscYj)uB$TH&_|^DD|0`3lL>EsN%tO2fZ}sl9Yoj z&N~owhCUz1sn0P#M^_)^e0P`&^Fg+lG>$xJ_;`l?BrM*CuKqmNfP>(|_#l&s^PR=3 z5f>*(bfa{#x+)pngSd;!k`Hs;X-~6vS6zEz?Y+lu-+Sz#y+`+NbjS8Qc64ahu}wq6 J+b=v>{x3&eB!2(^ delta 3135 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 delta 3135 zcmYM#dra0<9LMpmh;n^+0Lcp?k3lFx3897PC`AipUYf3O<}6opWlX571YJLzt%BwS z%}Y}^IlpuHp6@x&kGeHi zpYbjvhVL}~b?`rh|4GADGK-D<-%&jJDBpn@n1C~IG%mmxT;<9yU?SzWFo5s6ay!OT z?#2kbjB#e3_4DAT;-+g5U}yAyX84&B9|@Xrgke( z3ws{bZWC$?>QDi`kDgZA%mbHw#Z9T{!4cSp>UbM9P&BwQT<9#{g$B? zQickk5;cA;j>QI4X4{aue+h}f z{=i`vNi=F7hdOj)QCpXfYX2}Q&{FiYcdK24DpbcBRElYr$#B{QmVvCz}clJQs7Y0;l79sK|eE_5FA^ z8DsDZ^kEk&m8Vb{x`-TbyM~NqJ~}DT z>BxDsM_qX>D!{F%Of)(_Lyz-ehj>t=mrz@A4V9w5P$?gD@BKNU-+KVnZyG9)6{tYV zF%H+GCaOgRyaP2}y{rEaV<|W1kbgBeNQELijL~=jwUVni9>a4(E6PA0G`8GBHHoJMVNZ!Y=Q#5dfF1olCDG#b@m7HVb1u6_w>&o`g~ z|G?EZqYmjQRDc7henav?0r^lF8HfBDZGtn?U6I}1@J5?Bju=pt6cq? zr~$X2zWuxLA~vH^yJbqK{a)1jMrQ|Vo|Bk}X=iy*%6>&Y*EWb6VB}P@hcJC=YgX*} ZupJ5hw$^k0et+wU!0f2j%IrNc{{gm-CCvZ; diff --git a/katrain/i18n/locales/en/LC_MESSAGES/katrain.po b/katrain/i18n/locales/en/LC_MESSAGES/katrain.po index 92f8f8f..ba01c0c 100644 --- a/katrain/i18n/locales/en/LC_MESSAGES/katrain.po +++ b/katrain/i18n/locales/en/LC_MESSAGES/katrain.po @@ -571,6 +571,22 @@ msgstr "" "perspective. When `automatic` is set, KaTrain will find a suitable value " "automatically." +msgid "ai:simple" +msgstr "Simple Style" + +#. TODO - TODO +msgid "aihelp:simple" +msgstr "" +"Plays moves that lead to simplifying the board state. Of moves that lose at " +"most 'max_points_lost' points and with at least 'min_visits', prefer moves " +"that lose fewer points, settle own territory more (with importance " +"settled_weight), settle opponent's territory more (importance settled_weight" +" * opponent fac), avoid tenuki (more than 5 spaces, importance " +"tenuki_penalty), and avoid attachments (importance attachment_penalty). " +"Weights can be negative to make it complicate the game instead, andwide root" +" noise (in general settings) can be used to further play according to the " +"style at the cost of strength. " + msgid "ai:jigo" msgstr "KataJigo" diff --git a/katrain/i18n/locales/es/LC_MESSAGES/katrain.mo b/katrain/i18n/locales/es/LC_MESSAGES/katrain.mo index eebeda804492f93462deb5e59a28bdc6f0885e42..06b9cc1145b545919f95e1dc34c7d693ac67d063 100644 GIT binary patch delta 3253 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 T=d$)>SFX>SpH?|Ee^&Z`$r&Us diff --git a/katrain/i18n/locales/es/LC_MESSAGES/katrain.po b/katrain/i18n/locales/es/LC_MESSAGES/katrain.po index d7f32a2..d062ad4 100644 --- a/katrain/i18n/locales/es/LC_MESSAGES/katrain.po +++ b/katrain/i18n/locales/es/LC_MESSAGES/katrain.po @@ -709,3 +709,11 @@ msgstr "Think for at least {num} seconds before playing." #. TODO - in minutes msgid "main time" msgstr "Main time (min.)" + +#. TODO +msgid "aihelp:simple" +msgstr "Plays moves that lead to simplifying the board state." + +#. TODO +msgid "ai:simple" +msgstr "Simple Style" diff --git a/katrain/i18n/locales/fr/LC_MESSAGES/katrain.mo b/katrain/i18n/locales/fr/LC_MESSAGES/katrain.mo index 09a9c963bd8993939d3cbf4145d862906b7e0377..28c2e2dc795fb80c4dbb7fb24f226ad38364d479 100644 GIT binary patch delta 3815 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 cMAVNxwgh6^S}w%?8ffVl8jNn4HD+v;Y7A diff --git a/katrain/i18n/locales/fr/LC_MESSAGES/katrain.po b/katrain/i18n/locales/fr/LC_MESSAGES/katrain.po index 28f1c6c..5f682fa 100644 --- a/katrain/i18n/locales/fr/LC_MESSAGES/katrain.po +++ b/katrain/i18n/locales/fr/LC_MESSAGES/katrain.po @@ -733,3 +733,20 @@ msgstr "Think for at least {num} seconds before playing." #. TODO - in minutes msgid "main time" msgstr "Main time (min.)" + +#. TODO - TODO +msgid "aihelp:simple" +msgstr "" +"Plays moves that lead to simplifying the board state. Of moves that lose at " +"most 'max_points_lost' points and with at least 'min_visits', prefer moves " +"that lose fewer points, settle own territory more (with importance " +"settled_weight), settle opponent's territory more (importance settled_weight" +" * opponent fac), avoid tenuki (more than 5 spaces, importance " +"tenuki_penalty), and avoid attachments (importance attachment_penalty). " +"Weights can be negative to make it complicate the game instead, andwide root" +" noise (in general settings) can be used to further play according to the " +"style at the cost of strength. " + +#. TODO +msgid "ai:simple" +msgstr "Simple Style" diff --git a/katrain/i18n/locales/jp/LC_MESSAGES/katrain.mo b/katrain/i18n/locales/jp/LC_MESSAGES/katrain.mo index 206ae2dfa803cb8c273e6cf870f3dd4805ce0e4c..2c3236d7ff4cd35bd484397429f00dd9d8aeeaea 100644 GIT binary patch delta 3815 zcmZ|Q4Qy5A9mnxUK#-OeTa{M_52IUKXp5i~ElLSdk@(6=z@b?^y*;-*<=%7ZJ%^U+ zRC>xt%2!k!Y5aMP?#_G^bx6v*073YXL2N5zhreQjxq9_{NzQ21O#ch!s&gVSO z`9E*}=eegp8~Dqb;=$?>_Zj{T@&9c8*Njxjn1(SY9nWJU<+JcotitPY0_L$C?{MXN zu$uBCI2C{6$_Mdu%J1SR99CgWr7=ZQ#=}@DCZYoBoh?{K`3h8r%aF?i+{R%)(wF%j zj=(Lb3Eq#2--VO#Sv(UDBLkY_sJPQ8R5HGq!h=@Sh@-I;)nG9W$8Vul*x}xXsEMt1 z^=nZp+JIbU6F0rzj_Plx^9fWxe?Ts?msuRO(w%af?uAqYX9j9#{Sj(v{ideAvDJWfl2X>R)t$`<(Bf1{lS1cr@ct z9oM5WumHKt)voNha)fGkJF4A1sD*4pO<*UgpWoqR+*jm5sr>-C%xDT);n~iasD>@5 z6<&eL&~j8pI^6q}sE)sl+QNI0%RJ0YKhq~s{k-CQ9o4@0p?grPiByb6tzbIpXLT;> zlW+lQfL8Z@8ET?gHbUMzvdqn(+5=jDG(=)&o9*O6lXM zl{}5=@K30L525z{O;r3bS3jK5)NutWej+kwGXqb>1*rJTP=~G!HBN*@HCV%gX1W2j zcMrONpQ9QMp)&MG%;Vp&6_;?b0f1pi!X%nxyLeHyoG27ehT7poiC2Re9-{O-ZWn)s*;BW1JFmA^4NJv2v= zZ8u}*qVDWA>4vGV~?WRy@ZNCg46W-KhA?vJNdkH1$C%Bz67V? z<)|6=U^Q-VUZU30FVj!Zb5gr~zv5Yj`EaOP?`D(Y5{}TfV+|1GXFviRKv%FU#OXj zIzuZ^@kQtQ&mJ~YQA#=L@a=H!M9z)*g?s;|^F35Y$DJcDPA7f_s-Nl38K{NK#yR}n z7ojG0GwISo7k-xqb@U@t;7?I2+l~6dJ%&AoriIjlAP_D^UXEE{uR*r=8`$oJ;_ zdkDU1(=}zaMmUC-o=W_Vz}hA11Y|xcEPPd}(t#!$z*1&3YMn^ZKHI zO!?uem4U4*O@Rc4w%NwLUdE3b>=!yq!`gfO(90zQYE3rip-2~Al6aZ!JTr=I-51)N ztpB`SlU-g~Ol&iZ)ZyFE@A8tM&)1ISy_LQV5}S!Q06~V0Ds5bsm!~?66E?OqZhz3} z+d>p2HjJ_XTUQr^w#yIwf|n~LjV+JsKO13H?3d0%c2$96z(#Ojte43|h0fB^h)RRR dI#JqL9hHpEL6qgN6#TF&>29)v^Jf(*{sT13AdUb4 delta 3135 zcmYM#drVhl9LMpmC?d*_i;98}AZiMf7rdZilBO-mXl6}QW^sG5)%HmC&dW$RP2W-Sd3}-75@z(JZjvC?wHv(*xooVPG%pOnU)pz!Au0leqQ3X-F5Vzz$f6THp#){ATQhb=V!h zLMF7IP;o8MdSG^!f_4<)X*_15I^by$IE>6xDAAY9k9! z3s{O8e;sCEEh@7O$Ym!3?n=caw-wbfhA8c@8!AKDsEp*Jo)1M0JOOotGm*;{a?@wI z1{Js6-Hqyh*!>36sRt)1Xa~QeKBHS0{Rv=HO%R8Ao`qWIK;*IqxG9xSpq`hbcC^6T z^1|JQJJYhEo@i#Jg^1|O6k`ga2hqxMO0v$+mQp-0(+w3GclSGmV6o&_YMxl50T5x zaZ`LNp1|3>VT*APzr)421GDfv@|xM5UVQ)BX$s4{7c+1qj>r4461Czw9FGSu2k)Q; z$l@=Sc2bBs!ihK=C%e0Ga687hhfkCCam=nvRipat%Od|{C>)`o7-O=-)Q&}UC`J7Z z*ok^K>hLHYL`}FVCp@AmcN1zuHK+;dP!oQR%5)Pda~Dx@*8&O(xakc^y~DtC{F3%O zyo!I|N<5d#x89D=t&iE0xW6yI>lh(@6L3R+vu${0Kp3|u-|SoJCkp6G|1G5TI4&L- zZZs$v6uu;nBFAjcBgbcfyA^c=dy%YLBWl6ty?z5D)RPB?naD!cWO=CeGPfK_n$5!` zT!&;Zux(+%YTb`e6MX9RBd89?-DYpUidtwZa(b39B=?H4M#0#E^2{qB43&v zK#hAE_0ruyE$l7^dh26Zo+cWHdQj#*!m?>OJ5%>WAkPDpl=9g)8oY_fbznHe(Y}6D>o&NL!CO z^L?ld{penDuVXajsFyExbZC4)fn%@;D&Qfv6gAKkcNS{p^Zj|Hy9%|FDlFtXuR$%W ziE~x_Wz;xrsJIw@?X!FSrqvXx9=}^ diff --git a/katrain/i18n/locales/jp/LC_MESSAGES/katrain.po b/katrain/i18n/locales/jp/LC_MESSAGES/katrain.po index b4b9b4f..fa24839 100644 --- a/katrain/i18n/locales/jp/LC_MESSAGES/katrain.po +++ b/katrain/i18n/locales/jp/LC_MESSAGES/katrain.po @@ -691,3 +691,20 @@ msgstr "Think for at least {num} seconds before playing." #. TODO - in minutes msgid "main time" msgstr "Main time (min.)" + +#. TODO - TODO +msgid "aihelp:simple" +msgstr "" +"Plays moves that lead to simplifying the board state. Of moves that lose at " +"most 'max_points_lost' points and with at least 'min_visits', prefer moves " +"that lose fewer points, settle own territory more (with importance " +"settled_weight), settle opponent's territory more (importance settled_weight" +" * opponent fac), avoid tenuki (more than 5 spaces, importance " +"tenuki_penalty), and avoid attachments (importance attachment_penalty). " +"Weights can be negative to make it complicate the game instead, andwide root" +" noise (in general settings) can be used to further play according to the " +"style at the cost of strength. " + +#. TODO +msgid "ai:simple" +msgstr "Simple Style" diff --git a/katrain/i18n/locales/ko/LC_MESSAGES/katrain.mo b/katrain/i18n/locales/ko/LC_MESSAGES/katrain.mo index 6739fb1f224524993a78e115b2de34e289ebfcac..379b5d6912eb71450021aafe2e3d92d3eb29b72a 100644 GIT binary patch delta 3635 zcmZ|R3y_s#9LMpeo3xiMtJ-#@o^ok-Yd56Zky=bhC`x6-dUyBT-BY{gtnT?xBlf~N%)|w*z65iqufx8$)z!bi zuGD|Pj@UNan9jx|O$LQ7G~}T=6gnfAL47=G!YRmQqTG67BQlqH2-{;bYJ*Rr`ftK~ z+>YJx5VD{-f$DcEmCmeh`cP0r#n=hQpazV?c6c)?!gBXKhT7OH*FFyw(IVtBE4bxM_kCRD==K^Q)1d%yj1r zT-|f^ zIBMKn)VL+6KvttRumLsCTX;I|OHxp3k0Y1qL`4zyb`C@hjG!VMkIK+gR7T3(^O>lL zZ$};BQsgpgxal)}9W~Eh=QpVF$zNPSqw;9zgo@xy)MqsW^^-6HwZItnd>F4NgGy zpNy%DAeWiRO&hukHEyA+KZZJzXE9UXe+vcHGH*EdpdvnuI>V!w`o$uAO_+g-pgU?J z>)MM^3k^s8VqSsT_${tIK#iM^+VEn`()a&_3b+oH(pONCyoZ|b1JuF?QD=Vy)&FPL z-j3BYaW<-d9ImEQPiHU-Q%8e*aHa^AvC&EQ z;3`zAZ$eEx0~NvDs54*Wp0C6W)Sts&@P;!vPrUXl7R6_V;@HNtVg7)kJ zW3H#(u`u25CeCRr_2k5X#(YbMM+Oeq;{wCn{qF=cbP+ zg1io98d|J(^@owYn6;?>yHJrIz<&4>5?IpoJTDz-Kh&8HL`7VNO3@7GEL4gYxcY;x z-i%#oU*&9Z?eDnyPSiW`IcmP+$ZKTUov*JX$^WHL(8NPg5spHgv5(qu6!mi5ftp|$ zT3m%n{oAMsbJ@Kj9)hY*L%mBO>g#zC^-{l$eefV=vOa%Ld6OXv^;tyla%@5^*ovjN z8?`{!p`0BKMLnO5dUx(~^+%kmQIT&%PS@g>0o z25!e({0#XL%`sG@IqXVbNnccC5xfwqF%zFg-Y>HryWs(xh{sU#Udp*>Ba=sxe@$3U zgLV{0ZKMHna1M6IrSAC}*ZWm)IYN5F}4woWdtl5tWP`j0xNebFw zPt=YIP$?efjNo+Yqfr}dcCK=+MNRY)YWx;g-|p&rFrW4>aS8tJo-ZDi?te)$1!Z6@ z>Wns_GOzqbJ1XKH7a5blqKjHGvi7&_7zv_v^|k)eL!IButnq8>UA^V0 zF0DCPlTy#@q_C;hZ}IvEnaPQ@UQ=M};thUa!x}HNwZ2zr!?;aN6Rm2B#;SSX+w!=V zsI)=og?@>hQ1y=?@xZqXt&0bt9Z=`ZDyxr2V_{HMOTz%0u2?TtX&a+qje4?3s%tbE zD{F`b(J&Y=$kr$PDnId`iL3lZTGNvZvVk9lwZ4rv#%$;(645Z8Xktjhw*{%m2{4`r zy;z0sx>lAo`qAo|u<+#A`ucdxkA(w>IQg$R{&%=7vT--gR(Tc7rg*%Dc$9k>dKEQw zOc~gMzs+#6y{z7kd9`6vVTqlZ+D%|9yqGQb&$ltZ+6$u%zH(mY&Gcm}^>S&GyAxBeUTRtk@oBbCCI^anF delta 3139 zcmYM#eN0zX9LMo5h=B6^kf5kM7$sm@kdUz$w9qhhmNi_tC~^MbBVo=dn^&i^%pOF; z+(eAFFiULg$ClxMVofa@4g;4?BPk~fYvse7nc4fpJzMU2U+0{A&bjCNJ?H+|U-QX2 z@2B{XI^$m_|Htz`F;q3P$jJXqq8LT}KFq{8EW~7-ixIfg)vGa{`VLIR23POESn53( zh65OF=Gku)VraPSI*f|)JC4KAwCA8E%ttOO<2DA%ks-DUL$C(5z)h(BdvF{c!bJQA zd7+&{^&1?nduIPqP()EY9fhf=0a-W#i%=0h>7LI+Eo`A{uS7+(8o6v8H$C5mny=Qm z4>ixn$Ym|uqIkc3ML`|AQ4#%!Ty~k8GIIkpFocRCi$y)3gsk0ioyEvy^SG(s%c#I! zL-pH&+Jait0zX1ekv3D{vMz2)%^6I5;8&UHdj%EMVaEt~;ejF9)4;YU9uHzu;1-DSC4r5mJi$R@*6x70VUHxgK zt5rCw-1E(-On-nH*BD3sRX9q6UT_+@tlxF`3l(WNVJgxw+*HqU^#atm*{E?Zq5@fg zTEKeL{BL0jHli}yj$GE`aaSsSbzVme45pVNOh9EQ6_t@})bl*l#808N@FnE3DsK8L zx1##(cOF5F?{uETvDCdD3W{I|^%>p4;hz9z)eFK<&nKc5Iu*I>32sW|bExNwP!X+g z?K)U`z8w|FZd7ItpcZ!6f9_d31*P(GaqXaLpmrZbcc)&i4I{m0{QMv%+$xaoyu zsBsHieF^Htt56H6L8i1fhGqZjDJbF=)E*v19kTCG6P`g0ynvc$(6!%0z33k57c!P~ zY2lMm?S-gub5ILjh#J4txdx;4{cob6NZvyY+>3hgA=KUnPy;($`zh4KeW?DIkTuvf z9EstqM*X8vhb{%Rbp@#YGf@jIM^AgV%yrm+8n_*mqCL1AKf~FW#L1e8i%}6B!fgBk zHSqxM!0Y%adYrH|n9c8S5jNlhcoFs9kQBcEbP9OhB_?oyLzMZb5!K*$hO*9 zRKz15CCxY%wUGJF)u>Fo>#RdhpHn>ry{HeBnqORpE2zx;fqcp~a=O2_smOV<5{$)_ zn1CBm^Xx*s=tI=mIfy#kov6M47B#MSI{8kvTgX`8FxKs~>Mk7F$9 zD#2$^FM0>dumSl}Z4eb<1e3@ys0F5@GLwhOaEY_jqp*mEGSmv2oXyTw)I`Tn6C8K- zURUo&W$Jg_h2gAH{r92zH=#1nirS*DQ5opNahTChK^_0bBn&6diZ~6cae84OJMv=i c?zoutz=fEO_`t!8>WJORX;Fc*(@sSF2MZrEcmMzZ diff --git a/katrain/i18n/locales/ko/LC_MESSAGES/katrain.po b/katrain/i18n/locales/ko/LC_MESSAGES/katrain.po index 0e89d0b..b043a7b 100644 --- a/katrain/i18n/locales/ko/LC_MESSAGES/katrain.po +++ b/katrain/i18n/locales/ko/LC_MESSAGES/katrain.po @@ -666,3 +666,17 @@ msgstr "Think for at least {num} seconds before playing." #. TODO - in minutes msgid "main time" msgstr "Main time (min.)" + +#. TODO +msgid "aihelp:simple" +msgstr "" +"Plays moves that lead to simplifying the board state. Of moves that lose at " +"most 'max_points_lost' points and with at least 'min_visits', prefer moves " +"that lose fewer points, settle own territory more (with importance " +"settled_weight), settle opponent's territory more (importance settled_weight" +" * opponent fac), and avoid attachments (importance attachment_penalty). " +"Weights can be negative to make it complicate the game instead. " + +#. TODO +msgid "ai:simple" +msgstr "Simple Style" diff --git a/katrain/i18n/locales/ru/LC_MESSAGES/katrain.mo b/katrain/i18n/locales/ru/LC_MESSAGES/katrain.mo index b62d3c01fb8c9ae71c2066f6c5759ebba408c9b0..0ce6ed0cd270a15a09f7b547b860184ff8ab6a58 100644 GIT binary patch delta 3817 zcmZ|Qe{5Cd9mnyf73mLtGX(iD`k=+$vbG}H;XtHTD=G?R{2I}$oZg<>9(wON<(@-J zGqbyaI&@JK(EfoxHg$yAXu_K4jAjbUvN>f+;xfBTHb!-WC5mp~W|q14=iX<-ZCP`A zUeEKK=jZo%&bglqmOb%kS>f2!F%KF34)H&S|Jt$28PhQSoHIx^lD`1ka0=dr7h(>_ z;oUC38>f;V!W#UM%OAtZ+*CUq+xJ}1? zq%U(nj=_DX34RAv|2dq6ui`WuMFuo~L)EJ!Gm-JlToPJQBUa&ZRD&DwJp3wZg&ppB zh?>|oSH1(aqFu;k2D$0^epG)4oiC#L`3Z8FqueGizWE&qReT?{qQAQQ`Gkd}nS_ea zTyE;13AMr{sOPsJi!!%6HzSwX#!dBhq87LhRqq*8q+i5>3SK9n8UGr!@^_KTe8Nqk zs;2hm(4y*Jf$FdoHG#FRJdGM~3#$E{?)hF<{v@j1bI4_WHd*^mVuYMJ8b#&*jEclR zP%9ost4f@Ks%KFHT#5?)a#Xz)sI##KHSx_Z{|%%oGw3|vp1&}K_$%~pxQZjr)2IO| zSPn@u1J!XoDgrIYWmdVo=kgJ%-F8&F-Kd2;g_^)YR6mDtHjWfXD70sg%T$rk3gq0hTTu0{M;*E~sBt1JsKM7s zXr{YRd-sH^@B>uCL#PP-0=w`8uEv#|tQOpdI%L1$b_Jfn;siKQIr1&|cYGET9OAot zBih--Uo+awO)I_|uftuq4BtWzr}E2mJ0_?tIf@(c1g^wopXXbE_uyQ70TrpYaW|g8 z`>>CP*)q;ejWKtT-(rdXB_uw!#>~UH+*+{(PvH){2t#h0@IlmX!bjMIXR*A@nE4l% z&P=Md6tPQD3%Uvw>NaE!X00=i`f+-oK!RwRAykNe>?*vCM9Z9Y&nM3>b)3Rs%A4_8 z20n><$v4(9N%DuWA1|wCTk!h}_$p#s15v>H8jZ>07Q!{Joc$kN$g4uZ*vnZN=Gnjw z9`rSrCN{Fzm_-cmA=1{=UTMr1@yp1f%{@po%`>PyJ%TBm@g+W5*n;e$`5J0LgQ%@K zh|INMj+4+~siL;_vIZ5A9^~6(cA#FzLDXS<40ULST>d3g{a2A-nB%C!T(PuNJ_}is zS%jKsmn;7kF4X(~I0^05n|KF~xcvI7c!kKf<7~VabyoHxi!?{@aU8p>6p{V7f&4oz z-+VPuBA-P?@MXLKKSK4pbUEjZ@lA%rcDxJqx>U9p6JsALGN1utynAmT>U1Rlog@wZsGjKn3^a-i@ls7Tz83h^Me;Q`d%z3-k^ zG8+vz1r?cEti={oKR(j8*@x=q7;1|?z#6QeQ;k#C=HCB>6lia6M(z1VoQFBo0J~g% z2&a)hf_nXaj~1t}939F-Mv~ zEJ%LRX zr$7Kh+ic@rFYU(-_A{N8s5B=OSSIc5~w)Mwh9EB|-9CcB}y znAoNnsl&IS-{mDipRXOuc|E=j5}S@V0706KDsEhtm!mk06E?OuZhz3}+k6xyHjFX> zTbBw#+vSIT-pdw)#+JwR{~BRy>=(~NW^0~fz(#Ojtd~wl`Of0eh>C;6I#JqL9hJ1s VL6qUJ29*a3!8sF{hzN`Fhu|W delta 3137 zcmYM#drX&A9LMo52nq&*7eIkT&|e~63JeGoL^K2?Teb!o6G=xi4HaFiygb@noGYWe zOwCKyW{Qjb{>aq;ExR`zIyW^9r83e?%ZybMa;e zy$$Su0$r z2#+Bzw6mywojrBWteb)&isWfHCZPt5!d{q>iKYF?UvyzKrWlfP5tJg z0$Yaa_Z(^qHlY@{7d=JVNP){f;-=J`#DUm}8h9HuQC~*u#fhl)(Wn>YAYH7~J+E-> zi%{d%AeX($O)uVqn&)6N`>%!%X;9>!q9Q$oVc70EcA{R;g-UfFW>vo^)LBSCEj+{3 zi;=EY>0IibuR~>e3u@e+{^VbU!!+mxCy>k9U58&$k%kebB8}yy`Y2b=Mva?}8aD?O z$YRt2o<_}Ij|sR3mDy(GvNn&qQt`d>CTd_Xy%gaRuZKMQ|1M8U2ktKLO0D7xY0rABtM&IOMWCZc61W)bk2d zM2lU!4wjy;M+MS=%FHg*!VU(Wd)7=rDgDfKIE|X91J&`Cvo{;81;(NJCt^=Vkjut% z(+f*b;~sYP1*jL-pcb+cnbKbBk^SF6K@m5h_V6(3kbQ}o@FZ&BdDKLmuKgD3MgO9H zA)`r`7M_Y~pMV-yidt|vYJ9bGIrh`{zm|d`c?C6aE9%AjQG4%44Qz4kU!f*Gjp~01 zS%dwCp%}($)W09<&?TU@E*sUq2({2M^t5+RxDL;t2Che?Xfr;J2k=20$jK_e`KUv- zkK4W2j6Dm$C#i>VvToy3xB{2+J6wXDs0C$kQ@}G5`2MF-D5D_{cVHEs!wQ_pUnFhG zHk^$Ia0Z6nX?8b0ghO#1DpR}hH9UYDF`tKvgUr6h7pUh9GrJ30F&QrpBmadI!l+%r z8JL1u+~(nI)Zc&)a2&Q^FcV%wotYcM0~zZ=MHDh3km^We4VLK4Mg1`hS%6I;Fkt3)BZ;9Q9-*36_I8 zy_K%L7751cQ44K#?d?d=)`i-d)Et7tbX5HirtyAzpMoOjKpl>5WQ_R;Zx_x*g0gNb z!^{bR`bL~Z{TM2PaT7^9PDggb8c>I`1)s$WsIOyQ9{Z2SF^2bBVLrd(SdQ_y6RYqr z>bs4f6o_~fMp2)L+L}@kT})Yk4p_S~8<89yl`|LX9g zYv?s4@LBj!pIa^t!-c3Vs7GbsC~9xp-1A`4H=Fu!OvTlxGxZKCkVaG{kDz`hPGAb2 zo9gk0gTgd1`7x|Ql3~YC-+k|C0Y{)RQ;3Ru z4hCb5bD2kB5e+L)DZ7ZV_!DXY+E7gp3EC@U0*gidt~q^uPkkP+L}q zI;4%Lt+