#include <ClpInterior.hpp>
data. Many arrays have a row part and a column part. | |
There is a single array with both - columns then rows and then normally two arrays pointing to rows and columns.
The single array is the owner of memory | |
double | largestPrimalError_ |
Largest error on Ax-b. | |
double | largestDualError_ |
Largest error on basic duals. | |
double | sumDualInfeasibilities_ |
Sum of dual infeasibilities. | |
double | sumPrimalInfeasibilities_ |
Sum of primal infeasibilities. | |
double | worstComplementarity_ |
Worst complementarity. | |
double * | lower_ |
Working copy of lower bounds (Owner of arrays below). | |
double * | rowLowerWork_ |
Row lower bounds - working copy. | |
double * | columnLowerWork_ |
Column lower bounds - working copy. | |
double * | upper_ |
Working copy of upper bounds (Owner of arrays below). | |
double * | rowUpperWork_ |
Row upper bounds - working copy. | |
double * | columnUpperWork_ |
Column upper bounds - working copy. | |
double * | cost_ |
Working copy of objective. | |
ClpLsqr * | lsqrObject_ |
Pointer to Lsqr object. | |
ClpPdcoBase * | pdcoStuff_ |
Pointer to stuff. | |
double | mu_ |
Below here is standard barrier stuff mu. | |
double | objectiveNorm_ |
objectiveNorm. | |
double | rhsNorm_ |
rhsNorm. | |
double | solutionNorm_ |
solutionNorm. | |
double | dualObjective_ |
dualObjective. | |
double | primalObjective_ |
primalObjective. | |
double | diagonalNorm_ |
diagonalNorm. | |
double | stepLength_ |
stepLength | |
double | linearPerturbation_ |
linearPerturbation | |
double | diagonalPerturbation_ |
diagonalPerturbation | |
double | gamma_ |
Largest error on Ax-b. | |
double | delta_ |
Largest error on Ax-b. | |
double | targetGap_ |
targetGap | |
double | projectionTolerance_ |
projectionTolerance | |
double | maximumRHSError_ |
maximumRHSError. maximum Ax | |
double | maximumBoundInfeasibility_ |
maximumBoundInfeasibility. | |
double | maximumDualError_ |
maximumDualError. | |
double | diagonalScaleFactor_ |
diagonalScaleFactor. | |
double | scaleFactor_ |
scaleFactor. For scaling objective | |
double | actualPrimalStep_ |
actualPrimalStep | |
double | actualDualStep_ |
actualDualStep | |
double | smallestInfeasibility_ |
smallestInfeasibility | |
double | historyInfeasibility_ [LENGTH_HISTORY] |
Largest error on Ax-b. | |
double | complementarityGap_ |
complementarityGap. | |
double | baseObjectiveNorm_ |
baseObjectiveNorm | |
double | worstDirectionAccuracy_ |
worstDirectionAccuracy | |
double | maximumRHSChange_ |
maximumRHSChange | |
double * | errorRegion_ |
errorRegion. i.e. Ax | |
double * | rhsFixRegion_ |
rhsFixRegion. | |
double * | upperSlack_ |
upperSlack | |
double * | lowerSlack_ |
lowerSlack | |
double * | diagonal_ |
diagonal | |
double * | solution_ |
solution | |
double * | workArray_ |
work array | |
double * | deltaX_ |
delta X | |
double * | deltaY_ |
delta Y | |
double * | deltaZ_ |
deltaZ. | |
double * | deltaW_ |
deltaW. | |
double * | deltaSU_ |
deltaS. | |
double * | deltaSL_ |
Largest error on Ax-b. | |
double * | primalR_ |
Primal regularization array. | |
double * | dualR_ |
Dual regularization array. | |
double * | rhsB_ |
rhs B | |
double * | rhsU_ |
rhsU. | |
double * | rhsL_ |
rhsL. | |
double * | rhsZ_ |
rhsZ. | |
double * | rhsW_ |
rhsW. | |
double * | rhsC_ |
rhs C | |
double * | zVec_ |
zVec | |
double * | wVec_ |
wVec | |
ClpCholeskyBase * | cholesky_ |
cholesky. | |
int | numberComplementarityPairs_ |
numberComplementarityPairs i.e. ones with lower and/or upper bounds (not fixed) | |
int | numberComplementarityItems_ |
numberComplementarityItems_ i.e. number of active bounds | |
int | maximumBarrierIterations_ |
Maximum iterations. | |
bool | gonePrimalFeasible_ |
gonePrimalFeasible. | |
bool | goneDualFeasible_ |
goneDualFeasible. | |
int | algorithm_ |
Which algorithm being used. | |
double | xsize_ |
Largest error on Ax-b. | |
double | zsize_ |
Largest error on Ax-b. | |
double * | rhs_ |
Rhs. | |
double * | x_ |
Largest error on Ax-b. | |
double * | y_ |
Largest error on Ax-b. | |
double * | dj_ |
Largest error on Ax-b. | |
Public Member Functions | |
Constructors and destructor and copy | |
ClpInterior () | |
Default constructor. | |
ClpInterior (const ClpInterior &) | |
Copy constructor. | |
ClpInterior (const ClpModel &) | |
Copy constructor from model. | |
ClpInterior (const ClpModel *wholeModel, int numberRows, const int *whichRows, int numberColumns, const int *whichColumns, bool dropNames=true, bool dropIntegers=true) | |
Subproblem constructor. | |
ClpInterior & | operator= (const ClpInterior &rhs) |
Assignment operator. This copies the data. | |
~ClpInterior () | |
Destructor. | |
void | loadProblem (const ClpMatrixBase &matrix, const double *collb, const double *colub, const double *obj, const double *rowlb, const double *rowub, const double *rowObjective=NULL) |
Loads a problem (the constraints on the rows are given by lower and upper bounds). | |
void | loadProblem (const CoinPackedMatrix &matrix, const double *collb, const double *colub, const double *obj, const double *rowlb, const double *rowub, const double *rowObjective=NULL) |
Default constructor. | |
void | loadProblem (const int numcols, const int numrows, const CoinBigIndex *start, const int *index, const double *value, const double *collb, const double *colub, const double *obj, const double *rowlb, const double *rowub, const double *rowObjective=NULL) |
Just like the other loadProblem() method except that the matrix is given in a standard column major ordered format (without gaps). | |
void | loadProblem (const int numcols, const int numrows, const CoinBigIndex *start, const int *index, const double *value, const int *length, const double *collb, const double *colub, const double *obj, const double *rowlb, const double *rowub, const double *rowObjective=NULL) |
This one is for after presolve to save memory. | |
int | readMps (const char *filename, bool keepNames=false, bool ignoreErrors=false) |
Read an mps file from the given filename. | |
void | borrowModel (ClpModel &otherModel) |
Borrow model. | |
void | returnModel (ClpModel &otherModel) |
Return model - updates any scalars. | |
Functions most useful to user | |
int | pdco () |
Pdco algorithm - see ClpPdco.hpp for method. | |
int | pdco (ClpPdcoBase *stuff, Options &options, Info &info, Outfo &outfo) |
Pdco algorithm - see ClpPdco.hpp for method. | |
int | primalDual () |
Primal-Dual Predictor-Corrector barrier. | |
most useful gets and sets | |
bool | primalFeasible () const |
If problem is primal feasible. | |
bool | dualFeasible () const |
If problem is dual feasible. | |
int | algorithm () const |
Current (or last) algorithm. | |
void | setAlgorithm (int value) |
Set algorithm. | |
double | sumDualInfeasibilities () const |
Sum of dual infeasibilities. | |
double | sumPrimalInfeasibilities () const |
Sum of primal infeasibilities. | |
double | dualObjective () const |
dualObjective. | |
double | primalObjective () const |
primalObjective. | |
double | diagonalNorm () const |
diagonalNorm | |
double | linearPerturbation () const |
linearPerturbation | |
void | setLinearPerturbation (double value) |
If problem is primal feasible. | |
double | diagonalPerturbation () const |
diagonalPerturbation | |
void | setDiagonalPerturbation (double value) |
If problem is primal feasible. | |
double | gamma () const |
gamma | |
void | setGamma (double value) |
If problem is primal feasible. | |
double | delta () const |
delta | |
void | setDelta (double value) |
If problem is primal feasible. | |
double | complementarityGap () const |
ComplementarityGap. | |
most useful gets and sets | |
double | largestPrimalError () const |
Largest error on Ax-b. | |
double | largestDualError () const |
Largest error on basic duals. | |
int | maximumBarrierIterations () const |
Maximum iterations. | |
void | setMaximumBarrierIterations (int value) |
Largest error on Ax-b. | |
void | setCholesky (ClpCholeskyBase *cholesky) |
Set cholesky (and delete present one). | |
int | numberFixed () const |
Return number fixed to see if worth presolving. | |
void | fixFixed (bool reallyFix=true) |
fix variables interior says should be. | |
double * | primalR () const |
Primal erturbation vector. | |
double * | dualR () const |
Dual erturbation vector. | |
public methods | |
double | rawObjectiveValue () const |
Raw objective value (so always minimize). | |
int | isColumn (int sequence) const |
Returns 1 if sequence indicates column. | |
int | sequenceWithin (int sequence) const |
Returns sequence number within section. | |
void | checkSolution () |
Checks solution. | |
double | quadraticDjs (double *djRegion, const double *solution, double scaleFactor) |
Modifies djs to allow for quadratic. | |
void | setFixed (int sequence) |
To say a variable is fixed. | |
void | clearFixed (int sequence) |
Raw objective value (so always minimize). | |
bool | fixed (int sequence) const |
Raw objective value (so always minimize). | |
void | setFlagged (int sequence) |
To flag a variable. | |
void | clearFlagged (int sequence) |
Raw objective value (so always minimize). | |
bool | flagged (int sequence) const |
Raw objective value (so always minimize). | |
void | setFixedOrFree (int sequence) |
To say a variable is fixed OR free. | |
void | clearFixedOrFree (int sequence) |
Raw objective value (so always minimize). | |
bool | fixedOrFree (int sequence) const |
Raw objective value (so always minimize). | |
void | setLowerBound (int sequence) |
To say a variable has lower bound. | |
void | clearLowerBound (int sequence) |
Raw objective value (so always minimize). | |
bool | lowerBound (int sequence) const |
Raw objective value (so always minimize). | |
void | setUpperBound (int sequence) |
To say a variable has upper bound. | |
void | clearUpperBound (int sequence) |
Raw objective value (so always minimize). | |
bool | upperBound (int sequence) const |
Raw objective value (so always minimize). | |
void | setFakeLower (int sequence) |
To say a variable has fake lower bound. | |
void | clearFakeLower (int sequence) |
Raw objective value (so always minimize). | |
bool | fakeLower (int sequence) const |
Raw objective value (so always minimize). | |
void | setFakeUpper (int sequence) |
To say a variable has fake upper bound. | |
void | clearFakeUpper (int sequence) |
Raw objective value (so always minimize). | |
bool | fakeUpper (int sequence) const |
Raw objective value (so always minimize). | |
Protected Member Functions | |
protected methods | |
void | gutsOfDelete () |
Does most of deletion. | |
void | gutsOfCopy (const ClpInterior &rhs) |
Does most of copying. | |
bool | createWorkingData () |
Returns true if data looks okay, false if not. | |
void | deleteWorkingData () |
Does most of deletion. | |
bool | sanityCheck () |
Sanity check on input rim data. | |
int | housekeeping () |
This does housekeeping. | |
Friends | |
void | ClpInteriorUnitTest (const std::string &mpsDir, const std::string &netlibDir) |
A function that tests the methods in the ClpInterior class. |
It inherits from ClpModel and all its arrays are created at algorithm time.
Definition at line 71 of file ClpInterior.hpp.
ClpInterior::ClpInterior | ( | ) |
Default constructor.
ClpInterior::ClpInterior | ( | const ClpInterior & | ) |
Copy constructor.
ClpInterior::ClpInterior | ( | const ClpModel & | ) |
Copy constructor from model.
ClpInterior::ClpInterior | ( | const ClpModel * | wholeModel, | |
int | numberRows, | |||
const int * | whichRows, | |||
int | numberColumns, | |||
const int * | whichColumns, | |||
bool | dropNames = true , |
|||
bool | dropIntegers = true | |||
) |
Subproblem constructor.
A subset of whole model is created from the row and column lists given. The new order is given by list order and duplicates are allowed. Name and integer information can be dropped
ClpInterior::~ClpInterior | ( | ) |
Destructor.
ClpInterior& ClpInterior::operator= | ( | const ClpInterior & | rhs | ) |
Assignment operator. This copies the data.
void ClpInterior::loadProblem | ( | const ClpMatrixBase & | matrix, | |
const double * | collb, | |||
const double * | colub, | |||
const double * | obj, | |||
const double * | rowlb, | |||
const double * | rowub, | |||
const double * | rowObjective = NULL | |||
) |
Loads a problem (the constraints on the rows are given by lower and upper bounds).
If a pointer is 0 then the following values are the default:
colub
: all columns have upper bound infinity collb
: all columns have lower bound 0 rowub
: all rows have upper bound infinity rowlb
: all rows have lower bound -infinity obj
: all variables have 0 objective coefficient Reimplemented from ClpModel.
void ClpInterior::loadProblem | ( | const CoinPackedMatrix & | matrix, | |
const double * | collb, | |||
const double * | colub, | |||
const double * | obj, | |||
const double * | rowlb, | |||
const double * | rowub, | |||
const double * | rowObjective = NULL | |||
) |
void ClpInterior::loadProblem | ( | const int | numcols, | |
const int | numrows, | |||
const CoinBigIndex * | start, | |||
const int * | index, | |||
const double * | value, | |||
const double * | collb, | |||
const double * | colub, | |||
const double * | obj, | |||
const double * | rowlb, | |||
const double * | rowub, | |||
const double * | rowObjective = NULL | |||
) |
Just like the other loadProblem() method except that the matrix is given in a standard column major ordered format (without gaps).
Reimplemented from ClpModel.
void ClpInterior::loadProblem | ( | const int | numcols, | |
const int | numrows, | |||
const CoinBigIndex * | start, | |||
const int * | index, | |||
const double * | value, | |||
const int * | length, | |||
const double * | collb, | |||
const double * | colub, | |||
const double * | obj, | |||
const double * | rowlb, | |||
const double * | rowub, | |||
const double * | rowObjective = NULL | |||
) |
int ClpInterior::readMps | ( | const char * | filename, | |
bool | keepNames = false , |
|||
bool | ignoreErrors = false | |||
) |
void ClpInterior::borrowModel | ( | ClpModel & | otherModel | ) |
void ClpInterior::returnModel | ( | ClpModel & | otherModel | ) |
int ClpInterior::pdco | ( | ) |
int ClpInterior::pdco | ( | ClpPdcoBase * | stuff, | |
Options & | options, | |||
Info & | info, | |||
Outfo & | outfo | |||
) |
int ClpInterior::primalDual | ( | ) |
Primal-Dual Predictor-Corrector barrier.
bool ClpInterior::primalFeasible | ( | ) | const [inline] |
bool ClpInterior::dualFeasible | ( | ) | const [inline] |
int ClpInterior::algorithm | ( | ) | const [inline] |
void ClpInterior::setAlgorithm | ( | int | value | ) | [inline] |
double ClpInterior::sumDualInfeasibilities | ( | ) | const [inline] |
double ClpInterior::sumPrimalInfeasibilities | ( | ) | const [inline] |
double ClpInterior::dualObjective | ( | ) | const [inline] |
double ClpInterior::primalObjective | ( | ) | const [inline] |
double ClpInterior::diagonalNorm | ( | ) | const [inline] |
double ClpInterior::linearPerturbation | ( | ) | const [inline] |
void ClpInterior::setLinearPerturbation | ( | double | value | ) | [inline] |
double ClpInterior::diagonalPerturbation | ( | ) | const [inline] |
void ClpInterior::setDiagonalPerturbation | ( | double | value | ) | [inline] |
double ClpInterior::gamma | ( | ) | const [inline] |
void ClpInterior::setGamma | ( | double | value | ) | [inline] |
double ClpInterior::delta | ( | ) | const [inline] |
void ClpInterior::setDelta | ( | double | value | ) | [inline] |
double ClpInterior::complementarityGap | ( | ) | const [inline] |
double ClpInterior::largestPrimalError | ( | ) | const [inline] |
double ClpInterior::largestDualError | ( | ) | const [inline] |
int ClpInterior::maximumBarrierIterations | ( | ) | const [inline] |
void ClpInterior::setMaximumBarrierIterations | ( | int | value | ) | [inline] |
void ClpInterior::setCholesky | ( | ClpCholeskyBase * | cholesky | ) |
Set cholesky (and delete present one).
int ClpInterior::numberFixed | ( | ) | const |
Return number fixed to see if worth presolving.
void ClpInterior::fixFixed | ( | bool | reallyFix = true |
) |
fix variables interior says should be.
If reallyFix false then just set values to exact bounds
double* ClpInterior::primalR | ( | ) | const [inline] |
double* ClpInterior::dualR | ( | ) | const [inline] |
void ClpInterior::gutsOfDelete | ( | ) | [protected] |
Does most of deletion.
void ClpInterior::gutsOfCopy | ( | const ClpInterior & | rhs | ) | [protected] |
Does most of copying.
bool ClpInterior::createWorkingData | ( | ) | [protected] |
Returns true if data looks okay, false if not.
void ClpInterior::deleteWorkingData | ( | ) | [protected] |
Does most of deletion.
bool ClpInterior::sanityCheck | ( | ) | [protected] |
Sanity check on input rim data.
int ClpInterior::housekeeping | ( | ) | [protected] |
This does housekeeping.
double ClpInterior::rawObjectiveValue | ( | ) | const [inline] |
Raw objective value (so always minimize).
Reimplemented from ClpModel.
Definition at line 262 of file ClpInterior.hpp.
int ClpInterior::isColumn | ( | int | sequence | ) | const [inline] |
int ClpInterior::sequenceWithin | ( | int | sequence | ) | const [inline] |
void ClpInterior::checkSolution | ( | ) |
Checks solution.
double ClpInterior::quadraticDjs | ( | double * | djRegion, | |
const double * | solution, | |||
double | scaleFactor | |||
) |
Modifies djs to allow for quadratic.
returns quadratic offset
void ClpInterior::setFixed | ( | int | sequence | ) | [inline] |
void ClpInterior::clearFixed | ( | int | sequence | ) | [inline] |
bool ClpInterior::fixed | ( | int | sequence | ) | const [inline] |
void ClpInterior::setFlagged | ( | int | sequence | ) | [inline] |
void ClpInterior::clearFlagged | ( | int | sequence | ) | [inline] |
bool ClpInterior::flagged | ( | int | sequence | ) | const [inline] |
void ClpInterior::setFixedOrFree | ( | int | sequence | ) | [inline] |
void ClpInterior::clearFixedOrFree | ( | int | sequence | ) | [inline] |
bool ClpInterior::fixedOrFree | ( | int | sequence | ) | const [inline] |
void ClpInterior::setLowerBound | ( | int | sequence | ) | [inline] |
void ClpInterior::clearLowerBound | ( | int | sequence | ) | [inline] |
bool ClpInterior::lowerBound | ( | int | sequence | ) | const [inline] |
void ClpInterior::setUpperBound | ( | int | sequence | ) | [inline] |
void ClpInterior::clearUpperBound | ( | int | sequence | ) | [inline] |
bool ClpInterior::upperBound | ( | int | sequence | ) | const [inline] |
void ClpInterior::setFakeLower | ( | int | sequence | ) | [inline] |
void ClpInterior::clearFakeLower | ( | int | sequence | ) | [inline] |
bool ClpInterior::fakeLower | ( | int | sequence | ) | const [inline] |
void ClpInterior::setFakeUpper | ( | int | sequence | ) | [inline] |
void ClpInterior::clearFakeUpper | ( | int | sequence | ) | [inline] |
bool ClpInterior::fakeUpper | ( | int | sequence | ) | const [inline] |
void ClpInteriorUnitTest | ( | const std::string & | mpsDir, | |
const std::string & | netlibDir | |||
) | [friend] |
A function that tests the methods in the ClpInterior class.
The only reason for it not to be a member method is that this way it doesn't have to be compiled into the library. And that's a gain, because the library should be compiled with optimization on, but this method should be compiled with debugging.
It also does some testing of ClpFactorization class
double ClpInterior::largestPrimalError_ [protected] |
double ClpInterior::largestDualError_ [protected] |
double ClpInterior::sumDualInfeasibilities_ [protected] |
double ClpInterior::sumPrimalInfeasibilities_ [protected] |
double ClpInterior::worstComplementarity_ [protected] |
double ClpInterior::xsize_ |
double ClpInterior::zsize_ |
double* ClpInterior::lower_ [protected] |
Working copy of lower bounds (Owner of arrays below).
Definition at line 387 of file ClpInterior.hpp.
double* ClpInterior::rowLowerWork_ [protected] |
double* ClpInterior::columnLowerWork_ [protected] |
double* ClpInterior::upper_ [protected] |
Working copy of upper bounds (Owner of arrays below).
Definition at line 393 of file ClpInterior.hpp.
double* ClpInterior::rowUpperWork_ [protected] |
double* ClpInterior::columnUpperWork_ [protected] |
double* ClpInterior::cost_ [protected] |
double* ClpInterior::rhs_ |
double* ClpInterior::x_ |
double* ClpInterior::y_ |
double* ClpInterior::dj_ |
ClpLsqr* ClpInterior::lsqrObject_ [protected] |
ClpPdcoBase* ClpInterior::pdcoStuff_ [protected] |
double ClpInterior::mu_ [protected] |
double ClpInterior::objectiveNorm_ [protected] |
double ClpInterior::rhsNorm_ [protected] |
double ClpInterior::solutionNorm_ [protected] |
double ClpInterior::dualObjective_ [protected] |
double ClpInterior::primalObjective_ [protected] |
double ClpInterior::diagonalNorm_ [protected] |
double ClpInterior::stepLength_ [protected] |
double ClpInterior::linearPerturbation_ [protected] |
double ClpInterior::diagonalPerturbation_ [protected] |
double ClpInterior::gamma_ [protected] |
double ClpInterior::delta_ [protected] |
double ClpInterior::targetGap_ [protected] |
double ClpInterior::projectionTolerance_ [protected] |
double ClpInterior::maximumRHSError_ [protected] |
double ClpInterior::maximumBoundInfeasibility_ [protected] |
double ClpInterior::maximumDualError_ [protected] |
double ClpInterior::diagonalScaleFactor_ [protected] |
double ClpInterior::scaleFactor_ [protected] |
double ClpInterior::actualPrimalStep_ [protected] |
double ClpInterior::actualDualStep_ [protected] |
double ClpInterior::smallestInfeasibility_ [protected] |
double ClpInterior::historyInfeasibility_[LENGTH_HISTORY] [protected] |
double ClpInterior::complementarityGap_ [protected] |
double ClpInterior::baseObjectiveNorm_ [protected] |
double ClpInterior::worstDirectionAccuracy_ [protected] |
double ClpInterior::maximumRHSChange_ [protected] |
double* ClpInterior::errorRegion_ [protected] |
double* ClpInterior::rhsFixRegion_ [protected] |
double* ClpInterior::upperSlack_ [protected] |
double* ClpInterior::lowerSlack_ [protected] |
double* ClpInterior::diagonal_ [protected] |
double* ClpInterior::solution_ [protected] |
double* ClpInterior::workArray_ [protected] |
double* ClpInterior::deltaX_ [protected] |
double* ClpInterior::deltaY_ [protected] |
double* ClpInterior::deltaZ_ [protected] |
double* ClpInterior::deltaW_ [protected] |
double* ClpInterior::deltaSU_ [protected] |
double* ClpInterior::deltaSL_ [protected] |
double* ClpInterior::primalR_ [protected] |
double* ClpInterior::dualR_ [protected] |
double* ClpInterior::rhsB_ [protected] |
double* ClpInterior::rhsU_ [protected] |
double* ClpInterior::rhsL_ [protected] |
double* ClpInterior::rhsZ_ [protected] |
double* ClpInterior::rhsW_ [protected] |
double* ClpInterior::rhsC_ [protected] |
double* ClpInterior::zVec_ [protected] |
double* ClpInterior::wVec_ [protected] |
ClpCholeskyBase* ClpInterior::cholesky_ [protected] |
int ClpInterior::numberComplementarityPairs_ [protected] |
numberComplementarityPairs i.e. ones with lower and/or upper bounds (not fixed)
Definition at line 515 of file ClpInterior.hpp.
int ClpInterior::numberComplementarityItems_ [protected] |
numberComplementarityItems_ i.e. number of active bounds
Definition at line 517 of file ClpInterior.hpp.
int ClpInterior::maximumBarrierIterations_ [protected] |
bool ClpInterior::gonePrimalFeasible_ [protected] |
bool ClpInterior::goneDualFeasible_ [protected] |
int ClpInterior::algorithm_ [protected] |