Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions src/Lynx.Benchmark/ParseGame_Benchmark.cs
Original file line number Diff line number Diff line change
Expand Up @@ -525,7 +525,7 @@ internal OriginalGame(string fen, string[] movesUCIString) : this(fen)
}

[MethodImpl(MethodImplOptions.AggressiveInlining)]
public GameState MakeMove(Move moveToPlay)
public PositionState MakeMove(Move moveToPlay)
{
var gameState = CurrentPosition.MakeMove(moveToPlay);

Expand Down Expand Up @@ -608,7 +608,7 @@ internal ImprovedGame(string fen, ReadOnlySpan<char> rawMoves, Span<Range> range
}

[MethodImpl(MethodImplOptions.AggressiveInlining)]
public GameState MakeMove(Move moveToPlay)
public PositionState MakeMove(Move moveToPlay)
{
var gameState = CurrentPosition.MakeMove(moveToPlay);

Expand Down Expand Up @@ -695,7 +695,7 @@ public ImprovedGame2(ReadOnlySpan<char> fen, ReadOnlySpan<char> rawMoves, Span<R
}

[MethodImpl(MethodImplOptions.AggressiveInlining)]
public GameState MakeMove(Move moveToPlay)
public PositionState MakeMove(Move moveToPlay)
{
var gameState = CurrentPosition.MakeMove(moveToPlay);

Expand Down
3 changes: 2 additions & 1 deletion src/Lynx.Benchmark/TryParseFromUCIString_Benchmark.cs
Original file line number Diff line number Diff line change
Expand Up @@ -232,8 +232,9 @@ public TryParseFromUCIString_Benchmark_Game(ReadOnlySpan<char> fen, ReadOnlySpan

_gameInitialPosition = new Position(CurrentPosition);
}

[MethodImpl(MethodImplOptions.AggressiveInlining)]
public GameState MakeMove(Move moveToPlay)
public PositionState MakeMove(Move moveToPlay)
{
var gameState = CurrentPosition.MakeMove(moveToPlay);

Expand Down
48 changes: 24 additions & 24 deletions src/Lynx/Evaluation.cs
Original file line number Diff line number Diff line change
Expand Up @@ -91,16 +91,16 @@ public partial class Position
int blackPawnKingRingAttacks = (blackPawnAttacks & KingRing[whiteKing]).CountBits();
evaluationContext.IncreaseKingRingAttacks((int)Side.Black, blackPawnKingRingAttacks);

if (IsIncrementalEval)
if (_state.IsIncrementalEval)
{
packedScore = IncrementalEvalAccumulator;
gamePhase = IncrementalPhaseAccumulator;
packedScore = _state.IncrementalEvalAccumulator;
gamePhase = _state.IncrementalPhaseAccumulator;

var kingPawnIndex = _kingPawnUniqueIdentifier & Constants.KingPawnHashMask;
var kingPawnIndex = _state.KingPawnUniqueIdentifier & Constants.KingPawnHashMask;
ref var entry = ref pawnEvalTable[kingPawnIndex];

// pawnEvalTable hit: We can reuse cached eval for pawn additional evaluation + PieceProtectedByPawnBonus + KingShieldBonus
if (entry.Key == _kingPawnUniqueIdentifier)
if (entry.Key == _state.KingPawnUniqueIdentifier)
{
packedScore += entry.PackedScore;
}
Expand Down Expand Up @@ -152,7 +152,7 @@ public partial class Position
// Pawn islands
pawnScore += PawnIslands(whitePawns, blackPawns);

entry.Update(_kingPawnUniqueIdentifier, pawnScore);
entry.Update(_state.KingPawnUniqueIdentifier, pawnScore);
packedScore += pawnScore;
}

Expand Down Expand Up @@ -191,14 +191,14 @@ public partial class Position
}
else
{
IncrementalEvalAccumulator = 0;
IncrementalPhaseAccumulator = 0;
_state.IncrementalEvalAccumulator = 0;
_state.IncrementalPhaseAccumulator = 0;

var kingPawnIndex = _kingPawnUniqueIdentifier & Constants.KingPawnHashMask;
var kingPawnIndex = _state.KingPawnUniqueIdentifier & Constants.KingPawnHashMask;
ref var entry = ref pawnEvalTable[kingPawnIndex];

// pawnTable hit: We can reuse cached eval for pawn additional evaluation + PieceProtectedByPawnBonus + KingShieldBonus
if (entry.Key == _kingPawnUniqueIdentifier)
if (entry.Key == _state.KingPawnUniqueIdentifier)
{
packedScore += entry.PackedScore;

Expand All @@ -211,7 +211,7 @@ public partial class Position
{
whitePawnsCopy = whitePawnsCopy.WithoutLS1B(out var pieceSquareIndex);

IncrementalEvalAccumulator += PSQT(whiteBucket, blackBucket, (int)Piece.P, pieceSquareIndex);
_state.IncrementalEvalAccumulator += PSQT(whiteBucket, blackBucket, (int)Piece.P, pieceSquareIndex);

// No incremental eval - included in pawn table | packedScore += AdditionalPieceEvaluation(...);
}
Expand All @@ -225,7 +225,7 @@ public partial class Position
{
blackPawnsCopy = blackPawnsCopy.WithoutLS1B(out var pieceSquareIndex);

IncrementalEvalAccumulator += PSQT(blackBucket, whiteBucket, (int)Piece.p, pieceSquareIndex);
_state.IncrementalEvalAccumulator += PSQT(blackBucket, whiteBucket, (int)Piece.p, pieceSquareIndex);

// No incremental eval - included in pawn table | packedScore -= AdditionalPieceEvaluation(...);
}
Expand All @@ -249,7 +249,7 @@ public partial class Position
{
whitePawnsCopy = whitePawnsCopy.WithoutLS1B(out var pieceSquareIndex);

IncrementalEvalAccumulator += PSQT(whiteBucket, blackBucket, (int)Piece.P, pieceSquareIndex);
_state.IncrementalEvalAccumulator += PSQT(whiteBucket, blackBucket, (int)Piece.P, pieceSquareIndex);

pawnScore += PawnAdditionalEvaluation(ref evaluationContext, whiteBucket, blackBucket, pieceSquareIndex, (int)Piece.P, whiteKing, blackKing);
}
Expand All @@ -268,15 +268,15 @@ public partial class Position
{
blackPawnsCopy = blackPawnsCopy.WithoutLS1B(out var pieceSquareIndex);

IncrementalEvalAccumulator += PSQT(blackBucket, whiteBucket, (int)Piece.p, pieceSquareIndex);
_state.IncrementalEvalAccumulator += PSQT(blackBucket, whiteBucket, (int)Piece.p, pieceSquareIndex);

pawnScore -= PawnAdditionalEvaluation(ref evaluationContext, blackBucket, whiteBucket, pieceSquareIndex, (int)Piece.p, blackKing, whiteKing);
}

// Pawn islands
pawnScore += PawnIslands(whitePawns, blackPawns);

entry.Update(_kingPawnUniqueIdentifier, pawnScore);
entry.Update(_state.KingPawnUniqueIdentifier, pawnScore);
packedScore += pawnScore;
}

Expand All @@ -292,9 +292,9 @@ public partial class Position
{
bitboard = bitboard.WithoutLS1B(out var pieceSquareIndex);

IncrementalEvalAccumulator += PSQT(whiteBucket, blackBucket, pieceIndex, pieceSquareIndex);
_state.IncrementalEvalAccumulator += PSQT(whiteBucket, blackBucket, pieceIndex, pieceSquareIndex);

IncrementalPhaseAccumulator += GamePhaseByPiece[pieceIndex];
_state.IncrementalPhaseAccumulator += GamePhaseByPiece[pieceIndex];

packedScore += AdditionalPieceEvaluation(ref evaluationContext, pieceSquareIndex, whiteBucket, blackBucket, pieceIndex, (int)Side.White, blackPawnAttacks, blackKing);
}
Expand All @@ -313,17 +313,17 @@ public partial class Position
{
bitboard = bitboard.WithoutLS1B(out var pieceSquareIndex);

IncrementalEvalAccumulator += PSQT(blackBucket, whiteBucket, pieceIndex, pieceSquareIndex);
_state.IncrementalEvalAccumulator += PSQT(blackBucket, whiteBucket, pieceIndex, pieceSquareIndex);

IncrementalPhaseAccumulator += GamePhaseByPiece[pieceIndex];
_state.IncrementalPhaseAccumulator += GamePhaseByPiece[pieceIndex];

packedScore -= AdditionalPieceEvaluation(ref evaluationContext, pieceSquareIndex, blackBucket, whiteBucket, pieceIndex, (int)Side.Black, whitePawnAttacks, whiteKing);
}
}

packedScore += IncrementalEvalAccumulator;
gamePhase += IncrementalPhaseAccumulator;
IsIncrementalEval = true;
packedScore += _state.IncrementalEvalAccumulator;
gamePhase += _state.IncrementalPhaseAccumulator;
_state.IsIncrementalEval = true;
}

// Kings - they can't be incremental due to the king buckets
Expand Down Expand Up @@ -519,8 +519,8 @@ public partial class Position
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public int Phase()
{
var gamePhase = IsIncrementalEval
? IncrementalPhaseAccumulator
var gamePhase = _state.IsIncrementalEval
? _state.IncrementalPhaseAccumulator
: PhaseFromScratch();

return (gamePhase > MaxPhase) // Early promotions
Expand Down
2 changes: 1 addition & 1 deletion src/Lynx/Model/Game.cs
Original file line number Diff line number Diff line change
Expand Up @@ -266,7 +266,7 @@ public static bool IsThreefoldRepetition(ReadOnlySpan<ulong> positionHashHistory
public static bool Is50MovesRepetition(int halfMovesWithoutCaptureOrPawnMove) => halfMovesWithoutCaptureOrPawnMove >= 100;

[MethodImpl(MethodImplOptions.AggressiveInlining)]
public GameState MakeMove(Move moveToPlay)
public PositionState MakeMove(Move moveToPlay)
{
var gameState = CurrentPosition.MakeMove(moveToPlay);

Expand Down
62 changes: 0 additions & 62 deletions src/Lynx/Model/GameState.cs

This file was deleted.

Loading
Loading