TalkChess.com
Hosted by Your Move Chess & Games

Author Message
Sven Schüle

Joined: 15 May 2008
Posts: 3501
Location: Berlin, Germany

Post subject: Re: see    Posted: Wed Nov 29, 2017 8:49 pm

flok wrote:
 Code: // xy are of the victim int Scene::getSEE(const int x, const int y, const ChessPiece *const attacker) const {    const ChessPiece *const victim = b.getAt(x, y);    const PlayerColor c = attacker -> getColor();    // bit 0...15: if set, then a white piece can walk over and/or attack this field, 16...31 black    const uint32_t bits = ss.back().tcs.cells[y][x];    int see_val = victim -> getEvalVal();    int trophy_val = attacker -> getEvalVal();    PlayerColor sc = opponentColor(c);    int so[] = { 0, 16 }; // where to start to search in the bit pattern. so[0] is for white    constexpr int soe[] = { 16, 32 }; // where to stop searching. soe[0] is for white    for(; so[sc] < soe[sc];) {       // find a 1 bit       while((bits & (1 << so[sc])) == 0) {          // if end of pattern, stop searching          if (++so[sc] == soe[sc])             break;       }       if (so[sc] >= soe[sc])          break;       if (sc == c)          see_val += trophy_val;       else          see_val -= trophy_val;       // get eval val. bit number is an index in pieces[color][index] pointing to the       // piece.       trophy_val = sc == WHITE ? pieces[sc][so[sc]] -> getEvalVal() : pieces[sc][so[sc] - 16] -> getEvalVal();       // on to the next bit!       so[sc]++;       sc = opponentColor(sc);    }    return see_val; }

I think this is not a correct SEE implementation. Whenever you find a new attacker for the target square you always have the choice between "making the capture" and "standing pat" (i.e., doing nothing). So at any point in your loop over pieces attacking the target square (not just in the root!) you would have to calculate the outcome of the capture but then ignore it if it loses material (so in fact you would also need to modify your algorithm). Just like in QS. What you seem to do in the code shown above is to always make the capture with the lowest remaining attacker, until no more attackers are left. But that is incorrect because it does not consider standing pat. For instance if the last enemy piece that did a capture was a knight and your next attacker is a queen but the enemy has another knight as attacker (defender) then you must detect that QxN NxQ is worse than not capturing.

It is slightly harder to do that correctly with an iterative algorithm compared to the very simple recursive one, but of course it is possible (by definition).
 Display posts from previous: All Posts1 Day7 Days2 Weeks1 Month3 Months6 Months1 Year Oldest FirstNewest First
Subject Author Date/Time
Folkert van Heusden Tue Nov 28, 2017 1:11 pm
Álvaro Begué Tue Nov 28, 2017 1:30 pm
Folkert van Heusden Tue Nov 28, 2017 1:38 pm
Tamás Kuzmics Tue Nov 28, 2017 1:43 pm
Álvaro Begué Tue Nov 28, 2017 1:49 pm
Tamás Kuzmics Tue Nov 28, 2017 1:32 pm
Marco Belli Tue Nov 28, 2017 3:26 pm
Álvaro Begué Tue Nov 28, 2017 3:58 pm
Marco Belli Tue Nov 28, 2017 4:35 pm
Folkert van Heusden Tue Nov 28, 2017 7:34 pm
Peter Österlund Tue Nov 28, 2017 8:11 pm
Steve Maughan Tue Nov 28, 2017 9:36 pm
Folkert van Heusden Wed Nov 29, 2017 5:03 pm
Steve Maughan Wed Nov 29, 2017 5:16 pm
Re: see Sven Schüle Wed Nov 29, 2017 8:49 pm
Álvaro Begué Wed Nov 29, 2017 9:00 pm
laurie tunnicliffe Thu Nov 30, 2017 2:01 am
Álvaro Begué Thu Nov 30, 2017 5:07 am
laurie tunnicliffe Thu Nov 30, 2017 5:43 am
Álvaro Begué Thu Nov 30, 2017 11:47 am
Richard Delorme Thu Nov 30, 2017 12:44 pm
Maarten Claessens Wed Nov 29, 2017 9:11 am
Folkert van Heusden Wed Nov 29, 2017 9:20 am
Marco Belli Wed Nov 29, 2017 9:50 am
Folkert van Heusden Wed Nov 29, 2017 2:00 pm
Maarten Claessens Wed Nov 29, 2017 10:34 am
Álvaro Begué Wed Nov 29, 2017 11:33 am
Tony Soares Fri Dec 01, 2017 10:51 am

 Jump to: Select a forum Computer Chess Club Forums----------------Computer Chess Club: General TopicsComputer Chess Club: Tournaments and MatchesComputer Chess Club: Programming and Technical DiscussionsComputer Chess Club: Engine Origins Other Forums----------------Chess Thinkers ForumChess Players ForumForum Help and Suggestions
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum