#include <ClpNonLinearCost.hpp>
Collaboration diagram for ClpNonLinearCost:
Public Member Functions | |
Constructors, destructor | |
ClpNonLinearCost () | |
Default constructor. | |
ClpNonLinearCost (ClpSimplex *model, int method=1) | |
Constructor from simplex. | |
ClpNonLinearCost (ClpSimplex *model, const int *starts, const double *lower, const double *cost) | |
Constructor from simplex and list of non-linearities (columns only) First lower of each column has to match real lower Last lower has to be <= upper (if == then cost ignored) This could obviously be changed to make more user friendly. | |
~ClpNonLinearCost () | |
Destructor. | |
ClpNonLinearCost (const ClpNonLinearCost &) | |
Default constructor. | |
ClpNonLinearCost & | operator= (const ClpNonLinearCost &) |
Default constructor. | |
Actual work in primal | |
void | checkInfeasibilities (double oldTolerance=0.0) |
Changes infeasible costs and computes number and cost of infeas Puts all non-basic (non free) variables to bounds and all free variables to zero if oldTolerance is non-zero
| |
void | checkInfeasibilities (int numberInArray, const int *index) |
Changes infeasible costs for each variable The indices are row indices and need converting to sequences. | |
void | checkChanged (int numberInArray, CoinIndexedVector *update) |
Puts back correct infeasible costs for each variable The input indices are row indices and need converting to sequences for costs. | |
void | goThru (int numberInArray, double multiplier, const int *index, const double *work, double *rhs) |
Goes through one bound for each variable. | |
void | goBack (int numberInArray, const int *index, double *rhs) |
Takes off last iteration (i.e. | |
void | goBackAll (const CoinIndexedVector *update) |
Puts back correct infeasible costs for each variable The input indices are row indices and need converting to sequences for costs. | |
void | zapCosts () |
Temporary zeroing of feasible costs. | |
void | refreshCosts (const double *columnCosts) |
Refreshes costs always makes row costs zero. | |
void | feasibleBounds () |
Puts feasible bounds into lower and upper. | |
double | setOne (int sequence, double solutionValue) |
Sets bounds and cost for one variable Returns change in cost May need to be inline for speed. | |
void | setOne (int sequence, double solutionValue, double lowerValue, double upperValue, double costValue=0.0) |
Sets bounds and infeasible cost and true cost for one variable This is for gub and column generation etc. | |
int | setOneOutgoing (int sequence, double &solutionValue) |
Sets bounds and cost for outgoing variable may change value Returns direction. | |
double | nearest (int sequence, double solutionValue) |
Returns nearest bound. | |
double | changeInCost (int sequence, double alpha) const |
Returns change in cost - one down if alpha >0.0, up if <0.0 Value is current - new. | |
double | changeUpInCost (int sequence) const |
Changes infeasible costs and computes number and cost of infeas Puts all non-basic (non free) variables to bounds and all free variables to zero if oldTolerance is non-zero
| |
double | changeDownInCost (int sequence) const |
Changes infeasible costs and computes number and cost of infeas Puts all non-basic (non free) variables to bounds and all free variables to zero if oldTolerance is non-zero
| |
double | changeInCost (int sequence, double alpha, double &rhs) |
This also updates next bound. | |
double | lower (int sequence) const |
Returns current lower bound. | |
double | upper (int sequence) const |
Returns current upper bound. | |
double | cost (int sequence) const |
Returns current cost. | |
Gets and sets | |
int | numberInfeasibilities () const |
Number of infeasibilities. | |
double | changeInCost () const |
Change in cost. | |
double | feasibleCost () const |
Feasible cost. | |
double | feasibleReportCost () const |
Feasible cost with offset and direction (i.e. for reporting). | |
double | sumInfeasibilities () const |
Sum of infeasibilities. | |
double | largestInfeasibility () const |
Largest infeasibility. | |
double | averageTheta () const |
Average theta. | |
void | setAverageTheta (double value) |
Number of infeasibilities. | |
void | setChangeInCost (double value) |
Number of infeasibilities. | |
void | setMethod (int value) |
Number of infeasibilities. | |
bool | lookBothWays () const |
See if may want to look both ways. | |
Private functions to deal with infeasible regions | |
bool | infeasible (int i) const |
void | setInfeasible (int i, bool trueFalse) |
unsigned char * | statusArray () const |
void | validate () |
For debug. | |
Private Attributes | |
Data members | |
double | changeCost_ |
Change in cost because of infeasibilities. | |
double | feasibleCost_ |
Feasible cost. | |
double | infeasibilityWeight_ |
Current infeasibility weight. | |
double | largestInfeasibility_ |
Largest infeasibility. | |
double | sumInfeasibilities_ |
Sum of infeasibilities. | |
double | averageTheta_ |
Average theta - kept here as only for primal. | |
int | numberRows_ |
Number of rows (mainly for checking and copy). | |
int | numberColumns_ |
Number of columns (mainly for checking and copy). | |
int * | start_ |
Starts for each entry (columns then rows). | |
int * | whichRange_ |
Range for each entry (columns then rows). | |
int * | offset_ |
Temporary range offset for each entry (columns then rows). | |
double * | lower_ |
Lower bound for each range (upper bound is next lower). | |
double * | cost_ |
Cost for each range. | |
ClpSimplex * | model_ |
Model. | |
unsigned int * | infeasible_ |
Change in cost because of infeasibilities. | |
int | numberInfeasibilities_ |
Number of infeasibilities found. | |
unsigned char * | status_ |
Contains status at beginning and current. | |
double * | bound_ |
Bound which has been replaced in lower_ or upper_. | |
double * | cost2_ |
Feasible cost array. | |
int | method_ |
Method 1 old, 2 new, 3 both! | |
bool | convex_ |
If all non-linear costs convex. | |
bool | bothWays_ |
If we should look both ways for djs. |
Definition at line 60 of file ClpNonLinearCost.hpp.
ClpNonLinearCost::ClpNonLinearCost | ( | ) |
Default constructor.
ClpNonLinearCost::ClpNonLinearCost | ( | ClpSimplex * | model, | |
int | method = 1 | |||
) |
Constructor from simplex.
This will just set up wasteful arrays for linear, but later may do dual analysis and even finding duplicate columns .
ClpNonLinearCost::ClpNonLinearCost | ( | ClpSimplex * | model, | |
const int * | starts, | |||
const double * | lower, | |||
const double * | cost | |||
) |
Constructor from simplex and list of non-linearities (columns only) First lower of each column has to match real lower Last lower has to be <= upper (if == then cost ignored) This could obviously be changed to make more user friendly.
ClpNonLinearCost::~ClpNonLinearCost | ( | ) |
Destructor.
ClpNonLinearCost::ClpNonLinearCost | ( | const ClpNonLinearCost & | ) |
Default constructor.
ClpNonLinearCost& ClpNonLinearCost::operator= | ( | const ClpNonLinearCost & | ) |
Default constructor.
void ClpNonLinearCost::checkInfeasibilities | ( | double | oldTolerance = 0.0 |
) |
Changes infeasible costs and computes number and cost of infeas Puts all non-basic (non free) variables to bounds and all free variables to zero if oldTolerance is non-zero
void ClpNonLinearCost::checkInfeasibilities | ( | int | numberInArray, | |
const int * | index | |||
) |
Changes infeasible costs for each variable The indices are row indices and need converting to sequences.
void ClpNonLinearCost::checkChanged | ( | int | numberInArray, | |
CoinIndexedVector * | update | |||
) |
Puts back correct infeasible costs for each variable The input indices are row indices and need converting to sequences for costs.
On input array is empty (but indices exist). On exit just changed costs will be stored as normal CoinIndexedVector
void ClpNonLinearCost::goThru | ( | int | numberInArray, | |
double | multiplier, | |||
const int * | index, | |||
const double * | work, | |||
double * | rhs | |||
) |
Goes through one bound for each variable.
If multiplier*work[iRow]>0 goes down, otherwise up. The indices are row indices and need converting to sequences Temporary offsets may be set Rhs entries are increased
void ClpNonLinearCost::goBack | ( | int | numberInArray, | |
const int * | index, | |||
double * | rhs | |||
) |
Takes off last iteration (i.e.
offsets closer to 0)
void ClpNonLinearCost::goBackAll | ( | const CoinIndexedVector * | update | ) |
Puts back correct infeasible costs for each variable The input indices are row indices and need converting to sequences for costs.
At the end of this all temporary offsets are zero
void ClpNonLinearCost::zapCosts | ( | ) |
Temporary zeroing of feasible costs.
void ClpNonLinearCost::refreshCosts | ( | const double * | columnCosts | ) |
Refreshes costs always makes row costs zero.
void ClpNonLinearCost::feasibleBounds | ( | ) |
Puts feasible bounds into lower and upper.
double ClpNonLinearCost::setOne | ( | int | sequence, | |
double | solutionValue | |||
) |
Sets bounds and cost for one variable Returns change in cost May need to be inline for speed.
void ClpNonLinearCost::setOne | ( | int | sequence, | |
double | solutionValue, | |||
double | lowerValue, | |||
double | upperValue, | |||
double | costValue = 0.0 | |||
) |
Sets bounds and infeasible cost and true cost for one variable This is for gub and column generation etc.
int ClpNonLinearCost::setOneOutgoing | ( | int | sequence, | |
double & | solutionValue | |||
) |
Sets bounds and cost for outgoing variable may change value Returns direction.
double ClpNonLinearCost::nearest | ( | int | sequence, | |
double | solutionValue | |||
) |
Returns nearest bound.
double ClpNonLinearCost::changeInCost | ( | int | sequence, | |
double | alpha | |||
) | const [inline] |
Returns change in cost - one down if alpha >0.0, up if <0.0 Value is current - new.
Definition at line 151 of file ClpNonLinearCost.hpp.
References CLP_METHOD1, CLP_METHOD2, cost_, infeasibilityWeight_, offset_, and whichRange_.
double ClpNonLinearCost::changeUpInCost | ( | int | sequence | ) | const [inline] |
Changes infeasible costs and computes number and cost of infeas Puts all non-basic (non free) variables to bounds and all free variables to zero if oldTolerance is non-zero
Definition at line 166 of file ClpNonLinearCost.hpp.
References CLP_METHOD1, CLP_METHOD2, cost_, infeasibilityWeight_, infeasible(), offset_, start_, and whichRange_.
double ClpNonLinearCost::changeDownInCost | ( | int | sequence | ) | const [inline] |
Changes infeasible costs and computes number and cost of infeas Puts all non-basic (non free) variables to bounds and all free variables to zero if oldTolerance is non-zero
Definition at line 181 of file ClpNonLinearCost.hpp.
References CLP_METHOD1, CLP_METHOD2, cost_, infeasibilityWeight_, infeasible(), offset_, start_, and whichRange_.
double ClpNonLinearCost::changeInCost | ( | int | sequence, | |
double | alpha, | |||
double & | rhs | |||
) | [inline] |
This also updates next bound.
Definition at line 197 of file ClpNonLinearCost.hpp.
References bound_, CLP_ABOVE_UPPER, CLP_BELOW_LOWER, CLP_FEASIBLE, CLP_METHOD1, CLP_METHOD2, CLP_SAME, COIN_DBL_MAX, cost_, currentStatus(), infeasibilityWeight_, lower_, ClpSimplex::lowerRegion(), model_, offset_, originalStatus(), setCurrentStatus(), start_, status_, ClpSimplex::upperRegion(), and whichRange_.
double ClpNonLinearCost::lower | ( | int | sequence | ) | const [inline] |
Returns current lower bound.
Definition at line 257 of file ClpNonLinearCost.hpp.
References lower_, offset_, and whichRange_.
double ClpNonLinearCost::upper | ( | int | sequence | ) | const [inline] |
Returns current upper bound.
Definition at line 260 of file ClpNonLinearCost.hpp.
References lower_, offset_, and whichRange_.
double ClpNonLinearCost::cost | ( | int | sequence | ) | const [inline] |
Returns current cost.
Definition at line 263 of file ClpNonLinearCost.hpp.
References cost_, offset_, and whichRange_.
int ClpNonLinearCost::numberInfeasibilities | ( | ) | const [inline] |
Number of infeasibilities.
Definition at line 271 of file ClpNonLinearCost.hpp.
References numberInfeasibilities_.
double ClpNonLinearCost::changeInCost | ( | ) | const [inline] |
double ClpNonLinearCost::feasibleCost | ( | ) | const [inline] |
double ClpNonLinearCost::feasibleReportCost | ( | ) | const |
Feasible cost with offset and direction (i.e. for reporting).
double ClpNonLinearCost::sumInfeasibilities | ( | ) | const [inline] |
Sum of infeasibilities.
Definition at line 282 of file ClpNonLinearCost.hpp.
References sumInfeasibilities_.
double ClpNonLinearCost::largestInfeasibility | ( | ) | const [inline] |
Largest infeasibility.
Definition at line 285 of file ClpNonLinearCost.hpp.
References largestInfeasibility_.
double ClpNonLinearCost::averageTheta | ( | ) | const [inline] |
void ClpNonLinearCost::setAverageTheta | ( | double | value | ) | [inline] |
Number of infeasibilities.
Definition at line 290 of file ClpNonLinearCost.hpp.
References averageTheta_.
void ClpNonLinearCost::setChangeInCost | ( | double | value | ) | [inline] |
Number of infeasibilities.
Definition at line 292 of file ClpNonLinearCost.hpp.
References changeCost_.
void ClpNonLinearCost::setMethod | ( | int | value | ) | [inline] |
bool ClpNonLinearCost::lookBothWays | ( | ) | const [inline] |
See if may want to look both ways.
Definition at line 297 of file ClpNonLinearCost.hpp.
References bothWays_.
bool ClpNonLinearCost::infeasible | ( | int | i | ) | const [inline] |
Definition at line 301 of file ClpNonLinearCost.hpp.
References infeasible_.
Referenced by changeDownInCost(), and changeUpInCost().
void ClpNonLinearCost::setInfeasible | ( | int | i, | |
bool | trueFalse | |||
) | [inline] |
unsigned char* ClpNonLinearCost::statusArray | ( | ) | const [inline] |
void ClpNonLinearCost::validate | ( | ) |
For debug.
double ClpNonLinearCost::changeCost_ [private] |
Change in cost because of infeasibilities.
Definition at line 322 of file ClpNonLinearCost.hpp.
Referenced by changeInCost(), and setChangeInCost().
double ClpNonLinearCost::feasibleCost_ [private] |
double ClpNonLinearCost::infeasibilityWeight_ [private] |
Current infeasibility weight.
Definition at line 326 of file ClpNonLinearCost.hpp.
Referenced by changeDownInCost(), changeInCost(), and changeUpInCost().
double ClpNonLinearCost::largestInfeasibility_ [private] |
Largest infeasibility.
Definition at line 328 of file ClpNonLinearCost.hpp.
Referenced by largestInfeasibility().
double ClpNonLinearCost::sumInfeasibilities_ [private] |
Sum of infeasibilities.
Definition at line 330 of file ClpNonLinearCost.hpp.
Referenced by sumInfeasibilities().
double ClpNonLinearCost::averageTheta_ [private] |
Average theta - kept here as only for primal.
Definition at line 332 of file ClpNonLinearCost.hpp.
Referenced by averageTheta(), and setAverageTheta().
int ClpNonLinearCost::numberRows_ [private] |
int ClpNonLinearCost::numberColumns_ [private] |
Number of columns (mainly for checking and copy).
Definition at line 336 of file ClpNonLinearCost.hpp.
int* ClpNonLinearCost::start_ [private] |
Starts for each entry (columns then rows).
Definition at line 338 of file ClpNonLinearCost.hpp.
Referenced by changeDownInCost(), changeInCost(), and changeUpInCost().
int* ClpNonLinearCost::whichRange_ [private] |
Range for each entry (columns then rows).
Definition at line 340 of file ClpNonLinearCost.hpp.
Referenced by changeDownInCost(), changeInCost(), changeUpInCost(), cost(), lower(), and upper().
int* ClpNonLinearCost::offset_ [private] |
Temporary range offset for each entry (columns then rows).
Definition at line 342 of file ClpNonLinearCost.hpp.
Referenced by changeDownInCost(), changeInCost(), changeUpInCost(), cost(), lower(), and upper().
double* ClpNonLinearCost::lower_ [private] |
Lower bound for each range (upper bound is next lower).
For various reasons there is always an infeasible range at bottom - even if lower bound is - infinity
Definition at line 346 of file ClpNonLinearCost.hpp.
Referenced by changeInCost(), lower(), and upper().
double* ClpNonLinearCost::cost_ [private] |
Cost for each range.
Definition at line 348 of file ClpNonLinearCost.hpp.
Referenced by changeDownInCost(), changeInCost(), changeUpInCost(), and cost().
ClpSimplex* ClpNonLinearCost::model_ [private] |
unsigned int* ClpNonLinearCost::infeasible_ [private] |
Change in cost because of infeasibilities.
Definition at line 352 of file ClpNonLinearCost.hpp.
Referenced by infeasible(), and setInfeasible().
int ClpNonLinearCost::numberInfeasibilities_ [private] |
Number of infeasibilities found.
Definition at line 354 of file ClpNonLinearCost.hpp.
Referenced by numberInfeasibilities().
unsigned char* ClpNonLinearCost::status_ [private] |
Contains status at beginning and current.
Definition at line 357 of file ClpNonLinearCost.hpp.
Referenced by changeInCost(), and statusArray().
double* ClpNonLinearCost::bound_ [private] |
Bound which has been replaced in lower_ or upper_.
Definition at line 359 of file ClpNonLinearCost.hpp.
Referenced by changeInCost().
double* ClpNonLinearCost::cost2_ [private] |
int ClpNonLinearCost::method_ [private] |
Method 1 old, 2 new, 3 both!
Definition at line 363 of file ClpNonLinearCost.hpp.
Referenced by setMethod().
bool ClpNonLinearCost::convex_ [private] |
bool ClpNonLinearCost::bothWays_ [private] |
If we should look both ways for djs.
Definition at line 367 of file ClpNonLinearCost.hpp.
Referenced by lookBothWays().