Skip to content

Commit 0661d4b

Browse files
committed
material special cases
1 parent 02e8073 commit 0661d4b

File tree

5 files changed

+88
-20
lines changed

5 files changed

+88
-20
lines changed

NoraGrace/NoraGrace.Engine.Tests/PhasedScoreTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,8 +101,8 @@ public void ApplyWeightsTest()
101101
{
102102
foreach (var s1 in Samples())
103103
{
104-
Assert.AreEqual<int>(s1.Opening, s1.Score.ApplyWeights(100));
105-
Assert.AreEqual<int>(s1.Endgame, s1.Score.ApplyWeights(0));
104+
Assert.AreEqual<int>(s1.Opening, s1.Score.ApplyScaleFactor(ScaleFactor.FULL));
105+
Assert.AreEqual<int>(s1.Endgame, s1.Score.ApplyScaleFactor(ScaleFactor.NONE));
106106

107107

108108
}

NoraGrace/NoraGrace.Engine/Evaluation/MaterialEvaluator.cs

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,10 @@ public int[] GetValues()
4545
public PieceSettings Rook { get; set; }
4646
public PieceSettings Queen { get; set; }
4747

48+
public int RookMinorExchange { get; set; }
49+
public int PawnMinorExchange { get; set; }
50+
public int QueenRookExchange { get; set; }
51+
4852
public MaterialSettingsPhase()
4953
{
5054
Pawn = new PawnSettings();
@@ -365,6 +369,14 @@ private double ScaleFactorPlayer(int myP, int myN, int myB, int myR, int myQ, in
365369

366370
private double MyMaterial(double totalPct, double pawnPct, double minorPct, int myP, int myN, int myB, int myR, int myQ, int hisP, int hisN, int hisB, int hisR, int hisQ)
367371
{
372+
int myMinor = myN + myB;
373+
int hisMinor = hisN + hisB;
374+
375+
int minorDiff = myMinor - hisMinor;
376+
int pawnDiff = myP - hisP;
377+
int rookDiff = myR - hisR;
378+
int queenDiff = myQ - hisQ;
379+
368380

369381
double pawnsOpening = _pawnValuesOpening.Take(myP).Sum();
370382
double pawnsEndgame = _pawnValuesEndGame.Take(myP).Sum();
@@ -390,6 +402,29 @@ private double MyMaterial(double totalPct, double pawnPct, double minorPct, int
390402
retval += (myR * rookVal);
391403
retval += (myQ * queenVal);
392404

405+
406+
if (minorDiff >= 1 && rookDiff < 0 && pawnDiff < 0)
407+
{
408+
//would rather have 2 minors rather than rook + pawns
409+
double rookMinorExchange = CalcWeight(pawnPct, _settings.Opening.RookMinorExchange, _settings.Endgame.RookMinorExchange);
410+
retval += rookMinorExchange;
411+
}
412+
else if (minorDiff > 0 && pawnDiff <= -2)
413+
{
414+
//would rather have minor than 2-3 pawns.
415+
double pawnMinorExchange = CalcWeight(pawnPct, _settings.Opening.PawnMinorExchange, _settings.Endgame.PawnMinorExchange);
416+
retval += pawnMinorExchange;
417+
}
418+
419+
if (rookDiff >= 2 && queenDiff < 0)
420+
{
421+
//would rather have two rooks vs queen + pawns.
422+
double queenRookExchange = CalcWeight(pawnPct, _settings.Opening.QueenRookExchange, _settings.Endgame.QueenRookExchange);
423+
retval += queenRookExchange;
424+
}
425+
426+
427+
//calc bonus/penalty for pairs of pieces
393428
if (myN > 1)
394429
{
395430
retval += CalcWeight(pawnPct, _settings.Opening.Knight.PairBonus, _settings.Endgame.Knight.PairBonus); ;

NoraGrace/NoraGrace.Engine/Evaluation/Settings.cs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -140,15 +140,21 @@ public static Settings Default()
140140
Knight = new MaterialSettingsPhase.PieceSettings() { BaseValue = 315, PairBonus = 0 },
141141
Bishop = new MaterialSettingsPhase.PieceSettings() { BaseValue = 310, PairBonus = 25 },
142142
Rook = new MaterialSettingsPhase.PieceSettings() { BaseValue = 500, PairBonus = 0 },
143-
Queen = new MaterialSettingsPhase.PieceSettings() { BaseValue = 1100, PairBonus = 0 }
143+
Queen = new MaterialSettingsPhase.PieceSettings() { BaseValue = 1100, PairBonus = 0 },
144+
RookMinorExchange = 60,
145+
PawnMinorExchange = 75,
146+
QueenRookExchange = 30
144147
},
145148
Endgame = new MaterialSettingsPhase()
146149
{
147150
Pawn = new MaterialSettingsPhase.PawnSettings() { First = 120, Eighth = 75, Curve = new Helpers.Point() { X = .3, Y = .7 } },
148151
Knight = new MaterialSettingsPhase.PieceSettings() { BaseValue = 305, PairBonus = 0 },
149152
Bishop = new MaterialSettingsPhase.PieceSettings() { BaseValue = 325, PairBonus = 75 },
150153
Rook = new MaterialSettingsPhase.PieceSettings() { BaseValue = 550, PairBonus = 0 },
151-
Queen = new MaterialSettingsPhase.PieceSettings() { BaseValue = 1100, PairBonus = 0 }
154+
Queen = new MaterialSettingsPhase.PieceSettings() { BaseValue = 1100, PairBonus = 0 },
155+
RookMinorExchange = -30,
156+
PawnMinorExchange = 55,
157+
QueenRookExchange = 60
152158
}
153159

154160
},
@@ -442,7 +448,6 @@ public static Settings Default()
442448

443449
public ChessPieceTypeDictionary<ChessGameStageDictionary<PcSqDictionary>> PcSqTables = new ChessPieceTypeDictionary<ChessGameStageDictionary<PcSqDictionary>>();
444450
public MaterialSettings MaterialValues = new MaterialSettings();
445-
public ChessGameStageDictionary<int> MaterialBishopPair = new ChessGameStageDictionary<int>();
446451

447452
public ChessGameStageDictionary<int> PawnDoubled = new ChessGameStageDictionary<int>();
448453
public ChessGameStageDictionary<int> PawnIsolated = new ChessGameStageDictionary<int>();

NoraGrace/NoraGrace.EvalTune2/Program.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ static void Main(string[] args)
4444
parameters.AddRange(TunableParameter.MaterialParams());
4545

4646
//mobility
47-
parameters.AddRange(TunableParameter.MobilityParams());
47+
//parameters.AddRange(TunableParameter.MobilityParams());
4848

4949
////pawns
5050
//parameters.AddRange(TunableParameter.PawnParams());
@@ -59,7 +59,7 @@ static void Main(string[] args)
5959
//parameters.AddRange(TunableParameterPcSq.SelectAll());
6060

6161

62-
Tune(parameters, "material", progCB, true);
62+
Tune(parameters, "exchanges", progCB, true);
6363
//Tune(parameters, "AllButPcSq", progCB, true);
6464

6565
//FindRook(progCB);

NoraGrace/NoraGrace.EvalTune2/TunableParameter.cs

Lines changed: 41 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -152,20 +152,48 @@ public static IEnumerable<TunableParameter> KingSafetyParams()
152152

153153
public static IEnumerable<TunableParameter> MaterialParams()
154154
{
155-
yield return new TunableParameter()
156-
{
157-
Name = "BishopPairOpening",
158-
fnGetValue = (s) => s.MaterialBishopPair.Opening,
159-
fnSetValue = (s, v) => { s.MaterialBishopPair.Opening = (int)v; },
160-
Increment = 5
161-
};
162-
yield return new TunableParameter()
155+
156+
foreach (var gs in GameStageUtil.AllGameStages)
163157
{
164-
Name = "BishopPairEndgame",
165-
fnGetValue = (s) => s.MaterialBishopPair.Endgame,
166-
fnSetValue = (s, v) => { s.MaterialBishopPair.Endgame = (int)v; },
167-
Increment = 5
168-
};
158+
yield return new TunableParameter()
159+
{
160+
Name = "PawnMinorExchange" + gs,
161+
fnGetValue = (s) => s.MaterialValues[gs].PawnMinorExchange,
162+
fnSetValue = (s, v) => { s.MaterialValues[gs].PawnMinorExchange = (int)v; },
163+
Increment = 5
164+
};
165+
166+
yield return new TunableParameter()
167+
{
168+
Name = "RookMinorExchange" + gs,
169+
fnGetValue = (s) => s.MaterialValues[gs].RookMinorExchange,
170+
fnSetValue = (s, v) => { s.MaterialValues[gs].RookMinorExchange = (int)v; },
171+
Increment = 5
172+
};
173+
174+
yield return new TunableParameter()
175+
{
176+
Name = "QueenRookExchange" + gs,
177+
fnGetValue = (s) => s.MaterialValues[gs].QueenRookExchange,
178+
fnSetValue = (s, v) => { s.MaterialValues[gs].QueenRookExchange = (int)v; },
179+
Increment = 5
180+
};
181+
}
182+
183+
//yield return new TunableParameter()
184+
//{
185+
// Name = "BishopPairOpening",
186+
// fnGetValue = (s) => s.MaterialBishopPair.Opening,
187+
// fnSetValue = (s, v) => { s.MaterialBishopPair.Opening = (int)v; },
188+
// Increment = 5
189+
//};
190+
//yield return new TunableParameter()
191+
//{
192+
// Name = "BishopPairEndgame",
193+
// fnGetValue = (s) => s.MaterialBishopPair.Endgame,
194+
// fnSetValue = (s, v) => { s.MaterialBishopPair.Endgame = (int)v; },
195+
// Increment = 5
196+
//};
169197
//foreach (var pt in PieceTypeUtil.AllPieceTypes.Where(t => t != PieceType.King))
170198
//{
171199
// yield return new TunableParameterMaterial(GameStage.Opening, pt);

0 commit comments

Comments
 (0)