Ratinglists

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

Moderators: hgm, Rebel, chrisw

Adam Hair
Posts: 3226
Joined: Wed May 06, 2009 10:31 pm
Location: Fuquay-Varina, North Carolina

Re: Ratinglists

Post by Adam Hair »

De Vos W wrote:
And I
do not want to test an engine that I have doubts about the author's
honesty concerning his/her engine. I have done so a few times already
and wish to avoid that.


Is this paranoia on a finer scale?
No paranoia. Simply a desire to test the engine of anybody who
is honest with me, and the lack of desire to do so for any who
are not honest.
Adam Hair
Posts: 3226
Joined: Wed May 06, 2009 10:31 pm
Location: Fuquay-Varina, North Carolina

Re: Ratinglists

Post by Adam Hair »

K I Hyams wrote:I hold exactly the same view that you hold and I am in much the same position as you are.

If I were to release an engine that was likely to arouse the sort of controversy that currently prevails, I would be very careful to be absolutely open and extremely accurate about the origins of that engine. If I took a block of code, I would acknowledge it. The underlined and italicised quote is from the Houdart site.

Without many ideas from the excellent open source chess engines Ippolit/Robbolito, Stockfish and Crafty, Houdini would not nearly be as strong as it is now.


Rajlich acknowledged, somewhat grudgingly, an influence from Fruit. Robert acknowledges, less grudgingly, influences from Ippolit/Robbolito, Stockfish and Crafty. However, it may be that he has been “economical with the truth”. The quote below is from Lance Perkins, author of Thinker. One might wonder whether the claim that “This Houdini is just a cheap compile of the Ippo/Robo source code” is an example of Lance also being “economical with the truth”, however if the material that he published is genuine, it would seem to indicate to this layman that Robert has taken more than “ideas” from Robolito.
CThinker wrote:This Houdini is just a cheap compile of the Ippo/Robo source code.

Below is one example of a decompiled Robolito and Houdini. The entire decompiled code is like this. You will find a one-to-one equivalence between the two.

I even found a few bugs in Robo/Ippo that were also in Houdini. Really funny. I will not disclose the bug. This way, I have an easy method of spotting these types of cheap tricks to compile Robo/Ippo and release it as something new.

Whoever did this Houdini thing is clueless about Robo/Ippo.

From the function...

Code: Select all

static void Material_calculation( int c )
{
    int white_queen, black_queen, white_rook, black_rook, white_clear, black_clear, white_dark, black_dark,
        white_knight, black_knight, white_pawn, black_pawn, n, value, white_bishop, black_bishop;
    int ca, white_load, black_load, phase, va1, va2, va3, va4;
    uint64 va;
    n = c;
    white_queen = n % 2;
    n /= 2;
    black_queen = n % 2;
    n /= 2;
    white_rook = n % 3;
    n /= 3;
    black_rook = n % 3;
    n /= 3;
    white_clear = n % 2;
    n /= 2;
    white_dark = n % 2;
    n /= 2;
    black_clear = n % 2;
    n /= 2;
    black_dark = n % 2;
    n /= 2;
    white_knight = n % 3;
    n /= 3;
    black_knight = n % 3;
    n /= 3;
    white_pawn = n % 9;
    n /= 9;
    black_pawn = n % 9;
    white_bishop = white_clear + white_dark;
    black_bishop = black_clear + black_dark;
    va =
        value_value(white_pawn, white_knight, white_bishop, white_clear, white_dark, white_rook, white_queen,
            black_pawn, black_knight, black_bishop, black_clear, black_dark, black_rook, black_queen);
    phase =
        PHASE_MINOR * (white_knight + white_bishop + black_knight + black_bishop)
            + PHASE_ROOK * (white_rook + black_rook) + PHASE_QUEEN * (white_queen + black_queen);

    // etc., etc.
}
Decompiled Houdini:

Code: Select all

