Skip to content

Commit

Permalink
- added new flag for checking JAC and HESSE in optimization
Browse files Browse the repository at this point in the history
git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@18923 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
  • Loading branch information
Vitalij Ruge committed Feb 1, 2014
1 parent 2054cba commit aa7ada5
Show file tree
Hide file tree
Showing 4 changed files with 26 additions and 7 deletions.
Expand Up @@ -457,11 +457,11 @@ int loadDAEmodel(DATA *data, IPOPT_DATA_ *iData)

if(j < iData->nx)
{
fprintf(iData->pFile[j], "%s(%g),", iData->data->modelData.realVarsData[j].info.name, iData->time[k]);
fprintf(iData->pFile[j], "%s_%i,", iData->data->modelData.realVarsData[j].info.name, k);
}
else if(j < iData->nv)
{
fprintf(iData->pFile[j], "%s(%g),", iData->data->modelData.realVarsData[iData->index_u + j-iData->nx].info.name, iData->time[k]);
fprintf(iData->pFile[j], "%s_%i,", iData->data->modelData.realVarsData[iData->index_u + j-iData->nx].info.name, k);
}
}
}
Expand Down
23 changes: 18 additions & 5 deletions SimulationRuntime/c/optimization/mainOptimizer/ipoptODE.c
Expand Up @@ -110,20 +110,23 @@ int startIpopt(DATA* data, SOLVER_INFO* solverInfo, int flag)

if(ACTIVE_STREAM(LOG_IPOPT)){
AddIpoptIntOption(nlp, "print_level", 5);
} else if(ACTIVE_STREAM(LOG_STATS)){
}else if(ACTIVE_STREAM(LOG_STATS)){
AddIpoptIntOption(nlp, "print_level", 3);
} else {
}else {
AddIpoptIntOption(nlp, "print_level", 2);
}
AddIpoptIntOption(nlp, "file_print_level", 0);

AddIpoptStrOption(nlp, "mu_strategy", "adaptive");
AddIpoptStrOption(nlp, "fixed_variable_treatment", "make_parameter");


cflags = (char*)omc_flagValue[FLAG_IPOPT_HESSE];
if(cflags){
if(!strcmp(cflags,"BFGS"))
AddIpoptStrOption(nlp, "hessian_approximation", "limited-memory");
else if(!strcmp(cflags,"const"))
AddIpoptStrOption(nlp, "hessian_constant", "yes");
}


Expand All @@ -135,12 +138,22 @@ int startIpopt(DATA* data, SOLVER_INFO* solverInfo, int flag)

AddIpoptStrOption(nlp,"nlp_scaling_method","gradient-based");
AddIpoptNumOption(nlp,"mu_init",1e-6);
if(ACTIVE_STREAM(LOG_JAC)){

if(ACTIVE_STREAM(LOG_IPOPT_JAC) && ACTIVE_STREAM(LOG_IPOPT_HESSE)){
AddIpoptIntOption(nlp, "print_level", 4);
AddIpoptStrOption(nlp, "derivative_test", "second-order");
}else if(ACTIVE_STREAM(LOG_IPOPT_JAC)){
AddIpoptIntOption(nlp, "print_level", 4);
AddIpoptStrOption(nlp, "derivative_test", "first-order");
}else if(ACTIVE_STREAM(LOG_IPOPT_HESSE)){
AddIpoptIntOption(nlp, "print_level", 4);
AddIpoptStrOption(nlp, "derivative_test", "only-second-order");
}else{
AddIpoptStrOption(nlp, "derivative_test", "none");
}
/*AddIpoptStrOption(nlp, "derivative_test_print_all", "yes");*/
/* AddIpoptNumOption(nlp,"derivative_test_perturbation",1e-6); */
/*AddIpoptStrOption(nlp, "derivative_test_print_all", "yes");
* AddIpoptNumOption(nlp,"derivative_test_perturbation",1e-6);
*/
AddIpoptIntOption(nlp, "max_iter", 5000);

res = IpoptSolve(nlp, iData->v, NULL, &obj, iData->mult_g, iData->mult_x_L, iData->mult_x_U, (void*)iData);
Expand Down
4 changes: 4 additions & 0 deletions SimulationRuntime/c/util/omc_error.c
Expand Up @@ -53,6 +53,8 @@ const char *LOG_STREAM_NAME[LOG_MAX] = {
"LOG_EVENTS_V",
"LOG_INIT",
"LOG_IPOPT",
"LOG_IPOPT_JAC",
"LOG_IPOPT_HESSE",
"LOG_JAC",
"LOG_LS",
"LOG_LS_V",
Expand Down Expand Up @@ -82,6 +84,8 @@ const char *LOG_STREAM_DESC[LOG_MAX] = {
"verbose logging of event system", /* LOG_EVENTS_V */
"additional information during initialization", /* LOG_INIT */
"more information from Ipopt", /* LOG_IPOPT */
"check jacobian matrix with Ipopt", /* LOG_IPOPT_JAC*/
"check hessian matrix with Ipopt", /* LOG_IPOPT_HESSE*/
"outputs the jacobian matrix used by dassl", /* LOG_JAC */
"logging for linear systems", /* LOG_LS */
"verbose logging of linear systems", /* LOG_LS_V */
Expand Down
2 changes: 2 additions & 0 deletions SimulationRuntime/c/util/omc_error.h
Expand Up @@ -94,6 +94,8 @@ enum LOG_STREAM
LOG_EVENTS_V,
LOG_INIT,
LOG_IPOPT,
LOG_IPOPT_JAC,
LOG_IPOPT_HESSE,
LOG_JAC,
LOG_LS,
LOG_LS_V,
Expand Down

0 comments on commit aa7ada5

Please sign in to comment.