lnls-fac / apsuite

Accelerator Physics suite
MIT License
1 stars 2 forks source link

Saving positions & objective function values during each evaluation + other changes #275

Closed vellosok75 closed 2 months ago

vellosok75 commented 2 months ago

With these changes:

Base optimization class

Other files

Snippet to reproduce these plots

Create params and optimization problem classes

class ParaboloidOptimizationParams(RCDSParams):

    def __init__(self):
        super().__init__()`

class ParaboloidOptimization(RCDS):
    """Minimize a noisy paraboloid."""

    def __init__(self, use_thread=False, isonline=False):
        super().__init__(use_thread, isonline)
        self.params = ParaboloidOptimizationParams()

    def objective_function(self, pos):
        return np.dot(pos, pos) + self.params.noise_level * np.random.randn()

Instantiate, set params,

opt = ParaboloidOptimization()
# set params
opt.params.limit_lower = [-3, -5]
opt.params.limit_upper = [4, 6]
opt.params.max_number_evals = 500
opt.params.max_number_iters = 5
opt.params.initial_stepsize = 0.0100
opt.params.noise_level = 1e-2
opt.params.tolerance = 1e-5
opt.params.initial_position = np.random.uniform(
    low=opt.params.limit_lower, high=opt.params.limit_upper
)
opt.params.initial_search_directions = np.eye(2)

Run optimzation

opt.start()

Plot

fig, ax = opt.plot_history()
fig, ax = opt.plot_knobspace_slice()