From: Marco Costalba Date: Sat, 8 Oct 2011 08:25:38 +0000 (+0100) Subject: Send again all the PV lines in multiPV searching X-Git-Url: https://git.sesse.net/?p=stockfish;a=commitdiff_plain;h=a3bf09c5c959352d50e1b5042e15a6c654bd3081 Send again all the PV lines in multiPV searching Partially revert 1036cadcecc43737 because UCI protocol in case of multipv explicitly requires: for the best move/pv add "multipv 1" in the string when you send the pv. in k-best mode always send all k variants in k strings together. Thanks to Justin Blanchard for pointing this out. No functional change. Signed-off-by: Marco Costalba --- diff --git a/src/search.cpp b/src/search.cpp index b22e82fe..4bb701a2 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -584,16 +584,27 @@ namespace { break; // Send full PV info to GUI if we are going to leave the loop or - // if we have a fail high/low and we are deep in the search. - if ((value > alpha && value < beta) || current_search_time() > 2000) - for (int i = 0; i < Min(UCIMultiPV, MultiPVIteration + 1); i++) + // if we have a fail high/low and we are deep in the search. Note + // that UCI protol requires to send all the PV lines also if are + // still to be searched and so refer to the previous search's score. + if ((value > alpha && value < beta) || current_search_time() > 5000) + for (int i = 0; i < Min(UCIMultiPV, (int)Rml.size()); i++) + { + bool updated = (i <= MultiPVIteration); + + if (depth == 1 && !updated) + continue; + + Depth d = (updated ? depth : depth - 1) * ONE_PLY; + Value s = (updated ? Rml[i].score : Rml[i].prevScore); + cout << "info" - << depth_to_uci(depth * ONE_PLY) - << (i == MultiPVIteration ? score_to_uci(Rml[i].score, alpha, beta) : - score_to_uci(Rml[i].score)) + << depth_to_uci(d) + << (i == MultiPVIteration ? score_to_uci(s, alpha, beta) : score_to_uci(s)) << speed_to_uci(pos.nodes_searched()) << pv_to_uci(&Rml[i].pv[0], i + 1, pos.is_chess960()) << endl; + } // In case of failing high/low increase aspiration window and research, // otherwise exit the fail high/low loop.