Hi
Because of the fact that the Principal Variation can be extracted from the Transposition Table if one wanted to, I was wondering about something. If you search the PV, ply by ply ("walking the PV"), you're actually searching hash table moves. So, if I collect a PV, and ALSO have a hash table, is it still necessary to do a principal variation search if I search the hash move first?
I may be misunderstanding this, but as I understand it now, it seems "walking the PV" (and thus, principal variation search?) seems pointless if you have a hash table. I've also seen references to "walking the PV is like having a poor man's TT", but I don't know where I read that quote. If true, it would seem to confirm my suspicion.
I could use a bit of assistance in determining if PVS is still helpful even if you have a TT.
Principal Variation Search vs. Transposition Table
Moderators: hgm, Rebel, chrisw
-
- Posts: 5566
- Joined: Tue Feb 28, 2012 11:56 pm
Re: Principal Variation Search vs. Transposition Table
For me, PVS means zero-window searches of all non-first moves. This is very useful.
It is fine to use the search the TT move first. You will anyway not have the PV until after you have finished the PVS, so I am not really sure what else to do.
-
- Posts: 1784
- Joined: Wed Jul 03, 2019 4:42 pm
- Location: Netherlands
- Full name: Marcel Vanthoor
Re: Principal Variation Search vs. Transposition Table
I'm thinking to collect the PV by a somewhat modernized version of the triangular array method (vectors instead of arrays, because an array would need to be 256x256 elements in my case. My MAX_PLY is 255.) So I can have a PV without finding it in a hash table.
If I then search the hash move first, should I then STILL "walk the PV" ? (i.e.: can it be that the hash move is different than the PV move for that position and depth, and that the PV move turns out to be better than the hash move?)
-
- Posts: 5566
- Joined: Tue Feb 28, 2012 11:56 pm
Re: Principal Variation Search vs. Transposition Table
I don't think you have the PV until you have finished the PVSmvanthoor wrote: ↑Mon Oct 26, 2020 2:35 pm I'm thinking to collect the PV by a somewhat modernized version of the triangular array method (vectors instead of arrays, because an array would need to be 256x256 elements in my case. My MAX_PLY is 255.) So I can have a PV without finding it in a hash table.
You have the PV from the previous iteration, but that PV can quickly become invalid, so "walking" the (previous) PV is of limited applicability. What you can do is insert the previous PV in the TT table before you start the next iteration to make sure that the TT table hasn't forgotten it (or you could give PV entries priority in your TT replacement strategy).
You should only search the first move you pick with an open window and all the other moves with a zero window. Once a zero-window search fails high, you search that move with an open window.If I then search the hash move first, should I then STILL "walk the PV" ? (i.e.: can it be that the hash move is different than the PV move for that position and depth, and that the PV move turns out to be better than the hash move?)
I think your real question is: is the PV move (from the previous ply, as long as the PV hasn't been refuted in the next iteration) expected to be better than the TT move? This is difficult to answer. I expect that it will be very rare to have a TT move and a still-valid PV move from the previous iteration that differ.
-
- Posts: 27809
- Joined: Fri Mar 10, 2006 10:06 am
- Location: Amsterdam
- Full name: H G Muller
Re: Principal Variation Search vs. Transposition Table
Ideally the PV from the previous iteration should still be in your hash table. And if that is the case, walking the PV (which is not caled PVS, btw) is indeed useless. Depending on the size of your hash table and the quality of your replacement algorithm, the PV might have been overwritten, though. After all, the old PV is the first thing you follow during each iteration, and more often than not it stays the same. And after that you search the entire remaining tree. So the PV nodes can only survive if they are protected by depth, and even then the tail of the PV, which has low depth, will likely be lost.
One simple way to solve this, which doesn't complicate your search routine, is to stuff the previous PV back into the TT before each iteration.
In Fairy-Max I collect the PV in a 1-d array of moves, organized as a stack. Each depth has its own tentative PV on there, (terminated by some invalid move code, say 0), and when you go to the next depth you initialize its own (initially empty) PV on the top of that stack. On return the PV of the level from which you return is left on the stack. If the move scored in window, you then make that the first move of the new PV at that level, and copy the PV of the daughter behind it. And put the PV stack pointer just beyond the end of that.
One simple way to solve this, which doesn't complicate your search routine, is to stuff the previous PV back into the TT before each iteration.
In Fairy-Max I collect the PV in a 1-d array of moves, organized as a stack. Each depth has its own tentative PV on there, (terminated by some invalid move code, say 0), and when you go to the next depth you initialize its own (initially empty) PV on the top of that stack. On return the PV of the level from which you return is left on the stack. If the move scored in window, you then make that the first move of the new PV at that level, and copy the PV of the daughter behind it. And put the PV stack pointer just beyond the end of that.
-
- Posts: 1784
- Joined: Wed Jul 03, 2019 4:42 pm
- Location: Netherlands
- Full name: Marcel Vanthoor
Re: Principal Variation Search vs. Transposition Table
Syzygy and HGM: Thanks for the explanation. This stuff is somewhat difficult to visualize, but when I get to actually implementing it, I think it will become clear. That was the case with all the other concepts I encountered while writing my engine, so i assume it will be so now.
-
- Posts: 855
- Joined: Sun May 23, 2010 1:32 pm
Re: Principal Variation Search vs. Transposition Table
Principal Variation Search (PVS) is about searching the first move, and then prove that all the other possible move are worst than the first.
That said the PV from the previous iteration is mainly extracted to be shown on the GUI.
For PVS you can use the PV from the previous iteration or the move from transposition table and it will give you more or less the same strenght.
a small remark, even with an infinite size transiposition table, PV saved from previous iteration and extracted from the trasposition table are not always the same.
let's suppose that the PV contains a repetition
1) e4 Nf6 2) Nf3 Ng8 3) Ng1 Nf6 4) d4 e5 ....
the Pv extracted from transposition table can be eiter
1) e4 Nf6 2) Nf3 Ng8 3) Ng1 Nf6 4) Nf3 Ng8 5) Ng1 Nf6 6) Nf3 Ng8... or
1) e4 Nf6 2) d4 e5 ....
because for repeated position, only one move can be stored in Transposition table
That said the PV from the previous iteration is mainly extracted to be shown on the GUI.
For PVS you can use the PV from the previous iteration or the move from transposition table and it will give you more or less the same strenght.
a small remark, even with an infinite size transiposition table, PV saved from previous iteration and extracted from the trasposition table are not always the same.
let's suppose that the PV contains a repetition
1) e4 Nf6 2) Nf3 Ng8 3) Ng1 Nf6 4) d4 e5 ....
the Pv extracted from transposition table can be eiter
1) e4 Nf6 2) Nf3 Ng8 3) Ng1 Nf6 4) Nf3 Ng8 5) Ng1 Nf6 6) Nf3 Ng8... or
1) e4 Nf6 2) d4 e5 ....
because for repeated position, only one move can be stored in Transposition table
-
- Posts: 5566
- Joined: Tue Feb 28, 2012 11:56 pm
Re: Principal Variation Search vs. Transposition Table
But the first repetition within the PV can be evaluated as a draw. If the second time you get at the repeated position some other move is really better, then that move should have been on top the first time you got there and the position should not have repeated in the first place.elcabesa wrote: ↑Tue Oct 27, 2020 9:39 am let's suppose that the PV contains a repetition
1) e4 Nf6 2) Nf3 Ng8 3) Ng1 Nf6 4) d4 e5 ....
the Pv extracted from transposition table can be eiter
1) e4 Nf6 2) Nf3 Ng8 3) Ng1 Nf6 4) Nf3 Ng8 5) Ng1 Nf6 6) Nf3 Ng8... or
1) e4 Nf6 2) d4 e5 ....
because for repeated position, only one move can be stored in Transposition table
-
- Posts: 725
- Joined: Tue Dec 18, 2007 9:38 pm
- Location: Munich, Germany
- Full name: Dr. Oliver Brausch
Re: Principal Variation Search vs. Transposition Table
Only if you store the PV into the TT.
Is it common sense that it's a good idea? Doesn't it look like the PV is consuming a lot of memory which is better used in having more hash slots?
-
- Posts: 771
- Joined: Sat Sep 08, 2018 5:37 pm
- Location: Ukraine
- Full name: Maksim Korzh
Re: Principal Variation Search vs. Transposition Table
Hi Marcel, even though you've got perfect answers already, still I want to share my experience - just like you I was thinking that principal variation search (PVS) is something to collect principal variation (PV) but... it's not... For some reason what is known as PVS (Principal Variation Search) is a technique intended to optimize the search performance via narrowing alpha-beta window, see this link for details: https://web.archive.org/web/20071030220 ... ng/pvs.htmmvanthoor wrote: ↑Mon Oct 26, 2020 12:49 pm Hi
Because of the fact that the Principal Variation can be extracted from the Transposition Table if one wanted to, I was wondering about something. If you search the PV, ply by ply ("walking the PV"), you're actually searching hash table moves. So, if I collect a PV, and ALSO have a hash table, is it still necessary to do a principal variation search if I search the hash move first?
I may be misunderstanding this, but as I understand it now, it seems "walking the PV" (and thus, principal variation search?) seems pointless if you have a hash table. I've also seen references to "walking the PV is like having a poor man's TT", but I don't know where I read that quote. If true, it would seem to confirm my suspicion.
I could use a bit of assistance in determining if PVS is still helpful even if you have a TT.
What you ask is: "why to collect PV if we already have it in transposition table" - it's completely different question. If you have transposition table you can extract PV from there, but principal variation search is not intended to collect principal variation despite it's name, it's just a name for a search performance optimization technique.
Btw for clarity and didactic purposes despite having TT still I'm using a separate (modular) PV collection technique known as triangular PV - I've grabbed the implementation from TSCP)
Didactic chess engines:
https://www.chessprogramming.org/Maksim_Korzh
Chess programming YouTube channel:
https://www.youtube.com/channel/UCB9-pr ... KKqDgXhsMQ
https://www.chessprogramming.org/Maksim_Korzh
Chess programming YouTube channel:
https://www.youtube.com/channel/UCB9-pr ... KKqDgXhsMQ