Re: IvanHoe 999946 Beta
Posted: Mon Jan 16, 2012 5:58 am
Komodo 4 really exposed inefficiency of IvanHoe's clock. The adjustment below is an improvement attempt without much deviation.
RobboLito.h:
UCI time management parameters can be removed and enabled for debugging mode only. The engine already has more than enough options which cause problems for small resolution displays on buggy Fritz GUI. Free ChessGUI is better for engine match/tournament anyways and does not have issue with rich UCI options. Arena which is good for analyzing, does not mind many parameters either. Anyhow, I think this was a huge waste of time. 
Edit
Forgot to mention builds using the updated clock was uploaded yesterday with the following md5sum signatures:
d733aa5e23f51e42a98863653da7d001 IvanHoe999946h.7z
For version 999946f (Linux), the 64-bit version was built with ICC, and 32-bit, GCC, and while Windows builds are ICC and MSVC respectively. Previous 999946h build uses GCC for both 64/32 bit builds, and there was no change for Windows. The current 999946h uses ICC for 32-bit/64-bit builds for both operating systems.
Regarding Linux builds and glibc incompatibility, it could be built statically linked, but RobboBases will not work for 999946. This is because "Using 'dlopen' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking." It won't work. The alternative is to build static (.a) RobboBases library, then use "STATIC_LINKERY" option in the source, and finally link it against IvanHoe during compile. There are issues however with multiple re-definitions that needs fixing.
void TimeManager (sint64 TIME, sint64 OPP_TIME, sint64 INCREMENT, int mtg) { double rat; if (mtg) { if (mtg > 25) mtg = 25; DESIRED_TIME = TIME / mtg + INCREMENT; ABSOLUTE_TIME = (TIME * mtg) / (4 * mtg - 3) - MIN (1000000, TIME / 10); if (mtg == 1) ABSOLUTE_TIME -= MIN (1000000, ABSOLUTE_TIME / 10); if (ABSOLUTE_TIME < 1000) /* porque? */ ABSOLUTE_TIME = 1000; } else { ABSOLUTE_TIME = (TIME * ABSOLUTE_PERCENT) / 100 - 10000; if (ABSOLUTE_TIME < 1000) ABSOLUTE_TIME = 1000; DESIRED_TIME = (TIME * DESIRED_MILLIS) / 1000 + INCREMENT; } if (SINCE_NEW_GAME < BOOK_EXIT_MOVES) DESIRED_TIME += (DESIRED_TIME * (BOOK_EXIT_MOVES - SINCE_NEW_GAME)) / BOOK_EXIT_MOVES; #if 1 if (!BUFFER_TIME && !INCREMENT) BUFFER_TIME = 3000; if (DESIRED_TIME_FLAG) { rat = ((double) (TIME + 1)) / ((double) (OPP_TIME + 1)); if (rat < 0.95) DESIRED_TIME -= (DESIRED_TIME >> 2) + DESIRED_TIME >> 2; else if (rat > 1.25) DESIRED_TIME += (DESIRED_TIME >> 2) + DESIRED_TIME >> 2; DESIRED_TIME_FLAG = 0; } else DESIRED_TIME_FLAG = 1; #endif if (DESIRED_TIME > ABSOLUTE_TIME) DESIRED_TIME = ABSOLUTE_TIME; if (DESIRED_TIME < 1000) DESIRED_TIME = 1000; EASY_TIME = (DESIRED_TIME * EASY_FACTOR) / 100; if (UCI_PONDER) EASY_TIME = (DESIRED_TIME * EASY_FACTOR_PONDER) / 100; BATTLE_TIME = (DESIRED_TIME * BATTLE_FACTOR) / 100; ORDINARY_TIME = (DESIRED_TIME * ORDINARY_FACTOR) / 100; }
Code: Select all
DESIRED_TIME_FLAG = 0;
EASY_FACTOR_PONDER = 30;
ORDINARY_FACTOR = 70;
Code: Select all
int DESIRED_TIME_FLAG;

Edit
Forgot to mention builds using the updated clock was uploaded yesterday with the following md5sum signatures:
d733aa5e23f51e42a98863653da7d001 IvanHoe999946h.7z
Code: Select all
12ed94b63342bec0062c74220dfd121b ./Android/IvanHoe999946h
767887241faec364568e1b0e854dece2 ./Linux/Mode_Game_Play/x86-64/IvanHoe999946h
69ef5166dcf987299c14e755d7efd82f ./Linux/Mode_Game_Play/x86-32/IvanHoe999946h
83f703facb138175eef62e281d690b8a ./Windows/Mode_Game_Play/x86-64/IvanHoe999946h.exe
3754454bb784e180b098f49fef4cff38 ./Windows/Mode_Game_Play/x86-32/IvanHoe999946h.exe
e1fad6e7d42e96d70687c121cf895e6c ./Help.pdf
Regarding Linux builds and glibc incompatibility, it could be built statically linked, but RobboBases will not work for 999946. This is because "Using 'dlopen' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking." It won't work. The alternative is to build static (.a) RobboBases library, then use "STATIC_LINKERY" option in the source, and finally link it against IvanHoe during compile. There are issues however with multiple re-definitions that needs fixing.