#include <NLPInterfacePack_ExampleNLPBanded.hpp>
Inheritance diagram for NLPInterfacePack::ExampleNLPBanded:
Constructors / initializers | |
| ExampleNLPBanded (size_type nD, size_type nI, size_type bw=1, size_type mU=0, size_type mI=0, value_type xo=0.1, value_type xDl=-NLP::infinite_bound(), value_type xDu=+NLP::infinite_bound(), value_type xIl=-NLP::infinite_bound(), value_type xIu=+NLP::infinite_bound(), value_type hl=-NLP::infinite_bound(), value_type hu=+NLP::infinite_bound(), bool nlp_selects_basis=false, value_type diag_scal=10.0, value_type diag_vary=1.0, bool sym_basis=false, value_type f_offset=0.0, value_type co=0.0, bool ignore_constraints=false) | |
| Constructor. | |
Overridden public members from NLP | |
| void | initialize (bool test_setup) |
| | |
| bool | is_initialized () const |
| | |
| value_type | max_var_bounds_viol () const |
| | |
Overridden from NLPVarReductPerm | |
| bool | nlp_selects_basis () const |
| | |
Overridden protected methods from NLPSerialPreprocess | |
| bool | imp_nlp_has_changed () const |
| | |
| size_type | imp_n_orig () const |
| | |
| size_type | imp_m_orig () const |
| | |
| size_type | imp_mI_orig () const |
| | |
| const DVectorSlice | imp_xinit_orig () const |
| | |
| bool | imp_has_var_bounds () const |
| | |
| const DVectorSlice | imp_xl_orig () const |
| | |
| const DVectorSlice | imp_xu_orig () const |
| | |
| const DVectorSlice | imp_hl_orig () const |
| | |
| const DVectorSlice | imp_hu_orig () const |
| | |
| void | imp_calc_f_orig (const DVectorSlice &x_full, bool newx, const ZeroOrderInfoSerial &zero_order_info) const |
| | |
| void | imp_calc_c_orig (const DVectorSlice &x_full, bool newx, const ZeroOrderInfoSerial &zero_order_info) const |
| | |
| void | imp_calc_h_orig (const DVectorSlice &x_full, bool newx, const ZeroOrderInfoSerial &zero_order_info) const |
| | |
| void | imp_calc_Gf_orig (const DVectorSlice &x_full, bool newx, const ObjGradInfoSerial &obj_grad_info) const |
| | |
| bool | imp_get_next_basis (IVector *var_perm_full, IVector *equ_perm_full, size_type *rank_full, size_type *rank) |
| | |
| void | imp_report_orig_final_solution (const DVectorSlice &x_orig, const DVectorSlice *lambda_orig, const DVectorSlice *lambdaI_orig, const DVectorSlice *nu_orig, bool is_optimal) const |
| | |
Overridden protected methods from NLPSerialPreprocessExplJac | |
| size_type | imp_Gc_nz_orig () const |
| | |
| size_type | imp_Gh_nz_orig () const |
| | |
| void | imp_calc_Gc_orig (const DVectorSlice &x_full, bool newx, const FirstOrderExplInfo &first_order_expl_info) const |
| | |
| void | imp_calc_Gh_orig (const DVectorSlice &x_full, bool newx, const FirstOrderExplInfo &first_order_expl_info) const |
| | |
This example NLP is a scalable problem where the basis of the jacobian of the equality constraints is a banded (band width = bw) symmetric positive definite matrix. Both the number of dependnet and independent variables can be varied.
To setup this NLP, the client specifies:
nD : the number of dependent variables nI : the number of independent variables (nI <= nD) bw : the band width (defined as the number of diagonals, including the center diagonal i==j that have non-zero element) mU : the number of undecomposed dependent constraints mI : the number of general constraints diag_scal : Constant scaling factor for the diagonal elements diag_vary : The scaling factor for the diagonal elements (to produce illconditioning) between the largets and the smallest. sym_basis : True if the basis (selected by the NLP) is symmetric or not. This NLP is defined as:
min f(x) = (1/2) * sum( x(i)^2, for i = 1..n )
s.t.
c(j) = ( ds(j)*x(j) \
- sum( 3/(k)*x(j-k), k=1...klu(j) ) |
- sum( fu/(k)*x(j+k), k=1...kuu(j) ) | for j = 1...nD
) * (x(nD+q(j)) + 1)^2 |
+ co(j) == 0 /
c(nD+jU) = c(jU) + co(nD+jU) == 0 } for jU = 1...mU
hl(jI) <= x(jI) - x(nD+q(jI)) <= hu(jI) } for jI = 1...mI
xl(i) <= x(i) <= xu(i) } for i = 1...n
where:
n = nD + nI
m = nD + mU
mI = mI
ds(j) = diag_scal * ( (diag_vary - 1)/(nD -1) * (j - 1) + 1 )
/ 3 : if sym_basis = true
fu = |
\ 6 : if sym_basis = false
/ 2 : if floor((j-1)/nI) < nD % nI
q(j) = floor((j-1)/nI) + |
\ 1 : if floor((j-1)/nI) >= nD % nI
/ bw-1 : if j - bw >= 0 \
klu(j) = | |
\ j-1 : if j - bw <= 1 |
| for j=1...nD
/ bw-1 : if j + bw-1 <= nD |
kuu(j) = | |
\ nD-j : if j - bw <= 1 /
k are zero. The term co(j) is an adjustable term that can be used to manipulate the solution. Note that if co(nD+jI) != 0 above, then the undecomposed dependent equality constraints are inconsistent with the decomposed equalities and therefore the NLP is infeasible. An infeasible NLP can also be created by manipulating xl(i), xu(i), hl(jI), hu(jI) and co(j).For the above NLP, the Jacobian of the decomposed equalities has Jacobian elements:
/ -3/(j-i) * (x(nD+q(j)) + 1)^2 : i - klu(i) <= j < i
|
| ds(j) * (x(nD+q(j)) + 1)^2 : i == j
d(c(j))/d(x(i)) = |
| -3/(i-j) * (x(nD+q(j)) + 1)^2 : i < j <= i + kuu(i)
|
| 2 * (c(j) - co(j)) / (x(nD+q(j)) + 1) : i == nD + q
|
\ 0 : otherwise
, for j = 1...nD, i = 1...nD+nI
c(j). This fact is exploited in the computational routines when this->multi_calc() == true.
For nD == 7, nI == 2, bw = 2 with floor(nD/nI) = 3 and nD % nI = 1, the Jacobian Gc' looks like:
1 | x x x |
2 | x x x x |
3 | x x x x |
4 | x x x x |
5 | x x x x |
6 | x x x x |
7 | x x x |
- - - - - - - - -
1 2 3 4 5 6 7 8 9
ToDo: Finish documentation!
Definition at line 143 of file NLPInterfacePack_ExampleNLPBanded.hpp.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Constructor. ToDo: Finish documentation! Definition at line 40 of file NLPInterfacePack_ExampleNLPBanded.cpp. |
|
|
Reimplemented from NLPInterfacePack::NLPSerialPreprocessExplJac. Definition at line 127 of file NLPInterfacePack_ExampleNLPBanded.cpp. |
|
|
Reimplemented from NLPInterfacePack::NLPSerialPreprocessExplJac. Definition at line 138 of file NLPInterfacePack_ExampleNLPBanded.cpp. |
|
|
Implements NLPInterfacePack::NLP. Definition at line 143 of file NLPInterfacePack_ExampleNLPBanded.cpp. |
|
|
Reimplemented from NLPInterfacePack::NLPSerialPreprocess. Definition at line 363 of file NLPInterfacePack_ExampleNLPBanded.cpp. |
|
|
Reimplemented from NLPInterfacePack::NLPSerialPreprocess. Definition at line 150 of file NLPInterfacePack_ExampleNLPBanded.cpp. |
|
|
Implements NLPInterfacePack::NLPSerialPreprocess. Definition at line 155 of file NLPInterfacePack_ExampleNLPBanded.cpp. |
|
|
Implements NLPInterfacePack::NLPSerialPreprocess. Definition at line 160 of file NLPInterfacePack_ExampleNLPBanded.cpp. |
|
|
Implements NLPInterfacePack::NLPSerialPreprocess. Definition at line 166 of file NLPInterfacePack_ExampleNLPBanded.cpp. |
|
|
Implements NLPInterfacePack::NLPSerialPreprocess. Definition at line 172 of file NLPInterfacePack_ExampleNLPBanded.cpp. |
|
|
Implements NLPInterfacePack::NLPSerialPreprocess. Definition at line 177 of file NLPInterfacePack_ExampleNLPBanded.cpp. |
|
|
Implements NLPInterfacePack::NLPSerialPreprocess. Definition at line 182 of file NLPInterfacePack_ExampleNLPBanded.cpp. |
|
|
Implements NLPInterfacePack::NLPSerialPreprocess. Definition at line 187 of file NLPInterfacePack_ExampleNLPBanded.cpp. |
|
|
Implements NLPInterfacePack::NLPSerialPreprocess. Definition at line 192 of file NLPInterfacePack_ExampleNLPBanded.cpp. |
|
|
Implements NLPInterfacePack::NLPSerialPreprocess. Definition at line 197 of file NLPInterfacePack_ExampleNLPBanded.cpp. |
|
||||||||||||||||
|
Implements NLPInterfacePack::NLPSerialPreprocess. Definition at line 202 of file NLPInterfacePack_ExampleNLPBanded.cpp. |
|
||||||||||||||||
|
Implements NLPInterfacePack::NLPSerialPreprocess. Definition at line 213 of file NLPInterfacePack_ExampleNLPBanded.cpp. |
|
||||||||||||||||
|
Implements NLPInterfacePack::NLPSerialPreprocess. Definition at line 258 of file NLPInterfacePack_ExampleNLPBanded.cpp. |
|
||||||||||||||||
|
Implements NLPInterfacePack::NLPSerialPreprocess. Definition at line 282 of file NLPInterfacePack_ExampleNLPBanded.cpp. |
|
||||||||||||||||||||
|
Reimplemented from NLPInterfacePack::NLPSerialPreprocess. Definition at line 293 of file NLPInterfacePack_ExampleNLPBanded.cpp. |
|
||||||||||||||||||||||||
|
Definition at line 352 of file NLPInterfacePack_ExampleNLPBanded.cpp. |
|
|
Implements NLPInterfacePack::NLPSerialPreprocessExplJac. Definition at line 370 of file NLPInterfacePack_ExampleNLPBanded.cpp. |
|
|
Implements NLPInterfacePack::NLPSerialPreprocessExplJac. Definition at line 375 of file NLPInterfacePack_ExampleNLPBanded.cpp. |
|
||||||||||||||||
|
Implements NLPInterfacePack::NLPSerialPreprocessExplJac. Definition at line 380 of file NLPInterfacePack_ExampleNLPBanded.cpp. |
|
||||||||||||||||
|
Implements NLPInterfacePack::NLPSerialPreprocessExplJac. Definition at line 459 of file NLPInterfacePack_ExampleNLPBanded.cpp. |
1.3.9.1