std::mutex solve_mutex;
100#define NLPI_NAME "ipopt" 101#define NLPI_DESC "Ipopt interface" 102#define NLPI_PRIORITY 1000 104#define MAXPERTURB 0.01 105#define FEASTOLFACTOR 0.9 107#define DEFAULT_RANDSEED 71 153 "linear_system_scaling",
154 "nlp_scaling_method",
156 "hessian_approximation" 169 explicitSCIP_NlpiData()
170: optfile(
NULL), print_level(-1), warm_start_push(1e-9)
215classScipNLP :
public TNLP 225 intconv_lastrestoiter;
227 unsigned intcurrent_x;
228 unsigned intlast_f_eval_x;
229 unsigned intlast_g_eval_x;
240: nlpiproblem(nlpiproblem_),
scip(scip_),
241conv_lastrestoiter(-1),
242current_x(1), last_f_eval_x(0), last_g_eval_x(0),
254 voidinitializeSolve(
259assert(nlpiproblem_ !=
NULL);
260nlpiproblem = nlpiproblem_;
275IndexStyleEnum& index_style
279 boolget_bounds_info(
289 boolget_starting_point(
302Index get_number_of_nonlinear_variables();
305 boolget_list_of_nonlinear_variables(
306Index num_nonlin_vars,
307Index* pos_nonlin_vars
311 boolget_var_con_metadata(
313StringMetaDataMapType& var_string_md,
314IntegerMetaDataMapType& var_integer_md,
315NumericMetaDataMapType& var_numeric_md,
317StringMetaDataMapType& con_string_md,
318IntegerMetaDataMapType& con_integer_md,
319NumericMetaDataMapType& con_numeric_md
375 constNumber* lambda,
389 boolintermediate_callback(
397Number regularization_size,
401 constIpoptData* ip_data,
402IpoptCalculatedQuantities* ip_cq
406 voidfinalize_solution(
414 constNumber* lambda,
416 constIpoptData* data,
417IpoptCalculatedQuantities* cq
422classScipJournal :
publicIpopt::Journal {
429Ipopt::EJournalLevel default_level,
432: Ipopt::Journal(name, default_level),
441Ipopt::EJournalCategory category,
442Ipopt::EJournalLevel level,
446 if( level == J_ERROR )
458Ipopt::EJournalCategory category,
459Ipopt::EJournalLevel level,
460 const char* pformat,
464 if( level == J_ERROR )
475 voidFlushBufferImpl() { }
499assert(problem !=
NULL);
520assert(problem !=
NULL);
525 SCIPdebugMsg(
scip,
"Disable warmstart as no primal or dual solution available.\n");
543 SCIPdebugMsg(
scip,
"Starting solution for %sstart available from %s.\n",
544warmstart ?
"warm":
"cold",
549 SCIPdebugMsg(
scip,
"Starting solution for coldstart not available. Making up something by projecting 0 onto variable bounds and adding a random perturbation.\n");
563 for(
inti = 0; i < n; ++i )
589assert(nlpiproblem !=
NULL);
591 if( nlpidata->print_level < 0 )
596(void) nlpiproblem->
ipopt->Options()->SetIntegerValue(
"print_level", J_ERROR);
599(void) nlpiproblem->
ipopt->Options()->SetIntegerValue(
"print_level", J_SUMMARY);
602(void) nlpiproblem->
ipopt->Options()->SetIntegerValue(
"print_level", J_ITERSUMMARY);
605(void) nlpiproblem->
ipopt->Options()->SetIntegerValue(
"print_level", J_DETAILED);
608(void) nlpiproblem->
ipopt->Options()->SetIntegerValue(
"print_level",
MIN(J_ITERSUMMARY + (param.
verblevel-1), J_ALL));
613#ifdef SCIP_DISABLED_CODE 616 if( nlpidata->autoiterlim > 0 )
618param.
iterlimit= nlpidata->autoiterlim;
634 for(
inti = 0; i < n; ++i )
654 for(
inti = 0; i < m; ++i )
696-0.0021259769 * jacnnz +2.0121042012 * sqrt(jacnnz)
697-0.0374801925 * nlincons +2.9562232443 * sqrt(nlincons)
698-0.0133039200 * nnlcons -0.0412118434 * sqrt(nnlcons)
699-0.0702890379 * nnlvars +7.0920920430 * sqrt(nnlvars)
700+0.0183592749 * nvarbnd -4.7218258847 * sqrt(nvarbnd)
701+0.0112944627 * nvars -0.8365873360 * sqrt(nvars));
707 if( nlpidata->print_level >= J_SUMMARY || param.
verblevel> 0 )
711(void) nlpiproblem->
ipopt->Options()->SetIntegerValue(
"max_iter", param.
iterlimit);
714(void) nlpiproblem->
ipopt->Options()->SetNumericValue(
"acceptable_constr_viol_tol",
FEASTOLFACTOR* param.
feastol);
723(void) nlpiproblem->
ipopt->Options()->SetNumericValue(
"dual_inf_tol", param.
opttol);
724(void) nlpiproblem->
ipopt->Options()->SetNumericValue(
"compl_inf_tol", param.
opttol);
726(void) nlpiproblem->
ipopt->Options()->SetNumericValue(
"tol", param.
solvertol);
728#if IPOPT_VERSION_MAJOR > 3 || IPOPT_VERSION_MINOR > 14 || (IPOPT_VERSION_MINOR == 14 && IPOPT_VERSION_RELEASE >= 2) 729(void) nlpiproblem->
ipopt->Options()->UnsetValue(
"tol");
731(void) nlpiproblem->
ipopt->Options()->SetNumericValue(
"tol", 1e-8);
735#if IPOPT_VERSION_MAJOR > 3 || IPOPT_VERSION_MINOR >= 14 736(void) nlpiproblem->
ipopt->Options()->SetNumericValue(
"max_wall_time",
MAX(param.
timelimit, DBL_MIN));
738(void) nlpiproblem->
ipopt->Options()->SetNumericValue(
"max_cpu_time",
MAX(param.
timelimit, DBL_MIN));
744(void) nlpiproblem->
ipopt->Options()->SetIntegerValue(
"acceptable_iter", 0);
746#if IPOPT_VERSION_MAJOR > 3 || IPOPT_VERSION_MINOR > 14 || (IPOPT_VERSION_MINOR == 14 && IPOPT_VERSION_RELEASE >= 2) 747(void) nlpiproblem->
ipopt->Options()->UnsetValue(
"acceptable_iter");
749(void) nlpiproblem->
ipopt->Options()->SetIntegerValue(
"acceptable_iter", 15);
752(void) nlpiproblem->
ipopt->Options()->SetStringValue(
"expect_infeasible_problem", param.
expectinfeas?
"yes":
"no");
754 if( !nlpiproblem->
ipopt->Options()->SetStringValue(
"warm_start_init_point", param.
warmstart?
"yes":
"no") && !param.
warmstart)
757 SCIPerrorMessage(
"Failed to set Ipopt warm_start_init_point option to no.");
764#ifdef COLLECT_SOLVESTATS 767voidcollectStatistic(
769ApplicationReturnStatus status,
771SmartPtr<SolveStatistics> stats
790 for(
inti = 0; i < n; ++i )
815 for(
inti = 0; i < m; ++i )
856 for(
inti = 0; i < n; ++i )
857 for(
intj = offset[i]; j < offset[i+1]; ++j )
861linsys11nz += 2 * (jacnnz + nslacks);
865linsys13nz = linsys11nz + m;
871problem->
ipopt->Options()->GetBoolValue(
"expect_infeasible_problem", expectinfeas,
"");
873 static boolfirstwrite =
true;
876printf(
"IPOPTSTAT status,iter,time,nvars,nnlvars,nvarlb,nvarub,nlincons,nnlcons,objnl,jacnnz,hesnnz,linsys11nz,linsys13nz,linsys11density,linsys13density,expectinfeas\n");
880printf(
"IPOPTSTAT %d,%d,%g,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%f,%f,%d\n",
881status, stats->IterationCount(), stats->TotalWallclockTime(),
882nvars, nnlvars, nvarlb, nvarub, nlincons, nnlcons, objnl, jacnnz, hesnnz, linsys11nz, linsys13nz, linsys11density, linsys13density, expectinfeas);
899assert(nlpidata !=
NULL);
911 if( problem ==
NULL)
914 return(
void*)GetRawPtr(problem->
ipopt);
923assert(nlpi !=
NULL);
924assert(problem !=
NULL);
927assert(data !=
NULL);
937(*problem)->ipopt =
newIpoptApplication(
false);
940SmartPtr<Journal> jrnl =
newScipJournal(
"console", J_ITERSUMMARY,
scip);
941jrnl->SetPrintLevel(J_DBG, J_NONE);
942 if( !(*problem)->ipopt->Jnlst()->AddJournal(jrnl) )
948(*problem)->nlp =
newScipNLP(*problem,
scip);
950 catch(
conststd::bad_alloc& )
972assert(paramval !=
NULL);
973 if( *paramval !=
'\0')
974(void) (*problem)->ipopt->Options()->SetStringValue(
ipopt_string_params[i], paramval,
false);
977 for(
size_ti = 0; i <
sizeof(
ipopt_int_params) /
sizeof(
const char*); ++i )
994(void) (*problem)->ipopt->Options()->SetIntegerValue(
ipopt_int_params[i], paramval,
false);
997#if IPOPT_VERSION_MAJOR == 3 && IPOPT_VERSION_MINOR < 14 1001(void) (*problem)->ipopt->Options()->SetNumericValue(
"bound_relax_factor", 0.0);
1007(void) (*problem)->ipopt->Options()->SetStringValue(
"print_user_options",
"yes");
1009(void) (*problem)->ipopt->Options()->SetStringValue(
"sb",
"yes");
1010(void) (*problem)->ipopt->Options()->SetStringValueIfUnset(
"mu_strategy",
"adaptive");
1011(void) (*problem)->ipopt->Options()->SetIntegerValue(
"max_iter", INT_MAX);
1012(void) (*problem)->ipopt->Options()->SetNumericValue(
"nlp_lower_bound_inf", -
SCIPinfinity(
scip),
false);
1013(void) (*problem)->ipopt->Options()->SetNumericValue(
"nlp_upper_bound_inf",
SCIPinfinity(
scip),
false);
1014(void) (*problem)->ipopt->Options()->SetNumericValue(
"diverging_iterates_tol",
SCIPinfinity(
scip),
false);
1017(void) (*problem)->ipopt->Options()->SetNumericValue(
"warm_start_bound_push", data->warm_start_push);
1018(void) (*problem)->ipopt->Options()->SetNumericValue(
"warm_start_bound_frac", data->warm_start_push);
1019(void) (*problem)->ipopt->Options()->SetNumericValue(
"warm_start_slack_bound_push", data->warm_start_push);
1020(void) (*problem)->ipopt->Options()->SetNumericValue(
"warm_start_slack_bound_frac", data->warm_start_push);
1021(void) (*problem)->ipopt->Options()->SetNumericValue(
"warm_start_mult_bound_push", data->warm_start_push);
1024assert(data->optfile !=
NULL);
1025 if( (*problem)->ipopt->Initialize(data->optfile) != Solve_Succeeded )
1027 SCIPerrorMessage(
"Error during initialization of Ipopt using optionfile \"%s\"\n", data->optfile);
1041assert(nlpi !=
NULL);
1042assert(problem !=
NULL);
1043assert(*problem !=
NULL);
1044assert((*problem)->oracle !=
NULL);
1056 if( (*problem)->randnumgen !=
NULL)
1071assert(nlpi !=
NULL);
1072assert(problem !=
NULL);
1074 returnGetRawPtr(problem->
nlp);
1083assert(nlpi !=
NULL);
1084assert(problem !=
NULL);
1107assert(nlpi !=
NULL);
1108assert(problem !=
NULL);
1128assert(nlpi !=
NULL);
1129assert(problem !=
NULL);
1151assert(nlpi !=
NULL);
1152assert(problem !=
NULL);
1162 for(
inti = 0; i < nvars; ++i )
1169 if( (oldlb == oldub) != (lbs[i] == ubs[i]) )
1195assert(nlpi !=
NULL);
1196assert(problem !=
NULL);
1202 for(
inti = 0; i < nconss && problem->
samestructure; ++i )
1209 if( (oldlhs == oldrhs) != (lhss[i] == rhss[i]) )
1230assert(nlpi !=
NULL);
1231assert(problem !=
NULL);
1247 for( i = 0; i < dstatssize; ++i )
1249 if( dstats[i] != -1 )
1251assert(dstats[i] >= 0);
1252assert(dstats[i] < nvars);
1292assert(nlpi !=
NULL);
1293assert(problem !=
NULL);
1307 for( i = 0; i < dstatssize; ++i )
1309 if( dstats[i] != -1 )
1311assert(dstats[i] >= 0);
1312assert(dstats[i] < ncons);
1335assert(nlpi !=
NULL);
1336assert(problem !=
NULL);
1351assert(nlpi !=
NULL);
1352assert(problem !=
NULL);
1369assert(nlpi !=
NULL);
1370assert(problem !=
NULL);
1378problem->
solobjval+= objconstant - oldconstant;
1389assert(nlpi !=
NULL);
1390assert(problem !=
NULL);
1395 if( primalvalues !=
NULL)
1412 SCIPdebugMsg(
scip,
"invalidate initial guess primal values on user-request\n");
1418 if( consdualvalues !=
NULL&& varlbdualvalues !=
NULL&& varubdualvalues !=
NULL)
1459ApplicationReturnStatus status;
1461assert(nlpi !=
NULL);
1462assert(problem !=
NULL);
1465assert(IsValid(problem->
ipopt));
1466assert(IsValid(problem->
nlp));
1469assert(nlpidata !=
NULL);
1472 if( nlpidata->print_level >= J_SUMMARY || param.verblevel > 0 )
1480 if( param.timelimit == 0.0 )
1491#ifdef COLLECT_SOLVESTATS 1494param.iterlimit = 1000;
1505problem->
nlp->initializeSolve(problem, param);
1512#ifdef PROTECT_SOLVE_BY_MUTEX 1516std::unique_lock<std::mutex> guard(solve_mutex, std::defer_lock);
1517std::string linsolver;
1518(void) problem->
ipopt->Options()->GetStringValue(
"linear_solver", linsolver,
"");
1519 if( linsolver ==
"mumps")
1537 SCIPerrorMessage(
"Do not have expression interpreter that can compute function values and gradients. Cannot solve NLP with Ipopt.\n");
1546(void) problem->
ipopt->Options()->SetStringValueIfUnset(
"hessian_approximation",
"limited-memory");
1547problem->
nlp->approxhessian =
true;
1550problem->
nlp->approxhessian =
false;
1554problem->
ipopt->Options()->SetStringValue(
"derivative_test", problem->
nlp->approxhessian ?
"first-order":
"second-order");
1557status = problem->
ipopt->OptimizeTNLP(GetRawPtr(problem->
nlp));
1562problem->
ipopt->Options()->SetStringValue(
"warm_start_same_structure", problem->
samestructure?
"yes":
"no");
1563status = problem->
ipopt->ReOptimizeTNLP(GetRawPtr(problem->
nlp));
1569 caseSolve_Succeeded:
1570 caseSolved_To_Acceptable_Level:
1571 caseInfeasible_Problem_Detected:
1572 caseSearch_Direction_Becomes_Too_Small:
1573 caseDiverging_Iterates:
1574 caseUser_Requested_Stop:
1575 caseFeasible_Point_Found:
1576 caseMaximum_Iterations_Exceeded:
1577 caseRestoration_Failed:
1578 caseError_In_Step_Computation:
1579 caseMaximum_CpuTime_Exceeded:
1580#if IPOPT_VERSION_MAJOR > 3 || IPOPT_VERSION_MINOR >= 14 1581 caseMaximum_WallTime_Exceeded:
1591 caseNot_Enough_Degrees_Of_Freedom:
1597 caseInvalid_Number_Detected:
1598 SCIPdebugMsg(
scip,
"Ipopt failed because of an invalid number in function or derivative value\n");
1607 caseInsufficient_Memory:
1610 SCIPerrorMessage(
"Ipopt returned with status \"Insufficient Memory\"\n");
1614 caseUnrecoverable_Exception:
1615 caseInternal_Error:
1618 SCIPerrorMessage(
"Ipopt returned with application return status %d\n", status);
1622 caseInvalid_Problem_Definition:
1623 caseInvalid_Option:
1624 caseNonIpopt_Exception_Thrown:
1627 SCIPerrorMessage(
"Ipopt returned with application return status %d\n", status);
1631#if IPOPT_VERSION_MAJOR == 3 && IPOPT_VERSION_MINOR < 14 1632SmartPtr<SolveStatistics> stats = problem->
ipopt->Statistics();
1634 if( IsValid(stats) )
1636problem->
lastniter= stats->IterationCount();
1637problem->
lasttime= stats->TotalWallclockTime();
1639#ifdef COLLECT_SOLVESTATS 1640collectStatistic(
scip, status, problem, stats);
1644SmartPtr<IpoptData> ip_data = problem->
ipopt->IpoptDataObject();
1646 if( IsValid(ip_data) )
1648problem->
lastniter= ip_data->iter_count();
1649problem->
lasttime= ip_data->TimingStats().OverallAlgorithm().TotalWallclockTime();
1658 catch( IpoptException& except )
1660 SCIPerrorMessage(
"Ipopt returned with exception: %s\n", except.Message().c_str());
1671assert(nlpi !=
NULL);
1672assert(problem !=
NULL);
1681assert(nlpi !=
NULL);
1682assert(problem !=
NULL);
1691assert(nlpi !=
NULL);
1692assert(problem !=
NULL);
1694 if( primalvalues !=
NULL)
1697 if( consdualvalues !=
NULL)
1700 if( varlbdualvalues !=
NULL)
1703 if( varubdualvalues !=
NULL)
1706 if( objval !=
NULL)
1716assert(nlpi !=
NULL);
1717assert(problem !=
NULL);
1718assert(statistics !=
NULL);
1720statistics->niterations = problem->
lastniter;
1721statistics->totaltime = problem->
lasttime;
1743nlpiCopyIpopt, nlpiFreeIpopt, nlpiGetSolverPointerIpopt,
1744nlpiCreateProblemIpopt, nlpiFreeProblemIpopt, nlpiGetProblemPointerIpopt,
1745nlpiAddVarsIpopt, nlpiAddConstraintsIpopt, nlpiSetObjectiveIpopt,
1746nlpiChgVarBoundsIpopt, nlpiChgConsSidesIpopt, nlpiDelVarSetIpopt, nlpiDelConstraintSetIpopt,
1747nlpiChgLinearCoefsIpopt, nlpiChgExprIpopt,
1748nlpiChgObjConstantIpopt, nlpiSetInitialGuessIpopt, nlpiSolveIpopt, nlpiGetSolstatIpopt, nlpiGetTermstatIpopt,
1749nlpiGetSolutionIpopt, nlpiGetStatisticsIpopt,
1758&nlpidata->warm_start_push,
FALSE, 1e-9, 0.0, 1.0,
NULL,
NULL) );
1760SmartPtr<RegisteredOptions> reg_options =
newRegisteredOptions();
1761IpoptApplication::RegisterAllIpoptOptions(reg_options);
1765SmartPtr<const RegisteredOption> option = reg_options->GetOption(
ipopt_string_params[i]);
1768 if( !IsValid(option) )
1771assert(option->Type() == OT_String);
1778std::stringstream descr;
1779descr << option->ShortDescription();
1783std::vector<RegisteredOption::string_entry> validvals = option->GetValidStrings();
1784 if( validvals.size() > 1 )
1786descr <<
" Valid values if not empty:";
1787 for( std::vector<RegisteredOption::string_entry>::iterator val = validvals.begin(); val != validvals.end(); ++val )
1788descr <<
' '<< val->value_;
1791#if IPOPT_VERSION_MAJOR > 3 || IPOPT_VERSION_MINOR >= 14 1793advanced = option->Advanced();
1800 for(
size_ti = 0; i <
sizeof(
ipopt_int_params) /
sizeof(
const char*); ++i )
1804SmartPtr<const RegisteredOption> option = reg_options->GetOption(
ipopt_int_params[i]);
1807 if( !IsValid(option) )
1810assert(option->Type() == OT_Integer);
1816 intlower = option->LowerInteger();
1817 intupper = option->UpperInteger();
1821assert(lower > INT_MIN);
1824std::stringstream descr;
1825descr << option->ShortDescription();
1826descr <<
' '<< (lower-1) <<
" to use NLPI or Ipopt default.";
1828#if IPOPT_VERSION_MAJOR > 3 || IPOPT_VERSION_MINOR >= 14 1830advanced = option->Advanced();
1835i == 0 ? &nlpidata->print_level :
NULL, advanced,
1836lower-1, lower-1, upper,
NULL,
NULL) );
1845 return "Ipopt "IPOPT_VERSION;
1851 return "Interior Point Optimizer developed by A. Waechter et.al. (github.com/coin-or/Ipopt)";
1865assert(nlpiproblem !=
NULL);
1867 returnnlpiproblem->
oracle;
1871boolScipNLP::get_nlp_info(
1876IndexStyleEnum& index_style
1882assert(nlpiproblem !=
NULL);
1883assert(nlpiproblem->oracle !=
NULL);
1891assert(offset !=
NULL);
1892nnz_jac_g = offset[m];
1894 if( !approxhessian )
1899assert(offset !=
NULL);
1900nnz_h_lag = offset[n];
1907index_style = TNLP::C_STYLE;
1913boolScipNLP::get_bounds_info(
1922 const int* varlincounts;
1923 const int* varnlcounts;
1925assert(nlpiproblem !=
NULL);
1926assert(nlpiproblem->oracle !=
NULL);
1937 for(
inti = 0; i < n; ++i )
1938assert(x_l[i] <= x_u[i]);
1947 for(
inti = 0; i < n; ++i )
1949 if( varlincounts[i] == 0 && varnlcounts[i] == 0 )
1951 SCIPdebugMsg(
scip,
"fix unused variable x%d [%g,%g] to 0.0 or bound\n", i, x_l[i], x_u[i]);
1952assert(x_l[i] <= x_u[i]);
1953x_l[i] = x_u[i] =
MAX(
MIN(x_u[i], 0.0), x_l[i]);
1957 for(
inti = 0; i < m; ++i )
1961assert(g_l[i] <= g_u[i]);
1968boolScipNLP::get_starting_point(
1980assert(nlpiproblem !=
NULL);
1981assert(nlpiproblem->oracle !=
NULL);
1988assert(nlpiproblem->solprimalvalid);
1989assert(nlpiproblem->solprimals !=
NULL);
1995assert(nlpiproblem->soldualvalid);
1996assert(nlpiproblem->soldualvarlb !=
NULL);
1997assert(nlpiproblem->soldualvarub !=
NULL);
2004assert(nlpiproblem->soldualvalid);
2005assert(nlpiproblem->soldualcons !=
NULL);
2013Index ScipNLP::get_number_of_nonlinear_variables()
2018assert(nlpiproblem !=
NULL);
2019assert(nlpiproblem->oracle !=
NULL);
2024 for(
inti = 0; i < n; ++i )
2032boolScipNLP::get_list_of_nonlinear_variables(
2033Index num_nonlin_vars,
2034Index* pos_nonlin_vars
2040assert(nlpiproblem !=
NULL);
2041assert(nlpiproblem->oracle !=
NULL);
2046 for(
inti = 0; i < n; ++i )
2050assert(count < num_nonlin_vars);
2051pos_nonlin_vars[count++] = i;
2055assert(count == num_nonlin_vars);
2061boolScipNLP::get_var_con_metadata(
2063StringMetaDataMapType& var_string_md,
2064IntegerMetaDataMapType& var_integer_md,
2065NumericMetaDataMapType& var_numeric_md,
2067StringMetaDataMapType& con_string_md,
2068IntegerMetaDataMapType& con_integer_md,
2069NumericMetaDataMapType& con_numeric_md
2072assert(nlpiproblem !=
NULL);
2073assert(nlpiproblem->oracle !=
NULL);
2078 if( varnames !=
NULL)
2080std::vector<std::string>& varnamesvec(var_string_md[
"idx_names"]);
2081varnamesvec.reserve((
size_t)n);
2082 for(
inti = 0; i < n; ++i )
2084 if( varnames[i] !=
NULL)
2086varnamesvec.push_back(varnames[i]);
2092varnamesvec.push_back(buffer);
2097std::vector<std::string>& consnamesvec(con_string_md[
"idx_names"]);
2098consnamesvec.reserve((
size_t)m);
2099 for(
inti = 0; i < m; ++i )
2109consnamesvec.push_back(buffer);
2117boolScipNLP::eval_f(
2124assert(nlpiproblem !=
NULL);
2125assert(nlpiproblem->oracle !=
NULL);
2131last_f_eval_x = current_x;
2137boolScipNLP::eval_grad_f(
2146assert(nlpiproblem !=
NULL);
2147assert(nlpiproblem->oracle !=
NULL);
2156new_x = last_f_eval_x < current_x;
2160last_f_eval_x = current_x;
2166boolScipNLP::eval_g(
2174assert(nlpiproblem !=
NULL);
2175assert(nlpiproblem->oracle !=
NULL);
2181last_g_eval_x = current_x;
2190boolScipNLP::eval_jac_g(
2201assert(nlpiproblem !=
NULL);
2202assert(nlpiproblem->oracle !=
NULL);
2207 if( values ==
NULL)
2209 const int* jacoffset;
2214assert(iRow !=
NULL);
2215assert(jCol !=
NULL);
2220assert(jacoffset[0] == 0);
2221assert(jacoffset[m] == nele_jac);
2223 for( i = 0; i < m; ++i )
2224 for( ; j < jacoffset[i+1]; ++j )
2236new_x = last_g_eval_x < current_x;
2240last_f_eval_x = current_x;
2253boolScipNLP::eval_h(
2259 constNumber* lambda,
2267assert(nlpiproblem !=
NULL);
2268assert(nlpiproblem->oracle !=
NULL);
2273 if( values ==
NULL)
2275 const int* heslagoffset;
2276 const int* heslagcol;
2280assert(iRow !=
NULL);
2281assert(jCol !=
NULL);
2286assert(heslagoffset[0] == 0);
2287assert(heslagoffset[n] == nele_hess);
2288j = heslagoffset[0];
2289 for( i = 0; i < n; ++i )
2290 for( ; j < heslagoffset[i+1]; ++j )
2297 boolnew_x_obj = new_x;
2298 boolnew_x_cons = new_x;
2305new_x_obj = last_f_eval_x < current_x;
2306new_x_cons = last_g_eval_x < current_x;
2309last_f_eval_x = current_x;
2310last_g_eval_x = current_x;
2324boolScipNLP::intermediate_callback(
2332Number regularization_size,
2336 constIpoptData* ip_data,
2337IpoptCalculatedQuantities* ip_cq
2348 if( obj_value <= param.lobjlimit && inf_pr <= param.feastol )
2362conv_lastrestoiter = -1;
2364 else if( mode == RestorationPhaseMode )
2366conv_lastrestoiter = iter;
2368 else if( conv_lastrestoiter == iter-1 )
2390 if( inf_pr <= conv_prtarget[i] )
2399 else if( iter >= conv_iterlim[i] )
2402 SCIPdebugMsg(
scip,
"convcheck %d: inf_pr = %e > target %e; inf_du = %e target %e: ",
2403i, inf_pr, conv_prtarget[i], inf_du, conv_dutarget[i]);
2409 SCIPdebugPrintf(
"continue, because restoration phase only %d iters ago\n", iter - conv_lastrestoiter);
2411 else if( mode == RegularMode && inf_du <= conv_dutarget[i] && iter < conv_iterlim[i] +
convcheck_maxiter[i] )
2414 SCIPdebugPrintf(
"continue, because dual infeas. red. sufficient and only %d iters above limit\n", iter - conv_iterlim[i]);
2419 if( inf_pr <= param.feastol )
2435voidScipNLP::finalize_solution(
2436SolverReturn status,
2443 constNumber* lambda,
2445 constIpoptData* data,
2446IpoptCalculatedQuantities* cq
2449assert(nlpiproblem !=
NULL);
2450assert(nlpiproblem->oracle !=
NULL);
2455 boolcheck_feasibility =
false;
2461assert(
x!=
NULL);
2464 caseSTOP_AT_ACCEPTABLE_POINT:
2466 caseFEASIBLE_POINT_FOUND:
2469assert(
x!=
NULL);
2472 caseMAXITER_EXCEEDED:
2473check_feasibility =
true;
2478 caseCPUTIME_EXCEEDED:
2479#if IPOPT_VERSION_MAJOR > 3 || IPOPT_VERSION_MINOR >= 14 2480 caseWALLTIME_EXCEEDED:
2482check_feasibility =
true;
2487 caseSTOP_AT_TINY_STEP:
2488 caseRESTORATION_FAILURE:
2489 caseERROR_IN_STEP_COMPUTATION:
2490check_feasibility =
true;
2495 caseLOCAL_INFEASIBILITY:
2500 caseUSER_REQUESTED_STOP:
2504 caseDIVERGING_ITERATES:
2513 caseINVALID_NUMBER_DETECTED:
2517check_feasibility =
true;
2522 caseTOO_FEW_DEGREES_OF_FREEDOM:
2523 caseINTERNAL_ERROR:
2524 caseINVALID_OPTION:
2535 SCIPerrorMessage(
"Ipopt returned with unknown solution status %d\n", status);
2541assert(
x!=
NULL);
2542assert(lambda !=
NULL);
2543assert(z_L !=
NULL);
2544assert(z_U !=
NULL);
2546assert(nlpiproblem->solprimals !=
NULL);
2548 if( nlpiproblem->soldualcons ==
NULL)
2552 if( nlpiproblem->soldualvarlb ==
NULL)
2556 if( nlpiproblem->soldualvarub ==
NULL)
2560 if( nlpiproblem->soldualcons ==
NULL|| nlpiproblem->soldualvarlb ==
NULL|| nlpiproblem->soldualvarub ==
NULL)
2571nlpiproblem->solobjval = obj_value;
2572nlpiproblem->solprimalvalid =
true;
2573nlpiproblem->solprimalgiven =
false;
2574nlpiproblem->soldualvalid =
true;
2575nlpiproblem->soldualgiven =
false;
2578#if IPOPT_VERSION_MAJOR == 3 && IPOPT_VERSION_MINOR < 14 2579nlpiproblem->solboundviol = 0.0;
2583nlpiproblem->solconsviol = 0.0;
2587assert(cq !=
NULL);
2588nlpiproblem->solboundviol = cq->unscaled_curr_orig_bounds_violation(Ipopt::NORM_MAX);
2592nlpiproblem->solconsviol = cq->unscaled_curr_nlp_constraint_violation(Ipopt::NORM_MAX);
2594 if( check_feasibility )
2598 if(
MAX(nlpiproblem->solconsviol, nlpiproblem->solboundviol) <= param.feastol )
2604 catch(
constIpoptNLP::Eval_Error& exc )
2606 SCIPdebugMsg(
scip,
"Eval error when checking constraint viol: %s\n", exc.Message().c_str());
2607assert(status == INVALID_NUMBER_DETECTED);
2616 SCIPdebugMsg(
scip,
"Unknown exception when checking constraint viol\n");
2617assert(status == INVALID_NUMBER_DETECTED);
2624assert(lambda !=
NULL);
2626(void) nlpiproblem->ipopt->Options()->GetNumericValue(
"tol", tol,
"");
2631 boolinfreasonable =
true;
2633 for(
inti = 0; i < m && infreasonable; ++i )
2635 if( fabs(lambda[i]) < tol )
2638 if( lambda[i] < 0.0 )
2646 SCIPdebugMessage(
"inconsistent dual, lambda = %g, but lhs = %g\n", lambda[i], side);
2647infreasonable =
false;
2658 SCIPdebugMessage(
"inconsistent dual, lambda = %g, but rhs = %g\n", lambda[i], side);
2659infreasonable =
false;
2664infproof += lambda[i] * (g[i] - side);
2667 if( infreasonable )
2669 SCIPdebugMessage(
"infproof = %g should be positive to be valid\n", infproof);
2670 if( infproof <= 0.0 )
2671infreasonable =
false;
2674 if( !infreasonable )
2695#if IPOPT_VERSION_MAJOR == 3 && IPOPT_VERSION_MINOR < 14 2696IpLapackDsyev((
bool)computeeigenvectors, N,
a, N,
w, info);
2698IpLapackSyev((
bool)computeeigenvectors, N,
a, N,
w, info);
2703 SCIPerrorMessage(
"There was an error when calling DSYEV. INFO = %d\n", info);
2726assert(
b!=
NULL);
2727assert(
x!=
NULL);
2728assert(success !=
NULL);
2734#if IPOPT_VERSION_MAJOR == 3 && IPOPT_VERSION_MINOR < 14 2735IpLapackDgetrf(N, Acopy, pivotcopy, N, info);
2737IpLapackGetrf(N, Acopy, pivotcopy, N, info);
2742 SCIPdebugMessage(
"There was an error when calling Dgetrf. INFO = %d\n", info);
2750#if IPOPT_VERSION_MAJOR == 3 && IPOPT_VERSION_MINOR < 14 2751IpLapackDgetrs(N, 1, Acopy, N, pivotcopy, bcopy, N);
2753IpLapackGetrs(N, 1, Acopy, N, pivotcopy, bcopy, N);
2785assert(
b!=
NULL);
2786assert(
x!=
NULL);
2787assert(success !=
NULL);
2805#if IPOPT_VERSION_MAJOR == 3 && IPOPT_VERSION_MINOR < 14 2806IpLapackDgetrf(N, Acopy, pivotcopy, N, info);
2808IpLapackGetrf(N, Acopy, pivotcopy, N, info);
2813 SCIPdebugMessage(
"There was an error when calling Dgetrf. INFO = %d\n", info);
2821#if IPOPT_VERSION_MAJOR == 3 && IPOPT_VERSION_MINOR < 14 2822IpLapackDgetrs(N, 1, Acopy, N, pivotcopy, bcopy, N);
2824IpLapackGetrs(N, 1, Acopy, N, pivotcopy, bcopy, N);
#define SCIP_CALL_ABORT(x)
methods to interpret (evaluate) an expression "fast"
int SCIPgetSubscipDepth(SCIP *scip)
SCIP_EXPRINTCAPABILITY SCIPexprintGetCapability(void)
void SCIPinfoMessage(SCIP *scip, FILE *file, const char *formatstr,...)
SCIP_MESSAGEHDLR * SCIPgetMessagehdlr(SCIP *scip)
SCIP_RETCODE SCIPincludeNlpSolverIpopt(SCIP *scip)
SCIP_RETCODE SCIPnlpiOracleEvalObjectiveValue(SCIP *scip, SCIP_NLPIORACLE *oracle, const SCIP_Real *x, SCIP_Real *objval)
SCIP_RETCODE SCIPnlpiOracleChgLinearCoefs(SCIP *scip, SCIP_NLPIORACLE *oracle, int considx, int nentries, const int *varidxs, const SCIP_Real *newcoefs)
SCIP_RETCODE SCIPnlpiOracleChgVarBounds(SCIP *scip, SCIP_NLPIORACLE *oracle, int nvars, const int *indices, const SCIP_Real *lbs, const SCIP_Real *ubs)
SCIP_RETCODE SCIPnlpiOracleAddConstraints(SCIP *scip, SCIP_NLPIORACLE *oracle, int nconss, const SCIP_Real *lhss, const SCIP_Real *rhss, const int *nlininds, int *const *lininds, SCIP_Real *const *linvals, SCIP_EXPR **exprs, const char **consnames)
SCIP_Bool SCIPnlpiOracleIsConstraintNonlinear(SCIP_NLPIORACLE *oracle, int considx)
SCIP_RETCODE SCIPnlpiOracleDelVarSet(SCIP *scip, SCIP_NLPIORACLE *oracle, int *delstats)
SCIP_RETCODE SCIPnlpiOracleEvalConstraintValues(SCIP *scip, SCIP_NLPIORACLE *oracle, const SCIP_Real *x, SCIP_Real *convals)
SCIP_RETCODE SCIPnlpiOracleCreate(SCIP *scip, SCIP_NLPIORACLE **oracle)
SCIP_RETCODE SCIPnlpiOracleGetJacobianSparsity(SCIP *scip, SCIP_NLPIORACLE *oracle, const int **offset, const int **col)
void SCIPnlpiOracleGetVarCounts(SCIP *scip, SCIP_NLPIORACLE *oracle, const int **lincounts, const int **nlcounts)
SCIP_RETCODE SCIPnlpiOracleGetHessianLagSparsity(SCIP *scip, SCIP_NLPIORACLE *oracle, const int **offset, const int **col)
char * SCIPnlpiOracleGetConstraintName(SCIP_NLPIORACLE *oracle, int considx)
SCIP_RETCODE SCIPnlpiOracleEvalObjectiveGradient(SCIP *scip, SCIP_NLPIORACLE *oracle, const SCIP_Real *x, SCIP_Bool isnewx, SCIP_Real *objval, SCIP_Real *objgrad)
SCIP_RETCODE SCIPnlpiOracleResetEvalTime(SCIP *scip, SCIP_NLPIORACLE *oracle)
SCIP_RETCODE SCIPnlpiOracleSetObjective(SCIP *scip, SCIP_NLPIORACLE *oracle, const SCIP_Real constant, int nlin, const int *lininds, const SCIP_Real *linvals, SCIP_EXPR *expr)
SCIP_Real SCIPnlpiOracleGetConstraintRhs(SCIP_NLPIORACLE *oracle, int considx)
SCIP_Real SCIPnlpiOracleGetEvalTime(SCIP *scip, SCIP_NLPIORACLE *oracle)
SCIP_RETCODE SCIPnlpiOracleChgConsSides(SCIP *scip, SCIP_NLPIORACLE *oracle, int nconss, const int *indices, const SCIP_Real *lhss, const SCIP_Real *rhss)
SCIP_Real SCIPnlpiOracleGetConstraintLhs(SCIP_NLPIORACLE *oracle, int considx)
SCIP_RETCODE SCIPnlpiOracleAddVars(SCIP *scip, SCIP_NLPIORACLE *oracle, int nvars, const SCIP_Real *lbs, const SCIP_Real *ubs, const char **varnames)
int SCIPnlpiOracleGetNVars(SCIP_NLPIORACLE *oracle)
int SCIPnlpiOracleGetNConstraints(SCIP_NLPIORACLE *oracle)
SCIP_EXPRINTCAPABILITY SCIPnlpiOracleGetEvalCapability(SCIP *scip, SCIP_NLPIORACLE *oracle)
SCIP_Real SCIPnlpiOracleGetObjectiveConstant(SCIP_NLPIORACLE *oracle)
SCIP_RETCODE SCIPnlpiOracleEvalHessianLag(SCIP *scip, SCIP_NLPIORACLE *oracle, const SCIP_Real *x, SCIP_Bool isnewx_obj, SCIP_Bool isnewx_cons, SCIP_Real objfactor, const SCIP_Real *lambda, SCIP_Real *hessian)
SCIP_Bool SCIPnlpiOracleIsVarNonlinear(SCIP *scip, SCIP_NLPIORACLE *oracle, int varidx)
SCIP_RETCODE SCIPnlpiOracleEvalJacobian(SCIP *scip, SCIP_NLPIORACLE *oracle, const SCIP_Real *x, SCIP_Bool isnewx, SCIP_Real *convals, SCIP_Real *jacobi)
SCIP_RETCODE SCIPnlpiOracleDelConsSet(SCIP *scip, SCIP_NLPIORACLE *oracle, int *delstats)
SCIP_RETCODE SCIPnlpiOracleSetProblemName(SCIP *scip, SCIP_NLPIORACLE *oracle, const char *name)
SCIP_RETCODE SCIPnlpiOracleChgObjConstant(SCIP *scip, SCIP_NLPIORACLE *oracle, SCIP_Real objconstant)
char ** SCIPnlpiOracleGetVarNames(SCIP_NLPIORACLE *oracle)
const SCIP_Real * SCIPnlpiOracleGetVarLbs(SCIP_NLPIORACLE *oracle)
const SCIP_Real * SCIPnlpiOracleGetVarUbs(SCIP_NLPIORACLE *oracle)
SCIP_RETCODE SCIPnlpiOracleFree(SCIP *scip, SCIP_NLPIORACLE **oracle)
const char * SCIPnlpiOracleGetProblemName(SCIP_NLPIORACLE *oracle)
SCIP_RETCODE SCIPnlpiOracleChgExpr(SCIP *scip, SCIP_NLPIORACLE *oracle, int considx, SCIP_EXPR *expr)
const char * SCIPgetSolverNameIpopt(void)
SCIP_RETCODE SCIPcallLapackDsyevIpopt(SCIP_Bool computeeigenvectors, int N, SCIP_Real *a, SCIP_Real *w)
SCIP_RETCODE SCIPsolveLinearEquationsIpopt(int N, SCIP_Real *A, SCIP_Real *b, SCIP_Real *x, SCIP_Bool *success)
void * SCIPgetNlpiOracleIpopt(SCIP_NLPIPROBLEM *nlpiproblem)
SCIP_Bool SCIPisIpoptAvailableIpopt(void)
const char * SCIPgetSolverDescIpopt(void)
SCIP_RETCODE SCIPaddIntParam(SCIP *scip, const char *name, const char *desc, int *valueptr, SCIP_Bool isadvanced, int defaultvalue, int minvalue, int maxvalue, SCIP_DECL_PARAMCHGD((*paramchgd)), SCIP_PARAMDATA *paramdata)
SCIP_PARAM * SCIPgetParam(SCIP *scip, const char *name)
SCIP_RETCODE SCIPaddStringParam(SCIP *scip, const char *name, const char *desc, char **valueptr, SCIP_Bool isadvanced, const char *defaultvalue, SCIP_DECL_PARAMCHGD((*paramchgd)), SCIP_PARAMDATA *paramdata)
SCIP_RETCODE SCIPaddRealParam(SCIP *scip, const char *name, const char *desc, SCIP_Real *valueptr, SCIP_Bool isadvanced, SCIP_Real defaultvalue, SCIP_Real minvalue, SCIP_Real maxvalue, SCIP_DECL_PARAMCHGD((*paramchgd)), SCIP_PARAMDATA *paramdata)
SCIP_RETCODE SCIPincludeExternalCodeInformation(SCIP *scip, const char *name, const char *description)
#define SCIPallocBlockMemoryArray(scip, ptr, num)
#define SCIPreallocBlockMemoryArray(scip, ptr, oldnum, newnum)
#define SCIPfreeBlockMemoryArrayNull(scip, ptr, num)
SCIP_RETCODE SCIPincludeNlpi(SCIP *scip, const char *name, const char *description, int priority, SCIP_DECL_NLPICOPY((*nlpicopy)), SCIP_DECL_NLPIFREE((*nlpifree)), SCIP_DECL_NLPIGETSOLVERPOINTER((*nlpigetsolverpointer)), SCIP_DECL_NLPICREATEPROBLEM((*nlpicreateproblem)), SCIP_DECL_NLPIFREEPROBLEM((*nlpifreeproblem)), SCIP_DECL_NLPIGETPROBLEMPOINTER((*nlpigetproblempointer)), SCIP_DECL_NLPIADDVARS((*nlpiaddvars)), SCIP_DECL_NLPIADDCONSTRAINTS((*nlpiaddconstraints)), SCIP_DECL_NLPISETOBJECTIVE((*nlpisetobjective)), SCIP_DECL_NLPICHGVARBOUNDS((*nlpichgvarbounds)), SCIP_DECL_NLPICHGCONSSIDES((*nlpichgconssides)), SCIP_DECL_NLPIDELVARSET((*nlpidelvarset)), SCIP_DECL_NLPIDELCONSSET((*nlpidelconsset)), SCIP_DECL_NLPICHGLINEARCOEFS((*nlpichglinearcoefs)), SCIP_DECL_NLPICHGEXPR((*nlpichgexpr)), SCIP_DECL_NLPICHGOBJCONSTANT((*nlpichgobjconstant)), SCIP_DECL_NLPISETINITIALGUESS((*nlpisetinitialguess)), SCIP_DECL_NLPISOLVE((*nlpisolve)), SCIP_DECL_NLPIGETSOLSTAT((*nlpigetsolstat)), SCIP_DECL_NLPIGETTERMSTAT((*nlpigettermstat)), SCIP_DECL_NLPIGETSOLUTION((*nlpigetsolution)), SCIP_DECL_NLPIGETSTATISTICS((*nlpigetstatistics)), SCIP_NLPIDATA *nlpidata)
SCIP_NLPIDATA * SCIPnlpiGetData(SCIP_NLPI *nlpi)
SCIP_Bool SCIPisSolveInterrupted(SCIP *scip)
SCIP_Real SCIPinfinity(SCIP *scip)
SCIP_Real SCIPfloor(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisInfinity(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisEQ(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
void SCIPfreeRandom(SCIP *scip, SCIP_RANDNUMGEN **randnumgen)
SCIP_Real SCIPrandomGetReal(SCIP_RANDNUMGEN *randnumgen, SCIP_Real minrandval, SCIP_Real maxrandval)
SCIP_RETCODE SCIPcreateRandom(SCIP *scip, SCIP_RANDNUMGEN **randnumgen, unsigned int initialseed, SCIP_Bool useglobalseed)
int SCIPsnprintf(char *t, int len, const char *s,...)
static const char * paramname[]
#define BMSduplicateMemoryArray(ptr, source, num)
#define BMSallocMemoryArray(ptr, num)
#define BMSfreeMemoryArray(ptr)
#define BMScopyMemoryArray(ptr, source, num)
void SCIPmessageVPrintError(const char *formatstr, va_list ap)
void SCIPmessageVPrintInfo(SCIP_MESSAGEHDLR *messagehdlr, const char *formatstr, va_list ap)
void SCIPmessagePrintErrorHeader(const char *sourcefile, int sourceline)
static SCIP_DECL_NLPICHGEXPR(nlpiChgExprIpopt)
static SCIP_DECL_NLPICREATEPROBLEM(nlpiCreateProblemIpopt)
static const SCIP_Real convcheck_minred[convcheck_nchecks]
static SCIP_DECL_NLPICHGCONSSIDES(nlpiChgConsSidesIpopt)
static const char * ipopt_int_params[]
integer parameters of Ipopt to make available via SCIP parameters
static SCIP_DECL_NLPIGETSOLVERPOINTER(nlpiGetSolverPointerIpopt)
static SCIP_DECL_NLPIDELVARSET(nlpiDelVarSetIpopt)
static SCIP_DECL_NLPICHGVARBOUNDS(nlpiChgVarBoundsIpopt)
static SCIP_DECL_NLPIGETSTATISTICS(nlpiGetStatisticsIpopt)
static SCIP_DECL_NLPIDELCONSSET(nlpiDelConstraintSetIpopt)
static SCIP_DECL_NLPIGETSOLSTAT(nlpiGetSolstatIpopt)
static SCIP_DECL_NLPIGETTERMSTAT(nlpiGetTermstatIpopt)
static SCIP_DECL_NLPICOPY(nlpiCopyIpopt)
static SCIP_DECL_NLPICHGOBJCONSTANT(nlpiChgObjConstantIpopt)
static SCIP_DECL_NLPISOLVE(nlpiSolveIpopt)
static const int convcheck_startiter
static const int convcheck_nchecks
static SCIP_DECL_NLPISETINITIALGUESS(nlpiSetInitialGuessIpopt)
static SCIP_DECL_NLPIGETPROBLEMPOINTER(nlpiGetProblemPointerIpopt)
static SCIP_RETCODE solveLinearProb3(SCIP_Real *A, SCIP_Real *b, SCIP_Real *x, SCIP_Bool *success)
static SCIP_RETCODE handleNlpParam(SCIP *scip, SCIP_NLPIDATA *nlpidata, SCIP_NLPIPROBLEM *nlpiproblem, const SCIP_NLPPARAM param)
pass NLP solve parameters to Ipopt
static const char * ipopt_string_params[]
string parameters of Ipopt to make available via SCIP parameters
static SCIP_DECL_NLPIFREE(nlpiFreeIpopt)
static SCIP_DECL_NLPIADDCONSTRAINTS(nlpiAddConstraintsIpopt)
static SCIP_DECL_NLPICHGLINEARCOEFS(nlpiChgLinearCoefsIpopt)
static SCIP_RETCODE ensureStartingPoint(SCIP *scip, SCIP_NLPIPROBLEM *problem, SCIP_Bool &warmstart)
static const int convcheck_maxiter[convcheck_nchecks]
static SCIP_DECL_NLPIGETSOLUTION(nlpiGetSolutionIpopt)
static SCIP_DECL_NLPIFREEPROBLEM(nlpiFreeProblemIpopt)
static SCIP_DECL_NLPIADDVARS(nlpiAddVarsIpopt)
static SCIP_DECL_NLPISETOBJECTIVE(nlpiSetObjectiveIpopt)
static void invalidateSolved(SCIP_NLPIPROBLEM *problem)
static void invalidateSolution(SCIP_NLPIPROBLEM *problem)
methods to store an NLP and request function, gradient, and Hessian values
char * SCIPparamGetString(SCIP_PARAM *param)
int SCIPparamGetInt(SCIP_PARAM *param)
int SCIPparamGetIntDefault(SCIP_PARAM *param)
public methods for message output
public data structures and miscellaneous methods
public methods for handling parameter settings
public methods for problem copies
public methods for memory management
public methods for message handling
public methods for NLPI solver interfaces
public methods for numerical tolerances
public methods for SCIP parameter handling
public methods for random numbers
SCIP_NLPPARAM_FASTFAIL fastfail
SmartPtr< IpoptApplication > ipopt
SCIP_RANDNUMGEN * randnumgen
SCIP_NLPTERMSTAT termstat
#define SCIP_EXPRINTCAPABILITY_GRADIENT
#define SCIP_EXPRINTCAPABILITY_HESSIAN
#define SCIP_EXPRINTCAPABILITY_FUNCVALUE
unsigned int SCIP_EXPRINTCAPABILITY
#define SCIP_NLPPARAM_PRINT(param)
@ SCIP_NLPPARAM_FASTFAIL_OFF
@ SCIP_NLPPARAM_FASTFAIL_AGGRESSIVE
enum SCIP_NlpSolStat SCIP_NLPSOLSTAT
@ SCIP_NLPTERMSTAT_TIMELIMIT
@ SCIP_NLPTERMSTAT_NUMERICERROR
@ SCIP_NLPTERMSTAT_EVALERROR
@ SCIP_NLPTERMSTAT_LOBJLIMIT
@ SCIP_NLPTERMSTAT_ITERLIMIT
@ SCIP_NLPTERMSTAT_OUTOFMEMORY
@ SCIP_NLPTERMSTAT_INTERRUPT
@ SCIP_NLPSOLSTAT_UNBOUNDED
@ SCIP_NLPSOLSTAT_LOCINFEASIBLE
@ SCIP_NLPSOLSTAT_FEASIBLE
@ SCIP_NLPSOLSTAT_UNKNOWN
enum SCIP_NlpTermStat SCIP_NLPTERMSTAT
struct SCIP_NlpiData SCIP_NLPIDATA
enum SCIP_Retcode SCIP_RETCODE
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4