:00428364 8BE8                    mov ebp, eax
:00428366 81E501000080            and ebp, 80000001
:0042836C 7905                    jns 00428373
:0042836E 4D                      dec ebp
:0042836F 83CDFE                  or ebp, -00000002
:00428372 45                      inc ebp
---------
:00428373 99                      cdq
:00428374 2BC2                    sub eax, edx
:00428376 D1F8                    sar eax, 1
:00428378 8BD8                    mov ebx, eax
:0042837A 81E301000080            and ebx, 80000001
:00428380 7905                    jns 00428387
:00428382 4B                      dec ebx
:00428383 83CBFE                  or ebx, -00000002
:00428386 43                      inc ebx
---------
:00428387 99                      cdq
:00428388 2BC2                    sub eax, edx
:0042838A 8BC8                    mov ecx, eax
:0042838C D1F9                    sar ecx, 1
:0042838E B856555555              mov eax, 55555556
:00428393 F7E9                    imul ecx
:00428395 8BC2                    mov eax, edx
:00428397 C1E81F                  shr eax, 1F
:0042839A 03C2                    add eax, edx
:0042839C 8D1440                  lea edx, dword[eax+2*eax]
:0042839F 2BCA                    sub ecx, edx
:004283A1 894C2418                mov dword[esp+18], ecx
:004283A5 8BC8                    mov ecx, eax
:004283A7 B856555555              mov eax, 55555556
:004283AC F7E9                    imul ecx
:004283AE 8BC2                    mov eax, edx
:004283B0 C1E81F                  shr eax, 1F
:004283B3 03C2                    add eax, edx
:004283B5 8D1440                  lea edx, dword[eax+2*eax]
:004283B8 2BCA                    sub ecx, edx
:004283BA 8BF8                    mov edi, eax
:004283BC 81E701000080            and edi, 80000001
:004283C2 894C2410                mov dword[esp+10], ecx
:004283C6 7905                    jns 004283CD
:004283C8 4F                      dec edi
:004283C9 83CFFE                  or edi, -00000002
:004283CC 47                      inc edi
---------
:004283CD 99                      cdq
:004283CE 2BC2                    sub eax, edx
:004283D0 D1F8                    sar eax, 1
:004283D2 8BC8                    mov ecx, eax
:004283D4 81E101000080            and ecx, 80000001
:004283DA 897C2448                mov dword[esp+48], edi
:004283DE 7905                    jns 004283E5
:004283E0 49                      dec ecx
:004283E1 83C9FE                  or ecx, -00000002
:004283E4 41                      inc ecx
---------
:004283E5 99                      cdq
:004283E6 2BC2                    sub eax, edx
:004283E8 D1F8                    sar eax, 1
:004283EA 894C2434                mov dword[esp+34], ecx
:004283EE 8BC8                    mov ecx, eax
:004283F0 81E101000080            and ecx, 80000001
:004283F6 7905                    jns 004283FD
:004283F8 49                      dec ecx
:004283F9 83C9FE                  or ecx, -00000002
:004283FC 41                      inc ecx
---------
:004283FD 99                      cdq
:004283FE 2BC2                    sub eax, edx
:00428400 D1F8                    sar eax, 1
:00428402 894C2428                mov dword[esp+28], ecx
:00428406 8BC8                    mov ecx, eax
:00428408 81E101000080            and ecx, 80000001
:0042840E 7905                    jns 00428415
:00428410 49                      dec ecx
:00428411 83C9FE                  or ecx, -00000002
:00428414 41                      inc ecx
---------
:00428415 99                      cdq
:00428416 2BC2                    sub eax, edx
:00428418 894C2424                mov dword[esp+24], ecx
:0042841C 8BC8                    mov ecx, eax
:0042841E D1F9                    sar ecx, 1
:00428420 B856555555              mov eax, 55555556
:00428425 F7E9                    imul ecx
:00428427 8BC2                    mov eax, edx
:00428429 C1E81F                  shr eax, 1F
:0042842C 03C2                    add eax, edx
:0042842E 8D1440                  lea edx, dword[eax+2*eax]
:00428431 8BF0                    mov esi, eax
:00428433 2BCA                    sub ecx, edx
:00428435 B856555555              mov eax, 55555556
:0042843A F7EE                    imul esi
:0042843C 894C241C                mov dword[esp+1C], ecx
:00428440 8BCA                    mov ecx, edx
:00428442 C1E91F                  shr ecx, 1F
:00428445 03CA                    add ecx, edx
:00428447 8D0449                  lea eax, dword[ecx+2*ecx]
:0042844A 2BF0                    sub esi, eax
:0042844C B8398EE338              mov eax, 38E38E39
:00428451 F7E9                    imul ecx
:00428453 D1FA                    sar edx, 1
:00428455 89742414                mov dword[esp+14], esi
:00428459 8BF2                    mov esi, edx
:0042845B C1EE1F                  shr esi, 1F
:0042845E 03F2                    add esi, edx
:00428460 8D14F6                  lea edx, dword[esi+8*esi]
:00428463 2BCA                    sub ecx, edx
:00428465 B8398EE338              mov eax, 38E38E39
:0042846A F7EE                    imul esi
:0042846C D1FA                    sar edx, 1
:0042846E 8BC2                    mov eax, edx
:00428470 C1E81F                  shr eax, 1F
:00428473 03C2                    add eax, edx
:00428475 8B542410                mov edx, dword[esp+10]
:00428479 8D04C0                  lea eax, dword[eax+8*eax]
:0042847C 2BF0                    sub esi, eax
:0042847E 8B442424                mov eax, dword[esp+24]
:00428482 03442428                add eax, dword[esp+28]
:00428486 53                      push ebx
:00428487 52                      push edx
:00428488 50                      push eax
:00428489 89442438                mov dword[esp+38], eax
:0042848D 8B442420                mov eax, dword[esp+20]
:00428491 50                      push eax
:00428492 8B442428                mov eax, dword[esp+28]
:00428496 89742440                mov dword[esp+40], esi
:0042849A 8B542440                mov edx, dword[esp+40]
:0042849E 8B742444                mov esi, dword[esp+44]
:004284A2 52                      push edx
:004284A3 8B542430                mov edx, dword[esp+30]
:004284A7 55                      push ebp
:004284A8 50                      push eax
:004284A9 03F7                    add esi, edi
:004284AB 56                      push esi
:004284AC 52                      push edx
:004284AD 51                      push ecx
:004284AE 894C2460                mov dword[esp+60], ecx
:004284B2 E899FCFFFF              call 00428150
Decompiled Robo:

