Main Page
Namespaces
Classes
Files
File List
File Members
tmp
buildd
coinor-ipopt-3.10.2
Ipopt
src
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 on Tue Jun 26 2012 17:01:44 by
1.8.1.1