constant_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 
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 ConstantHessian( *this );
79 }
80 
81 
82 
84  uint N,
85  const OCPiterate& iter
86  )
87 {
88  if( N > 1 )
89  {
90  for( uint run1=0; run1<N; ++run1 )
91  {
92  if ( iter.getNX() != 0 )
93  B.setIdentity( run1,run1, iter.getNX() );
94 
95  if ( iter.getNXA() != 0 )
96  B.setIdentity( N+run1,N+run1, iter.getNXA() );
97 
98  if ( ( iter.getNP() != 0 ) && ( run1 != N-1 ) )
99  B.setIdentity( 2*N+run1,2*N+run1, iter.getNP() );
100 
101  if ( ( iter.getNU() != 0 ) && ( run1 != N-1 ) )
102  B.setIdentity( 3*N+run1,3*N+run1, iter.getNU() );
103 
104  if ( ( iter.getNW() != 0 ) && ( run1 != N-1 ) )
105  B.setIdentity( 4*N+run1,4*N+run1, iter.getNW() );
106  }
107  }
108  else
109  {
110  if ( iter.getNP() != 0 )
111  B.setIdentity( 2,2, iter.getNP() );
112 
113  if ( iter.getNU() != 0 )
114  B.setIdentity( 3,3, iter.getNU() );
115 
116  if ( iter.getNW() != 0 )
117  B.setIdentity( 4,4, iter.getNW() );
118  }
119 
120  return SUCCESSFUL_RETURN;
121 }
122 
123 
125  const BlockMatrix& x,
126  const BlockMatrix& y
127  )
128 {
129  DMatrix scale1, scale2;
130 
131  (x^x).getSubBlock(0,0,scale1,1,1);
132  (y^y).getSubBlock(0,0,scale2,1,1);
133 
134  if ( ( scale1(0,0) <= 1000.0*EPS ) || ( scale2(0,0) <= 1000.0*EPS ) )
135  {
136  hessianScaling = 1.0;
137  }
138  else
139  {
140  hessianScaling = sqrt( scale2(0,0)/scale1(0,0) );
141  }
142 
143  B *= hessianScaling;
144 
145  return SUCCESSFUL_RETURN;
146 }
147 
148 
150  const BlockMatrix &x,
151  const BlockMatrix &y
152  )
153 {
154  return SUCCESSFUL_RETURN;
155 }
156 
157 
158 
159 //
160 // PROTECTED MEMBER FUNCTIONS:
161 //
162 
163 
164 
165 
166 
168 
169 // 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.
virtual ~ConstantHessian()
IntermediateState sqrt(const Expression &arg)
uint getNX() 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
uint getNP() const
uint getNU() const
#define CLOSE_NAMESPACE_ACADO
Implements a constant Hessian as approximation of second-order derivatives within NLPsolvers...
uint getNW() const
ConstantHessian & operator=(const ConstantHessian &rhs)
virtual returnValue initScaling(BlockMatrix &B, const BlockMatrix &x, const BlockMatrix &y)
Encapsulates all user interaction for setting options, logging data and plotting results.
void rhs(const real_t *x, real_t *f)
virtual returnValue apply(BlockMatrix &B, const BlockMatrix &x, const BlockMatrix &y)
virtual returnValue initHessian(BlockMatrix &B, uint N, const OCPiterate &iter)
virtual NLPderivativeApproximation * clone() const
uint getNXA() const
#define BEGIN_NAMESPACE_ACADO
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:31