Code: Select all

:00425B49 8BD8                    mov ebx, eax
:00425B4B 81E301000080            and ebx, 80000001
:00425B51 56                      push esi
:00425B52 57                      push edi
:00425B53 7905                    jns 00425B5A
:00425B55 4B                      dec ebx
:00425B56 83CBFE                  or ebx, -00000002
:00425B59 43                      inc ebx
---------
:00425B5A 99                      cdq
:00425B5B 2BC2                    sub eax, edx
:00425B5D D1F8                    sar eax, 1
:00425B5F 8BF0                    mov esi, eax
:00425B61 81E601000080            and esi, 80000001
:00425B67 7905                    jns 00425B6E
:00425B69 4E                      dec esi
:00425B6A 83CEFE                  or esi, -00000002
:00425B6D 46                      inc esi
---------
:00425B6E 99                      cdq
:00425B6F 2BC2                    sub eax, edx
:00425B71 8BC8                    mov ecx, eax
:00425B73 D1F9                    sar ecx, 1
:00425B75 B856555555              mov eax, 55555556
:00425B7A F7E9                    imul ecx
:00425B7C 8BC2                    mov eax, edx
:00425B7E C1E81F                  shr eax, 1F
:00425B81 03C2                    add eax, edx
:00425B83 8D1440                  lea edx, dword[eax+2*eax]
:00425B86 2BCA                    sub ecx, edx
:00425B88 894C2418                mov dword[esp+18], ecx
:00425B8C 8BC8                    mov ecx, eax
:00425B8E B856555555              mov eax, 55555556
:00425B93 F7E9                    imul ecx
:00425B95 8BC2                    mov eax, edx
:00425B97 C1E81F                  shr eax, 1F
:00425B9A 03C2                    add eax, edx
:00425B9C 8D1440                  lea edx, dword[eax+2*eax]
:00425B9F 2BCA                    sub ecx, edx
:00425BA1 8BE8                    mov ebp, eax
:00425BA3 81E501000080            and ebp, 80000001
:00425BA9 894C2414                mov dword[esp+14], ecx
:00425BAD 7905                    jns 00425BB4
:00425BAF 4D                      dec ebp
:00425BB0 83CDFE                  or ebp, -00000002
:00425BB3 45                      inc ebp
---------
:00425BB4 99                      cdq
:00425BB5 2BC2                    sub eax, edx
:00425BB7 D1F8                    sar eax, 1
:00425BB9 8BC8                    mov ecx, eax
:00425BBB 81E101000080            and ecx, 80000001
:00425BC1 7905                    jns 00425BC8
:00425BC3 49                      dec ecx
:00425BC4 83C9FE                  or ecx, -00000002
:00425BC7 41                      inc ecx
---------
:00425BC8 99                      cdq
:00425BC9 2BC2                    sub eax, edx
:00425BCB D1F8                    sar eax, 1
:00425BCD 894C2438                mov dword[esp+38], ecx
:00425BD1 8BC8                    mov ecx, eax
:00425BD3 81E101000080            and ecx, 80000001
:00425BD9 7905                    jns 00425BE0
:00425BDB 49                      dec ecx
:00425BDC 83C9FE                  or ecx, -00000002
:00425BDF 41                      inc ecx
---------
:00425BE0 99                      cdq
:00425BE1 2BC2                    sub eax, edx
:00425BE3 D1F8                    sar eax, 1
:00425BE5 894C242C                mov dword[esp+2C], ecx
:00425BE9 8BC8                    mov ecx, eax
:00425BEB 81E101000080            and ecx, 80000001
:00425BF1 7905                    jns 00425BF8
:00425BF3 49                      dec ecx
:00425BF4 83C9FE                  or ecx, -00000002
:00425BF7 41                      inc ecx
---------
:00425BF8 99                      cdq
:00425BF9 2BC2                    sub eax, edx
:00425BFB 894C2428                mov dword[esp+28], ecx
:00425BFF 8BC8                    mov ecx, eax
:00425C01 D1F9                    sar ecx, 1
:00425C03 B856555555              mov eax, 55555556
:00425C08 F7E9                    imul ecx
:00425C0A 8BC2                    mov eax, edx
:00425C0C C1E81F                  shr eax, 1F
:00425C0F 03C2                    add eax, edx
:00425C11 8D1440                  lea edx, dword[eax+2*eax]
:00425C14 8BF8                    mov edi, eax
:00425C16 2BCA                    sub ecx, edx
:00425C18 B856555555              mov eax, 55555556
:00425C1D F7EF                    imul edi
:00425C1F 894C2420                mov dword[esp+20], ecx
:00425C23 8BCA                    mov ecx, edx
:00425C25 C1E91F                  shr ecx, 1F
:00425C28 03CA                    add ecx, edx
:00425C2A 8D0449                  lea eax, dword[ecx+2*ecx]
:00425C2D 2BF8                    sub edi, eax
:00425C2F B8398EE338              mov eax, 38E38E39
:00425C34 F7E9                    imul ecx
:00425C36 D1FA                    sar edx, 1
:00425C38 897C241C                mov dword[esp+1C], edi
:00425C3C 8BFA                    mov edi, edx
:00425C3E C1EF1F                  shr edi, 1F
:00425C41 03FA                    add edi, edx
:00425C43 8D14FF                  lea edx, dword[edi+8*edi]
:00425C46 2BCA                    sub ecx, edx
:00425C48 B8398EE338              mov eax, 38E38E39
:00425C4D F7EF                    imul edi
:00425C4F D1FA                    sar edx, 1
:00425C51 8BC2                    mov eax, edx
:00425C53 C1E81F                  shr eax, 1F
:00425C56 03C2                    add eax, edx
:00425C58 8B542438                mov edx, dword[esp+38]
:00425C5C 8D04C0                  lea eax, dword[eax+8*eax]
:00425C5F 2BF8                    sub edi, eax
:00425C61 8B442428                mov eax, dword[esp+28]
:00425C65 56                      push esi
:00425C66 897C2438                mov dword[esp+38], edi
:00425C6A 8D3C2A                  lea edi, dword[edx+ebp]
:00425C6D 8B542430                mov edx, dword[esp+30]
:00425C71 03C2                    add eax, edx
:00425C73 8B542418                mov edx, dword[esp+18]
:00425C77 52                      push edx
:00425C78 8B54243C                mov edx, dword[esp+3C]
:00425C7C 50                      push eax
:00425C7D 8944243C                mov dword[esp+3C], eax
:00425C81 8B442428                mov eax, dword[esp+28]
:00425C85 50                      push eax
:00425C86 8B442428                mov eax, dword[esp+28]
:00425C8A 52                      push edx
:00425C8B 8B542434                mov edx, dword[esp+34]
:00425C8F 53                      push ebx
:00425C90 50                      push eax
:00425C91 57                      push edi
:00425C92 52                      push edx
:00425C93 51                      push ecx
:00425C94 894C2464                mov dword[esp+64], ecx
:00425C98 E8A3FCFFFF              call 00425940
[/code]
I believe Robert's response to the disassembled code above was this:
http://forum.computerschach.de/cgi-bin/ ... l?tid=3306


