Hippo Lite, what's really going on?

Discussion of anything and everything relating to chess playing software and machines.

Moderators: hgm, Rebel, chrisw

Michael Sherwin
Posts: 3196
Joined: Fri May 26, 2006 3:00 am
Location: WY, USA
Full name: Michael Sherwin

Hippo Lite, what's really going on?

Post 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.
If you are on a sidewalk and the covid goes beep beep
Just step aside or you might have a bit of heat
Covid covid runs through the town all day
Can the people ever change their ways
Sherwin the covid's after you
Sherwin if it catches you you're through
User avatar
Graham Banks
Posts: 41415
Joined: Sun Feb 26, 2006 10:52 am
Location: Auckland, NZ

Re: Hippo Lite, what's really going on?

Post 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.
gbanksnz at gmail.com
User avatar
M ANSARI
Posts: 3707
Joined: Thu Mar 16, 2006 7:10 pm

Re: Hippo Lite, what's really going on?

Post by M ANSARI »

It has nothing to do with Rybka 2.3 and everything to do with Rybka 3.
Bence Laundon

Re: Hippo Lite, what's really going on?

Post 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.
Andre van Ark
Posts: 91
Joined: Fri Mar 10, 2006 9:32 am
Location: Amersfoort

Re: Hippo Lite, what's really going on?

Post 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? :roll:
Osipov Jury
Posts: 186
Joined: Mon Jan 21, 2008 2:07 pm
Location: Russia

Re: Hippo Lite, what's really going on?

Post 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)))))))));
User avatar
WinPooh
Posts: 267
Joined: Fri Mar 17, 2006 8:01 am
Location: Russia
Full name: Vladimir Medvedev

Re: Hippo Lite, what's really going on?

Post 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.
User avatar
Matthias Gemuh
Posts: 3245
Joined: Thu Mar 09, 2006 9:10 am

Re: Hippo Lite, what's really going on?

Post 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.
My engine was quite strong till I added knowledge to it.
http://www.chess.hylogic.de
Michael Sherwin
Posts: 3196
Joined: Fri May 26, 2006 3:00 am
Location: WY, USA
Full name: Michael Sherwin

Re: Hippo Lite, what's really going on?

Post 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.
If you are on a sidewalk and the covid goes beep beep
Just step aside or you might have a bit of heat
Covid covid runs through the town all day
Can the people ever change their ways
Sherwin the covid's after you
Sherwin if it catches you you're through
mcostalba
Posts: 2684
Joined: Sat Jun 14, 2008 9:17 pm

Re: Hippo Lite, what's really going on?

Post 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.