Page 1 of 11
Hippo Lite, what's really going on?
Posted: Tue Oct 20, 2009 6:33 am
by Michael Sherwin
I found a 64bit version of Ippolit and compared its play, node rate (adjusted), depth of search and other factors to Rybka232a32 (well that is the latest version that I have) and determined to the best of my ability that they are not even close to being the same.
Subjective first conclusion: not a clone
Based on what I have read about Ippolit's parameters, it is my experience as a programmer that if you take an engine based on soundness of play and make it more aggressive and do wild pruning to gain depth, etc, you end up with a weaker engine. Not a stronger one. Is Ippolit really so "poorly tuned" that it can be this strong.
Subjective second conclusion: not a clone
I scanned both Strelka's and Ippolit's source code. Assuming that Vas has not done a complete rewrite then I give the following opinion. Nothing is the same in the two sources. The data structures are different. The style is extremely different. The move generation is very different. The search functions are not in the style of Fruit/Strelka. The utility functions are very different. The two sources do not look like they are from the same planet let alone the same country!
Objective third opinion: not a clone
---
I did this analysis quickly, so I could be wrong. But, I will be very surprised if I am.
---
The dilemma is, now anyone wishing to be competitive at the highest level, has a new starting place or a moral reason to not even try. Why? What is the injury to the honest author? Well, simple. It is the fact that others will use this source to create even stronger engines in record time. So, even if Ippolit is a clone, that will not change this moral dilemma one darn bit. All engine authors have a right to compete with each other on equal ground. That ground has just become a lot higher.
There are those that do not want the ground to be elevated. That might be the true reason behind the attempt to squash this hippo in our backyard before it's noticed.
Re: Hippo Lite, what's really going on?
Posted: Tue Oct 20, 2009 7:22 am
by Graham Banks
Michael Sherwin wrote:I found a 64bit version of Ippolit and compared its play, node rate (adjusted), depth of search and other factors to Rybka232a32 (well that is the latest version that I have) and determined to the best of my ability that they are not even close to being the same.
Subjective first conclusion: not a clone
It's a Rybka 3 clone, not a Rybka 2.3.2a clone. They've reverse engineered Rybka 3 as best they can. They've then tried to "fix" it and make it stronger.
However, I'm not a programmer, so somebody else could probably do a better job of explaining things.
Cheers,
Graham.
Re: Hippo Lite, what's really going on?
Posted: Tue Oct 20, 2009 7:41 am
by M ANSARI
It has nothing to do with Rybka 2.3 and everything to do with Rybka 3.
Re: Hippo Lite, what's really going on?
Posted: Tue Oct 20, 2009 7:49 am
by Bence Laundon
Graham Banks wrote:Michael Sherwin wrote:I found a 64bit version of Ippolit and compared its play, node rate (adjusted), depth of search and other factors to Rybka232a32 (well that is the latest version that I have) and determined to the best of my ability that they are not even close to being the same.
Subjective first conclusion: not a clone
It's a Rybka 3 clone, not a Rybka 2.3.2a clone. They've reverse engineered Rybka 3 as best they can. They've then tried to "fix" it and make it stronger.
However, I'm not a programmer, so somebody else could probably do a better job of explaining things.
Cheers,
Graham.
i don't think so, Mr. Banks. It's obviously not a Rybka 3 clone, but i am afraid to claim that Ippolit absolutely is a clone.
As we all know, some super strong engine has leaked a couple of days ago, and Ippolit must be that engine's clone instead of Rybka's clone.
Cheers again,
Bence.
Re: Hippo Lite, what's really going on?
Posted: Tue Oct 20, 2009 8:37 am
by Andre van Ark
Ippolit must be that engine's clone instead of Rybka's clone
Do you believe that "That engine's clone" is original work and not a clone or a derative? from Fruit / Rybka?