>Robert Houdart wrote:The basic positional values (piece values on squares) are not very different from the Ippo* family. Looking at Ippo's source code, I was - and >still am - amazed at how such simple functions can produce such an extremely strong engine. So if you find relatively similar positional evaluations in some quiet >positions, I will not be surprised.

>The material balance table is part of the "basic positional values", so the infamous thread just confirms what I wrote.
>Robert


Also, some other responses concerning the origins of Houdini:
http://www.open-chess.org/viewtopic.php ... 4&start=20

Robert has maintained that he solely took ideas from the Ippolit family.
If that is indeed true, then there is no crime. Given the degree of similarity
that I have seen between Houdini and Robbolito/IvanHoe, it does seem
that Houdini could properly be called a derivative of Ippolit ( as far as I
understand the use of that term ), which is a statement that I have never
seen Robert make. To be honest, I have never seen him deny it either.
Adam Hair
Posts: 3226
Joined: Wed May 06, 2009 10:31 pm
Location: Fuquay-Varina, North Carolina

Re: Ratinglists

Post by Adam Hair »

SzG wrote:
Adam Hair wrote: I believe Robert's response to the disassembled code above was this:
http://forum.computerschach.de/cgi-bin/ ... l?tid=3306


>Robert Houdart wrote:The basic positional values (piece values on squares) are not very different from the Ippo* family. Looking at Ippo's source code, I was - and >still am - amazed at how such simple functions can produce such an extremely strong engine. So if you find relatively similar positional evaluations in some quiet >positions, I will not be surprised.

