/*-------------------------------------------------------------------------------------*/ /* NOMAD - Nonlinear Optimization by Mesh Adaptive Direct search - version 3.6.1 */ /* */ /* Copyright (C) 2001-2012 Mark Abramson - the Boeing Company, Seattle */ /* Charles Audet - Ecole Polytechnique, Montreal */ /* Gilles Couture - Ecole Polytechnique, Montreal */ /* John Dennis - Rice University, Houston */ /* Sebastien Le Digabel - Ecole Polytechnique, Montreal */ /* Christophe Tribes - Ecole Polytechnique, Montreal */ /* */ /* funded in part by AFOSR and Exxon Mobil */ /* */ /* Author: Sebastien Le Digabel */ /* */ /* Contact information: */ /* Ecole Polytechnique de Montreal - GERAD */ /* C.P. 6079, Succ. Centre-ville, Montreal (Quebec) H3C 3A7 Canada */ /* e-mail: nomad@gerad.ca */ /* phone : 1-514-340-6053 #6928 */ /* fax : 1-514-340-5665 */ /* */ /* This program is free software: you can redistribute it and/or modify it under the */ /* terms of the GNU Lesser General Public License as published by the Free Software */ /* Foundation, either version 3 of the License, or (at your option) any later */ /* version. */ /* */ /* This program is distributed in the hope that it will be useful, but WITHOUT ANY */ /* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A */ /* PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. */ /* */ /* You should have received a copy of the GNU Lesser General Public License along */ /* with this program. If not, see . */ /* */ /* You can find information on the NOMAD software at www.gerad.ca/nomad */ /*-------------------------------------------------------------------------------------*/ /** \file defines.hpp \brief Definitions \author Sebastien Le Digabel \date 2010-03-23 */ #ifndef __DEFINES__ #define __DEFINES__ #include #include #include #include #include #include // #define R_VERSION // defined for the R version only // Matlab version OPTI style (if not defined than GERAD style) // #define OPTI_VERSION // Define in order to display debug information // #define DEBUG // define in order to display memory debug information: //#define MEMORY_DEBUG // define in order to display TGP information. // #define TGP_DEBUG // #define USE_TGP is defined in the makefile #ifdef DEBUG #ifndef MEMORY_DEBUG #define MEMORY_DEBUG #ifndef TGP_DEBUG #define TGP_DEBUG #endif #endif #endif // CASE Linux using gnu compiler #ifdef __gnu_linux__ #define GCC_X #endif // CASE OSX using gnu compiler #ifdef __APPLE__ #ifdef __GNUC__ #define GCC_X #endif #endif // CASE minGW using gnu compiler #ifdef __MINGW32__ #define WINDOWS #ifdef __GNUC__ #define GCC_X #endif #endif // CASE Visual Studio C++ compiler #ifdef _MSC_VER #define WINDOWS #endif // For NOMAD random number generator #if !defined(UINT32_MAX) typedef unsigned int uint32_t; #define UINT32_MAX 0xffffffff #endif // to display model stats for each evaluation at // which a model has been used (looks better // with DISPLAY_DEGREE set to zero); // The displayed stats are: // type (1:model_search, 2:model_ordering) // mesh_index // cardinality of Y // width of Y // Y condition number // h value, model for h, relative error (if constraints) // f value, model for f, relative error // #define MODEL_STATS namespace NOMAD { /// Current version: const std::string BASE_VERSION = "3.6.1"; #ifdef R_VERSION const std::string VERSION = BASE_VERSION + ".R"; #else #ifdef USE_MPI #ifdef USE_TGP const std::string VERSION = BASE_VERSION + ".TGP" + ".MPI"; #else const std::string VERSION = BASE_VERSION + ".MPI"; #endif #else #ifdef USE_TGP const std::string VERSION = BASE_VERSION + ".TGP"; #else const std::string VERSION = BASE_VERSION; #endif #endif #endif // Directory separator, plus LGPL and user guide files #ifdef WINDOWS const char DIR_SEP = '\\'; ///< Directory separator const std::string HOME = "%NOMAD_HOME%"; ///< Home directory #else const char DIR_SEP = '/'; ///< Directory separator const std::string HOME = "$NOMAD_HOME"; ///< Home directory #endif /// Licence file const std::string LGPL_FILE = HOME+DIR_SEP+"src"+DIR_SEP+"lgpl.txt"; /// User guide file const std::string USER_GUIDE_FILE = HOME+DIR_SEP+"doc"+DIR_SEP+"user_guide.pdf"; /// Examples directory const std::string EXAMPLES_DIR = HOME+DIR_SEP+"examples"; /// Tools directory const std::string TOOLS_DIR = HOME+DIR_SEP+"tools"; /// Tag for valid cache files #ifdef GCC_X const int CACHE_FILE_ID = 77041301; #else #ifdef GCC_WINDOWS const int CACHE_FILE_ID = 77041302; #else #ifdef _MSC_VER const int CACHE_FILE_ID = 77041303; #else const int CACHE_FILE_ID = 77041304; #endif #endif #endif #ifdef USE_MPI // MPI constants const int MAX_REQ_WAIT = 3 ; ///< Maximum time to wait for a request const char STOP_SIGNAL = 'S'; ///< Stop signal const char EVAL_SIGNAL = 'X'; ///< Evaluation signal const char READY_SIGNAL = 'R'; ///< Ready signal const char RESULT_SIGNAL = 'O'; ///< Result signal const char WAIT_SIGNAL = 'W'; ///< Wait signal #endif /// Maximum number of variables. const int MAX_DIMENSION = 1000; // Mesh index constants const int L_LIMITS = 50; ///< Limits for the mesh index values const int UNDEFINED_L = L_LIMITS+1; ///< Undefined value for the mesh index /// Default epsilon used by NOMAD::Double /** Use Parameters::set_EPSILON(), or parameter EPSILON, or NOMAD::Double::set_epsilon() to change it */ const double DEFAULT_EPSILON = 1e-13; /// Maximal output value for points used for models. const double MODEL_MAX_OUTPUT = 1e10; /// Default infinity string used by NOMAD::Double /** Use Parameters::set_INF_STR(), or parameter INF_STR, or NOMAD::Double::set_inf_str() to change it */ const std::string DEFAULT_INF_STR = "inf"; /// Default undefined value string used by NOMAD::Double /** Use Parameters::set_UNDEF_STR(), or parameter UNDEF_STR, or NOMAD::Double::set_undef_str() to change it */ const std::string DEFAULT_UNDEF_STR = "NaN"; // VNS constants const int VNS_HALTON_INDEX_0 = 997; ///< Initial Halton index for the VNS const int VNS_HALTON_INCR = 17; ///< VNS Halton index increment /// log(10) (for display widths.) const double LOG10 = 2.30258509299; const double INF = std::numeric_limits::max(); ///< Infinity const double D_INT_MAX = UINT32_MAX; ///< The UINT32_MAX constant as a \c double // Singular Value Decomposition (SVD) constants: const double SVD_EPS = 1e-13; ///< Epsilon for SVD const int SVD_MAX_MPN = 1500; ///< Matrix maximal size (\c m+n ) const double SVD_MAX_COND = NOMAD::INF; ///< Max. acceptable cond. number /// Default value for parameter POINT_DISPLAY_LIMIT /** Use Parameters::set_POINT_DISPLAY_LIMIT() or parameter POINT_DISPLAY_LIMIT or Point::set_display_limit() to change it */ const int DEFAULT_POINT_DISPLAY_LIMIT = 20; // Display precisions. const int DISPLAY_PRECISION_STD = 10; ///< Standard display precision const int DISPLAY_PRECISION_BB = 15; ///< Display precision for blackboxes /// Constant for blackbox files #1. const std::string BLACKBOX_INPUT_FILE_PREFIX = "nomad"; /// Constant for blackbox files #2. const std::string BLACKBOX_INPUT_FILE_EXT = "input"; /// Constant for blackbox files #3. const std::string BLACKBOX_OUTPUT_FILE_PREFIX = "nomad"; /// Constant for blackbox files #4. const std::string BLACKBOX_OUTPUT_FILE_EXT = "output"; /// Display degree type. enum dd_type { NO_DISPLAY , ///< No display MINIMAL_DISPLAY, ///< Minimal dispay NORMAL_DISPLAY , ///< Normal display FULL_DISPLAY ///< Full display }; /// Types of the variables // (do not modify this order) enum bb_input_type { CONTINUOUS , ///< Continuous variable (default) (R) INTEGER , ///< Integer variable (I) CATEGORICAL , ///< Categorical variable (C) BINARY ///< Binary variable (B) }; /// Blackbox outputs type enum bb_output_type { OBJ , ///< Objective value EB , ///< Extreme barrier constraint PB , ///< progressive barrier constraint // PEB ///< PB constraint that becomes EB once satisfied PEB_P , ///< PEB constraint, state P (PB) PEB_E , ///< PEB constraint, state E (EB) FILTER , ///< Filter constraint CNT_EVAL , ///< Output set to 0 or 1 to specify to count or not the ///< blackbox evaluation STAT_AVG , ///< Stat (average) STAT_SUM , ///< Stat (sum) UNDEFINED_BBO ///< Ignored output }; /// Formulation for multi-objective optimization enum multi_formulation_type { NORMALIZED , ///< Normalized formulation PRODUCT , ///< Product formulation DIST_L1 , ///< Distance formulation with norm L1 DIST_L2 , ///< Distance formulation with norm L2 DIST_LINF , ///< Distance formulation with norm Linf UNDEFINED_FORMULATION ///< Undefined formulation }; /// Poll type enum poll_type { PRIMARY , ///< Primary poll SECONDARY ///< Secondary poll }; /// Poll center feasibility type enum poll_center_type { FEASIBLE , ///< Feasible poll center type INFEASIBLE , ///< Infeasible poll center type UNDEFINED_POLL_CENTER_TYPE ///< Undefined poll center type }; /// Search type enum search_type { X0_EVAL , ///< Starting point evaluation POLL , ///< Poll EXTENDED_POLL , ///< Extended poll SEARCH , ///< Generic search CACHE_SEARCH , ///< Cache search (does not require evals) SPEC_SEARCH , ///< MADS speculative search (dynamic order in GPS) LH_SEARCH , ///< Latin Hypercube (LH) search LH_SEARCH_P1 , ///< Latin Hypercube (LH) search during phase one MODEL_SEARCH , ///< Model search VNS_SEARCH , ///< VNS search P1_SEARCH , ///< Phase one search ASYNCHRONOUS , ///< Parallel asynchronous final evaluations USER_SEARCH , ///< User search UNDEFINED_SEARCH ///< Undefined search }; /// Model type enum model_type { QUADRATIC_MODEL , ///< Quadratic model TGP_MODEL , ///< TGP model NO_MODEL ///< No models }; /// TGP mode enum TGP_mode_type { TGP_FAST , ///< TGP fast mode. TGP_PRECISE , ///< TGP precise mode. TGP_USER ///< TGP user mode. }; /// Success type of an iteration // (do not modify this order) enum success_type { UNSUCCESSFUL , ///< Failure PARTIAL_SUCCESS , ///< Partial success (improving) FULL_SUCCESS ///< Full success (dominating) }; /// Quadratic interpolation type enum interpolation_type { MFN , ///< Minimum Frobenius Norm interpolation. REGRESSION , ///< Regression. WP_REGRESSION , ///< Well-poised regression. UNDEFINED_INTERPOLATION_TYPE ///< Undefined. }; /// Stopping criteria enum stop_type { NO_STOP , ///< No stop ERROR , ///< Error UNKNOWN_STOP_REASON , ///< Unknown CTRL_C , ///< Ctrl-C USER_STOPPED , ///< User-stopped in Evaluator::update_iteration() MESH_PREC_REACHED , ///< Mesh minimum precision reached X0_FAIL , ///< Problem with starting point evaluation P1_FAIL , ///< Problem with phase one DELTA_M_MIN_REACHED , ///< Min mesh size DELTA_P_MIN_REACHED , ///< Min poll size L_MAX_REACHED , ///< Max mesh index L_LIMITS_REACHED , ///< Mesh index limits MAX_TIME_REACHED , ///< Max time MAX_BB_EVAL_REACHED , ///< Max number of blackbox evaluations MAX_SGTE_EVAL_REACHED , ///< Max number of surrogate evaluations MAX_EVAL_REACHED , ///< Max number of evaluations MAX_SIM_BB_EVAL_REACHED , ///< Max number of sim bb evaluations MAX_ITER_REACHED , ///< Max number of iterations MAX_CONS_FAILED_ITER , ///< Max number of consecutive failed iterations FEAS_REACHED , ///< Feasibility F_TARGET_REACHED , ///< F_TARGET STAT_SUM_TARGET_REACHED , ///< STAT_SUM_TARGET L_CURVE_TARGET_REACHED , ///< L_CURVE_TARGET MULTI_MAX_BB_REACHED , ///< Max number of blackbox evaluations (multi obj.) MULTI_NB_MADS_RUNS_REACHED , ///< Max number of MADS runs (multi obj.) MULTI_STAGNATION , ///< Stagnation criterion (multi obj.) MULTI_NO_PARETO_PTS , ///< No Pareto points (multi obj.) MAX_CACHE_MEMORY_REACHED ///< Max cache memory }; /// Type of norm used for the computation of h enum hnorm_type { L1 , ///< norm L1 L2 , ///< norm L2 LINF ///< norm Linf }; /// Types of directions // (do not modify this order) enum direction_type { UNDEFINED_DIRECTION , ///< Undefined direction MODEL_SEARCH_DIR , ///< Model search direction NO_DIRECTION , ///< No direction ORTHO_1 , ///< OrthoMADS 1 ORTHO_2 , ///< OrthoMADS 2 ORTHO_NP1_QUAD , ///< OrthoMADS n+1 use Quad model to determine n+1-th direction ORTHO_NP1_NEG , ///< OrthoMADS n+1 use negative sum of n first directions to determine n+1-th direction DYN_ADDED , ///< Dynamic addition (n+1-th direction added for ORTHO n+1) ORTHO_2N , ///< OrthoMADS 2n LT_1 , ///< LT-MADS 1 LT_2 , ///< LT-MADS 2 LT_2N , ///< LT-MADS 2n LT_NP1 , ///< LT-MADS n+1 GPS_BINARY , ///< GPS for binary variables GPS_2N_STATIC , ///< GPS 2n static (classic coordinate search) GPS_2N_RAND , ///< GPS 2n random GPS_NP1_STATIC_UNIFORM , ///< GPS n+1 static uniform GPS_NP1_STATIC , ///< GPS n+1 static GPS_NP1_RAND_UNIFORM , ///< GPS n+1 random uniform GPS_NP1_RAND , ///< GPS n+1 PROSPECT_DIR ///< Prospect direction }; /// Type for Eval_Point::check() failures enum check_failed_type { CHECK_OK , ///< Correct check LB_FAIL , ///< LB failure UB_FAIL , ///< UB failure FIX_VAR_FAIL , ///< Fixed variables failure BIN_FAIL , ///< Binary failure CAT_FAIL , ///< Categorical failure INT_FAIL ///< Integer failure }; /// Type for cache indexes in Cache: enum cache_index_type { CACHE_1 , ///< Cache index #1 CACHE_2 , ///< Cache index #2 CACHE_3 , ///< Cache index #3 UNDEFINED_CACHE ///< Undefined cache index }; /// Type for DISPLAY_STATS parameter // (do not modify this order): enum display_stats_type { DS_OBJ , ///< Objective (f) value // (keep in first position) DS_SIM_BBE , ///< Number of simulated bb evaluations DS_BBE , ///< Number of bb evaluations DS_SGTE , ///< Number of surrogate evaluations DS_BBO , ///< All blackbox outputs DS_EVAL , ///< Number of evaluations DS_TIME , ///< Wall-clock time DS_MESH_INDEX , ///< Mesh index DS_MESH_SIZE , ///< Mesh size parameter Delta^m_k DS_DELTA_M , ///< Same as \c DS_MESH_SIZE DS_POLL_SIZE , ///< Poll size parameter Delta^p_k DS_DELTA_P , ///< Same as \c DS_POLL_SIZE DS_SOL , ///< Solution vector DS_VAR , ///< One variable DS_STAT_SUM , ///< Stat sum DS_STAT_AVG , ///< Stat avg DS_UNDEFINED ///< Undefined value // (keep in last position) }; /// Type for evaluation enum eval_type { TRUTH , ///< Truth SGTE ///< Surrogate }; /// Type for an evaluation status enum eval_status_type { EVAL_FAIL , ///< Evaluation failure EVAL_OK , ///< Correct evaluation EVAL_IN_PROGRESS , ///< Evaluation in progress UNDEFINED_STATUS ///< Undefined evaluation status }; } #endif