Hi!
I found this:
https://github.com/niklasf/stockfish.js
This is used by "lichess".
My question is: what parameter does the "lichess" use to set engine level?
-Tamas
Stockfish strength level
Moderators: hgm, Rebel, chrisw
-
- Posts: 276
- Joined: Sat Mar 04, 2017 12:24 pm
- Location: Hungary
-
- Posts: 6052
- Joined: Tue Jun 12, 2012 12:41 pm
Re: Stockfish strength level
whatever the level, it is very weak, as one is able to beat it even at level 8.tomitank wrote:Hi!
I found this:
https://github.com/niklasf/stockfish.js
This is used by "lichess".
My question is: what parameter does the "lichess" use to set engine level?
-Tamas
seemingly, for levels 1-6 they are using some randomisation, while levels 7 and 8 only significantly limit the time usage, to fraction of a second.
-
- Posts: 276
- Joined: Sat Mar 04, 2017 12:24 pm
- Location: Hungary
Re: Stockfish strength level
That's okay.
I'm interested, for example, at level 7, what is the minimum depth and the maximum search time.
I'm interested, for example, at level 7, what is the minimum depth and the maximum search time.
-
- Posts: 6052
- Joined: Tue Jun 12, 2012 12:41 pm
Re: Stockfish strength level
that will depend on the computers.tomitank wrote:That's okay.
I'm interested, for example, at level 7, what is the minimum depth and the maximum search time.
as different users will be served by different cpus, depth will vary.
-
- Posts: 276
- Joined: Sat Mar 04, 2017 12:24 pm
- Location: Hungary
Re: Stockfish strength level
I do not think so.
On weaker devices, it searched longer.
On weaker devices, it searched longer.
-
- Posts: 276
- Joined: Sat Mar 04, 2017 12:24 pm
- Location: Hungary
Re: Stockfish strength level
From stockfish source code:
Accordingly, is the set level + 1 equal to the maximum search depth?
Code: Select all
#ifdef SKILL
// Skill structure is used to implement strength limit
struct Skill {
Skill(int l) : level(l) {}
bool enabled() const { return level < 20; }
bool time_to_pick(Depth depth) const { return depth / ONE_PLY == 1 + level; }
Move best_move(size_t multiPV) { return best ? best : pick_best(multiPV); }
Move pick_best(size_t multiPV);
int level;
Move best = MOVE_NONE;
};
#endif
Code: Select all
// If skill level is enabled and time is up, pick a sub-optimal best move
#ifdef SKILL
if (skill_.enabled() && skill_.time_to_pick(rootDepth))
skill_.pick_best(multiPV_);
#endif
-
- Posts: 50
- Joined: Mon Dec 12, 2016 2:14 pm
Re: Stockfish strength level
You can find the relevant code for the settings of movetime, depth limit, and skill level here:
https://github.com/niklasf/fishnet/blob ... #L109-L110
https://github.com/niklasf/fishnet/blob ... #L774-L782
https://github.com/niklasf/fishnet/blob ... #L109-L110
https://github.com/niklasf/fishnet/blob ... #L774-L782
-
- Posts: 5228
- Joined: Thu Mar 09, 2006 9:40 am
- Full name: Vincent Lejeune
Re: Stockfish strength level
Yes, SF level on Lichess is 1 to 8. "1" is the strongest level, I think it search for 2 millions nodes or so.tomitank wrote:From stockfish source code:
Code: Select all
#ifdef SKILL // Skill structure is used to implement strength limit struct Skill { Skill(int l) : level(l) {} bool enabled() const { return level < 20; } bool time_to_pick(Depth depth) const { return depth / ONE_PLY == 1 + level; } Move best_move(size_t multiPV) { return best ? best : pick_best(multiPV); } Move pick_best(size_t multiPV); int level; Move best = MOVE_NONE; }; #endif
Accordingly, is the set level + 1 equal to the maximum search depth?Code: Select all
// If skill level is enabled and time is up, pick a sub-optimal best move #ifdef SKILL if (skill_.enabled() && skill_.time_to_pick(rootDepth)) skill_.pick_best(multiPV_); #endif
Other levels are simply a constant progression to map "1 to 8" to "1 to 20 SF levels".
-
- Posts: 276
- Joined: Sat Mar 04, 2017 12:24 pm
- Location: Hungary
Re: Stockfish strength level
Is correct?
At Level 8: Max depth = 62, movetime = 370ms / thread (default 3)
At Level 7: Max depth = 37, movetime = 185ms / thread (default 3)
At Level 8: Max depth = 62, movetime = 370ms / thread (default 3)
At Level 7: Max depth = 37, movetime = 185ms / thread (default 3)
-
- Posts: 82
- Joined: Wed Nov 28, 2018 1:28 pm
- Full name: Heinrich Pulliter
Re: Stockfish strength level
Latest Lichees uses UCI_Elo and UCI_Limitstrength options with SF 12.
Sets elo,depth and movetime to the values below
Sets elo,depth and movetime to the values below
Code: Select all
impl SkillLevel {
pub fn time(self) -> Duration {
use SkillLevel::*;
Duration::from_millis(match self {
One => 50,
Two => 100,
Three => 150,
Four => 200,
Five => 300,
Six => 400,
Seven => 500,
Eight => 1000,
})
}
pub fn elo(self) -> u32 {
use SkillLevel::*;
match self {
One => 800,
Two => 1100,
Three => 1400,
Four => 1700,
Five => 2000,
Six => 2300,
Seven => 2700,
Eight => 3000,
}
}
pub fn depth(self) -> u8 {
use SkillLevel::*;
match self {
One | Two | Three | Four | Five => 5,
Six => 8,
Seven => 13,
Eight => 22,
}
}
}