1 /* _______________________________________________________________________
2
3 DAKOTA: Design Analysis Kit for Optimization and Terascale Applications
4 Copyright 2014-2020 National Technology & Engineering Solutions of Sandia, LLC (NTESS).
5 This software is distributed under the GNU Lesser General Public License.
6 For more information, see the README file in the top Dakota directory.
7 _______________________________________________________________________ */
8
9 //- Class: SurrBasedGlobalMinimizer
10 //- Description: The global surrogate-based optimization algorithm successively
11 //- invokes an iterator on an approximate model updated with the
12 //- results of the iterator at each iteration.
13 //- Owner: John Eddy, Laura Swiler
14 //- Checked by:
15 //- Version: $Id: SurrBasedGlobalMinimizer.hpp 6492 2009-12-19 00:04:28Z briadam $
16
17 #ifndef SURR_BASED_GLOBAL_MINIMIZER_H
18 #define SURR_BASED_GLOBAL_MINIMIZER_H
19
20 #include "SurrBasedMinimizer.hpp"
21 #include "DakotaModel.hpp"
22
23 namespace Dakota {
24
25
26 /// The global surrogate-based minimizer which sequentially minimizes
27 /// and updates a global surrogate model without trust region controls
28
29
30 /**
31 * \brief A version of TraitsBase specialized for surrogate-based global minimizer
32 *
33 */
34
35 class SurrBasedGlobalTraits: public TraitsBase
36 {
37 public:
38
39 /// default constructor
SurrBasedGlobalTraits()40 SurrBasedGlobalTraits() { }
41
42 /// destructor
~SurrBasedGlobalTraits()43 virtual ~SurrBasedGlobalTraits() { }
44
45 /// A temporary query used in the refactor
is_derived()46 virtual bool is_derived() { return true; }
47
48 /// Return the flag indicating whether method supports continuous variables
supports_continuous_variables()49 bool supports_continuous_variables() { return true; }
50
51 /// Return the flag indicating whether method supports discrete variables
supports_discrete_variables()52 bool supports_discrete_variables() { return true; }
53
54 /// Return the flag indicating whether method supports linear equalities
supports_linear_equality()55 bool supports_linear_equality() { return true; }
56
57 /// Return the flag indicating whether method supports linear inequalities
supports_linear_inequality()58 bool supports_linear_inequality() { return true; }
59
60 /// Return the flag indicating whether method supports nonlinear equalities
supports_nonlinear_equality()61 bool supports_nonlinear_equality() { return true; }
62
63 /// Return the flag indicating whether method supports nonlinear inequalities
supports_nonlinear_inequality()64 bool supports_nonlinear_inequality() { return true; }
65 };
66
67
68 /** This method uses a SurrogateModel to perform minimization (optimization
69 or nonlinear least squares) through a set of iterations. At each
70 iteration, a surrogate is built, the surrogate is minimized, and the
71 optimal points from the surrogate are then evaluated with the "true"
72 function, to generate new points upon which the surrogate for the next
73 iteration is built. */
74
75 class SurrBasedGlobalMinimizer: public SurrBasedMinimizer
76 {
77 public:
78
79 //
80 //- Heading: Constructors and destructor
81 //
82
83 /// constructor
84 SurrBasedGlobalMinimizer(ProblemDescDB& problem_db, Model& model);
85 /// destructor
86 ~SurrBasedGlobalMinimizer();
87
88 protected:
89
90 //
91 //- Heading: Virtual function redefinitions
92 //
93
94 /// initialize graphics customized for surrogate-based iteration
95 void initialize_graphics(int iterator_server_id = 1);
96
97 /// Performs global surrogate-based optimization by repeatedly
98 /// optimizing on and improving surrogates of the response functions.
99 void core_run();
100
101 // Global surrogate-based methods cannot yet accept multiple initial points
102 //bool accepts_multiple_points() const;
103 /// Global surrogate-based methods can return multiple points
104 bool returns_multiple_points() const;
105
106 private:
107
108 //
109 //- Heading: Data members
110 //
111
112 /// flag for replacing the previous iteration's point additions, rather
113 /// than continuing to append, during construction of the next surrogate
114 bool replacePoints;
115 };
116
117
returns_multiple_points() const118 inline bool SurrBasedGlobalMinimizer::returns_multiple_points() const
119 { return true; }
120
121 } // namespace Dakota
122
123 #endif
124