Skip to content

Commit e699b41

Browse files
committed
refactored pcsq eval into own class
1 parent 51ce477 commit e699b41

File tree

7 files changed

+76
-59
lines changed

7 files changed

+76
-59
lines changed

NoraGrace/NoraGrace.Engine/Board.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -79,20 +79,20 @@ public void Reset(Move move, Position enpassant, CastleFlags castle, int fifty,
7979

8080
private int _movesSinceNull = 100;
8181

82-
private readonly Evaluation.Evaluator _pcSqEvaluator;
82+
private readonly Evaluation.PcSqEvaluator _pcSqEvaluator;
8383
private Evaluation.PhasedScore _pcSq;
8484

85-
public Board(Evaluation.Evaluator pcSqEvaluator = null)
85+
public Board(Evaluation.PcSqEvaluator pcSqEvaluator = null)
8686
: this(new FEN(FEN.FENStart), pcSqEvaluator)
8787
{
8888

8989
}
90-
public Board(string fen, Evaluation.Evaluator pcSqEvaluator = null)
90+
public Board(string fen, Evaluation.PcSqEvaluator pcSqEvaluator = null)
9191
: this(new FEN(fen), pcSqEvaluator)
9292
{
9393

9494
}
95-
public Board(FEN fen, Evaluation.Evaluator pcSqEvaluator = null)
95+
public Board(FEN fen, Evaluation.PcSqEvaluator pcSqEvaluator = null)
9696
{
9797

9898
_histUB = _hist.GetUpperBound(0);
@@ -101,13 +101,13 @@ public Board(FEN fen, Evaluation.Evaluator pcSqEvaluator = null)
101101
_hist[i] = new MoveHistory();
102102
}
103103

104-
_pcSqEvaluator = pcSqEvaluator ?? Evaluation.Evaluator.Default;
104+
_pcSqEvaluator = pcSqEvaluator ?? Evaluation.Evaluator.Default.PcSq;
105105
initPieceAtArray();
106106

107107
this.FENCurrent = fen;
108108
}
109109

110-
public Board(FEN fen, IEnumerable<Move> prevMoves, Evaluation.Evaluator pcSqEvaluator = null)
110+
public Board(FEN fen, IEnumerable<Move> prevMoves, Evaluation.PcSqEvaluator pcSqEvaluator = null)
111111
: this(fen, pcSqEvaluator)
112112
{
113113
foreach (Move move in prevMoves)
@@ -315,7 +315,7 @@ public Evaluation.PhasedScore PcSqValue
315315
get { return _pcSq; }
316316
}
317317

318-
public Evaluation.Evaluator PcSqEvaluator
318+
public Evaluation.PcSqEvaluator PcSqEvaluator
319319
{
320320
get { return _pcSqEvaluator; }
321321
}

NoraGrace/NoraGrace.Engine/Evaluation/Evaluator.cs

Lines changed: 4 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ public class Evaluator: IChessEval
2020

2121
protected readonly PawnEvaluator _evalPawns;
2222
public readonly MaterialEvaluator _evalMaterial;
23+
private readonly PcSqEvaluator _evalPcSq;
2324

24-
public readonly PhasedScore[][] _pcsqPiecePos = new PhasedScore[PieceUtil.LookupArrayLength][];
2525
public readonly PhasedScore[][] _mobilityPieceTypeCount = new PhasedScore[PieceTypeUtil.LookupArrayLength][];
2626

