The universal_iters branch is a major restructuring of the code with the following benefits:
Iteration and initiation methods have been replaced by a single iteration method for an arbitrary sampling method. This allows the code to be more easily understood by external users in addition to allowing the class to proceed with iteration calls externally (for realtime user optimisation without stopping the routine and losing the data on the complex).
Stopping criteria methods for both Sobol and Simplicial sampling are much easier to implement and expand since they are used in a single routine.
Greater versatility in the external input to the routine allowing for minor to potentially large performance improvements.
It is now much simpler to input an arbitrary sampling method into the function by just adding the function to the sampling_method argument.
Minor fixes to the master branch.
Unfortunately, it is not a simple refactoring since the inputs (n and iters arguments) actually need to be changed slightly to produce the same outputs in the overall routine, although the same behaviour should (at least theoretically) be possible to replicate given the correct usage of these parameters. The 3 unittests for ambiguous unittests also need to be removed since they are no longer ambiguous, but can used in a customized optimisation run. All other unittests are kept and working with little to no modifications.
However, just because the unittests are working does not mean the performance has been maintained. Therefore we need a way to compare performance of the two branches in addition to replicating the performance shown in publications. One possibility is adding unittests assessing the function evaluations of the current master branch. Finally some of the changes allowing for Python compatibility other than Python 3.6 which were committed to the master branch need to be rechecked with the new code.
The universal_iters branch is a major restructuring of the code with the following benefits:
sampling_method
argument.Unfortunately, it is not a simple refactoring since the inputs (
n
anditers
arguments) actually need to be changed slightly to produce the same outputs in the overall routine, although the same behaviour should (at least theoretically) be possible to replicate given the correct usage of these parameters. The 3 unittests for ambiguous unittests also need to be removed since they are no longer ambiguous, but can used in a customized optimisation run. All other unittests are kept and working with little to no modifications.However, just because the unittests are working does not mean the performance has been maintained. Therefore we need a way to compare performance of the two branches in addition to replicating the performance shown in publications. One possibility is adding unittests assessing the function evaluations of the current master branch. Finally some of the changes allowing for Python compatibility other than Python 3.6 which were committed to the master branch need to be rechecked with the new code.