I updated the pull request with the changes from issue774 and issue824. In this
iteration, I fully unpacked the state before evaluating the axioms.
An experiment comparing the current default version with this code had a pretty
clear result: evaluating on the unpacked data is much faster, but
packing/unpacking takes up so much time that overall the time to evaluate axioms
increases noticeably (details below). I think this is good to note for issue348.
I'll add a message there that we will save time if can rewrite the search code
so the state is only unpacked once. But for this issue, I'd be happy to reach
the previous performance while removing the code duplication. I'll implement a
solution based on packed states again and evaluate it.
Experiment details:
The experiment uses two timers that both accumulate values over the whole
search. One timer ("axiom_time_outer") measures the total time spent in the
AxiomEvaluator::evaluate() method. The other timer ("axiom_time_inner") only
measures the time of the evaluation on unpacked data (i.e., without (un)packing
the states). In the baseline, where there is no unpacking, both timers measure
the total time spent in the evaluate method. This way, comparing the "inner"
timer compares just the actual axiom evaluation speed, while comparing the
"outer" compares the overall speed.
|