2727
public readonly int[] _endgameMateKingPcSq;
@@ -90,46 +90,7 @@ public Evaluator(Settings settings)
9090
//setup pawn evaluation
9191
_evalPawns = new PawnEvaluator(_settings, 10000);
9292
_evalMaterial = new MaterialEvaluator(_settings.MaterialValues);
93-
94-
95-
//normalize pcsq
96-
Action<Settings.PcSqDictionary> actionNormalizePcSq = (data) =>
97-
{
98-
int sum = PositionUtil.AllPositions.Sum(p => data[p]);
99-
int per = sum / 64;
100-
data.Offset -= per;
101-
};
102-
foreach (PieceType pieceType in PieceTypeUtil.AllPieceTypes)
103-
{
104-
actionNormalizePcSq(settings.PcSqTables[pieceType][GameStage.Opening]);
105-
actionNormalizePcSq(settings.PcSqTables[pieceType][GameStage.Endgame]);
106-
}
107-
108-
//setup piecesq tables
109-
foreach (Piece piece in PieceUtil.AllPieces)
110-
{
111-
_pcsqPiecePos[(int)piece] = new PhasedScore[64];
112-
foreach (Position pos in PositionUtil.AllPositions)
113-
{
114-
115-
if (piece.PieceToPlayer() == Player.White)
116-
{
117-
_pcsqPiecePos[(int)piece][(int)pos] = PhasedScoreUtil.Create(
118-
settings.PcSqTables[piece.ToPieceType()][GameStage.Opening][pos],
119-
settings.PcSqTables[piece.ToPieceType()][GameStage.Endgame][pos]);
120-
}
121-
else
122-
{
123-
_pcsqPiecePos[(int)piece][(int)pos] = PhasedScoreUtil.Create(
124-
-settings.PcSqTables[piece.ToPieceType()][GameStage.Opening][pos.Reverse()],
125-
-settings.PcSqTables[piece.ToPieceType()][GameStage.Endgame][pos.Reverse()]);
126-
}
127-
128-
129-
}
130-
}
131-
132-
93+
_evalPcSq = new PcSqEvaluator(settings);
13394

13495
//setup mobility arrays
13596

@@ -201,13 +162,9 @@ public Evaluator(Settings settings)
201162

202163
}
203164

204-
public void PcSqValuesAdd(Piece piece, Position pos, ref PhasedScore value)
205-
{
206-
value = value.Add(_pcsqPiecePos[(int)piece][(int)pos]);
207-
}
208-
public void PcSqValuesRemove(Piece piece, Position pos, ref PhasedScore value)
165+
public PcSqEvaluator PcSq
209166
{
210-
value = value.Subtract(_pcsqPiecePos[(int)piece][(int)pos]);
167+
get { return _evalPcSq; }
211168
}
212169

213170
public int EvalFor(Board board, Player who)
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Text;
5+
using System.Threading.Tasks;
6+
7+
namespace NoraGrace.Engine.Evaluation
8+
{
9+
public class PcSqEvaluator
10+
{
11+
private readonly PhasedScore[][] _pcsqPiecePos = new PhasedScore[PieceUtil.LookupArrayLength][];
12+
13+
public void PcSqValuesAdd(Piece piece, Position pos, ref PhasedScore value)
14+
{
15+
value = value.Add(_pcsqPiecePos[(int)piece][(int)pos]);
16+
}
17+
public void PcSqValuesRemove(Piece piece, Position pos, ref PhasedScore value)
18+
{
19+
value = value.Subtract(_pcsqPiecePos[(int)piece][(int)pos]);
20+
}
21+
22+
public PcSqEvaluator(Settings settings)
23+
{
24+
Action<Settings.PcSqDictionary> actionNormalizePcSq = (data) =>
25+
{
26+
int sum = PositionUtil.AllPositions.Sum(p => data[p]);
27+
int per = sum / 64;
28+
data.Offset -= per;
29+
};
30+
foreach (PieceType pieceType in PieceTypeUtil.AllPieceTypes)
31+
{
32+
actionNormalizePcSq(settings.PcSqTables[pieceType][GameStage.Opening]);
33+
actionNormalizePcSq(settings.PcSqTables[pieceType][GameStage.Endgame]);
34+
}
35+
36+
//setup piecesq tables
37+
foreach (Piece piece in PieceUtil.AllPieces)
38+
{
39+
_pcsqPiecePos[(int)piece] = new PhasedScore[64];
40+
foreach (Position pos in PositionUtil.AllPositions)
41+
{
42+
43+
if (piece.PieceToPlayer() == Player.White)
44+
{
45+
_pcsqPiecePos[(int)piece][(int)pos] = PhasedScoreUtil.Create(
46+
settings.PcSqTables[piece.ToPieceType()][GameStage.Opening][pos],
47+
settings.PcSqTables[piece.ToPieceType()][GameStage.Endgame][pos]);
48+
}
49+
else
50+
{
51+
_pcsqPiecePos[(int)piece][(int)pos] = PhasedScoreUtil.Create(
52+
-settings.PcSqTables[piece.ToPieceType()][GameStage.Opening][pos.Reverse()],
53+
-settings.PcSqTables[piece.ToPieceType()][GameStage.Endgame][pos.Reverse()]);
54+
}
55+
}
56+
}
57+
}
58+
}
59+
}

