Clp
1.17.6

#include <ClpNonLinearCost.hpp>
Public Member Functions  
Constructors, destructor  
ClpNonLinearCost ()  
Default constructor. More...  
ClpNonLinearCost (ClpSimplex *model, int method=1)  
Constructor from simplex. More...  
ClpNonLinearCost (ClpSimplex *model, const int *starts, const double *lower, const double *cost)  
Constructor from simplex and list of nonlinearities (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. More...  
~ClpNonLinearCost ()  
Destructor. More...  
ClpNonLinearCost (const ClpNonLinearCost &)  
ClpNonLinearCost &  operator= (const ClpNonLinearCost &) 
Actual work in primal  
void  checkInfeasibilities (double oldTolerance=0.0) 
Changes infeasible costs and computes number and cost of infeas Puts all nonbasic (non free) variables to bounds and all free variables to zero if oldTolerance is nonzero. More...  
void  checkInfeasibilities (int numberInArray, const int *index) 
Changes infeasible costs for each variable The indices are row indices and need converting to sequences. More...  
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. More...  
void  goThru (int numberInArray, double multiplier, const int *index, const double *work, double *rhs) 
Goes through one bound for each variable. More...  
void  goBack (int numberInArray, const int *index, double *rhs) 
Takes off last iteration (i.e. More...  
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. More...  
void  zapCosts () 
Temporary zeroing of feasible costs. More...  
void  refreshCosts (const double *columnCosts) 
Refreshes costs always makes row costs zero. More...  
void  feasibleBounds () 
Puts feasible bounds into lower and upper. More...  
void  refresh () 
Refresh  assuming regions OK. More...  
void  refresh (int iSequence) 
Refresh one assuming regions OK. More...  
double  setOne (int sequence, double solutionValue) 
Sets bounds and cost for one variable Returns change in cost May need to be inline for speed. More...  
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. More...  
int  setOneOutgoing (int sequence, double &solutionValue) 
Sets bounds and cost for outgoing variable may change value Returns direction. More...  
double  nearest (int sequence, double solutionValue) 
Returns nearest bound. More...  
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. More...  
double  changeUpInCost (int sequence) const 
double  changeDownInCost (int sequence) const 
double  changeInCost (int sequence, double alpha, double &rhs) 
This also updates next bound. More...  
double  lower (int sequence) const 
Returns current lower bound. More...  
double  upper (int sequence) const 
Returns current upper bound. More...  
double  cost (int sequence) const 
Returns current cost. More...  
int  fullStatus (int sequence) const 
Returns full status. More...  
bool  changed (int sequence) const 
Returns if changed from beginning of iteration. More...  
Gets and sets  
int  numberInfeasibilities () const 
Number of infeasibilities. More...  
double  changeInCost () const 
Change in cost. More...  
double  feasibleCost () const 
Feasible cost. More...  
double  feasibleReportCost () const 
Feasible cost with offset and direction (i.e. for reporting) More...  
double  sumInfeasibilities () const 
Sum of infeasibilities. More...  
double  largestInfeasibility () const 
Largest infeasibility. More...  
double  averageTheta () const 
Average theta. More...  
void  setAverageTheta (double value) 
void  setChangeInCost (double value) 
void  setMethod (int value) 
bool  lookBothWays () const 
See if may want to look both ways. More...  
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. More...  
Private Attributes  
Data members  
double  changeCost_ 
Change in cost because of infeasibilities. More...  
double  feasibleCost_ 
Feasible cost. More...  
double  infeasibilityWeight_ 
Current infeasibility weight. More...  
double  largestInfeasibility_ 
Largest infeasibility. More...  
double  sumInfeasibilities_ 
Sum of infeasibilities. More...  
double  averageTheta_ 
Average theta  kept here as only for primal. More...  
int  numberRows_ 
Number of rows (mainly for checking and copy) More...  
int  numberColumns_ 
Number of columns (mainly for checking and copy) More...  
int *  start_ 
Starts for each entry (columns then rows) More...  
int *  whichRange_ 
Range for each entry (columns then rows) More...  
int *  offset_ 
Temporary range offset for each entry (columns then rows) More...  
double *  lower_ 
Lower bound for each range (upper bound is next lower). More...  
double *  cost_ 
Cost for each range. More...  
ClpSimplex *  model_ 
Model. More...  
unsigned int *  infeasible_ 
int  numberInfeasibilities_ 
Number of infeasibilities found. More...  
unsigned char *  status_ 
Contains status at beginning and current. More...  
double *  bound_ 
Bound which has been replaced in lower_ or upper_. More...  
double *  cost2_ 
Feasible cost array. More...  
int  method_ 
Method 1 old, 2 new, 3 both! More...  
bool  convex_ 
If all nonlinear costs convex. More...  
bool  bothWays_ 
If we should look both ways for djs. More...  
Definition at line 77 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 nonlinearities (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 &  ) 
ClpNonLinearCost& ClpNonLinearCost::operator=  (  const ClpNonLinearCost &  ) 
void ClpNonLinearCost::checkInfeasibilities  (  double  oldTolerance = 0.0  ) 
Changes infeasible costs and computes number and cost of infeas Puts all nonbasic (non free) variables to bounds and all free variables to zero if oldTolerance is nonzero.
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.
void ClpNonLinearCost::refresh  (  ) 
Refresh  assuming regions OK.
void ClpNonLinearCost::refresh  (  int  iSequence  ) 
Refresh one assuming regions OK.
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.

inline 
Returns change in cost  one down if alpha >0.0, up if <0.0 Value is current  new.
Definition at line 169 of file ClpNonLinearCost.hpp.

inline 
Definition at line 184 of file ClpNonLinearCost.hpp.

inline 
Definition at line 199 of file ClpNonLinearCost.hpp.

inline 
This also updates next bound.
Definition at line 215 of file ClpNonLinearCost.hpp.

inline 
Returns current lower bound.
Definition at line 275 of file ClpNonLinearCost.hpp.

inline 
Returns current upper bound.
Definition at line 280 of file ClpNonLinearCost.hpp.

inline 
Returns current cost.
Definition at line 285 of file ClpNonLinearCost.hpp.

inline 
Returns full status.
Definition at line 290 of file ClpNonLinearCost.hpp.

inline 
Returns if changed from beginning of iteration.
Definition at line 295 of file ClpNonLinearCost.hpp.

inline 
Number of infeasibilities.
Definition at line 305 of file ClpNonLinearCost.hpp.

inline 
Change in cost.
Definition at line 310 of file ClpNonLinearCost.hpp.

inline 
Feasible cost.
Definition at line 315 of file ClpNonLinearCost.hpp.
double ClpNonLinearCost::feasibleReportCost  (  )  const 
Feasible cost with offset and direction (i.e. for reporting)

inline 
Sum of infeasibilities.
Definition at line 322 of file ClpNonLinearCost.hpp.

inline 
Largest infeasibility.
Definition at line 327 of file ClpNonLinearCost.hpp.

inline 
Average theta.
Definition at line 332 of file ClpNonLinearCost.hpp.

inline 
Definition at line 336 of file ClpNonLinearCost.hpp.

inline 
Definition at line 340 of file ClpNonLinearCost.hpp.

inline 
Definition at line 344 of file ClpNonLinearCost.hpp.

inline 
See if may want to look both ways.
Definition at line 349 of file ClpNonLinearCost.hpp.

inline 
Definition at line 355 of file ClpNonLinearCost.hpp.

inline 
Definition at line 359 of file ClpNonLinearCost.hpp.

inline 
Definition at line 368 of file ClpNonLinearCost.hpp.
void ClpNonLinearCost::validate  (  ) 
For debug.

private 
Change in cost because of infeasibilities.
Definition at line 380 of file ClpNonLinearCost.hpp.

private 
Feasible cost.
Definition at line 382 of file ClpNonLinearCost.hpp.

private 
Current infeasibility weight.
Definition at line 384 of file ClpNonLinearCost.hpp.

private 
Largest infeasibility.
Definition at line 386 of file ClpNonLinearCost.hpp.

private 
Sum of infeasibilities.
Definition at line 388 of file ClpNonLinearCost.hpp.

private 
Average theta  kept here as only for primal.
Definition at line 390 of file ClpNonLinearCost.hpp.

private 
Number of rows (mainly for checking and copy)
Definition at line 392 of file ClpNonLinearCost.hpp.

private 
Number of columns (mainly for checking and copy)
Definition at line 394 of file ClpNonLinearCost.hpp.

private 
Starts for each entry (columns then rows)
Definition at line 396 of file ClpNonLinearCost.hpp.

private 
Range for each entry (columns then rows)
Definition at line 398 of file ClpNonLinearCost.hpp.

private 
Temporary range offset for each entry (columns then rows)
Definition at line 400 of file ClpNonLinearCost.hpp.

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 404 of file ClpNonLinearCost.hpp.

private 
Cost for each range.
Definition at line 406 of file ClpNonLinearCost.hpp.

private 
Model.
Definition at line 408 of file ClpNonLinearCost.hpp.

private 
Definition at line 410 of file ClpNonLinearCost.hpp.

private 
Number of infeasibilities found.
Definition at line 412 of file ClpNonLinearCost.hpp.

private 
Contains status at beginning and current.
Definition at line 415 of file ClpNonLinearCost.hpp.

private 
Bound which has been replaced in lower_ or upper_.
Definition at line 417 of file ClpNonLinearCost.hpp.

private 
Feasible cost array.
Definition at line 419 of file ClpNonLinearCost.hpp.

private 
Method 1 old, 2 new, 3 both!
Definition at line 421 of file ClpNonLinearCost.hpp.

private 
If all nonlinear costs convex.
Definition at line 423 of file ClpNonLinearCost.hpp.

private 
If we should look both ways for djs.
Definition at line 425 of file ClpNonLinearCost.hpp.