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