NoraGrace/NoraGrace.Engine/NoraGrace.Engine.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@
6262
<Compile Include="Evaluation\Helpers\QuadraticBezier.cs" />
6363
<Compile Include="Evaluation\MaterialEvaluator.cs" />
6464
<Compile Include="Evaluation\PawnEvaluator.cs" />
65+
<Compile Include="Evaluation\PcSqEvaluator.cs" />
6566
<Compile Include="Evaluation\Settings.cs" />
6667
<Compile Include="FEN.cs" />
6768
<Compile Include="File.cs" />

NoraGrace/NoraGrace.Engine/Search.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,7 @@ public class Args
189189
public TranspositionTable TransTable { get; set; }
190190
public BlunderChance Blunder { get; set; }
191191
public TimeSpan Delay { get; set; }
192-
public Evaluation.IChessEval Eval { get; set; }
192+
public Evaluation.Evaluator Eval { get; set; }
193193
public int MaxNodes { get; set; }
194194
public int ContemptForDraw { get; set; }
195195
public ITimeManager TimeManager { get; set; }
@@ -247,9 +247,9 @@ public Search(Args args)
247247

248248
SearchArgs = args;
249249
eval = args.Eval;
250-
_evalInfoStack = new Evaluation.ChessEvalInfoStack(args.Eval as Evaluation.Evaluator, MAX_PLY + 1);
250+
_evalInfoStack = new Evaluation.ChessEvalInfoStack(args.Eval, MAX_PLY + 1);
251251

252-
board = new Board(SearchArgs.GameStartPosition);
252+
board = new Board(SearchArgs.GameStartPosition, args.Eval.PcSq);
253253

254254

255255
foreach (Move histmove in SearchArgs.GameMoves)

NoraGrace/NoraGrace.EvalTune/DeterministicPlayer.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public Move Move(FEN gameStartPosition, IEnumerable<Move> movesAlreadyPlayed, Ti
3636
args.GameStartPosition = gameStartPosition;
3737
args.GameMoves = new List<Move>(movesAlreadyPlayed);
3838
args.TransTable = TransTable;
39-
args.Eval = Eval;
39+
args.Eval = Eval as Evaluator;
4040
args.TimeManager = this.NodeManager;
4141
args.ContemptForDraw = 50;
4242
if (AlterSearchArgs != null) { AlterSearchArgs(args); }

NoraGrace/NoraGrace.EvalTune2/Fitness.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ public static double PgnListEParallel(IEnumerable<BinaryPGN> pgnList, Func<Engin
7070

7171
public static double PgnE(BinaryPGN pgn, Evaluator evaluator, MovePicker.Stack moveStack)
7272
{
73-
Board board = new Board(evaluator);
73+
Board board = new Board(evaluator.PcSq);
7474
GameResult result = pgn.Result;
7575

7676
int c = 0;

0 commit comments

Comments
 (0)