Skip to content

Commit

Permalink
- update heuristic for nominal in optimization
Browse files Browse the repository at this point in the history
git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@18311 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
  • Loading branch information
Vitalij Ruge committed Nov 26, 2013
1 parent 4f92095 commit 98244a0
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 22 deletions.
40 changes: 19 additions & 21 deletions SimulationRuntime/c/optimization/initialOptimizer/allocate_ipopt.c
Original file line number Diff line number Diff line change
Expand Up @@ -330,7 +330,7 @@ int loadDAEmodel(DATA *data, IPOPT_DATA_ *iData)

for(i =0,j = iData->nx;i<iData->nu;++i,++j)
{
check_nominal(iData, data->modelData.realVarsData[id +i].attribute.min, data->modelData.realVarsData[id +i].attribute.max, data->modelData.realVarsData[id +i].attribute.nominal, data->modelData.realVarsData[id +i].attribute.useNominal, j, fabs(iData->x0[j]));
check_nominal(iData, data->modelData.realVarsData[id +i].attribute.min, data->modelData.realVarsData[id +i].attribute.max, data->modelData.realVarsData[id +i].attribute.nominal, data->modelData.realVarsData[id +i].attribute.useNominal, j, fabs(data->modelData.realVarsData[id+i].attribute.start));

iData->scalVar[j] = 1.0 / iData->vnom[j];
iData->umin[i] = data->modelData.realVarsData[id +i].attribute.min*iData->scalVar[j];
Expand Down Expand Up @@ -553,27 +553,25 @@ int local_jac_struct(IPOPT_DATA_ *iData)
**/
static int check_nominal(IPOPT_DATA_ *iData, double min, double max, double nominal, short set, int i, double x0)
{
if(set)
iData->vnom[i] = fmax(fabs(nominal),1e-16);
else
{
double amax, amin;
amax = fabs(max);
amin = fabs(min);
iData->vnom[i] = fmax(amax,amin);
if(iData->vnom[i] > 1e12)
{
double tmp = fmin(amax,amin);
if(tmp<1e12)
iData->vnom[i] = fmax(tmp,x0);
else
{
iData->vnom[i] = 1 + x0;
}
if(set){
iData->vnom[i] = fmax(fabs(nominal),1e-16);
}else{
double amax, amin;
amax = fabs(max);
amin = fabs(min);
iData->vnom[i] = fmax(amax,amin);
if(iData->vnom[i] > 1e12)
{
double tmp = fmin(amax,amin);
if(tmp<1e12){
iData->vnom[i] = fmax(tmp,x0);
}else{
iData->vnom[i] = 1.0 + x0;
}

iData->vnom[i] = fmax(iData->vnom[i],1e-16);
}
}

iData->vnom[i] = fmax(iData->vnom[i],1e-16);
}
return 0;
}

Expand Down
3 changes: 2 additions & 1 deletion SimulationRuntime/c/optimization/mainOptimizer/ipoptODE.c
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,8 @@ int startIpopt(DATA* data, SOLVER_INFO* solverInfo, int flag)

AddIpoptStrOption(nlp,"nlp_scaling_method","gradient-based");
AddIpoptNumOption(nlp,"mu_init",1e-6);
/*AddIpoptStrOption(nlp, "derivative_test", "second-order"); */
if(ACTIVE_STREAM(LOG_JAC))
AddIpoptStrOption(nlp, "derivative_test", "second-order");
/*AddIpoptStrOption(nlp, "derivative_test_print_all", "yes");*/
/* AddIpoptNumOption(nlp,"derivative_test_perturbation",1e-6); */
AddIpoptIntOption(nlp, "max_iter", 5000);
Expand Down

0 comments on commit 98244a0

Please sign in to comment.