Ipopt
3.11.8
Main Page
Namespaces
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Interfaces
IpTNLPAdapter.hpp
Go to the documentation of this file.
1
// Copyright (C) 2004, 2008 International Business Machines and others.
2
// All Rights Reserved.
3
// This code is published under the Eclipse Public License.
4
//
5
// $Id: IpTNLPAdapter.hpp 1861 2010-12-21 21:34:47Z andreasw $
6
//
7
// Authors: Carl Laird, Andreas Waechter IBM 2004-08-13
8
9
#ifndef __IPTNLPADAPTER_HPP__
10
#define __IPTNLPADAPTER_HPP__
11
12
#include "
IpNLP.hpp
"
13
#include "
IpTNLP.hpp
"
14
#include "
IpOrigIpoptNLP.hpp
"
15
#include <list>
16
17
namespace
Ipopt
18
{
19
20
// forward declarations
21
class
ExpansionMatrix;
22
class
ExpansionMatrixSpace;
23
class
IteratesVector;
24
class
TDependencyDetector;
25
30
class
TNLPAdapter
:
public
NLP
31
{
32
public
:
36
TNLPAdapter
(
const
SmartPtr<TNLP>
tnlp
,
37
const
SmartPtr<const Journalist>
jnlst = NULL);
38
40
virtual
~TNLPAdapter
();
42
45
DECLARE_STD_EXCEPTION
(INVALID_TNLP);
46
DECLARE_STD_EXCEPTION
(ERROR_IN_TNLP_DERIVATIVE_TEST);
48
51
virtual
bool
ProcessOptions
(
const
OptionsList
& options,
52
const
std::string& prefix);
53
56
virtual
bool
GetSpaces
(
SmartPtr<const VectorSpace>
& x_space,
57
SmartPtr<const VectorSpace>
& c_space,
58
SmartPtr<const VectorSpace>
& d_space,
59
SmartPtr<const VectorSpace>
& x_l_space,
60
SmartPtr<const MatrixSpace>
& px_l_space,
61
SmartPtr<const VectorSpace>
& x_u_space,
62
SmartPtr<const MatrixSpace>
& px_u_space,
63
SmartPtr<const VectorSpace>
& d_l_space,
64
SmartPtr<const MatrixSpace>
& pd_l_space,
65
SmartPtr<const VectorSpace>
& d_u_space,
66
SmartPtr<const MatrixSpace>
& pd_u_space,
67
SmartPtr<const MatrixSpace>
& Jac_c_space,
68
SmartPtr<const MatrixSpace>
& Jac_d_space,
69
SmartPtr<const SymMatrixSpace>
& Hess_lagrangian_space);
70
72
virtual
bool
GetBoundsInformation
(
const
Matrix
& Px_L,
73
Vector
&
x_L
,
74
const
Matrix
& Px_U,
75
Vector
&
x_U
,
76
const
Matrix
& Pd_L,
77
Vector
& d_L,
78
const
Matrix
& Pd_U,
79
Vector
& d_U);
80
83
virtual
bool
GetStartingPoint
(
84
SmartPtr<Vector>
x
,
85
bool
need_x,
86
SmartPtr<Vector>
y_c,
87
bool
need_y_c,
88
SmartPtr<Vector>
y_d,
89
bool
need_y_d,
90
SmartPtr<Vector>
z_L,
91
bool
need_z_L,
92
SmartPtr<Vector>
z_U,
93
bool
need_z_U
94
);
95
98
virtual
bool
GetWarmStartIterate
(
IteratesVector
& warm_start_iterate);
100
103
virtual
bool
Eval_f
(
const
Vector
& x,
Number
& f);
104
105
virtual
bool
Eval_grad_f
(
const
Vector
& x,
Vector
& g_f);
106
107
virtual
bool
Eval_c
(
const
Vector
& x,
Vector
& c);
108
109
virtual
bool
Eval_jac_c
(
const
Vector
& x,
Matrix
& jac_c);
110
111
virtual
bool
Eval_d
(
const
Vector
& x,
Vector
& d);
112
113
virtual
bool
Eval_jac_d
(
const
Vector
& x,
Matrix
& jac_d);
114
115
virtual
bool
Eval_h
(
const
Vector
& x,
116
Number
obj_factor,
117
const
Vector
& yc,
118
const
Vector
& yd,
119
SymMatrix
& h);
120
121
virtual
void
GetScalingParameters
(
122
const
SmartPtr<const VectorSpace>
x_space,
123
const
SmartPtr<const VectorSpace>
c_space,
124
const
SmartPtr<const VectorSpace>
d_space,
125
Number
&
obj_scaling
,
126
SmartPtr<Vector>
&
x_scaling
,
127
SmartPtr<Vector>
& c_scaling,
128
SmartPtr<Vector>
& d_scaling)
const
;
130
133
virtual
void
FinalizeSolution
(
SolverReturn
status,
134
const
Vector
& x,
135
const
Vector
& z_L,
const
Vector
& z_U,
136
const
Vector
& c,
const
Vector
& d,
137
const
Vector
& y_c,
const
Vector
& y_d,
138
Number
obj_value,
139
const
IpoptData
* ip_data,
140
IpoptCalculatedQuantities
* ip_cq);
141
142
virtual
bool
IntermediateCallBack
(
AlgorithmMode
mode,
143
Index
iter,
Number
obj_value,
144
Number
inf_pr,
Number
inf_du,
145
Number
mu,
Number
d_norm,
146
Number
regularization_size,
147
Number
alpha_du,
Number
alpha_pr,
148
Index
ls_trials,
149
const
IpoptData
* ip_data,
150
IpoptCalculatedQuantities
* ip_cq);
152
154
virtual
void
155
GetQuasiNewtonApproximationSpaces
(
SmartPtr<VectorSpace>
& approx_space,
156
SmartPtr<Matrix>
& P_approx);
157
159
enum
FixedVariableTreatmentEnum
160
{
161
MAKE_PARAMETER
=0,
162
MAKE_CONSTRAINT
,
163
RELAX_BOUNDS
164
};
165
167
enum
DerivativeTestEnum
168
{
169
NO_TEST
=0,
170
FIRST_ORDER_TEST
,
171
SECOND_ORDER_TEST
,
172
ONLY_SECOND_ORDER_TEST
173
};
174
176
enum
JacobianApproxEnum
177
{
178
JAC_EXACT
=0,
179
JAC_FINDIFF_VALUES
180
};
181
183
bool
CheckDerivatives
(
DerivativeTestEnum
deriv_test,
184
Index
deriv_test_start_index);
185
188
static
void
RegisterOptions
(
SmartPtr<RegisteredOptions>
roptions);
190
192
SmartPtr<TNLP>
tnlp
()
const
193
{
194
return
tnlp_
;
195
}
196
203
void
ResortX
(
const
Vector
& x,
Number
* x_orig);
204
void
ResortG
(
const
Vector
& c,
const
Vector
& d,
Number
*g_orig);
205
void
ResortBnds
(
const
Vector
& x_L,
Number
* x_L_orig,
206
const
Vector
& x_U,
Number
* x_U_orig);
208
209
private
:
219
TNLPAdapter
(
const
TNLPAdapter
&);
220
222
void
operator=
(
const
TNLPAdapter
&);
224
227
bool
DetermineDependentConstraints
(
Index
n_x_var,
228
const
Index
* x_not_fixed_map,
229
const
Number
* x_l,
const
Number
* x_u,
230
const
Number
* g_l,
const
Number
* g_u,
231
Index
n_c,
const
Index
* c_map,
232
std::list<Index>& c_deps);
233
236
SmartPtr<TNLP>
tnlp_
;
237
239
SmartPtr<const Journalist>
jnlst_
;
240
243
SmartPtr<TDependencyDetector>
dependency_detector_
;
244
248
Number
nlp_lower_bound_inf_
;
250
Number
nlp_upper_bound_inf_
;
252
FixedVariableTreatmentEnum
fixed_variable_treatment_
;
253
/* Determines relaxation of fixing bound for RELAX_BOUNDS. */
254
Number
bound_relax_factor_
;
255
/* Maximal slack for one-sidedly bounded variables. If a
256
* variable has only one bound, say a lower bound xL, then an
257
* upper bound xL + max_onesided_bound_slack_. If this value is
258
* zero, no upper bound is added. */
259
/* Took this out: Number max_onesided_bound_slack_; */
262
DerivativeTestEnum
derivative_test_
;
264
Number
derivative_test_perturbation_
;
267
Number
derivative_test_tol_
;
270
bool
derivative_test_print_all_
;
272
Index
derivative_test_first_index_
;
275
bool
warm_start_same_structure_
;
277
HessianApproximationType
hessian_approximation_
;
279
Index
num_linear_variables_
;
281
JacobianApproxEnum
jacobian_approximation_
;
283
Number
findiff_perturbation_
;
285
Number
point_perturbation_radius_
;
288
bool
dependency_detection_with_rhs_
;
289
291
Number
tol_
;
293
297
Index
n_full_x_
;
299
Index
n_full_g_
;
301
Index
nz_jac_c_
;
304
Index
nz_jac_c_no_extra_
;
306
Index
nz_jac_d_
;
308
Index
nz_full_jac_g_
;
310
Index
nz_full_h_
;
312
Index
nz_h_
;
314
Index
n_x_fixed_
;
316
318
TNLP::IndexStyleEnum
index_style_
;
319
322
SmartPtr<const VectorSpace>
x_space_
;
323
SmartPtr<const VectorSpace>
c_space_
;
324
SmartPtr<const VectorSpace>
d_space_
;
325
SmartPtr<const VectorSpace>
x_l_space_
;
326
SmartPtr<const MatrixSpace>
px_l_space_
;
327
SmartPtr<const VectorSpace>
x_u_space_
;
328
SmartPtr<const MatrixSpace>
px_u_space_
;
329
SmartPtr<const VectorSpace>
d_l_space_
;
330
SmartPtr<const MatrixSpace>
pd_l_space_
;
331
SmartPtr<const VectorSpace>
d_u_space_
;
332
SmartPtr<const MatrixSpace>
pd_u_space_
;
333
SmartPtr<const MatrixSpace>
Jac_c_space_
;
334
SmartPtr<const MatrixSpace>
Jac_d_space_
;
335
SmartPtr<const SymMatrixSpace>
Hess_lagrangian_space_
;
337
340
Number
*
full_x_
;
341
Number
*
full_lambda_
;
342
Number
*
full_g_
;
343
Number
*
jac_g_
;
344
Number
*
c_rhs_
;
346
349
TaggedObject::Tag
x_tag_for_iterates_
;
350
TaggedObject::Tag
y_c_tag_for_iterates_
;
351
TaggedObject::Tag
y_d_tag_for_iterates_
;
352
TaggedObject::Tag
x_tag_for_g_
;
353
TaggedObject::Tag
x_tag_for_jac_g_
;
355
358
bool
update_local_x
(
const
Vector
& x);
359
bool
update_local_lambda
(
const
Vector
& y_c,
const
Vector
& y_d);
361
365
bool
internal_eval_g
(
bool
new_x);
366
bool
internal_eval_jac_g
(
bool
new_x);
368
373
void
initialize_findiff_jac
(
const
Index
* iRow,
const
Index
* jCol);
375
380
SmartPtr<ExpansionMatrix>
P_x_full_x_
;
381
SmartPtr<ExpansionMatrixSpace>
P_x_full_x_space_
;
382
384
SmartPtr<ExpansionMatrix>
P_x_x_L_
;
385
SmartPtr<ExpansionMatrixSpace>
P_x_x_L_space_
;
386
388
SmartPtr<ExpansionMatrix>
P_x_x_U_
;
389
SmartPtr<ExpansionMatrixSpace>
P_x_x_U_space_
;
390
392
SmartPtr<ExpansionMatrixSpace>
P_c_g_space_
;
393
SmartPtr<ExpansionMatrix>
P_c_g_
;
394
396
SmartPtr<ExpansionMatrixSpace>
P_d_g_space_
;
397
SmartPtr<ExpansionMatrix>
P_d_g_
;
398
399
Index
*
jac_idx_map_
;
400
Index
*
h_idx_map_
;
401
403
Index
*
x_fixed_map_
;
405
409
Index
findiff_jac_nnz_
;
412
Index
*
findiff_jac_ia_
;
415
Index
*
findiff_jac_ja_
;
417
Index
*
findiff_jac_postriplet_
;
419
Number
*
findiff_x_l_
;
421
Number
*
findiff_x_u_
;
423
};
424
425
}
// namespace Ipopt
426
427
#endif
Generated by
1.8.3.1