Re: Hippo Lite, what's really going on?
Posted: Tue Oct 20, 2009 9:43 am
by Osipov Jury
I think, it was the decompiler.
See:
if ((tower_dynamics->flag & 128))
{
if (score > 0)
{
if (position_fixed.bitboard[enumerated_white_bright])
score -= 20 * (((((((((((((A8) & 7) - ((position_fixed.black_king) & 7)) >= 0) ? (((A8) & 7) - ((position_fixed.black_king) & 7)) : -(((A8) & 7) - ((position_fixed.black_king) & 7))))) >= (((((((A8) >> 3) - ((position_fixed.black_king) >> 3)) >= 0) ? (((A8) >> 3) - ((position_fixed.black_king) >> 3)) : -(((A8) >> 3) - ((position_fixed.black_king) >> 3)))))) ? (((((((A8) & 7) - ((position_fixed.black_king) & 7)) >= 0) ? (((A8) & 7) - ((position_fixed.black_king) & 7)) : -(((A8) & 7) - ((position_fixed.black_king) & 7))))) : (((((((A8) >> 3) - ((position_fixed.black_king) >> 3)) >= 0) ? (((A8) >> 3) - ((position_fixed.black_king) >> 3)) : -(((A8) >> 3) - ((position_fixed.black_king) >> 3)))))))) <= (((((((((((H1) & 7) - ((position_fixed.black_king) & 7)) >= 0) ? (((H1) & 7) - ((position_fixed.black_king) & 7)) : -(((H1) & 7) - ((position_fixed.black_king) & 7))))) >= (((((((H1) >> 3) - ((position_fixed.black_king) >> 3)) >= 0) ? (((H1) >> 3) - ((position_fixed.black_king) >> 3)) : -(((H1) >> 3) - ((position_fixed.black_king) >> 3)))))) ? (((((((H1) & 7) - ((position_fixed.black_king) & 7)) >= 0) ? (((H1) & 7) - ((position_fixed.black_king) & 7)) : -(((H1) & 7) - ((position_fixed.black_king) & 7))))) : (((((((H1) >> 3) - ((position_fixed.black_king) >> 3)) >= 0) ? (((H1) >> 3) - ((position_fixed.black_king) >> 3)) : -(((H1) >> 3) - ((position_fixed.black_king) >> 3))))))))) ? (((((((((((A8) & 7) - ((position_fixed.black_king) & 7)) >= 0) ? (((A8) & 7) - ((position_fixed.black_king) & 7)) : -(((A8) & 7) - ((position_fixed.black_king) & 7))))) >= (((((((A8) >> 3) - ((position_fixed.black_king) >> 3)) >= 0) ? (((A8) >> 3) - ((position_fixed.black_king) >> 3)) : -(((A8) >> 3) - ((position_fixed.black_king) >> 3)))))) ? (((((((A8) & 7) - ((position_fixed.black_king) & 7)) >= 0) ? (((A8) & 7) - ((position_fixed.black_king) & 7)) : -(((A8) & 7) - ((position_fixed.black_king) & 7))))) : (((((((A8) >> 3) - ((position_fixed.black_king) >> 3)) >= 0) ? (((A8) >> 3) - ((position_fixed.black_king) >> 3)) : -(((A8) >> 3) - ((position_fixed.black_king) >> 3)))))))) : (((((((((((H1) & 7) - ((position_fixed.black_king) & 7)) >= 0) ? (((H1) & 7) - ((position_fixed.black_king) & 7)) : -(((H1) & 7) - ((position_fixed.black_king) & 7))))) >= (((((((H1) >> 3) - ((position_fixed.black_king) >> 3)) >= 0) ? (((H1) >> 3) - ((position_fixed.black_king) >> 3)) : -(((H1) >> 3) - ((position_fixed.black_king) >> 3)))))) ? (((((((H1) & 7) - ((position_fixed.black_king) & 7)) >= 0) ? (((H1) & 7) - ((position_fixed.black_king) & 7)) : -(((H1) & 7) - ((position_fixed.black_king) & 7))))) : (((((((H1) >> 3) - ((position_fixed.black_king) >> 3)) >= 0) ? (((H1) >> 3) - ((position_fixed.black_king) >> 3)) : -(((H1) >> 3) - ((position_fixed.black_king) >> 3))))))))) + 10 * (((((((((((((A8) & 7) - ((position_fixed.black_king) & 7)) >= 0) ? (((A8) & 7) - ((position_fixed.black_king) & 7)) : -(((A8) & 7) - ((position_fixed.black_king) & 7))))) <= (((((((A8) >> 3) - ((position_fixed.black_king) >> 3)) >= 0) ? (((A8) >> 3) - ((position_fixed.black_king) >> 3)) : -(((A8) >> 3) - ((position_fixed.black_king) >> 3)))))) ? (((((((A8) & 7) - ((position_fixed.black_king) & 7)) >= 0) ? (((A8) & 7) - ((position_fixed.black_king) & 7)) : -(((A8) & 7) - ((position_fixed.black_king) & 7))))) : (((((((A8) >> 3) - ((position_fixed.black_king) >> 3)) >= 0) ? (((A8) >> 3) - ((position_fixed.black_king) >> 3)) : -(((A8) >> 3) - ((position_fixed.black_king) >> 3)))))))) <= (((((((((((H1) & 7) - ((position_fixed.black_king) & 7)) >= 0) ? (((H1) & 7) - ((position_fixed.black_king) & 7)) : -(((H1) & 7) - ((position_fixed.black_king) & 7))))) <= (((((((H1) >> 3) - ((position_fixed.black_king) >> 3)) >= 0) ? (((H1) >> 3) - ((position_fixed.black_king) >> 3)) : -(((H1) >> 3) - ((position_fixed.black_king) >> 3)))))) ? (((((((H1) & 7) - ((position_fixed.black_king) & 7)) >= 0) ? (((H1) & 7) - ((position_fixed.black_king) & 7)) : -(((H1) & 7) - ((position_fixed.black_king) & 7))))) : (((((((H1) >> 3) - ((position_fixed.black_king) >> 3)) >= 0) ? (((H1) >> 3) - ((position_fixed.black_king) >> 3)) : -(((H1) >> 3) - ((position_fixed.black_king) >> 3))))))))) ? (((((((((((A8) & 7) - ((position_fixed.black_king) & 7)) >= 0) ? (((A8) & 7) - ((position_fixed.black_king) & 7)) : -(((A8) & 7) - ((position_fixed.black_king) & 7))))) <= (((((((A8) >> 3) - ((position_fixed.black_king) >> 3)) >= 0) ? (((A8) >> 3) - ((position_fixed.black_king) >> 3)) : -(((A8) >> 3) - ((position_fixed.black_king) >> 3)))))) ? (((((((A8) & 7) - ((position_fixed.black_king) & 7)) >= 0) ? (((A8) & 7) - ((position_fixed.black_king) & 7)) : -(((A8) & 7) - ((position_fixed.black_king) & 7))))) : (((((((A8) >> 3) - ((position_fixed.black_king) >> 3)) >= 0) ? (((A8) >> 3) - ((position_fixed.black_king) >> 3)) : -(((A8) >> 3) - ((position_fixed.black_king) >> 3)))))))) : (((((((((((H1) & 7) - ((position_fixed.black_king) & 7)) >= 0) ? (((H1) & 7) - ((position_fixed.black_king) & 7)) : -(((H1) & 7) - ((position_fixed.black_king) & 7))))) <= (((((((H1) >> 3) - ((position_fixed.black_king) >> 3)) >= 0) ? (((H1) >> 3) - ((position_fixed.black_king) >> 3)) : -(((H1) >> 3) - ((position_fixed.black_king) >> 3)))))) ? (((((((H1) & 7) - ((position_fixed.black_king) & 7)) >= 0) ? (((H1) & 7) - ((position_fixed.black_king) & 7)) : -(((H1) & 7) - ((position_fixed.black_king) & 7))))) : (((((((H1) >> 3) - ((position_fixed.black_king) >> 3)) >= 0) ? (((H1) >> 3) - ((position_fixed.black_king) >> 3)) : -(((H1) >> 3) - ((position_fixed.black_king) >> 3)))))))));
Re: Hippo Lite, what's really going on?
Posted: Tue Oct 20, 2009 9:58 am
by WinPooh
Osipov Jury wrote:I think, it was the decompiler.
I'd say, not decompiler but code generator. And one can find samples of its input pseudo-code on the homepage of <censored> engine.
Re: Hippo Lite, what's really going on?
Posted: Tue Oct 20, 2009 9:59 am
by Matthias Gemuh
Ippolit is a puzzle.
If this thing is a reverse-engineered Rybka 3, then Rybka 3 is NOT based on Rybka 2.3 !
Matthias.
Re: Hippo Lite, what's really going on?
Posted: Tue Oct 20, 2009 10:22 am
by Michael Sherwin
WinPooh wrote:Osipov Jury wrote:I think, it was the decompiler.
I'd say, not decompiler but code generator. And one can find samples of its input pseudo-code on the homepage of <censored> engine.
The engine was originally written in "chesslanguage b" by the author. It was decompiled, probably with the symbols intact, into a Russian language C program. Then it was translated into English. The reason was to quell the cloning accusations AND/OR to make it public domain for the entire world, rather than just in Russia. This is what I gathered from their site.
Re: Hippo Lite, what's really going on?
Posted: Tue Oct 20, 2009 10:27 am
by mcostalba
Matthias Gemuh wrote:Ippolit is a puzzle.
If this thing is a reverse-engineered Rybka 3, then Rybka 3 is NOT based on Rybka 2.3 !
Matthias.
I have looked at this engine source. I know how to program and I am almost sure it is the reverse engineered product of some other engine.
No programmer sane of mind could have ever written something like that: function factoring is horrid, variable names is misleading when not even wrong most of the times, data structures have many fields named as numeric constants (_5, _6, etc.. this is a clear sign that the "author" was not able to identify the correct meaning of the original field and so was forced to use a placeholder instead), coding style is non existing to say the least, and I could continue.
Just to make it clear for non programmers out there is like you read a Shakespeare poem full of grammatical errors and with some dumb and trivial line here and there: you can understand you are reading a very high quality material, but you also can clearly understand that this is not the original but a trivially translated copy.