Pallas Solver  0.1
C++ Global Optimization Algorithms
basinhopping.h
Go to the documentation of this file.
1 
12 // Pallas Solver
13 // Copyright 2015. All rights reserved.
14 //
15 // Redistribution and use in source and binary forms, with or without
16 // modification, are permitted provided that the following conditions are met:
17 //
18 // * Redistributions of source code must retain the above copyright notice,
19 // this list of conditions and the following disclaimer.
20 // * Redistributions in binary form must reproduce the above copyright notice,
21 // this list of conditions and the following disclaimer in the documentation
22 // and/or other materials provided with the distribution.
23 //
24 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
25 // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
27 // ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
28 // LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
29 // CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
30 // SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
31 // INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
32 // CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
33 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
34 // POSSIBILITY OF SUCH DAMAGE.
35 //
36 // Author: ryan.latture@gmail.com (Ryan Latture)
37 
38 #ifndef PALLAS_BASINHOPPING_H
39 #define PALLAS_BASINHOPPING_H
40 
41 #include <cfloat>
42 
43 #include "pallas/history_concept.h"
44 #include "pallas/scoped_ptr.h"
45 #include "pallas/step_function.h"
46 #include "pallas/types.h"
47 #include "pallas/internal/metropolis.h"
48 #include "pallas/internal/state.h"
49 
50 
51 namespace pallas {
52 
127  class Basinhopping {
128  public:
132  struct Options {
139  local_minimizer_options = GradientLocalMinimizer::Options();
140  scoped_ptr<StepFunction> default_step(new DefaultStepFunction(1.0));
141  step_function.swap(default_step);
142  max_iterations = 100;
144  minimum_cost = -DBL_MAX;
145  is_silent = true;
147  }
148 
157  void set_step_function(scoped_ptr<StepFunction>& user_step_function) {
158  swap(user_step_function, step_function);
159  }
160 
164  GradientLocalMinimizer::Options local_minimizer_options;
165 
170 
174  unsigned int max_iterations;
175 
180 
184  double minimum_cost;
185 
189  bool is_silent;
190 
198  };
199 
204  struct Summary {
208  Summary();
209  std::string BriefReport() const;
211  std::string FullReport() const;
213  // Minimizer summary -------------------------------------------------
214  LineSearchDirectionType line_search_direction_type;
216  TerminationType termination_type;
218  std::string message;
220  double initial_cost;
222  double final_cost;
224  GradientLocalMinimizer::Summary local_minimization_summary;
226  unsigned int num_parameters;
228  unsigned int num_iterations;
238  HistorySeries history;
239  };
240 
244  struct HistoryOutput {
245 
255  HistoryOutput(unsigned int iteration_number,
256  unsigned int stagnant_iterations,
257  const Vector &current_solution,
258  double best_cost,
259  const Vector &best_solution)
260  : iteration_number(iteration_number),
261  stagnant_iterations(stagnant_iterations),
262  current_solution(current_solution),
263  best_cost(best_cost),
264  best_solution(best_solution) {}
265  unsigned int iteration_number;
266  unsigned int stagnant_iterations;
268  double best_cost;
270  };
271 
276 
288  void Solve(const Basinhopping::Options& options,
289  const GradientProblem& problem,
290  double* parameters,
291  Basinhopping::Summary*global_summary);
292 
293  private:
302  bool check_for_termination_(const Basinhopping::Options &options,
303  std::string* message,
304  TerminationType* termination_type);
308  void prepare_final_summary_(Basinhopping::Summary* global_summary,
309  const GradientLocalMinimizer::Summary& local_summary);
310 
311  internal::Metropolis metropolis_;
312  internal::State current_state_;
313  internal::State candidate_state_;
314  internal::State global_minimum_state_;
316  unsigned int num_stagnant_iterations_;
317  unsigned int num_iterations_;
319  };
320 
332  void Solve(const Basinhopping::Options& options,
333  const GradientProblem& problem,
334  double* parameters,
335  Basinhopping::Summary* summary);
336 
343  void dump(const Basinhopping::HistoryOutput &h, HistoryWriter& writer);
344 
345 } // namespace pallas
346 
347 #endif //PALLAS_BASINHOPPING_H
scoped_ptr< StepFunction > step_function
Definition: basinhopping.h:169
unsigned int max_iterations
Definition: basinhopping.h:174
unsigned int num_parameters
Definition: basinhopping.h:226
Vector current_solution
Definition: basinhopping.h:267
Contains a summary of the optimization.
Definition: basinhopping.h:204
double final_cost
Definition: basinhopping.h:222
unsigned int history_save_frequency
Definition: basinhopping.h:197
Minimizes an objective function by sequentially hopping between minima in the objective&#39;s energy land...
Definition: basinhopping.h:127
double step_time_in_seconds
Definition: basinhopping.h:234
Definition: basinhopping.h:51
unsigned int iteration_number
Definition: basinhopping.h:265
void set_step_function(scoped_ptr< StepFunction > &user_step_function)
Convenience function for changing the default step function.
Definition: basinhopping.h:157
void Solve(const Basinhopping::Options &options, const GradientProblem &problem, double *parameters, Basinhopping::Summary *global_summary)
Minimizes the specified gradient problem.
Definition: basinhopping.cc:142
Definition: scoped_ptr.h:45
Basinhopping()
Default constructor.
Definition: basinhopping.h:275
Definition: state.h:34
double best_cost
Definition: basinhopping.h:268
HistoryOutput(unsigned int iteration_number, unsigned int stagnant_iterations, const Vector &current_solution, double best_cost, const Vector &best_solution)
Constructor.
Definition: basinhopping.h:255
Implements a probabilistic acceptance criterion for candidate solutions.
Definition: metropolis.h:48
LineSearchDirectionType line_search_direction_type
Definition: basinhopping.h:214
double initial_cost
Definition: basinhopping.h:220
GradientLocalMinimizer::Summary local_minimization_summary
Definition: basinhopping.h:224
unsigned int num_iterations
Definition: basinhopping.h:228
double total_time_in_seconds
Definition: basinhopping.h:230
Vector best_solution
Definition: basinhopping.h:269
bool is_silent
Definition: basinhopping.h:189
Simple candidate generator that modifies the input by a random amount between +/- step_size...
Definition: step_function.h:64
Definition: basinhopping.h:132
double cost_evaluation_time_in_seconds
Definition: basinhopping.h:236
Options()
Default constructor.
Definition: basinhopping.h:138
unsigned int stagnant_iterations
Definition: basinhopping.h:266
std::string message
Definition: basinhopping.h:218
TerminationType termination_type
Definition: basinhopping.h:216
HistorySeries history
Definition: basinhopping.h:238
Stores information about the state of the system for at a given iteration number. ...
Definition: basinhopping.h:244
void dump(const Basinhopping::HistoryOutput &h, HistoryWriter &writer)
Dumps the system state contained in the history output into the stream contained by the writer...
Definition: basinhopping.cc:323
double minimum_cost
Definition: basinhopping.h:184
unsigned int max_stagnant_iterations
Definition: basinhopping.h:179
double local_minimization_time_in_seconds
Definition: basinhopping.h:232
GradientLocalMinimizer::Options local_minimizer_options
Definition: basinhopping.h:164