Merge pull request #3149 from RosettaCommons/vmullig/buried_unsat_score_incremental_merge_5
Incremental merge 5: Another couple of small improvements to buried_unsatisfied_penalty efficiency
Reducing the amount of unnecessary copying of data during the packer run. Also, when packer trajectories alter multiple residues (_e.g._ when jumping back to a low-energy state), node substitutions are now automatically accepted to minimize the number of nodes that have to be updated with each packer step.
Tasks:
- [x] Eliminate direct storage of data in edges, and add an edge data class (pointers to which can be swapped out).
- [x] Benchmark.
- Packaging edge data in a special object and only swapping out the const smart pointer to the object results in about a 21% speedup. Not bad, but still not the dominant inefficiency.
- The speedup from updating nodes more efficiently is inconsistent from benchmark replicate to replicate, and probably negligible. So still not the dominant inefficiency.
- Final cost of `buried_unsatisfied_penalty`: 4.36x increase in packing time, for much better results, with these optimizations. Scaling is linear with pose size (with or without `buried_unsatisfied_penalty`, but intercept is negative (in both cases) -- so for small poses, the relationship is different and the cost might be more negligible.
- [x] Beauty.