Skip to content

Commit 844ecd7

Browse files
authored
Merge pull request #4 from Tearth/v4.0-dev
v4.0 (Komekko), 22.01.2021
2 parents 3fae7f2 + 0e456e9 commit 844ecd7

File tree

119 files changed

+2267
-871
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

119 files changed

+2267
-871
lines changed

.gitignore

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -353,7 +353,9 @@ MigrationBackup/
353353
/cloc.bat
354354
/Cosette.Arbiter/settings.json
355355
/Cosette.Arbiter/book.bin
356-
/Cosette.Tuner/settings.json
357-
/Cosette.Tuner/book.bin
356+
/Cosette.Tuner.SelfPlay/settings.json
357+
/Cosette.Tuner.SelfPlay/book.bin
358+
/Cosette.Tuner.Texel/settings.json
359+
/Cosette.Tuner.Texel/positions.epd
358360
/Cosette.Tuner.Web/Database.sqlite
359361
/Cosette.Tuner.Web/wwwroot/lib/

CHANGELOG.md

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,18 @@
1+
# Version 4.0 (Komekko), 22.01.2021
2+
- Added Texel project
3+
- Added check extension
4+
- Added check detection in quiescence search
5+
- Added evasion moves generator
6+
- Added static null-move pruning
7+
- Added futility pruning
8+
- Added new formulas calculating reduction for LMR and null move pruning
9+
- Added a new way of building Piece-Square tables, better for tuning
10+
- Fixed reduntant saving of transposition table entries
11+
- Adjusted search parameters
12+
- Adjusted evaluation parameters
13+
- Improved threefold repetition detection
14+
- Updated .NET runtime version to 5.0.102
15+
116
# Version 3.0 (Luna), 12.12.2020
217
- Added better time control for Arbiter
318
- Added more UCI options
@@ -26,9 +41,7 @@
2641
- Disabled returning of exact transposition table entries in the PV nodes
2742
- Adjusted evaluation scores
2843
- Optimized king safety evaluation
29-
- Updated .NET Core runtime version to 5.0.100
30-
31-
Estimated strength: 2000 ELO
44+
- Updated .NET runtime version to 5.0.100
3245

3346
# Version 2.0 (Darkness), 19.10.2020
3447
- Added fifty-move rule detection
@@ -52,9 +65,5 @@ Estimated strength: 2000 ELO
5265
- Adjusted move ordering scores
5366
- Updated .NET Core runtime version to 3.1.403
5467

55-
Estimated strength: 1950 ELO
56-
5768
# Version 1.0 (Aqua), 19.09.2020
58-
- Initial version
59-
60-
Estimated strength: 1900 ELO
69+
- Initial version

Cosette.Arbiter/Engine/EngineOperator.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,8 @@ public BestMoveData Go(List<string> moves, int whiteClock, int blackClock)
7575
if (moves.Count > 0)
7676
{
7777
Write($"position startpos moves {movesJoined}");
78+
Write("isready");
79+
WaitForMessage("readyok");
7880
}
7981

8082
Write($"go wtime {whiteClock} btime {blackClock} winc {SettingsLoader.Data.IncTime} binc {SettingsLoader.Data.IncTime}");

