exact_hessian.cpp
Go to the documentation of this file.
1 /*
2  * This file is part of ACADO Toolkit.
3  *
4  * ACADO Toolkit -- A Toolkit for Automatic Control and Dynamic Optimization.
5  * Copyright (C) 2008-2014 by Boris Houska, Hans Joachim Ferreau,
6  * Milan Vukov, Rien Quirynen, KU Leuven.
7  * Developed within the Optimization in Engineering Center (OPTEC)
8  * under supervision of Moritz Diehl. All rights reserved.
9  *
10  * ACADO Toolkit is free software; you can redistribute it and/or
11  * modify it under the terms of the GNU Lesser General Public
12  * License as published by the Free Software Foundation; either
13  * version 3 of the License, or (at your option) any later version.
14  *
15  * ACADO Toolkit is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18  * Lesser General Public License for more details.
19  *
20  * You should have received a copy of the GNU Lesser General Public
21  * License along with ACADO Toolkit; if not, write to the Free Software
22  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23  *
24  */
25 
26 
35 
36 
37 
39 
40 
41 //
42 // PUBLIC MEMBER FUNCTIONS:
43 //
44 
46 {
47 }
48 
49 
50 ExactHessian::ExactHessian( UserInteraction* _userInteraction ) : NLPderivativeApproximation( _userInteraction )
51 {
52 }
53 
54 
56 {
57 }
58 
59 
61 {
62 }
63 
64 
66 {
67  if ( this != &rhs )
68  {
70  }
71 
72  return *this;
73 }
74 
75 
77 {
78  return new ExactHessian( *this );
79 }
80 
81 
83  uint N,
84  const OCPiterate& iter
85  )
86 {
87  if( N > 1 )
88  {
89  for( uint run1=0; run1<N; ++run1 )
90  {
91  if ( iter.getNX() != 0 )
92  B.setIdentity( run1,run1, iter.getNX() );
93 
94  if ( iter.getNXA() != 0 )
95  B.setIdentity( N+run1,N+run1, iter.getNXA() );
96 
97  if ( ( iter.getNP() != 0 ) && ( run1 != N-1 ) )
98  B.setIdentity( 2*N+run1,2*N+run1, iter.getNP() );
99 
100  if ( ( iter.getNU() != 0 ) && ( run1 != N-1 ) )
101  B.setIdentity( 3*N+run1,3*N+run1, iter.getNU() );
102 
103  if ( ( iter.getNW() != 0 ) && ( run1 != N-1 ) )
104  B.setIdentity( 4*N+run1,4*N+run1, iter.getNW() );
105  }
106  }
107  else
108  {
109  if ( iter.getNP() != 0 )
110  B.setIdentity( 2,2, iter.getNP() );
111 
112  if ( iter.getNU() != 0 )
113  B.setIdentity( 3,3, iter.getNU() );
114 
115  if ( iter.getNW() != 0 )
116  B.setIdentity( 4,4, iter.getNW() );
117  }
118 
119  return SUCCESSFUL_RETURN;
120 }
121 
122 
124  const BlockMatrix& x,
125  const BlockMatrix& y
126  )
127 {
128  DMatrix scale1, scale2;
129 
130  (x^x).getSubBlock(0,0,scale1,1,1);
131  (y^y).getSubBlock(0,0,scale2,1,1);
132 
133  if ( ( scale1(0,0) <= 1000.0*EPS ) || ( scale2(0,0) <= 1000.0*EPS ) )
134  {
135  hessianScaling = 1.0;
136  }
137  else
138  {
139  hessianScaling = sqrt( scale2(0,0)/scale1(0,0) );
140  }
141 
142  return SUCCESSFUL_RETURN;
143 }
144 
145 
147  const BlockMatrix &x,
148  const BlockMatrix &y
149  )
150 {
151  return SUCCESSFUL_RETURN;
152 }
153 
154 
155 
156 //
157 // PROTECTED MEMBER FUNCTIONS:
158 //
159 
160 
161 
162 
163 
165 
166 // end of file.
#define N
Data class for storing generic optimization variables.
Definition: ocp_iterate.hpp:57
Implements a very rudimentary block sparse matrix class.
IntermediateState sqrt(const Expression &arg)
uint getNX() const
Implements an exact Hessian computation for obtaining second-order derivatives within NLPsolvers...
virtual NLPderivativeApproximation * clone() const
BEGIN_NAMESPACE_ACADO const double EPS
Allows to pass back messages to the calling function.
BEGIN_NAMESPACE_ACADO typedef unsigned int uint
Definition: acado_types.hpp:42
virtual returnValue initHessian(BlockMatrix &B, uint N, const OCPiterate &iter)
uint getNP() const
uint getNU() const
#define CLOSE_NAMESPACE_ACADO
uint getNW() const
virtual returnValue apply(BlockMatrix &B, const BlockMatrix &x, const BlockMatrix &y)
virtual ~ExactHessian()
Encapsulates all user interaction for setting options, logging data and plotting results.
void rhs(const real_t *x, real_t *f)
uint getNXA() const
#define BEGIN_NAMESPACE_ACADO
ExactHessian & operator=(const ExactHessian &rhs)
virtual returnValue initScaling(BlockMatrix &B, const BlockMatrix &x, const BlockMatrix &y)
NLPderivativeApproximation & operator=(const NLPderivativeApproximation &rhs)
returnValue setIdentity(uint rowIdx, uint colIdx, uint dim)
Base class for techniques of approximating second-order derivatives within NLPsolvers.


acado
Author(s): Milan Vukov, Rien Quirynen
autogenerated on Mon Jun 10 2019 12:34:33