That's because the original source code is screwed up - or shall we say, backwards. For some very strange unexplained reason. The booleans bzug and wzug are negated in evaluation.c and mobility.c. It's quite strange that they would publish this in this way. It literally turns OFF the code. Just switch the declarations to false and the conditions to true. Maybe they were testing things and uploaded a test version. Here's the diff for evaluation.c and then mobility.c below that, which will switch the TRUE/FALSE on bzug and wzug:Robert Houdart wrote:As I was impressed by the results you reported (quite unexpected for me), I downloaded the "IvanHoe999953.exe" version from the ChessLogik site.
It cannot solve any of the previously mentioned positions. I've also tried "IvanHoe999952a.exe" from the same web site, same negative results.
Below the results I obtain with IvanHoe999952a.exe after 30 to 60 seconds in each position:
Position 1: 1Q6/8/8/2pK3p/8/5N1q/1P4pp/5Rbk w - - 0 1
29 00:28,423 59.130.699 2.130.000 +0,05 1.Qxh2+ Qxh2 2.Rc1 h4 3.Ke4 c4 4.Rd1 c3 5.bxc3 h3 6.Rc1 Qe5+ 7.Kxe5 h2 8.Rc2 Bb6 9.Ke4 g1Q 10.Rxh2+ Qxh2 11.Nxh2 Kxh2 12.Kd5 Kg2 13.c4 Bf2 14.Kd6 Kf3 15.Kd7 Ba7 16.Kc7 Bd4 17.Kb7 Ke3 18.Kc6 Ke4 19.c5 Kf3 20.Kd5 Bxc5 21.Kc4 Bf2
Position 2: 3Q4/3p4/P2p4/N2b4/8/4P3/5p1p/5Kbk w - - 0 1
23 00:31,949 56.383.647 1.802.000 +0,28 1.Qf6 Be4 2.Qxf2 Bd3+ 3.Qe2 Bxe2+ 4.Kxe2 Kg2 5.a7 h1Q 6.a8Q+ d5 7.Qxd5+ Kh2 8.Qh5+ Kg2 9.Qg4+ Kh2 10.Qf4+ Kh3 11.Qh6+ Kg2 12.Qg7+ Kh2 13.Qh7+ Kg2 14.Qe4+ Kh2 15.Qe5+ Kh3 16.Qf5+ Kg3 17.Nc4 Qg2+ 18.Kd3 Qf3 19.Qg5+ Kf2 20.Qf4 Kg2 21.Qd6 Qf5+ 22.Kd4 Qg4+ 23.Kc3 Qe6 24.Qd4 d5 25.Qg7+ Kf3
Position 3: 5q1k/5P1p/Q7/5n1p/6P1/7K/8/8 w - - 0 1
29 00:59,124 121.196.546 2.073.000 0,00 1.gxf5 Qxf7 2.Qa1+ Kg8 3.Qe5 Kf8 4.f6 Qd7+ 5.Kg3 Qg4+ 6.Kf2 Qb4 7.Qxh5 Qb2+ 8.Kg3 Qxf6 9.Qxh7 Qc3+ 10.Kg2 Qd2+ 11.Kh3 Qc3+ 12.Kh4 Qc4+ 13.Kg5 Qc1+ 14.Kg4 Qd1+ 15.Kf4 Qc1+ 16.Ke5 Qa1+ 17.Kf4 Qc1+
Is there something wrong with the KLO compiles on the ChessLogik site?
Robert
Code: Select all
--- ../IvanHoe-Beta-999953-Beta/evaluation.c 2010-07-16 09:22:00.000000000 -0500
+++ evaluation.c 2010-08-02 12:27:09.000000000 -0500
@@ -354,7 +354,7 @@
typePawnEval PAWN_INFO[1];
int ch;
#ifdef ZUGZWANG_DETECT
- boolean wzug = TRUE, bzug = TRUE;
+ boolean wzug = FALSE, bzug = FALSE;
#endif
PAWN_POINTER = PawnHash + (POSITION->DYN->PAWN_HASH & (PawnHashSize - 1));
@@ -633,7 +633,7 @@
T = A & wSafeMob;
#ifdef ZUGZWANG_DETECT
if (A & ~wBitboardOcc)
- wzug = FALSE;
+ wzug = TRUE;
#endif
POSITION->DYN->wAtt |= A;
if (A & bKatt)
@@ -669,7 +669,7 @@
A = AttR (b);
#ifdef ZUGZWANG_DETECT
if (A & ~wBitboardOcc)
- wzug = FALSE;
+ wzug = TRUE;
#endif
POSITION->DYN->wAtt |= A;
if (bBitboardK & ORTHO[b])
@@ -777,7 +777,7 @@
A = AttB (b);
#ifdef ZUGZWANG_DETECT
if (A & ~wBitboardOcc)
- wzug = FALSE;
+ wzug = TRUE;
#endif
POSITION->DYN->wAtt |= A;
if (bBitboardK & DIAG[b])
@@ -853,7 +853,7 @@
A = AttN[b];
#ifdef ZUGZWANG_DETECT
if (A & ~wBitboardOcc)
- wzug = FALSE;
+ wzug = TRUE;
#endif
POSITION->DYN->wAtt |= A;
if (A & (bKatt | bBitboardK))
@@ -942,7 +942,7 @@
A = AttB | AttR;
#ifdef ZUGZWANG_DETECT
if (A & ~bBitboardOcc)
- bzug = FALSE;
+ bzug = TRUE;
#endif
T = A & bSafeMob;
POSITION->DYN->bAtt |= A;
@@ -981,7 +981,7 @@
A = AttR (b);
#ifdef ZUGZWANG_DETECT
if (A & ~bBitboardOcc)
- bzug = FALSE;
+ bzug = TRUE;
#endif
POSITION->DYN->bAtt |= A;
if (wBitboardK & ORTHO[b])
@@ -1089,7 +1089,7 @@
A = AttB (b);
#ifdef ZUGZWANG_DETECT
if (A & ~bBitboardOcc)
- bzug = FALSE;
+ bzug = TRUE;
#endif
POSITION->DYN->bAtt |= A;
if (wBitboardK & DIAG[b])
@@ -1167,7 +1167,7 @@
A = AttN[b];
#ifdef ZUGZWANG_DETECT
if (A & ~bBitboardOcc)
- bzug = FALSE;
+ bzug = TRUE;
#endif
POSITION->DYN->bAtt |= A;
if (A & (wKatt | wBitboardK))
Code: Select all
--- ../IvanHoe-Beta-999953-Beta/mobility.c 2010-07-16 09:22:00.000000000 -0500
+++ mobility.c 2010-08-02 12:28:53.000000000 -0500
@@ -6,7 +6,7 @@
uint64 U, A, T, AttB, AttR;
int b;
#ifdef ZUGZWANG_DETECT
- boolean wzug = TRUE, bzug = TRUE;
+ boolean wzug = FALSE, bzug = FALSE;
#endif
POSITION->DYN->wXray = 0;
POSITION->DYN->bXray = 0;
@@ -28,7 +28,7 @@
A = AttN[b];
#ifdef ZUGZWANG_DETECT
if (A & ~wBitboardOcc)
- wzug = FALSE;
+ wzug = TRUE;
#endif
POSITION->DYN->wAtt |= A;
if (A & bBitboardK)
@@ -40,7 +40,7 @@
A = AttB (b);
#ifdef ZUGZWANG_DETECT
if (A & ~wBitboardOcc)
- wzug = FALSE;
+ wzug = TRUE;
#endif
POSITION->DYN->wAtt |= A;
if (A & bBitboardK)
@@ -59,7 +59,7 @@
A = AttR (b);
#ifdef ZUGZWANG_DETECT
if (A & ~wBitboardOcc)
- wzug = FALSE;
+ wzug = TRUE;
#endif
POSITION->DYN->wAtt |= A;
if (A & bBitboardK)
@@ -80,7 +80,7 @@
A = AttB | AttR;
#ifdef ZUGZWANG_DETECT
if (A & ~wBitboardOcc)
- wzug = FALSE;
+ wzug = TRUE;
#endif
POSITION->DYN->wAtt |= A;
if (A & bBitboardK)
@@ -106,7 +106,7 @@
A = AttN[b];
#ifdef ZUGZWANG_DETECT
if (A & ~bBitboardOcc)
- bzug = FALSE;
+ bzug = TRUE;
#endif
POSITION->DYN->bAtt |= A;
if (A & wBitboardK)
@@ -118,7 +118,7 @@
A = AttB (b);
#ifdef ZUGZWANG_DETECT
if (A & ~bBitboardOcc)
- bzug = FALSE;
+ bzug = TRUE;
#endif
POSITION->DYN->bAtt |= A;
if (A & wBitboardK)
@@ -137,7 +137,7 @@
A = AttR (b);
#ifdef ZUGZWANG_DETECT
if (A & ~bBitboardOcc)
- bzug = FALSE;
+ bzug = TRUE;
#endif
POSITION->DYN->bAtt |= A;
if (A & wBitboardK)
@@ -158,7 +158,7 @@
A = AttB | AttR;
#ifdef ZUGZWANG_DETECT
if (A & ~bBitboardOcc)
- bzug = FALSE;
+ bzug = TRUE;
#endif
POSITION->DYN->bAtt |= A;
if (A & wBitboardK)