void NLPQLPOptimizer::initialize() { // NLPQLP does not support internal calculation of numerical derivatives if (vendorNumericalGradFlag) { Cerr << "\nError: vendor numerical gradients not supported by nlpql_sqp." << "\n Please select dakota numerical instead." << std::endl; abort_handler(-1); } // Prevent nesting of an instance of a Fortran iterator within another // instance of the same iterator (which would result in data clashes since // Fortran does not support object independence). Recurse through all // sub-models and test each sub-iterator for NLPQL presence. Iterator sub_iterator = iteratedModel.subordinate_iterator(); if (!sub_iterator.is_null() && ( strbegins(sub_iterator.method_name(), "nlpql") || strbegins(sub_iterator.uses_method(), "nlpql") ) ) sub_iterator.method_recourse(); ModelList& sub_models = iteratedModel.subordinate_models(); for (ModelLIter ml_iter = sub_models.begin(); ml_iter != sub_models.end(); ml_iter++) { sub_iterator = ml_iter->subordinate_iterator(); if (!sub_iterator.is_null() && ( strbegins(sub_iterator.method_name(), "nlpql") || strbegins(sub_iterator.uses_method(), "nlpql") ) ) sub_iterator.method_recourse(); } // Set NLPQL optimization controls L = 1; ACC = 1.0e-9; ACCQP = 1.0e-11; STPMIN = 0; MAXFUN = 10; // max fn evals per line search MAXIT = maxIterations; MAX_NM = 10; TOL_NM = 0.1; MODE = 0; IOUT = 6; LQL = 1; switch (outputLevel) { case DEBUG_OUTPUT: IPRINT = 4; break; case VERBOSE_OUTPUT: IPRINT = 2; break; case SILENT_OUTPUT: IPRINT = 0; break; case NORMAL_OUTPUT: default: IPRINT = 1; break; } }
void SharedPecosApproxData:: approx_type_to_basis_type(const String& approx_type, short& basis_type) { basis_type = Pecos::NO_BASIS; if (strends(approx_type, "orthogonal_polynomial")) { if (strbegins(approx_type, "global_regression")) basis_type = Pecos::GLOBAL_REGRESSION_ORTHOGONAL_POLYNOMIAL; else if (strbegins(approx_type, "global_projection")) basis_type = Pecos::GLOBAL_PROJECTION_ORTHOGONAL_POLYNOMIAL; else if (strbegins(approx_type, "global")) basis_type = Pecos::GLOBAL_ORTHOGONAL_POLYNOMIAL; //else if (strbegins(approx_type, "piecewise_regression")) // basis_type = Pecos::PIECEWISE_REGRESSION_ORTHOGONAL_POLYNOMIAL; //else if (strbegins(approx_type, "piecewise_projection")) // basis_type = Pecos::PIECEWISE_PROJECTION_ORTHOGONAL_POLYNOMIAL; //else if (strbegins(approx_type, "piecewise")) // basis_type = Pecos::PIECEWISE_ORTHOGONAL_POLYNOMIAL; } else if (strends(approx_type, "interpolation_polynomial")) { if (strbegins(approx_type, "global_nodal")) basis_type = Pecos::GLOBAL_NODAL_INTERPOLATION_POLYNOMIAL; else if (strbegins(approx_type, "global_hierarchical")) basis_type = Pecos::GLOBAL_HIERARCHICAL_INTERPOLATION_POLYNOMIAL; else if (strbegins(approx_type, "piecewise_nodal")) basis_type = Pecos::PIECEWISE_NODAL_INTERPOLATION_POLYNOMIAL; else if (strbegins(approx_type, "piecewise_hierarchical")) basis_type = Pecos::PIECEWISE_HIERARCHICAL_INTERPOLATION_POLYNOMIAL; } }
void CONMINOptimizer::initialize() { // Prevent nesting of an instance of a Fortran iterator within another // instance of the same iterator (which would result in data clashes since // Fortran does not support object independence). Recurse through all // sub-models and test each sub-iterator for CONMIN presence. // Note: This check is performed for DOT, CONMIN, and SOLBase, but not // for LHS since it is only active in pre-processing. Iterator sub_iterator = iteratedModel.subordinate_iterator(); if (!sub_iterator.is_null() && ( strbegins(sub_iterator.method_name(), "conmin_") || strbegins(sub_iterator.uses_method(), "conmin_") ) ) sub_iterator.method_recourse(); ModelList& sub_models = iteratedModel.subordinate_models(); for (ModelLIter ml_iter = sub_models.begin(); ml_iter != sub_models.end(); ml_iter++) { sub_iterator = ml_iter->subordinate_iterator(); if (!sub_iterator.is_null() && ( strbegins(sub_iterator.method_name(), "conmin_") || strbegins(sub_iterator.uses_method(), "conmin_") ) ) sub_iterator.method_recourse(); } // Initialize CONMIN specific data NFDG = 0; // default finite difference flag IPRINT = 1; // default flag to control amount of output info ITMAX = 100; // default max number of iterations FDCH = 1.0e-5; // default relative finite difference step size FDCHM = 1.0e-5; // default absolute finite difference step size CT = -0.1; // default constraint thickness tolerance // (for determining active/inactive constraint status) CTMIN = 0.001; // default absolute constraint tolerance // (note: the CONMIN manual default is 0.004) CTL = -0.01; // default side constraint thickness tolerance (see CT) CTLMIN = 0.001; // default absolute side constraint tolerance DELFUN = 1.0e-7; // default minimum relative change in the objective // function needed for convergence DABFUN = 1.0e-7; // default minimum absolute change in the objective // function needed for convergence conminInfo = 0; // Must be set to 0 before calling CONMIN ITMAX = maxIterations; // Set the print control flag if (outputLevel > NORMAL_OUTPUT) { IPRINT = printControl = 4; Cout << "CONMIN print control = " << printControl << endl; } else IPRINT = printControl = 2; // assigns a nondefault constraint tolerance if a valid value has been // set in dakota.in; otherwise use CONMIN default. if (constraintTol > 0.0) { CTMIN = CTLMIN = constraintTol; if (outputLevel > QUIET_OUTPUT) Cout << "constraint violation tolerance = " << constraintTol << '\n'; } // convergenceTol is an optional parameter in dakota.input.nspec, but // defining our own default (in the DataMethod constructor) and // always assigning it applies some consistency across methods. // Therefore, the CONMIN default is not used. DELFUN = DABFUN = convergenceTol; // needed in CONMIN // Default CONMIN gradients = numerical;forward;vendor setting. if ( gradientType == "analytic" || gradientType == "mixed" || ( gradientType == "numerical" && methodSource == "dakota" ) ) // Set NFDG=1 before calling CONMIN. This invokes the // user-supplied gradient mode which DAKOTA uses for analytic, // dakota numerical, or mixed analytic/dakota numerical gradients. NFDG=1; else if (gradientType == "none") { Cerr << "\nError: gradientType = none is invalid with CONMIN.\n" << "Please select numerical, analytic, or mixed gradients." << endl; abort_handler(-1); } else if (intervalType == "central") { Cerr << "\nFinite Difference Type = 'central' is invalid with CONMIN.\n" << "Forward difference is only available internal to CONMIN." << endl; abort_handler(-1); } else { // Vendor numerical gradients with forward differences NFDG = 0; // use CONMIN's default internal forward difference method // CONMIN's forward differencing uses fdss*X_i as one would expect FDCH = fdGradStepSize; // for FDCHM (minimum delta), use 2 orders of magnitude smaller than fdss to // be consistent with Model::estimate_derivatives(): FDCHM = fdGradStepSize*.01; } }
void cut_substitute_all (cut_env_t *env, cut_buf_t *tgt, cut_buf_t *src) { int sr_ctr; int lineidx; tgt->cb_lines_count = src->cb_lines_count; tgt->cb_lines = malloc (sizeof (char *) * (src->cb_len)); for (lineidx = 0; lineidx < src->cb_lines_count; lineidx++) { char *hit1, *hit2; char *srcline = src->cb_lines[lineidx]; char *tgtline; if ( ('\0' == srcline[0]) || strbegins (srcline, "--#") || strbegins (srcline, "--src ") || strbegins (srcline, "OpenLink Interactive SQL (Virtuoso), version ") || !strcmp (srcline, "Type HELP; for help and EXIT; to exit.") ) { tgt->cb_lines[lineidx] = tgtline = strdup (""); continue; } if ( (hit1 = strstr (srcline, "-- ")) && (hit2 = strstr (hit1, " msec")) && stralphabet (hit1 + strlen("-- "), hit2, "0123456789") ) { tgtline = malloc (strlen (srcline) + 6); strcpy (tgtline, srcline); sprintf (tgtline + (hit1 - srcline), "-- 00000%s", hit2); srcline = tgtline; } if ( (hit1 = strstr (srcline, "Connected to OpenLink Virtuoso VDBMS")) ) { tgtline = malloc (strlen (srcline)+1); strcpy (tgtline, srcline); strcpy (tgtline + (hit1 - srcline), hit1 + strlen ("Connected to OpenLink Virtuoso VDBMS")); srcline = tgtline; } if ( (hit1 = strstr (srcline, "Driver: ")) && (hit2 = strstr (hit1, " OpenLink Virtuoso ODBC Driver")) && stralphabet (hit1 + strlen ("Driver: "), hit2, "0123456789.") ) { tgtline = malloc (strlen (srcline)+1); strcpy (tgtline, srcline); strcpy (tgtline + (hit1 - srcline), hit2 + strlen (" OpenLink Virtuoso ODBC Driver")); srcline = tgtline; } if ( (hit1 = strstr (srcline, "parse error [")) && (hit2 = strstr (hit1, "] at")) && stralphabet (hit1 + strlen ("parse error ["), hit2, "0123456789.-") ) { tgtline = strdup (srcline); sprintf (tgtline + (hit1 - srcline), "parse error at%s", hit2 + strlen ("] at")); srcline = tgtline; } if (strends (srcline, "parse error")) { tgtline = malloc (strlen (srcline) + 4); sprintf (tgtline, "%s at", srcline); srcline = tgtline; } if ( (hit1 = strstr (srcline, "-- Line ")) && (hit2 = strstr (hit1, ": exit")) && stralphabet (hit1 + strlen("-- Line "), hit2, "0123456789") ) { tgtline = strdup (srcline); sprintf (tgtline + (hit1 - srcline), "exit%s", hit2 + strlen (": exit")); srcline = tgtline; } for (sr_ctr = 0; sr_ctr < env->ce_cfg.cc_replace_count; sr_ctr++) { cut_search_replace_t *sr = env->ce_cfg.cc_replaces[sr_ctr]; char *search = sr->csr_search; char *replace = sr->csr_replace; while (NULL != (hit1 = strstr (srcline, search))) { tgtline = malloc (strlen (srcline) + strlen (replace) + 1 - strlen (search)); memcpy (tgtline, srcline, (hit1 - srcline)); strcpy (tgtline + (hit1 - srcline), replace); strcat (tgtline, hit1 + strlen (search)); srcline = tgtline; } } tgt->cb_lines[lineidx] = tgtline = strdup (srcline); } }