From cb51affe2f2221169622d8a1d395358d19e07d43 Mon Sep 17 00:00:00 2001 From: Fathzer Date: Thu, 25 Jan 2024 11:03:22 +0100 Subject: [PATCH 01/10] An example of calling engine to have three best moves with their pv --- .../jchess/chesslib/ai/HBThreeMovesTest.java | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 src/test/java/com/fathzer/jchess/chesslib/ai/HBThreeMovesTest.java diff --git a/src/test/java/com/fathzer/jchess/chesslib/ai/HBThreeMovesTest.java b/src/test/java/com/fathzer/jchess/chesslib/ai/HBThreeMovesTest.java new file mode 100644 index 0000000..7aaecf8 --- /dev/null +++ b/src/test/java/com/fathzer/jchess/chesslib/ai/HBThreeMovesTest.java @@ -0,0 +1,34 @@ +package com.fathzer.jchess.chesslib.ai; + +import static org.junit.jupiter.api.Assertions.*; + +import java.util.List; + +import org.junit.jupiter.api.Test; + +import com.fathzer.games.ai.evaluation.EvaluatedMove; +import com.fathzer.games.ai.iterativedeepening.IterativeDeepeningEngine; +import com.fathzer.jchess.chesslib.ChessLibMoveGenerator; +import com.fathzer.jchess.chesslib.ai.eval.SimplifiedEvaluator; +import com.fathzer.jchess.chesslib.uci.ChessLibEngine; +import com.github.bhlangonijr.chesslib.move.Move; + +class HBThreeMovesTest { + + @Test + void test() { + final int depth = 6; + final int bestMoveCount = 3; + final String fen = "r2k1r2/pp1b2pp/1b2Pn2/2p5/Q1B2Bq1/2P5/P5PP/3R1RK1 w - - 0 1"; + final IterativeDeepeningEngine engine = ChessLibEngine.buildEngine(SimplifiedEvaluator::new, depth); + engine.getDeepeningPolicy().setSize(bestMoveCount); + final List> moves = engine.getBestMoves(MinimaxEngineTest.fromFEN(fen, BasicMoveComparator::new)); + System.out.println(moves); + for (int i=0;i<3;i++) { + EvaluatedMove move = moves.get(i); + List principalVariation = move.getPrincipalVariation(); + System.out.println(move+" -> "+principalVariation); + } + } + +} From 3f9a979d2ed3e1d65ffe69fc049f0dc8ea47cbcf Mon Sep 17 00:00:00 2001 From: Fathzer Date: Thu, 25 Jan 2024 12:12:47 +0100 Subject: [PATCH 02/10] =?UTF-8?q?squelette=20d'=C3=A9valuateur?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jchess/chesslib/ai/eval/MyTinyEvaluator.java | 16 ++++++++++++++++ .../jchess/chesslib/uci/ChessLibEngine.java | 4 +++- 2 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/fathzer/jchess/chesslib/ai/eval/MyTinyEvaluator.java diff --git a/src/main/java/com/fathzer/jchess/chesslib/ai/eval/MyTinyEvaluator.java b/src/main/java/com/fathzer/jchess/chesslib/ai/eval/MyTinyEvaluator.java new file mode 100644 index 0000000..952ac9c --- /dev/null +++ b/src/main/java/com/fathzer/jchess/chesslib/ai/eval/MyTinyEvaluator.java @@ -0,0 +1,16 @@ +package com.fathzer.jchess.chesslib.ai.eval; + +import com.fathzer.games.ai.evaluation.StaticEvaluator; +import com.fathzer.games.ai.evaluation.ZeroSumEvaluator; +import com.fathzer.jchess.chesslib.ChessLibMoveGenerator; +import com.github.bhlangonijr.chesslib.move.Move; + +public class MyTinyEvaluator implements StaticEvaluator, ZeroSumEvaluator { + + @Override + public int evaluateAsWhite(ChessLibMoveGenerator board) { + // TODO Auto-generated method stub + return 0; + } + +} diff --git a/src/main/java/com/fathzer/jchess/chesslib/uci/ChessLibEngine.java b/src/main/java/com/fathzer/jchess/chesslib/uci/ChessLibEngine.java index c46d39d..8240747 100644 --- a/src/main/java/com/fathzer/jchess/chesslib/uci/ChessLibEngine.java +++ b/src/main/java/com/fathzer/jchess/chesslib/uci/ChessLibEngine.java @@ -19,6 +19,7 @@ import com.fathzer.jchess.chesslib.ai.ChessLibDeepeningPolicy; import com.fathzer.jchess.chesslib.ai.DefaultLogger; import com.fathzer.jchess.chesslib.ai.TT; +import com.fathzer.jchess.chesslib.ai.eval.MyTinyEvaluator; import com.fathzer.jchess.chesslib.ai.eval.NaiveEvaluator; import com.fathzer.jchess.chesslib.ai.eval.SimplifiedEvaluator; import com.fathzer.jchess.chesslib.time.RemainingMoveOracle; @@ -32,7 +33,8 @@ import com.github.bhlangonijr.chesslib.move.Move; public class ChessLibEngine extends AbstractEngine implements TestableMoveGeneratorBuilder, Displayable { - private static final List> EVALUATORS = Arrays.asList(new EvaluatorConfiguration<>("simplified",SimplifiedEvaluator::new),new EvaluatorConfiguration<>("naive",NaiveEvaluator::new)); + private static final List> EVALUATORS = + Arrays.asList(new EvaluatorConfiguration<>("hb",MyTinyEvaluator::new),new EvaluatorConfiguration<>("simplified",SimplifiedEvaluator::new),new EvaluatorConfiguration<>("naive",NaiveEvaluator::new)); public ChessLibEngine() { super (buildEngine(EVALUATORS.get(0).getBuilder(), 8), new BasicTimeManager<>(RemainingMoveOracle.INSTANCE)); From 1f95cd2bae46540bd73529b01d74537682be3936 Mon Sep 17 00:00:00 2001 From: Fathzer Date: Thu, 25 Jan 2024 11:03:22 +0100 Subject: [PATCH 03/10] An example of calling engine to have three best moves with their pv --- .../jchess/chesslib/ai/HBThreeMovesTest.java | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 src/test/java/com/fathzer/jchess/chesslib/ai/HBThreeMovesTest.java diff --git a/src/test/java/com/fathzer/jchess/chesslib/ai/HBThreeMovesTest.java b/src/test/java/com/fathzer/jchess/chesslib/ai/HBThreeMovesTest.java new file mode 100644 index 0000000..7aaecf8 --- /dev/null +++ b/src/test/java/com/fathzer/jchess/chesslib/ai/HBThreeMovesTest.java @@ -0,0 +1,34 @@ +package com.fathzer.jchess.chesslib.ai; + +import static org.junit.jupiter.api.Assertions.*; + +import java.util.List; + +import org.junit.jupiter.api.Test; + +import com.fathzer.games.ai.evaluation.EvaluatedMove; +import com.fathzer.games.ai.iterativedeepening.IterativeDeepeningEngine; +import com.fathzer.jchess.chesslib.ChessLibMoveGenerator; +import com.fathzer.jchess.chesslib.ai.eval.SimplifiedEvaluator; +import com.fathzer.jchess.chesslib.uci.ChessLibEngine; +import com.github.bhlangonijr.chesslib.move.Move; + +class HBThreeMovesTest { + + @Test + void test() { + final int depth = 6; + final int bestMoveCount = 3; + final String fen = "r2k1r2/pp1b2pp/1b2Pn2/2p5/Q1B2Bq1/2P5/P5PP/3R1RK1 w - - 0 1"; + final IterativeDeepeningEngine engine = ChessLibEngine.buildEngine(SimplifiedEvaluator::new, depth); + engine.getDeepeningPolicy().setSize(bestMoveCount); + final List> moves = engine.getBestMoves(MinimaxEngineTest.fromFEN(fen, BasicMoveComparator::new)); + System.out.println(moves); + for (int i=0;i<3;i++) { + EvaluatedMove move = moves.get(i); + List principalVariation = move.getPrincipalVariation(); + System.out.println(move+" -> "+principalVariation); + } + } + +} From 31f501a26fbc43b4f296c7172fc03688a0fd28f4 Mon Sep 17 00:00:00 2001 From: Fathzer Date: Thu, 25 Jan 2024 12:12:47 +0100 Subject: [PATCH 04/10] =?UTF-8?q?squelette=20d'=C3=A9valuateur?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jchess/chesslib/ai/eval/MyTinyEvaluator.java | 16 ++++++++++++++++ .../jchess/chesslib/uci/ChessLibEngine.java | 4 +++- 2 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/fathzer/jchess/chesslib/ai/eval/MyTinyEvaluator.java diff --git a/src/main/java/com/fathzer/jchess/chesslib/ai/eval/MyTinyEvaluator.java b/src/main/java/com/fathzer/jchess/chesslib/ai/eval/MyTinyEvaluator.java new file mode 100644 index 0000000..952ac9c --- /dev/null +++ b/src/main/java/com/fathzer/jchess/chesslib/ai/eval/MyTinyEvaluator.java @@ -0,0 +1,16 @@ +package com.fathzer.jchess.chesslib.ai.eval; + +import com.fathzer.games.ai.evaluation.StaticEvaluator; +import com.fathzer.games.ai.evaluation.ZeroSumEvaluator; +import com.fathzer.jchess.chesslib.ChessLibMoveGenerator; +import com.github.bhlangonijr.chesslib.move.Move; + +public class MyTinyEvaluator implements StaticEvaluator, ZeroSumEvaluator { + + @Override + public int evaluateAsWhite(ChessLibMoveGenerator board) { + // TODO Auto-generated method stub + return 0; + } + +} diff --git a/src/main/java/com/fathzer/jchess/chesslib/uci/ChessLibEngine.java b/src/main/java/com/fathzer/jchess/chesslib/uci/ChessLibEngine.java index f9feeb8..7210c0f 100644 --- a/src/main/java/com/fathzer/jchess/chesslib/uci/ChessLibEngine.java +++ b/src/main/java/com/fathzer/jchess/chesslib/uci/ChessLibEngine.java @@ -20,6 +20,7 @@ import com.fathzer.jchess.chesslib.ai.ChessLibDeepeningPolicy; import com.fathzer.jchess.chesslib.ai.DefaultLogger; import com.fathzer.jchess.chesslib.ai.TT; +import com.fathzer.jchess.chesslib.ai.eval.MyTinyEvaluator; import com.fathzer.jchess.chesslib.ai.eval.NaiveEvaluator; import com.fathzer.jchess.chesslib.ai.eval.SimplifiedEvaluator; import com.fathzer.jchess.chesslib.time.RemainingMoveOracle; @@ -33,7 +34,8 @@ import com.github.bhlangonijr.chesslib.move.Move; public class ChessLibEngine extends AbstractEngine implements TestableMoveGeneratorBuilder, Displayable { - private static final List> EVALUATORS = Arrays.asList(new EvaluatorConfiguration<>("simplified",SimplifiedEvaluator::new),new EvaluatorConfiguration<>("naive",NaiveEvaluator::new)); + private static final List> EVALUATORS = + Arrays.asList(new EvaluatorConfiguration<>("hb",MyTinyEvaluator::new),new EvaluatorConfiguration<>("simplified",SimplifiedEvaluator::new),new EvaluatorConfiguration<>("naive",NaiveEvaluator::new)); public ChessLibEngine() { super (buildEngine(EVALUATORS.get(0).getBuilder(), 20), new BasicTimeManager<>(RemainingMoveOracle.INSTANCE)); From 4c3d9b3e59d020d1c5e3487d1d45bca86847b86f Mon Sep 17 00:00:00 2001 From: Fathzer Date: Thu, 25 Jan 2024 11:03:22 +0100 Subject: [PATCH 05/10] An example of calling engine to have three best moves with their pv --- .../jchess/chesslib/ai/HBThreeMovesTest.java | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 src/test/java/com/fathzer/jchess/chesslib/ai/HBThreeMovesTest.java diff --git a/src/test/java/com/fathzer/jchess/chesslib/ai/HBThreeMovesTest.java b/src/test/java/com/fathzer/jchess/chesslib/ai/HBThreeMovesTest.java new file mode 100644 index 0000000..7aaecf8 --- /dev/null +++ b/src/test/java/com/fathzer/jchess/chesslib/ai/HBThreeMovesTest.java @@ -0,0 +1,34 @@ +package com.fathzer.jchess.chesslib.ai; + +import static org.junit.jupiter.api.Assertions.*; + +import java.util.List; + +import org.junit.jupiter.api.Test; + +import com.fathzer.games.ai.evaluation.EvaluatedMove; +import com.fathzer.games.ai.iterativedeepening.IterativeDeepeningEngine; +import com.fathzer.jchess.chesslib.ChessLibMoveGenerator; +import com.fathzer.jchess.chesslib.ai.eval.SimplifiedEvaluator; +import com.fathzer.jchess.chesslib.uci.ChessLibEngine; +import com.github.bhlangonijr.chesslib.move.Move; + +class HBThreeMovesTest { + + @Test + void test() { + final int depth = 6; + final int bestMoveCount = 3; + final String fen = "r2k1r2/pp1b2pp/1b2Pn2/2p5/Q1B2Bq1/2P5/P5PP/3R1RK1 w - - 0 1"; + final IterativeDeepeningEngine engine = ChessLibEngine.buildEngine(SimplifiedEvaluator::new, depth); + engine.getDeepeningPolicy().setSize(bestMoveCount); + final List> moves = engine.getBestMoves(MinimaxEngineTest.fromFEN(fen, BasicMoveComparator::new)); + System.out.println(moves); + for (int i=0;i<3;i++) { + EvaluatedMove move = moves.get(i); + List principalVariation = move.getPrincipalVariation(); + System.out.println(move+" -> "+principalVariation); + } + } + +} From bf384ddcb62a9c97d9c0373debc80b0a6ac2a15e Mon Sep 17 00:00:00 2001 From: Fathzer Date: Thu, 25 Jan 2024 12:12:47 +0100 Subject: [PATCH 06/10] =?UTF-8?q?squelette=20d'=C3=A9valuateur?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jchess/chesslib/ai/eval/MyTinyEvaluator.java | 16 ++++++++++++++++ .../jchess/chesslib/uci/ChessLibEngine.java | 4 +++- 2 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/fathzer/jchess/chesslib/ai/eval/MyTinyEvaluator.java diff --git a/src/main/java/com/fathzer/jchess/chesslib/ai/eval/MyTinyEvaluator.java b/src/main/java/com/fathzer/jchess/chesslib/ai/eval/MyTinyEvaluator.java new file mode 100644 index 0000000..952ac9c --- /dev/null +++ b/src/main/java/com/fathzer/jchess/chesslib/ai/eval/MyTinyEvaluator.java @@ -0,0 +1,16 @@ +package com.fathzer.jchess.chesslib.ai.eval; + +import com.fathzer.games.ai.evaluation.StaticEvaluator; +import com.fathzer.games.ai.evaluation.ZeroSumEvaluator; +import com.fathzer.jchess.chesslib.ChessLibMoveGenerator; +import com.github.bhlangonijr.chesslib.move.Move; + +public class MyTinyEvaluator implements StaticEvaluator, ZeroSumEvaluator { + + @Override + public int evaluateAsWhite(ChessLibMoveGenerator board) { + // TODO Auto-generated method stub + return 0; + } + +} diff --git a/src/main/java/com/fathzer/jchess/chesslib/uci/ChessLibEngine.java b/src/main/java/com/fathzer/jchess/chesslib/uci/ChessLibEngine.java index e7279a7..0e07c76 100644 --- a/src/main/java/com/fathzer/jchess/chesslib/uci/ChessLibEngine.java +++ b/src/main/java/com/fathzer/jchess/chesslib/uci/ChessLibEngine.java @@ -24,6 +24,7 @@ import com.fathzer.jchess.chesslib.ai.ChessLibDeepeningPolicy; import com.fathzer.jchess.chesslib.ai.DefaultLogger; import com.fathzer.jchess.chesslib.ai.TT; +import com.fathzer.jchess.chesslib.ai.eval.MyTinyEvaluator; import com.fathzer.jchess.chesslib.ai.eval.NaiveEvaluator; import com.fathzer.jchess.chesslib.ai.eval.SimplifiedEvaluator; import com.fathzer.jchess.chesslib.time.RemainingMoveOracle; @@ -37,7 +38,8 @@ import com.github.bhlangonijr.chesslib.move.Move; public class ChessLibEngine extends AbstractEngine implements TestableMoveGeneratorBuilder, Displayable { - private static final List> EVALUATORS = Arrays.asList(new EvaluatorConfiguration<>("simplified",SimplifiedEvaluator::new),new EvaluatorConfiguration<>("naive",NaiveEvaluator::new)); + private static final List> EVALUATORS = + Arrays.asList(new EvaluatorConfiguration<>("hb",MyTinyEvaluator::new),new EvaluatorConfiguration<>("simplified",SimplifiedEvaluator::new),new EvaluatorConfiguration<>("naive",NaiveEvaluator::new)); public ChessLibEngine() { super (buildEngine(EVALUATORS.get(0).getBuilder(), 20), new BasicTimeManager<>(RemainingMoveOracle.INSTANCE)); From 949a18033da9e67e7c81e6f4d39b8c5fccd3106c Mon Sep 17 00:00:00 2001 From: Fathzer Date: Thu, 25 Jan 2024 11:03:22 +0100 Subject: [PATCH 07/10] An example of calling engine to have three best moves with their pv --- .../jchess/chesslib/ai/HBThreeMovesTest.java | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 src/test/java/com/fathzer/jchess/chesslib/ai/HBThreeMovesTest.java diff --git a/src/test/java/com/fathzer/jchess/chesslib/ai/HBThreeMovesTest.java b/src/test/java/com/fathzer/jchess/chesslib/ai/HBThreeMovesTest.java new file mode 100644 index 0000000..7aaecf8 --- /dev/null +++ b/src/test/java/com/fathzer/jchess/chesslib/ai/HBThreeMovesTest.java @@ -0,0 +1,34 @@ +package com.fathzer.jchess.chesslib.ai; + +import static org.junit.jupiter.api.Assertions.*; + +import java.util.List; + +import org.junit.jupiter.api.Test; + +import com.fathzer.games.ai.evaluation.EvaluatedMove; +import com.fathzer.games.ai.iterativedeepening.IterativeDeepeningEngine; +import com.fathzer.jchess.chesslib.ChessLibMoveGenerator; +import com.fathzer.jchess.chesslib.ai.eval.SimplifiedEvaluator; +import com.fathzer.jchess.chesslib.uci.ChessLibEngine; +import com.github.bhlangonijr.chesslib.move.Move; + +class HBThreeMovesTest { + + @Test + void test() { + final int depth = 6; + final int bestMoveCount = 3; + final String fen = "r2k1r2/pp1b2pp/1b2Pn2/2p5/Q1B2Bq1/2P5/P5PP/3R1RK1 w - - 0 1"; + final IterativeDeepeningEngine engine = ChessLibEngine.buildEngine(SimplifiedEvaluator::new, depth); + engine.getDeepeningPolicy().setSize(bestMoveCount); + final List> moves = engine.getBestMoves(MinimaxEngineTest.fromFEN(fen, BasicMoveComparator::new)); + System.out.println(moves); + for (int i=0;i<3;i++) { + EvaluatedMove move = moves.get(i); + List principalVariation = move.getPrincipalVariation(); + System.out.println(move+" -> "+principalVariation); + } + } + +} From e44b9b1c269b37c9f87f96c1a93aa2c26f61f760 Mon Sep 17 00:00:00 2001 From: Fathzer Date: Thu, 25 Jan 2024 12:12:47 +0100 Subject: [PATCH 08/10] =?UTF-8?q?squelette=20d'=C3=A9valuateur?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../jchess/chesslib/ai/eval/MyTinyEvaluator.java | 16 ++++++++++++++++ .../jchess/chesslib/uci/ChessLibEngine.java | 4 +++- 2 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/fathzer/jchess/chesslib/ai/eval/MyTinyEvaluator.java diff --git a/src/main/java/com/fathzer/jchess/chesslib/ai/eval/MyTinyEvaluator.java b/src/main/java/com/fathzer/jchess/chesslib/ai/eval/MyTinyEvaluator.java new file mode 100644 index 0000000..952ac9c --- /dev/null +++ b/src/main/java/com/fathzer/jchess/chesslib/ai/eval/MyTinyEvaluator.java @@ -0,0 +1,16 @@ +package com.fathzer.jchess.chesslib.ai.eval; + +import com.fathzer.games.ai.evaluation.StaticEvaluator; +import com.fathzer.games.ai.evaluation.ZeroSumEvaluator; +import com.fathzer.jchess.chesslib.ChessLibMoveGenerator; +import com.github.bhlangonijr.chesslib.move.Move; + +public class MyTinyEvaluator implements StaticEvaluator, ZeroSumEvaluator { + + @Override + public int evaluateAsWhite(ChessLibMoveGenerator board) { + // TODO Auto-generated method stub + return 0; + } + +} diff --git a/src/main/java/com/fathzer/jchess/chesslib/uci/ChessLibEngine.java b/src/main/java/com/fathzer/jchess/chesslib/uci/ChessLibEngine.java index af8ab0e..49e8c08 100644 --- a/src/main/java/com/fathzer/jchess/chesslib/uci/ChessLibEngine.java +++ b/src/main/java/com/fathzer/jchess/chesslib/uci/ChessLibEngine.java @@ -25,6 +25,7 @@ import com.fathzer.jchess.chesslib.ai.ChessLibDeepeningPolicy; import com.fathzer.jchess.chesslib.ai.DefaultLogger; import com.fathzer.jchess.chesslib.ai.TT; +import com.fathzer.jchess.chesslib.ai.eval.MyTinyEvaluator; import com.fathzer.jchess.chesslib.ai.eval.NaiveEvaluator; import com.fathzer.jchess.chesslib.ai.eval.SimplifiedEvaluator; import com.fathzer.jchess.chesslib.time.RemainingMoveOracle; @@ -38,7 +39,8 @@ import com.github.bhlangonijr.chesslib.move.Move; public class ChessLibEngine extends AbstractEngine implements TestableMoveGeneratorBuilder, Displayable { - private static final List> EVALUATORS = Arrays.asList(new EvaluatorConfiguration<>("simplified",SimplifiedEvaluator::new),new EvaluatorConfiguration<>("naive",NaiveEvaluator::new)); + private static final List> EVALUATORS = + Arrays.asList(new EvaluatorConfiguration<>("hb",MyTinyEvaluator::new),new EvaluatorConfiguration<>("simplified",SimplifiedEvaluator::new),new EvaluatorConfiguration<>("naive",NaiveEvaluator::new)); private final Function ownBook; From 2a04678981b1f13a5811c3fe8cc0956e70d9db06 Mon Sep 17 00:00:00 2001 From: Fathzer Date: Thu, 7 Mar 2024 19:24:17 +0100 Subject: [PATCH 09/10] MyTinyEvaluator => example of static reuse of SimplifiedEvaluator --- .../jchess/chesslib/ai/eval/MyTinyEvaluator.java | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/fathzer/jchess/chesslib/ai/eval/MyTinyEvaluator.java b/src/main/java/com/fathzer/jchess/chesslib/ai/eval/MyTinyEvaluator.java index 952ac9c..079ce41 100644 --- a/src/main/java/com/fathzer/jchess/chesslib/ai/eval/MyTinyEvaluator.java +++ b/src/main/java/com/fathzer/jchess/chesslib/ai/eval/MyTinyEvaluator.java @@ -3,14 +3,25 @@ import com.fathzer.games.ai.evaluation.StaticEvaluator; import com.fathzer.games.ai.evaluation.ZeroSumEvaluator; import com.fathzer.jchess.chesslib.ChessLibMoveGenerator; +import com.github.bhlangonijr.chesslib.Board; import com.github.bhlangonijr.chesslib.move.Move; public class MyTinyEvaluator implements StaticEvaluator, ZeroSumEvaluator { + private final SimplifiedEvaluator ev = new SimplifiedEvaluator(); @Override public int evaluateAsWhite(ChessLibMoveGenerator board) { - // TODO Auto-generated method stub - return 0; + // Calculer l'évaluation de base + ev.init(board); + int baseEvaluation = ev.evaluate(board); + // Tu peux ajouter ce qui concerne les chaines de pions, mauvais/bon fous, etc à l'évaluation de base ... + return baseEvaluation; } + public static void main(String[] args) { + // Exemple pour créer un ChessLibMoveGenerator à partir d'un FEN et l'évaluer + ChessLibMoveGenerator mvg = new ChessLibMoveGenerator(new Board()); + mvg.getBoard().loadFromFen("8/3b3p/p3P1p1/3K4/5P1P/2k5/8/8 b - - 0 56"); + System.out.println(new MyTinyEvaluator().evaluate(mvg)); + } } From 40ea64a776b874f045d08ee5c262b78392d96b8f Mon Sep 17 00:00:00 2001 From: Fathzer Date: Sat, 9 Mar 2024 15:53:51 +0100 Subject: [PATCH 10/10] Fixes MyTinyEvaluator hang + search deepen on forced moves --- .../jchess/chesslib/ai/eval/MyTinyEvaluator.java | 15 +++++++++++++-- .../jchess/chesslib/uci/ChessLibEngine.java | 1 + 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/fathzer/jchess/chesslib/ai/eval/MyTinyEvaluator.java b/src/main/java/com/fathzer/jchess/chesslib/ai/eval/MyTinyEvaluator.java index 079ce41..a66ca21 100644 --- a/src/main/java/com/fathzer/jchess/chesslib/ai/eval/MyTinyEvaluator.java +++ b/src/main/java/com/fathzer/jchess/chesslib/ai/eval/MyTinyEvaluator.java @@ -12,11 +12,22 @@ public class MyTinyEvaluator implements StaticEvaluator fork() { + // Attention : SimplifiedEvaluator n'est pas thread safe, ce qui est généralement le cas des évaluateurs statiques (d'où l'implémentation par défaut de fork qui renvoie this). + // Pour éviter les pb de threading, soit on crée un évaluateur par thread comme ici, soit l'usage du SimplifiedEvaluator doit être protégé par un synchronized (pas performant). + return new MyTinyEvaluator(); + } + public static void main(String[] args) { // Exemple pour créer un ChessLibMoveGenerator à partir d'un FEN et l'évaluer diff --git a/src/main/java/com/fathzer/jchess/chesslib/uci/ChessLibEngine.java b/src/main/java/com/fathzer/jchess/chesslib/uci/ChessLibEngine.java index 49e8c08..3165d6b 100644 --- a/src/main/java/com/fathzer/jchess/chesslib/uci/ChessLibEngine.java +++ b/src/main/java/com/fathzer/jchess/chesslib/uci/ChessLibEngine.java @@ -141,6 +141,7 @@ protected Negamax buildNegaMax(ExecutionContext1 ? 2 : 1); engine.getDeepeningPolicy().setMaxTime(60000); + engine.getDeepeningPolicy().setDeepenOnForced(false); return engine; }