Code: Select all
for(...any move at root...)
{
Execute(move);
int val = -AlfaBeta(-valInfinity, valInfinity, iDepth - 1);
int valok = val;
val = -AlfaBeta(-valok, valok, iDepth - 1);
if (val != valok) std::cout << "# !!! bad window";
UndoMove();
}
Code: Select all
# _________________________ alfabeta : 2
# f2f4: nodes gain 21-2=19 90.48%
# g2g4: nodes gain 21-3=18 85.71%
# h2h4: !! bad window val -6 valok -10
# d2d4: nodes gain 21-21=0 0.00%
# a2a4: !! bad window val -9 valok -10
# b2b4: !! bad window val -9 valok -10
# c2c4: !! bad window val 1 valok -3
# e2e4: nodes gain 21-21=0 0.00%
# b1a3: nodes gain 21-2=19 90.48%
# b1c3: nodes gain 21-2=19 90.48%
# g1h3: nodes gain 21-2=19 90.48%
# g1f3: nodes gain 21-21=0 0.00%
# b2b3: nodes gain 21-2=19 90.48%
# c2c3: nodes gain 21-2=19 90.48%
# d2d3: nodes gain 21-2=19 90.48%
# e2e3: nodes gain 21-2=19 90.48%
# f2f3: nodes gain 21-2=19 90.48%
# g2g3: nodes gain 21-2=19 90.48%
# h2h3: nodes gain 21-2=19 90.48%
# a2a3: nodes gain 21-2=19 90.48%
# nodes 519 ms 16 nodes/s 32437 branch 9.02
# _________________________ alfabeta : 4
# d2d4: nodes gain 1910-1636=274 14.35%
# g1f3: nodes gain 1415-1334=81 5.72%
# e2e4: nodes gain 2395-1924=471 19.67%
# c2c4: nodes gain 1807-1532=275 15.22%
# b1c3: nodes gain 1796-1542=254 14.14%
# d2d3: nodes gain 2059-1167=892 43.32%
# f2f4: nodes gain 1148-652=496 43.21%
# e2e3: nodes gain 2476-2331=145 5.86%
# h2h4: !! bad window val 1 valok -1
# g1h3: nodes gain 1687-935=752 44.58%
# b2b4: !! bad window val -10 valok -11
# a2a4: !! bad window val 1 valok -1
# b1a3: nodes gain 1919-1169=750 39.08%
# b2b3: nodes gain 2087-1956=131 6.28%
# g2g4: nodes gain 839-22=817 97.38%
# f2f3: !! bad window val 11 valok -11
# g2g3: nodes gain 1645-1496=149 9.06%
# h2h3: !! bad window val 1 valok -1
# a2a3: !! bad window val 1 valok -1
# c2c3: nodes gain 1936-1830=106 5.48%
# nodes 52886 ms 78 nodes/s 678025 branch 7.85
# _________________________ alfabeta : 6
# e2e3: nodes gain 151487-92930=58557 38.65%
# e2e4: nodes gain 135119-93179=41940 31.04%
# c2c4: nodes gain 51816-36452=15364 29.65%
# g2g3: nodes gain 79390-70300=9090 11.45%
# b2b3: nodes gain 143942-95926=48016 33.36%
# c2c3: nodes gain 107472-94094=13378 12.45%
# d2d4: nodes gain 152200-103558=48642 31.96%
# f2f3: !! bad window val 6 valok -6
# g1f3: nodes gain 166724-126492=40232 24.13%
# b1c3: nodes gain 90857-82384=8473 9.33%
# b1a3: nodes gain 89943-34078=55865 62.11%
# d2d3: nodes gain 139871-97309=42562 30.43%
# f2f4: nodes gain 137687-70944=66743 48.47%
# g1h3: nodes gain 60966-30612=30354 49.79%
# a2a4: nodes gain 122183-113062=9121 7.47%
# h2h4: nodes gain 67355-56393=10962 16.27%
# h2h3: nodes gain 95791-77593=18198 19.00%
# a2a3: nodes gain 102746-75184=27562 26.83%
# b2b4: nodes gain 95665-77630=18035 18.85%
# g2g4: nodes gain 63612-54526=9086 14.28%
# nodes 3667316 ms 3682 nodes/s 996011 branch 8.44
Should i search for a bug in my alfabeta or it's normal to get fail-low/high, even in a "pure alfabeta" function?
I plan to compare alfabeta returned value to those that perft can return, to know if alfabeta works in a perfect way.