mirror of
https://github.com/sockspls/badfish
synced 2025-04-29 16:23:09 +00:00
Use less time on recaptures
Credit for the idea goes to peregrine on discord. Passed STC 10+0.1: https://tests.stockfishchess.org/tests/view/662652623fe04ce4cefc48cf LLR: 2.95 (-2.94,2.94) <0.00,2.00> Total: 75712 W: 19793 L: 19423 D: 36496 Ptnml(0-2): 258, 8487, 20023, 8803, 285 Passed LTC 60+0.6: https://tests.stockfishchess.org/tests/view/6627495e3fe04ce4cefc59b6 LLR: 2.94 (-2.94,2.94) <0.50,2.50> Total: 49788 W: 12743 L: 12404 D: 24641 Ptnml(0-2): 29, 5141, 14215, 5480, 29 The code was updated slightly and tested for non-regression against the original code at STC: LLR: 2.94 (-2.94,2.94) <-1.75,0.25> Total: 41952 W: 10912 L: 10698 D: 20342 Ptnml(0-2): 133, 4825, 10835, 5061, 122 https://tests.stockfishchess.org/tests/view/662d84f56115ff6764c7e438 closes https://github.com/official-stockfish/Stockfish/pull/5189 Bench: 1836777
This commit is contained in:
parent
49ef4c935a
commit
886ed90ec3
4 changed files with 23 additions and 11 deletions
|
@ -53,6 +53,7 @@ Engine::Engine(std::string path) :
|
|||
NN::NetworkBig({EvalFileDefaultNameBig, "None", ""}, NN::EmbeddedNNUEType::BIG),
|
||||
NN::NetworkSmall({EvalFileDefaultNameSmall, "None", ""}, NN::EmbeddedNNUEType::SMALL))) {
|
||||
pos.set(StartFEN, false, &states->back());
|
||||
capSq = SQ_NONE;
|
||||
}
|
||||
|
||||
std::uint64_t Engine::perft(const std::string& fen, Depth depth, bool isChess960) {
|
||||
|
@ -61,9 +62,10 @@ std::uint64_t Engine::perft(const std::string& fen, Depth depth, bool isChess960
|
|||
return Benchmark::perft(fen, depth, isChess960);
|
||||
}
|
||||
|
||||
void Engine::go(const Search::LimitsType& limits) {
|
||||
void Engine::go(Search::LimitsType& limits) {
|
||||
assert(limits.perft == 0);
|
||||
verify_networks();
|
||||
limits.capSq = capSq;
|
||||
|
||||
threads.start_thinking(options, pos, states, limits);
|
||||
}
|
||||
|
@ -102,6 +104,7 @@ void Engine::set_position(const std::string& fen, const std::vector<std::string>
|
|||
states = StateListPtr(new std::deque<StateInfo>(1));
|
||||
pos.set(fen, options["UCI_Chess960"], &states->back());
|
||||
|
||||
capSq = SQ_NONE;
|
||||
for (const auto& move : moves)
|
||||
{
|
||||
auto m = UCIEngine::to_move(pos, move);
|
||||
|
@ -111,6 +114,11 @@ void Engine::set_position(const std::string& fen, const std::vector<std::string>
|
|||
|
||||
states->emplace_back();
|
||||
pos.do_move(m, states->back());
|
||||
|
||||
capSq = SQ_NONE;
|
||||
DirtyPiece& dp = states->back().dirtyPiece;
|
||||
if (dp.dirty_num > 1 && dp.to[1] == SQ_NONE)
|
||||
capSq = m.to_sq();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -172,4 +180,4 @@ std::string Engine::visualize() const {
|
|||
return ss.str();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
11
src/engine.h
11
src/engine.h
|
@ -20,24 +20,26 @@
|
|||
#define ENGINE_H_INCLUDED
|
||||
|
||||
#include <cstddef>
|
||||
#include <cstdint>
|
||||
#include <functional>
|
||||
#include <optional>
|
||||
#include <string>
|
||||
#include <string_view>
|
||||
#include <utility>
|
||||
#include <vector>
|
||||
#include <cstdint>
|
||||
|
||||
#include "nnue/network.h"
|
||||
#include "position.h"
|
||||
#include "search.h"
|
||||
#include "syzygy/tbprobe.h" // for Stockfish::Depth
|
||||
#include "thread.h"
|
||||
#include "tt.h"
|
||||
#include "ucioption.h"
|
||||
#include "syzygy/tbprobe.h" // for Stockfish::Depth
|
||||
|
||||
namespace Stockfish {
|
||||
|
||||
enum Square : int;
|
||||
|
||||
class Engine {
|
||||
public:
|
||||
using InfoShort = Search::InfoShort;
|
||||
|
@ -50,7 +52,7 @@ class Engine {
|
|||
std::uint64_t perft(const std::string& fen, Depth depth, bool isChess960);
|
||||
|
||||
// non blocking call to start searching
|
||||
void go(const Search::LimitsType&);
|
||||
void go(Search::LimitsType&);
|
||||
// non blocking call to stop searching
|
||||
void stop();
|
||||
|
||||
|
@ -92,6 +94,7 @@ class Engine {
|
|||
|
||||
Position pos;
|
||||
StateListPtr states;
|
||||
Square capSq;
|
||||
|
||||
OptionsMap options;
|
||||
ThreadPool threads;
|
||||
|
@ -104,4 +107,4 @@ class Engine {
|
|||
} // namespace Stockfish
|
||||
|
||||
|
||||
#endif // #ifndef ENGINE_H_INCLUDED
|
||||
#endif // #ifndef ENGINE_H_INCLUDED
|
||||
|
|
|
@ -54,8 +54,8 @@ using namespace Search;
|
|||
|
||||
namespace {
|
||||
|
||||
static constexpr double EvalLevel[10] = {1.043, 1.017, 0.952, 1.009, 0.971,
|
||||
1.002, 0.992, 0.947, 1.046, 1.001};
|
||||
static constexpr double EvalLevel[10] = {0.981, 0.956, 0.895, 0.949, 0.913,
|
||||
0.942, 0.933, 0.890, 0.984, 0.941};
|
||||
|
||||
// Futility margin
|
||||
Value futility_margin(Depth d, bool noTtCutNode, bool improving, bool oppWorsening) {
|
||||
|
@ -446,9 +446,10 @@ void Search::Worker::iterative_deepening() {
|
|||
double reduction = (1.48 + mainThread->previousTimeReduction) / (2.17 * timeReduction);
|
||||
double bestMoveInstability = 1 + 1.88 * totBestMoveChanges / threads.size();
|
||||
int el = std::clamp((bestValue + 750) / 150, 0, 9);
|
||||
double recapture = limits.capSq == rootMoves[0].pv[0].to_sq() ? 0.955 : 1.005;
|
||||
|
||||
double totalTime = mainThread->tm.optimum() * fallingEval * reduction
|
||||
* bestMoveInstability * EvalLevel[el];
|
||||
* bestMoveInstability * EvalLevel[el] * recapture;
|
||||
|
||||
// Cap used time in case of a single legal move for a better viewer experience
|
||||
if (rootMoves.size() == 1)
|
||||
|
|
|
@ -109,8 +109,7 @@ struct RootMove {
|
|||
using RootMoves = std::vector<RootMove>;
|
||||
|
||||
|
||||
// LimitsType struct stores information sent by GUI about available time to
|
||||
// search the current move, maximum depth/time, or if we are in analysis mode.
|
||||
// LimitsType struct stores information sent by the caller about the analysis required.
|
||||
struct LimitsType {
|
||||
|
||||
// Init explicitly due to broken value-initialization of non POD in MSVC
|
||||
|
@ -128,6 +127,7 @@ struct LimitsType {
|
|||
int movestogo, depth, mate, perft, infinite;
|
||||
uint64_t nodes;
|
||||
bool ponderMode;
|
||||
Square capSq;
|
||||
};
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue