I did something like that for an alternative form of quiescent search.
Good to hear.
The basic idea was to have a search with a branching factor close to 1 but which follows the normal search pattern instead of only captures.
I think 1 is way too low.
I called it BMOBUN (Best Move Only, Back Up N).
N is a parameter supplied to the search which tells how many times you are allowed to back up and try an alternative.
Being restrictive to just the Best move is where it fails...
You will not want to use this method for your regular search (absolutely, definitely not).
The purpose would be for move ordering, based on jumping a head x moves and then steping back anyway to the next move in the list...
First you would order your moves... then you would go down the list and
search ...
you would be searching y plies ahead of x and ordering the moves based on the end search of y.
example
PV = 1. e4 e5 2. Nf3 Nc6 3.Bb5....
ply = 5;
bestmove = e4
2nd = d4
3rd = Nf3
4th = c4
...
second search = PV = 1. e4 e5 2. Nf3 Nc6 3.Bb5(forced)3. Bb5 a6 4. Nxc6 bxc6 5. 0-0
ply = 9!
best move = Bb5
2nd = d4
3rd = Bb4
4th = Nc3
...
a concurrent search at the end of each PV.
So the actual PV could be displayed either:
ply 5, PV = 1. e4 e5 2. Nf3 Nc6 3.Bb5
or
ply 9, PV = 1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Nxc6 bxc6 5. 0-0
The step forward would be the second search();
The step back would be going back to the move list and trying the next move, especially if it fails...
You would have 2 or more PV scores to compare if needed.
How you initialize this is up too you. I'd use another thread for the concurrent second search();...
Multiply threads for even more then two, three, etc. searches if desired.
If you jumped to the end of each search(), you could really really increase your depth...
Understand still?