Cosette.Arbiter/Tournament/TournamentArbiter.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ private void WriteResults()
140140
Console.WriteLine($"{participant.EngineData.Name} {originalRating} ELO ({performance:+0;-#}, {wonGamesPercent}%): " +
141141
$"{participant.Wins} wins ({winsByTime} by time), {participant.Losses} losses ({lossesByTime} by time), " +
142142
$"{participant.Draws} draws");
143-
Console.WriteLine($" === {participant.AverageDepth:F1} average depth, {participant.AverageNodesCount} average nodes, " +
143+
Console.WriteLine($" === {participant.AverageDepth:F} average depth, {participant.AverageNodesCount} average nodes, " +
144144
$"{participant.AverageNps} average nodes per second");
145145
Console.WriteLine($"Executable hash: {participant.EngineOperator.ExecutableHash.Value}");
146146
Console.WriteLine();

Cosette.Tests/AdvancedPerftTests.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using Cosette.Engine.Board;
1+
using Cosette.Engine.Ai.Score.PieceSquareTables;
2+
using Cosette.Engine.Board;
23
using Cosette.Engine.Moves.Magic;
34
using Cosette.Engine.Perft;
45
using Xunit;
@@ -10,6 +11,7 @@ public class AdvancedPerftTests
1011
public AdvancedPerftTests()
1112
{
1213
MagicBitboards.InitWithInternalKeys();
14+
PieceSquareTablesData.BuildPieceSquareTables();
1315
}
1416

1517
[Theory]
@@ -24,7 +26,7 @@ public AdvancedPerftTests()
2426
public void AdvancedPerft_DefaultBoard(int depth, ulong expectedLeafsCount, ulong expectedCapturesCount, ulong expectedEnPassantsCount,
2527
ulong expectedCastlesCount, ulong expectedChecksCount, ulong expectedCheckmatesCount)
2628
{
27-
var boardState = new BoardState();
29+
var boardState = new BoardState(true);
2830
boardState.SetDefaultState();
2931

3032
var result = AdvancedPerft.Run(boardState, depth);

Cosette.Tests/DividedPerftTests.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using Cosette.Engine.Board;
1+
using Cosette.Engine.Ai.Score.PieceSquareTables;
2+
using Cosette.Engine.Board;
23
using Cosette.Engine.Moves.Magic;
34
using Cosette.Engine.Perft;
45
using Xunit;
@@ -10,12 +11,13 @@ public class DividedPerftTests
1011
public DividedPerftTests()
1112
{
1213
MagicBitboards.InitWithInternalKeys();
14+
PieceSquareTablesData.BuildPieceSquareTables();
1315
}
1416

1517
[Fact]
1618
public void DividedPerft_DefaultBoard()
1719
{
18-
var boardState = new BoardState();
20+
var boardState = new BoardState(true);
1921
boardState.SetDefaultState();
2022

2123
var result = DividedPerft.Run(boardState, 6);

Cosette.Tests/FenTests.cs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using Cosette.Engine.Board;
1+
using Cosette.Engine.Ai.Score.PieceSquareTables;
2+
using Cosette.Engine.Board;
23
using Cosette.Engine.Fen;
34
using Cosette.Engine.Moves.Magic;
45
using Cosette.Engine.Perft;
@@ -8,6 +9,11 @@ namespace Cosette.Tests
89
{
910
public class FenTests
1011
{
12+
public FenTests()
13+
{
14+
PieceSquareTablesData.BuildPieceSquareTables();
15+
}
16+
1117
[Theory]
1218
[InlineData("5r2/2P4p/P5Pp/1b6/P1r1N2N/1pp4K/P7/5k2 w - - 0 10")]
1319
[InlineData("3K2N1/k7/p1p3qB/3p1R1Q/6P1/1pP4r/P6r/8 w KQ - 20 25")]
@@ -16,7 +22,7 @@ public class FenTests
1622
[InlineData("r5R1/8/2Bp3p/2kq4/2N1p3/2KPP3/2pRP1P1/8 w - h3 0 1")]
1723
public void DividedPerft_DefaultBoard(string fen)
1824
{
19-
var boardFromFen = FenToBoard.Parse(fen);
25+
var boardFromFen = FenToBoard.Parse(fen, true);
2026
Assert.Equal(fen, boardFromFen.ToString());
2127
}
2228
}

Cosette.Tests/SimplePerftTests.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using Cosette.Engine.Ai.Score.PieceSquareTables;
12
using Cosette.Engine.Board;
23
using Cosette.Engine.Fen;
34
using Cosette.Engine.Moves.Magic;
@@ -11,6 +12,7 @@ public class SimplePerftTests
1112
public SimplePerftTests()
1213
{
1314
MagicBitboards.InitWithInternalKeys();
15+
PieceSquareTablesData.BuildPieceSquareTables();
1416
}
1517

1618
[Theory]
@@ -24,7 +26,7 @@ public SimplePerftTests()
2426
[InlineData(7, 3195901860)]
2527
public void SimplePerft_DefaultBoard(int depth, ulong expectedLeafsCount)
2628
{
27-
var boardState = new BoardState();
29+
var boardState = new BoardState(true);
2830
boardState.SetDefaultState();
2931

3032
var result = SimplePerft.Run(boardState, depth);
@@ -40,7 +42,7 @@ public void SimplePerft_DefaultBoard(int depth, ulong expectedLeafsCount)
4042
[InlineData(5, 120955130)]
4143
public void SimplePerft_MidGameBoard(int depth, ulong expectedLeafsCount)
4244
{
43-
var boardState = FenToBoard.Parse("r2qr1k1/p2n1p2/1pb3pp/2ppN1P1/1R1PpP2/BQP1n1PB/P4N1P/1R4K1 w - - 0 21");
45+
var boardState = FenToBoard.Parse("r2qr1k1/p2n1p2/1pb3pp/2ppN1P1/1R1PpP2/BQP1n1PB/P4N1P/1R4K1 w - - 0 21", true);
4446

4547
var result = SimplePerft.Run(boardState, depth);
4648
Assert.Equal(expectedLeafsCount, result.LeafsCount);
@@ -56,7 +58,7 @@ public void SimplePerft_MidGameBoard(int depth, ulong expectedLeafsCount)
5658
[InlineData(6, 108146453)]
5759
public void SimplePerft_EndGameBoard(int depth, ulong expectedLeafsCount)
5860
{
59-
var boardState = FenToBoard.Parse("7r/8/2k3P1/1p1p2Kp/1P6/2P5/7r/Q7 w - - 0 1");
61+
var boardState = FenToBoard.Parse("7r/8/2k3P1/1p1p2Kp/1P6/2P5/7r/Q7 w - - 0 1", true);
6062

6163
var result = SimplePerft.Run(boardState, depth);
6264
Assert.Equal(expectedLeafsCount, result.LeafsCount);

Cosette.Tests/StaticExchangeEvaluationTests.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using Cosette.Engine.Ai.Ordering;
2+
using Cosette.Engine.Ai.Score.PieceSquareTables;
23
using Cosette.Engine.Common;
34
using Xunit;
45

@@ -9,6 +10,7 @@ public class StaticExchangeEvaluationTests
910
public StaticExchangeEvaluationTests()
1011
{
1112
StaticExchangeEvaluation.Init();
13+
PieceSquareTablesData.BuildPieceSquareTables();
1214
}
1315

1416
[Theory]

Cosette.Tests/VerificationPerftTests.cs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using Cosette.Engine.Board;
1+
using Cosette.Engine.Ai.Score.PieceSquareTables;
2+
using Cosette.Engine.Board;
23
using Cosette.Engine.Fen;
34
using Cosette.Engine.Moves.Magic;
45
using Cosette.Engine.Perft;
@@ -11,12 +12,13 @@ public class VerificationPerftTests
1112
public VerificationPerftTests()
1213
{
1314
MagicBitboards.InitWithInternalKeys();
15+
PieceSquareTablesData.BuildPieceSquareTables();
1416
}
1517

1618
[Fact]
1719
public void VerificationPerft_DefaultBoard()
1820
{
19-
var boardState = new BoardState();
21+
var boardState = new BoardState(true);
2022
boardState.SetDefaultState();
2123

2224
var result = VerificationPerft.Run(boardState, 6);
@@ -26,7 +28,7 @@ public void VerificationPerft_DefaultBoard()
2628
[Fact]
2729
public void VerificationPerft_MidGameBoard()
2830
{
29-
var boardState = FenToBoard.Parse("r2qr1k1/p2n1p2/1pb3pp/2ppN1P1/1R1PpP2/BQP1n1PB/P4N1P/1R4K1 w - - 0 21");
31+
var boardState = FenToBoard.Parse("r2qr1k1/p2n1p2/1pb3pp/2ppN1P1/1R1PpP2/BQP1n1PB/P4N1P/1R4K1 w - - 0 21", true);
3032

3133
var result = VerificationPerft.Run(boardState, 5);
3234
Assert.True(result.VerificationSuccess);
@@ -35,7 +37,7 @@ public void VerificationPerft_MidGameBoard()
3537
[Fact]
3638
public void VerificationPerft_EndGameBoard()
3739
{
38-
var boardState = FenToBoard.Parse("7r/8/2k3P1/1p1p2Kp/1P6/2P5/7r/Q7 w - - 0 1");
40+
var boardState = FenToBoard.Parse("7r/8/2k3P1/1p1p2Kp/1P6/2P5/7r/Q7 w - - 0 1", true);
3941

4042
var result = VerificationPerft.Run(boardState, 6);
4143
Assert.True(result.VerificationSuccess);

Cosette.Tuner.Common/Cosette.Tuner.Common.csproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,8 @@
44
<TargetFramework>netstandard2.0</TargetFramework>
55
</PropertyGroup>
66

7+
<ItemGroup>
8+
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
9+
</ItemGroup>
10+
711
</Project>

Cosette.Tuner.Common/Requests/ChromosomeDataRequest.cs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,10 @@ public class ChromosomeDataRequest
66
{
77
public int TestId { get; set; }
88
public double ElapsedTime { get; set; }
9-
public int Fitness { get; set; }
10-
public int ReferenceEngineWins { get; set; }
11-
public int ExperimentalEngineWins { get; set; }
12-
public int Draws { get; set; }
9+
public double Fitness { get; set; }
1310

14-
public EngineStatisticsDataRequest ReferenceEngineStatistics { get; set; }
15-
public EngineStatisticsDataRequest ExperimentalEngineStatistics { get; set; }
11+
public SelfPlayStatisticsDataRequest ReferenceEngineStatistics { get; set; }
12+
public SelfPlayStatisticsDataRequest ExperimentalEngineStatistics { get; set; }
1613
public List<GeneDataRequest> Genes { get; set; }
1714
}
1815
}

Cosette.Tuner.Common/Requests/GenerationDataRequest.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ public class GenerationDataRequest
66
{
77
public int TestId { get; set; }
88
public double ElapsedTime { get; set; }
9-
public int BestFitness { get; set; }
9+
public double BestFitness { get; set; }
1010

1111
public List<GeneDataRequest> BestChromosomeGenes { get; set; }
1212
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
namespace Cosette.Tuner.Common.Requests
2+
{
3+
public class RegisterTestRequest
4+
{
5+
public TestType Type { get; set; }
6+
}
7+
}
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
namespace Cosette.Tuner.Common.Requests
22
{
3-
public class EngineStatisticsDataRequest
3+
public class SelfPlayStatisticsDataRequest
44
{
55
public double AverageTimePerGame { get; set; }
66
public double AverageDepth { get; set; }
77
public double AverageNodesCount { get; set; }
88
public double AverageNodesPerSecond { get; set; }
9+
public int Wins { get; set; }
10+
public int Draws { get; set; }
911
}
1012
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
namespace Cosette.Tuner.Common.Requests
2+
{
3+
public enum TestType
4+
{
5+
SelfPlay,
6+
Texel
7+
}
8+
}

Cosette.Tuner/Web/WebService.cs renamed to Cosette.Tuner.Common/Services/WebService.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
11
using System;
22
using System.Net.Http;
3-
using System.Net.Sockets;
43
using System.Text;
54
using System.Threading.Tasks;
65
using Cosette.Tuner.Common.Requests;
76
using Cosette.Tuner.Common.Responses;
87
using Newtonsoft.Json;
98

10-
namespace Cosette.Tuner.Web
9+
namespace Cosette.Tuner.Common.Services
1110
{
1211
public class WebService
1312
{
@@ -42,7 +41,7 @@ public async Task EnableIfAvailable()
4241
}
4342
}
4443

45-
public async Task<int> RegisterTest()
44+
public async Task<int> RegisterTest(RegisterTestRequest requestData)
4645
{
4746
if (!_enabled)
4847
{
@@ -51,7 +50,8 @@ public async Task<int> RegisterTest()
5150

5251
try
5352
{
54-
var response = await _httpClient.SendAsync(new HttpRequestMessage(HttpMethod.Post, "test/register"));
53+
var httpContent = new StringContent(JsonConvert.SerializeObject(requestData), Encoding.UTF8, "application/json");
54+
var response = await _httpClient.PostAsync("test/register", httpContent);
5555
var responseContent = await response.Content.ReadAsStringAsync();
5656

5757
if (response.IsSuccessStatusCode)

Cosette.Tuner/Engine/BestMoveData.cs renamed to Cosette.Tuner.SelfPlay/Engine/BestMoveData.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
namespace Cosette.Tuner.Engine
1+
namespace Cosette.Tuner.SelfPlay.Engine
22
{
33
public class BestMoveData
44
{

Cosette.Tuner/Engine/EngineOperator.cs renamed to Cosette.Tuner.SelfPlay/Engine/EngineOperator.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
using System;
22
using System.Collections.Generic;
33
using System.Diagnostics;
4-
using Cosette.Tuner.Settings;
4+
using Cosette.Tuner.SelfPlay.Settings;
55

6-
namespace Cosette.Tuner.Engine
6+
namespace Cosette.Tuner.SelfPlay.Engine
77
{
88
public class EngineOperator
99
{
@@ -84,6 +84,8 @@ public BestMoveData Go(List<string> moves, int whiteClock, int blackClock)
8484
if (moves.Count > 0)
8585
{
8686
Write($"position startpos moves {movesJoined}");
87+
Write("isready");
88+
WaitForMessage("readyok");
8789
}
8890

8991
Write($"go wtime {whiteClock} btime {blackClock} winc {SettingsLoader.Data.IncTime} binc {SettingsLoader.Data.IncTime}");

Cosette.Tuner/Engine/InfoData.cs renamed to Cosette.Tuner.SelfPlay/Engine/InfoData.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
using System;
2-
using System.Collections.Generic;
32

4-
namespace Cosette.Tuner.Engine
3+
namespace Cosette.Tuner.SelfPlay.Engine
54
{
65
public class InfoData
76
{

0 commit comments

Comments
 (0)