Skip to content

Commit

Permalink
- update calculation numerical hesssian
Browse files Browse the repository at this point in the history
- update calculation gradient


git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@18656 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
  • Loading branch information
Vitalij Ruge committed Jan 16, 2014
1 parent f6c36c9 commit c77bf6b
Show file tree
Hide file tree
Showing 3 changed files with 7 additions and 7 deletions.
2 changes: 1 addition & 1 deletion SimulationRuntime/c/optimization/OptimizationFlags.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,6 @@
#ifndef OPTIMIZATIONFLAGS_H_
#define OPTIMIZATIONFLAGS_H_

#define DF_STEP(x,s) ( (fmin(fmax(1e-4*fabs(s*x),1e-7),1e3)))
#define DF_STEP(x,s) ( (fmin(fmax(1e-4*fabs(s*x),1e-8),1e-1)))

#endif /* OPTIMIZATIONFLAGS_H_ */
2 changes: 1 addition & 1 deletion SimulationRuntime/c/optimization/goal/evalF.c
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,7 @@ Bool evalfDiffF(Index n, double * v, Bool new_x, Number *gradF, void * useData)
}
}
} else {
for(i=0; i<n; ++i)
for(i=0; i<iData->endN; ++i)
gradF[i] = 0.0;
}
if(iData->mayer){
Expand Down
10 changes: 5 additions & 5 deletions SimulationRuntime/c/optimization/lagrangeFun/ipopt_hessian.c
Original file line number Diff line number Diff line change
Expand Up @@ -225,7 +225,7 @@ static int num_hessian(double *v, double t, IPOPT_DATA_ *iData, double *lambda,
for(i = 0; i<iData->nv; ++i)
{
v_save = (long double)v[i];
h = (long double)DF_STEP(v_save, iData->vnom[i]);
h = (long double)DF_STEP(v_save, iData->vnom[i]);
v[i] += h;
diff_functionODE(v, t , iData, iData->J);

Expand All @@ -238,26 +238,26 @@ static int num_hessian(double *v, double t, IPOPT_DATA_ *iData, double *lambda,
for(j = i; j < iData->nv; ++j)
{
if(iData->knowedJ[l][j] + iData->knowedJ[l][i] >= 2)
iData->H[l][i][j] = lambda[l]*(iData->J[l][j] - iData->J0[l][j])/h;
iData->H[l][i][j] = (long double)lambda[l]*(iData->J[l][j] - iData->J0[l][j])/h;
else
iData->H[l][i][j] = (long double) 0.0;

iData->H[l][j][i] = iData->H[l][i][j];
}
}

h = obj_factor/h;
if(lagrange_yes){
for(j = i; j < iData->nv; ++j)
{
iData->oH[i][j] = (long double) obj_factor/h* (iData->gradF[j] - iData->gradF0[j]);
iData->oH[i][j] = (long double) h* (iData->gradF[j] - iData->gradF0[j]);
iData->oH[j][i] = iData->oH[i][j] ;
}
}

if(mayer_yes){
for(j = i; j < iData->nv; ++j)
{
iData->mH[i][j] = (long double) obj_factor/h* (iData->gradF_[j] - iData->gradF00[j]);
iData->mH[i][j] = (long double) h* (iData->gradF_[j] - iData->gradF00[j]);
iData->mH[j][i] = iData->mH[i][j] ;
}
}
Expand Down

0 comments on commit c77bf6b

Please sign in to comment.