Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: MVVLVA sorting does not help for move ordering

Author: scott farrell

Date: 19:03:57 09/21/02

Go up one level in this thread


On September 21, 2002 at 13:33:46, Andreas Guettinger wrote:

Thanks for looking at my code,

I think the second set of code does exactly what you suggested.

Thanks
Scott

>On September 21, 2002 at 12:20:24, scott farrell wrote:
>
>While i looked at you code, i had th impression that you implemented MMV/LVA not
>correctly. You do a pieceValue[victim] - pieceValue[attacker] for determining
>your mvvlva value. Instead for mvvvlva do something like this:
>
>value = pieceValue[victim] - attacker;
>
>where pieceValue for example is:
>queen = 900
>rook = 400
>bishop, night = 300
>pawn = 100
>(or the values you use)
>
>but for attacker take:
>pawn = 1;
>knight = 2;
>bishop = 3;
>rook = 4;
>queen = 5;
>
>
>In this case, the value of a pawn capturing a queen is 900-1 = 899 an will be
>prefered over a knight capturing a queen 900-2 = 898. This should improve your
>sorting.
>
>regards
>Andy
>
>
>
>
>
>>I was just fiddling with my move ordering (as we all do from time to time).
>>
>>I found that my MVVLVA code worsened (is that a word?) my move ordering, and
>>slow my searches significantly.
>>
>>I altered it to just simply ordering the capture by the size of the material it
>>is to take, disregarding the size of the piece to perform the capture.
>>
>>As far as I know current wisdom for move ordering is something like this:
>>1. from hastable first
>>2. killers next
>>3. winning captures ordered by MVVLVA
>>4. other moves
>>5. losing captures
>>
>>My updated move ordering is:
>>1. from hastable first
>>2. killers next
>>3. all captures, ordered by the size of the captured piece (largest first), and
>>ties broken by size of attacker only
>>4. other moves
>>5. losing captures
>>
>>I havent looked into to hard just yet, but I am pretty sure its got something to
>>do with search extensions, and recapture extensions. Running all the captures
>>first allows the extensions to kick in quickly and cause lots of nice cutoffs.
>>
>>The other thing it might be is a bug in my code - and turning off the MVVLVA
>>ordering of capture bypassed the bug, but its only a few lines, and I dont think
>>there is any bugs.
>>
>>What do you all think? am I crazy, do I have a bug, or are some programs already
>>doing this?
>>
>>Scott
>>
>>Here is my old code:
>>
>>        if (moves[depthTree][i].capture > 0)
>>            {
>>            //black is capturing a white piece
>>            if (b.isAttacked(moves[depthTree][i].s2, Board.WHITE))
>>                moves[depthTree][i].searchOrder
>>                    += (Board.pieceValues[moves[depthTree][i].capture]
>>                        - Board.pieceValues[
>>                        - moves[depthTree][i].piece])
>>                    * 100000 ;
>>            else
>>                //enpris
>>                moves[depthTree][i].searchOrder
>>                    += Board.pieceValues[moves[depthTree][i].capture]
>>                    * 100000 ;
>>        } else if (moves[depthTree][i].capture < 0)
>>            {
>>            //white is capturing a black
>>            if (b.isAttacked(moves[depthTree][i].s2, Board.BLACK))
>>                moves[depthTree][i].searchOrder
>>                    += (Board.pieceValues[-moves[depthTree][i].capture]
>>                        - Board.pieceValues[moves[depthTree][i].piece])
>>                    * 100000 ;
>>            else
>>                //enpris
>>                moves[depthTree][i].searchOrder
>>                    += Board.pieceValues[-moves[depthTree][i].capture]
>>                    * 100000 ;
>>        }
>>
>>
>>and my new code that is much much better at ordering:
>>
>> if (moves[depthTree][i].capture > 0)
>>            {
>>            moves[depthTree][i].searchOrder
>>                += (Board.pieceValues[moves[depthTree][i].capture] +
>>moves[depthTree][i].piece)
>>                * 1000;
>>        } else
>>            {
>>            moves[depthTree][i].searchOrder
>>                += (Board.pieceValues[-moves[depthTree][i].capture] -
>>moves[depthTree][i].piece)
>>                * 1000;
>>        }



This page took 0 seconds to execute

Last modified: Thu, 15 Apr 21 08:11:13 -0700

Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.