>The material balance table is part of the "basic positional values", so the infamous thread just confirms what I wrote.
>Robert


Also, some other responses concerning the origins of Houdini:
http://www.open-chess.org/viewtopic.php ... 4&start=20

Robert has maintained that he solely took ideas from the Ippolit family.
If that is indeed true, then there is no crime. Given the degree of similarity
that I have seen between Houdini and Robbolito/IvanHoe, it does seem
that Houdini could properly be called a derivative of Ippolit ( as far as I
understand the use of that term ), which is a statement that I have never
seen Robert make. To be honest, I have never seen him deny it either.
I don't understand that. There is execution comparison above, I can see no tables.
The actual response is here:
http://www.open-chess.org/viewtopic.php ... 4&start=10
Robert Houdart wrote:Lance Perkins showed a piece of code that is part of the initialization of the material balance table, which is a static table containing the values of different piece configurations. Let me copy here what I already wrote on Talkchess in the very first thread about Houdini 15 days before Lance Perkins' topic.

>Robert Houdart wrote:The basic positional values (piece values on squares) are not very different from the Ippo* family. Looking at Ippo's source code, I was - and >still am - amazed at how such simple functions can produce such an extremely strong engine. So if you find relatively similar positional evaluations in some quiet >positions, I will not be surprised.


