Skip to content

Commit

Permalink
- improve step size for numerical hessian
Browse files Browse the repository at this point in the history
git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@19988 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
  • Loading branch information
Vitalij Ruge committed Apr 4, 2014
1 parent 51904e4 commit 837128c
Showing 1 changed file with 6 additions and 2 deletions.
8 changes: 6 additions & 2 deletions SimulationRuntime/c/optimization/lagrangeFun/ipopt_hessian.c
Expand Up @@ -40,7 +40,7 @@
#include "../localFunction.h"

#ifdef WITH_IPOPT
#define DF_STEP(x,s) ( (fmin(fmax(1e-4*fabs(s*x),1e-8),1e0)))
#define DF_STEP(x) ((fmin(fmax(1e-4*fabs(x),1e-8),1e2)))

static int num_hessian(double *v, int k, IPOPT_DATA_ *iData, double *lambda, modelica_boolean lagrange_yes, modelica_boolean mayer_yes, double obj_factor);
static int updateCost(double *v, int k, IPOPT_DATA_ *iData, modelica_boolean lagrange_yes, modelica_boolean mayer_yes,long double *F1, long double *F2);
Expand Down Expand Up @@ -259,8 +259,12 @@ static int num_hessian(double *v, int k, IPOPT_DATA_ *iData, double *lambda, mod

for(i = 0; i<dim->nv; ++i){
v_save = (long double)v[i];
h = (long double)DF_STEP(v_save, iData->scaling.vnom[i]);
h = (long double)DF_STEP(v_save);
v[i] += h;
if(v[i] > iData->bounds.vmax[i]){
h = iData->bounds.vmax[i] - v_save;
v[i] = v_save + h;
}
diff_functionODE_con(v, k , iData, iData->df.Jh[1]);

if(upCost)
Expand Down

0 comments on commit 837128c

Please sign in to comment.