From ad632483e949612626d192d1b04c64380440fccd Mon Sep 17 00:00:00 2001 From: zsalch Date: Mon, 4 Nov 2019 20:19:42 +0800 Subject: [PATCH] Changing komi should cause Lizzie to regenerate analysis --- .../java/featurecat/lizzie/analysis/EngineManager.java | 1 + src/main/java/featurecat/lizzie/analysis/Leelaz.java | 3 +++ src/main/java/featurecat/lizzie/gui/BoardRenderer.java | 3 +++ src/main/java/featurecat/lizzie/rules/BoardData.java | 9 +++++++++ 4 files changed, 16 insertions(+) diff --git a/src/main/java/featurecat/lizzie/analysis/EngineManager.java b/src/main/java/featurecat/lizzie/analysis/EngineManager.java index 881dcf34c..3d93fb959 100644 --- a/src/main/java/featurecat/lizzie/analysis/EngineManager.java +++ b/src/main/java/featurecat/lizzie/analysis/EngineManager.java @@ -87,6 +87,7 @@ public EngineManager(Config config) throws JSONException, IOException { */ public void switchEngine(int index) { if (index == this.currentEngineNo || index > this.engineList.size()) return; + Leelaz.engineIndex++; Leelaz newEng = engineList.get(index); if (newEng == null) return; diff --git a/src/main/java/featurecat/lizzie/analysis/Leelaz.java b/src/main/java/featurecat/lizzie/analysis/Leelaz.java index be62de568..23337178a 100644 --- a/src/main/java/featurecat/lizzie/analysis/Leelaz.java +++ b/src/main/java/featurecat/lizzie/analysis/Leelaz.java @@ -88,6 +88,7 @@ public class Leelaz { ArrayList estimateArray = new ArrayList(); public double scoreMean = 0; public double scoreStdev = 0; + public static int engineIndex = 0; /** * Initializes the leelaz process and starts reading output @@ -884,6 +885,7 @@ public List splitCommand(String commandLine) { public boolean isCommandChange(String command) { List newList = splitCommand(command); if (this.commands.size() != newList.size()) { + engineIndex++; return true; } else { for (int i = 0; i < this.commands.size(); i++) { @@ -891,6 +893,7 @@ public boolean isCommandChange(String command) { String newParam = newList.get(i); if ((!Utils.isBlank(param) || !Utils.isBlank(newParam)) && (Utils.isBlank(param) || !param.equals(newParam))) { + engineIndex++; return true; } } diff --git a/src/main/java/featurecat/lizzie/gui/BoardRenderer.java b/src/main/java/featurecat/lizzie/gui/BoardRenderer.java index f10e8a8a5..a2d7d7b38 100644 --- a/src/main/java/featurecat/lizzie/gui/BoardRenderer.java +++ b/src/main/java/featurecat/lizzie/gui/BoardRenderer.java @@ -13,6 +13,7 @@ import featurecat.lizzie.Lizzie; import featurecat.lizzie.analysis.Branch; +import featurecat.lizzie.analysis.Leelaz; import featurecat.lizzie.analysis.MoveData; import featurecat.lizzie.rules.Board; import featurecat.lizzie.rules.BoardData; @@ -546,6 +547,8 @@ private void drawBranch() { // calculate best moves and branch bestMoves = Lizzie.leelaz.getBestMoves(); if (Lizzie.config.showBestMovesByHold + && Leelaz.engineIndex == Lizzie.board.getData().engineIndex + && Lizzie.board.getHistory().getGameInfo().getKomi() == Lizzie.board.getData().komi && MoveData.getPlayouts(bestMoves) < Lizzie.board.getData().getPlayouts()) { bestMoves = Lizzie.board.getData().bestMoves; } diff --git a/src/main/java/featurecat/lizzie/rules/BoardData.java b/src/main/java/featurecat/lizzie/rules/BoardData.java index 7c4af3e19..ede816aa6 100644 --- a/src/main/java/featurecat/lizzie/rules/BoardData.java +++ b/src/main/java/featurecat/lizzie/rules/BoardData.java @@ -1,6 +1,7 @@ package featurecat.lizzie.rules; import featurecat.lizzie.Lizzie; +import featurecat.lizzie.analysis.Leelaz; import featurecat.lizzie.analysis.MoveData; import featurecat.lizzie.util.Utils; import java.util.ArrayList; @@ -24,6 +25,8 @@ public class BoardData { public double winrate; private int playouts; + public int engineIndex; + public double komi; public double scoreMean; public List bestMoves; public int blackCaptures; @@ -61,6 +64,8 @@ public BoardData( this.winrate = winrate; this.playouts = playouts; + this.engineIndex = Leelaz.engineIndex; + this.komi = 0.0; this.scoreMean = scoreMean; this.blackCaptures = blackCaptures; this.whiteCaptures = whiteCaptures; @@ -172,6 +177,8 @@ public double getWinrate() { public void tryToClearBestMoves() { bestMoves = new ArrayList<>(); playouts = 0; + engineIndex = Leelaz.engineIndex; + komi = Lizzie.board.getHistory().getGameInfo().getKomi(); if (Lizzie.leelaz.isKataGo) { Lizzie.leelaz.scoreMean = 0; Lizzie.leelaz.scoreStdev = 0; @@ -186,6 +193,8 @@ public void tryToSetBestMoves(List moves) { if (Lizzie.leelaz.isKataGo) { scoreMean = getScoreMeanFromBestMoves(moves); } + engineIndex = Leelaz.engineIndex; + komi = Lizzie.board.getHistory().getGameInfo().getKomi(); } if (Lizzie.leelaz.isKataGo) { Lizzie.leelaz.scoreMean = moves.get(0).scoreMean;