The material balance table is part of the "basic positional values", so the infamous thread just confirms what I wrote.
Robert
K I Hyams
Posts: 3584
Joined: Fri Mar 31, 2006 11:21 pm

Re: Ratinglists

Post by K I Hyams »

Adam Hair wrote: I believe Robert's response to the disassembled code above was this:
http://forum.computerschach.de/cgi-bin/ ... l?tid=3306


>Robert Houdart wrote:The basic positional values (piece values on squares) are not very different from the Ippo* family. Looking at Ippo's source code, I was - and >still am - amazed at how such simple functions can produce such an extremely strong engine. So if you find relatively similar positional evaluations in some quiet >positions, I will not be surprised.

>The material balance table is part of the "basic positional values", so the infamous thread just confirms what I wrote.
>Robert


Also, some other responses concerning the origins of Houdini:
http://www.open-chess.org/viewtopic.php ... 4&start=20

Robert has maintained that he solely took ideas from the Ippolit family.
If that is indeed true, then there is no crime. Given the degree of similarity
that I have seen between Houdini and Robbolito/IvanHoe, it does seem
that Houdini could properly be called a derivative of Ippolit ( as far as I
understand the use of that term ), which is a statement that I have never
seen Robert make. To be honest, I have never seen him deny it either.
Thank you for the links, which I hadn't seen. I don't think that there is any question of a "crime" being committed in this particular case, merely an apparent inconsistency and a possible problem for testers.
Martin Thoresen
Posts: 1833
Joined: Thu Jun 22, 2006 12:07 am

Re: Ratinglists

Post by Martin Thoresen »

CEGT has decided to include Houdini.

http://www.talkchess.com/forum/viewtopic.php?t=37880

Best,
Martin
K I Hyams
Posts: 3584
Joined: Fri Mar 31, 2006 11:21 pm

Re: Ratinglists

Post by K I Hyams »

Martin Thoresen wrote:CEGT has decided to include Houdini.

http://www.talkchess.com/forum/viewtopic.php?t=37880

Best,
Martin
It would seem to be the logical decision. I will take this opportunity to say that I thought that the pressure on you to do so was extremely irritating. I have written complaining about it before and I actually started another post about it this morning, before abandoning it in disgust.
Milos
Posts: 4190
Joined: Wed Nov 25, 2009 1:47 am

Re: Ratinglists

Post by Milos »

SzG wrote:I don't understand that. There is execution comparison above, I can see no tables.
That's because you know nothing about chess programming.
The code is performing the initial calculation of material values through simple functions. Values are stored in the memory in the form of array or linearized table. Having values pre-calculated of directly taken from a large table is functionally equivalent.
If you decide to use functions (which results in cleaner, lighter and more understandable code) the upper realization is pretty much standard and trivial thing.