hgm wrote:Well, that would in principle run into the same problem at level 2, that by the time all moves have bean searched there, the tree from the search of the PV move might be overwritten. At some depth of course this will be no longer true, as the entire PV tree will fit easily in the hash. But it depends on the TC at which level this works.
The easiest solution would be to implement the triangualr-array method. But actually I think this is beyond what is reasonable to request. If it was about thata that the engine naturally has, I would be happy to print it. But having to add code to emulate how another engine would do it, only to satisfy a request for output that in itself has nothing to do with playing Chess goes a bridge too far. Micro-Max is a project for making the smallest Chess-playing program, not the smallest PV-printing program. If that makes it not welcome on certain tournaments, so be it.
Micro-Max is a deterministic engine, highly insensitive to timing jitter as it finishes each iteration, And it kibitzes depth. So if there would be any doubt with the organizer that some other entity that micro-Max was making the moves, it could be easily and objectively verified.
I agree that this requirement is implementation dependent.
Thinker is in the same boat. The PV is in the hash table. I copied this simple idea from Amy.
When it is time to output the PV, I simply iterate through the hash table. In such an occasion where the resulting PV from the HT is really short, I do a very shallow search just to satisfy those asking for a PV. Since all these are expensive, I do them only once at the end of the search.
The other problem for me was with Thinkerboard. I had to re-architecture the way the isolated components interact, because now, engines should be allowed to directly send commands to the server. That's all behind me now, but sometimes, it still brings me nightmares.