13 #include "CoinModel.hpp"
14 #include "OsiClpSolverInterface.hpp"
15 #include "OsiChooseVariable.hpp"
18 class CoinPackedMatrix;
93 void load(CoinModel &modelObject,
bool tightenBounds =
false,
int logLevel = 1);
95 virtual OsiSolverInterface *
clone(
bool copyData =
true)
const;
111 void addBoundModifier(
bool upperBoundAffected,
bool useUpperBound,
int whichVariable,
int whichVariableAffected,
112 double multiplier = 1.0);
330 int numberAffected,
const int *positionL,
331 const int *positionU,
const double *multiplier);
353 double multiplier = 1.0);
426 double *newSolution);
440 #include "OsiBranchingObject.hpp"
445 class CoinWarmStartBasis;
459 OsiOldLink(
const OsiSolverInterface *solver,
int numberMembers,
461 const double *weights,
int setNumber);
468 OsiOldLink(
const OsiSolverInterface *solver,
int numberMembers,
470 const double *weights,
int setNumber);
484 using OsiObject::infeasibility;
486 virtual double infeasibility(
const OsiBranchingInformation *info,
int &whichWay)
const;
488 using OsiObject::feasibleRegion;
494 virtual double feasibleRegion(OsiSolverInterface *solver,
const OsiBranchingInformation *info)
const;
500 virtual OsiBranchingObject *
createBranch(OsiSolverInterface *solver,
const OsiBranchingInformation *info,
int way)
const;
551 virtual OsiBranchingObject *
clone()
const;
556 using OsiBranchingObject::branch;
558 virtual double branch(OsiSolverInterface *solver);
560 using OsiBranchingObject::print;
563 virtual void print(
const OsiSolverInterface *solver = NULL);
582 const char *functionString);
621 OsiLink(
const OsiSolverInterface *solver,
int yRow,
622 int yColumn,
double meshSize);
636 using OsiObject::infeasibility;
638 virtual double infeasibility(
const OsiBranchingInformation *info,
int &whichWay)
const;
640 using OsiObject::feasibleRegion;
646 virtual double feasibleRegion(OsiSolverInterface *solver,
const OsiBranchingInformation *info)
const;
652 virtual OsiBranchingObject *
createBranch(OsiSolverInterface *solver,
const OsiBranchingInformation *info,
int way)
const;
710 virtual OsiBranchingObject *
clone()
const;
715 using OsiBranchingObject::branch;
717 virtual double branch(OsiSolverInterface *solver);
719 using OsiBranchingObject::print;
722 virtual void print(
const OsiSolverInterface *solver = NULL);
746 double xMesh,
double yMesh,
747 int numberExistingObjects = 0,
const OsiObject **objects = NULL);
756 double xMesh,
double yMesh,
757 int numberExistingObjects = 0,
const OsiObject **objects = NULL);
771 using OsiObject::infeasibility;
773 virtual double infeasibility(
const OsiBranchingInformation *info,
int &whichWay)
const;
775 using OsiObject::feasibleRegion;
781 virtual double feasibleRegion(OsiSolverInterface *solver,
const OsiBranchingInformation *info)
const;
787 virtual OsiBranchingObject *
createBranch(OsiSolverInterface *solver,
const OsiBranchingInformation *info,
int way)
const;
911 void setMeshSizes(
const OsiSolverInterface *solver,
double x,
double y);
946 void newBounds(OsiSolverInterface *solver,
int way,
short xOrY,
double separator)
const;
949 CoinPackedMatrix *matrix, CoinWarmStartBasis *basis)
const;
953 void getCoefficients(
const OsiSolverInterface *solver,
double xB[2],
double yB[2],
double xybar[4])
const;
955 double computeLambdas(
const double xB[3],
const double yB[3],
const double xybar[4],
double lambda[4])
const;
1040 double separator,
int chosen);
1049 virtual OsiBranchingObject *
clone()
const;
1054 using OsiBranchingObject::branch;
1056 virtual double branch(OsiSolverInterface *solver);
1058 using OsiBranchingObject::print;
1061 virtual void print(
const OsiSolverInterface *solver = NULL);
1111 double newGrid(OsiSolverInterface *solver,
int type)
const;
1155 using OsiObject::infeasibility;
1157 virtual double infeasibility(
const OsiBranchingInformation *info,
int &whichWay)
const;
1163 virtual OsiBranchingObject *
createBranch(OsiSolverInterface *solver,
const OsiBranchingInformation *info,
int way)
const;
1203 using OsiObject::infeasibility;
1205 virtual double infeasibility(
const OsiBranchingInformation *info,
int &whichWay)
const;
1211 virtual OsiBranchingObject *
createBranch(OsiSolverInterface *solver,
const OsiBranchingInformation *info,
int way)
const;
1213 using OsiObject::feasibleRegion;
1219 virtual double feasibleRegion(OsiSolverInterface *solver,
const OsiBranchingInformation *info)
const;
1256 virtual OsiChooseVariable *
clone()
const;
1265 virtual int setupList(OsiBranchingInformation *info,
bool initialize);
1279 virtual int chooseVariable(OsiSolverInterface *solver, OsiBranchingInformation *info,
bool fixVariables);
1300 #include "CglStored.hpp"
1302 class CoinWarmStartBasis;
1318 const CglTreeInfo info = CglTreeInfo());
1369 virtual OsiSolverInterface *
clone(
bool copyData =
true)
const;
1438 int numberPasses,
double deltaTolerance,
ClpSimplex * approximateSolution(CoinModel &coinModel, int numberPasses, double deltaTolerance, int mode=0)
Return an approximate solution to a CoinModel.
heuristic - just picks up any good solution
CbcHeuristicDynamic3(CbcModel &model)
virtual int solution(double &objectiveValue, double *newSolution)
returns 0 if no solution, 1 if valid solution.
CbcHeuristicDynamic3(const CbcHeuristicDynamic3 &)
CbcHeuristicDynamic3 & operator=(const CbcHeuristicDynamic3 &rhs)
Illegal Assignment operator.
virtual void setModel(CbcModel *model)
update model
virtual void resetModel(CbcModel *model)
Resets stuff if model changes.
virtual CbcHeuristic * clone() const
Clone.
virtual bool canDealWithOdd() const
Returns true if can deal with "odd" problems e.g. sos type 2.
virtual int solution(double &objectiveValue, double *newSolution)=0
returns 0 if no solution, 1 if valid solution with better objective value than one passed in Sets sol...
Simple Branch and bound class.
This is for codes where solver needs to know about CbcModel Seems to provide only one value-added fea...
Stored Temporary Cut Generator Class - destroyed after first use.
CglTemporary()
Default constructor.
CglTemporary & operator=(const CglTemporary &rhs)
Assignment operator.
virtual void generateCuts(const OsiSolverInterface &si, OsiCuts &cs, const CglTreeInfo info=CglTreeInfo())
Generate Mixed Integer Stored cuts for the model of the solver interface, si.
virtual ~CglTemporary()
Destructor.
virtual CglCutGenerator * clone() const
Clone.
CglTemporary(const CglTemporary &rhs)
Copy constructor.
Branching object for BiLinear objects.
virtual OsiBranchingObject * clone() const
Clone.
virtual void print(const OsiSolverInterface *solver=NULL)
Print something about branch - only if log level high.
short chosen_
data 1 means branch on x, 2 branch on y
virtual bool boundBranch() const
Return true if branch should only bound variables.
OsiBiLinearBranchingObject & operator=(const OsiBiLinearBranchingObject &rhs)
OsiBiLinearBranchingObject(OsiSolverInterface *solver, const OsiBiLinear *originalObject, int way, double separator, int chosen)
virtual double branch(OsiSolverInterface *solver)
Does next branch and updates state.
virtual ~OsiBiLinearBranchingObject()
OsiBiLinearBranchingObject(const OsiBiLinearBranchingObject &)
OsiBiLinearBranchingObject()
Define Continuous BiLinear objects for an == bound.
virtual ~OsiBiLinearEquality()
virtual double improvement(const OsiSolverInterface *solver) const
Possible improvement.
double newGrid(OsiSolverInterface *solver, int type) const
change grid if type 0 then use solution and make finer if 1 then back to original returns mesh size
void setNumberPoints(int value)
OsiBiLinearEquality(OsiSolverInterface *solver, int xColumn, int yColumn, int xyRow, double rhs, double xMesh)
Useful constructor - This Adds in rows and variables to construct Ordered Set for x*y = b So note not...
int numberPoints_
Number of points.
OsiBiLinearEquality & operator=(const OsiBiLinearEquality &rhs)
int numberPoints() const
Number of points.
virtual OsiObject * clone() const
Clone.
OsiBiLinearEquality(const OsiBiLinearEquality &)
short chosen_
Which chosen -1 none, 0 x, 1 y.
int firstLambda_
First lambda (of 4)
virtual OsiBranchingObject * createBranch(OsiSolverInterface *solver, const OsiBranchingInformation *info, int way) const
Creates a branching object.
void setXYSatisfied(double value)
void addExtraRow(int row, double multiplier)
Adds in data for extra row with variable coefficients.
virtual bool canDoHeuristics() const
Return true if object can take part in normal heuristics.
double computeLambdas(const double xB[3], const double yB[3], const double xybar[4], double lambda[4]) const
Compute lambdas (third entry in each .B is current value) (nonzero if bad)
double xSatisfied() const
X satisfied if less than this away from mesh.
int * extraRow_
Row number.
int yRow_
y row (-1 if x*x)
void setXSatisfied(double value)
double ySatisfied_
y satisfied if less than this away from mesh
int boundType() const
Simple quadratic bound marker.
int yColumn() const
Y column.
void setYMeshSize(double value)
virtual double feasibleRegion(OsiSolverInterface *solver, const OsiBranchingInformation *info) const
Set bounds to fix the variable at the current (integer) value.
virtual double infeasibility(const OsiBranchingInformation *info, int &whichWay) const
Infeasibility - large is 0.5.
int boundType_
Simple quadratic bound marker.
int branchingStrategy() const
branching strategy etc bottom 2 bits 0 branch on either, 1 branch on x, 2 branch on y next bit 4 set ...
void setYOtherSatisfied(double value)
void setCoefficient(double value)
Set coefficient.
virtual bool boundBranch() const
Return true if branch should only bound variables.
int xColumn() const
X column.
OsiBiLinear & operator=(const OsiBiLinear &rhs)
double getMovement(const OsiBranchingInformation *info)
Gets sum of movements to correct value.
int updateCoefficients(const double *lower, const double *upper, double *objective, CoinPackedMatrix *matrix, CoinWarmStartBasis *basis) const
Updates coefficients - returns number updated.
OsiBiLinear(const OsiBiLinear &)
double xMeshSize() const
X meshSize.
double yOtherSatisfied() const
Y other satisfied if less than this away from mesh.
OsiBiLinear(CoinModel *coinModel, int xColumn, int yColumn, int xyRow, double coefficient, double xMesh, double yMesh, int numberExistingObjects=0, const OsiObject **objects=NULL)
Useful constructor - This Adds in rows and variables to construct valid Linked Ordered Set Adds extra...
void setMeshSizes(const OsiSolverInterface *solver, double x, double y)
Set sizes and other stuff.
double ySatisfied() const
Y satisfied if less than this away from mesh.
void setXOtherSatisfied(double value)
double * multiplier_
Multiplier for coefficient on row.
double xyCoefficient(const double *solution) const
Returns true value of single xyRow coefficient.
double xySatisfied() const
XY satisfied if two version differ by less than this.
int branchingStrategy_
branching strategy etc bottom 2 bits 0 branch on either, 1 branch on x, 2 branch on y next bit 4 set ...
double xySatisfied_
xy satisfied if less than this away from true
void computeLambdas(const OsiSolverInterface *solver, double lambda[4]) const
Compute lambdas if coefficients not changing.
int numberExtraRows_
Number of extra rows (coefficients to be modified)
virtual void resetSequenceEtc(int numberColumns, const int *originalColumns)
Redoes data when sequence numbers change.
double yOtherSatisfied_
Y other satisfied if less than this away from mesh.
void setYSatisfied(double value)
void getCoefficients(const OsiSolverInterface *solver, double xB[2], double yB[2], double xybar[4]) const
Get LU coefficients from matrix.
int firstLambda() const
First lambda (of 4)
virtual OsiObject * clone() const
Clone.
void setXMeshSize(double value)
double xSatisfied_
x satisfied if less than this away from mesh
double yMeshSize() const
Y meshSize.
void getPseudoShadow(const OsiBranchingInformation *info)
Sets infeasibility and other when pseudo shadow prices.
void setBoundType(int value)
double xyBranchValue_
value of x or y to branch about
int convexity_
Convexity row.
OsiBiLinear(OsiSolverInterface *solver, int xColumn, int yColumn, int xyRow, double coefficient, double xMesh, double yMesh, int numberExistingObjects=0, const OsiObject **objects=NULL)
Useful constructor - This Adds in rows and variables to construct valid Linked Ordered Set Adds extra...
double xOtherSatisfied() const
X other satisfied if less than this away from mesh.
void newBounds(OsiSolverInterface *solver, int way, short xOrY, double separator) const
Does work of branching.
double coefficient() const
Coefficient.
virtual double checkInfeasibility(const OsiBranchingInformation *info) const
void setBranchingStrategy(int value)
double xOtherSatisfied_
X other satisfied if less than this away from mesh.
This class chooses a variable to branch on.
void setNumberObjectsToUse(int value)
Set number of objects to use.
OsiChooseStrongSubset(const OsiChooseStrongSubset &)
Copy constructor.
virtual int chooseVariable(OsiSolverInterface *solver, OsiBranchingInformation *info, bool fixVariables)
Choose a variable Returns - -1 Node is infeasible 0 Normal termination - we have a candidate 1 All lo...
OsiChooseStrongSubset(const OsiSolverInterface *solver)
Constructor from solver (so we can set up arrays etc)
OsiChooseStrongSubset()
Default Constructor.
int numberObjectsToUse_
Number of objects to be used (and set in solver)
int numberObjectsToUse() const
Number of objects to use.
virtual OsiChooseVariable * clone() const
Clone.
virtual ~OsiChooseStrongSubset()
Destructor.
virtual int setupList(OsiBranchingInformation *info, bool initialize)
Sets up strong list and clears all if initialize is true.
OsiChooseStrongSubset & operator=(const OsiChooseStrongSubset &rhs)
Assignment operator.
Branching object for Linked ordered sets.
OsiLinkBranchingObject & operator=(const OsiLinkBranchingObject &rhs)
OsiLinkBranchingObject(OsiSolverInterface *solver, const OsiLink *originalObject, int way, double separator)
OsiLinkBranchingObject(const OsiLinkBranchingObject &)
virtual OsiBranchingObject * clone() const
Clone.
virtual ~OsiLinkBranchingObject()
virtual void print(const OsiSolverInterface *solver=NULL)
Print something about branch - only if log level high.
virtual double branch(OsiSolverInterface *solver)
Does next branch and updates state.
Define Special Linked Ordered Sets.
virtual void resetSequenceEtc(int numberColumns, const int *originalColumns)
Redoes data when sequence numbers change.
virtual OsiBranchingObject * createBranch(OsiSolverInterface *solver, const OsiBranchingInformation *info, int way) const
Creates a branching object.
int numberLinks_
Number of links.
int yRow_
Row which defines y.
OsiLink & operator=(const OsiLink &rhs)
virtual OsiObject * clone() const
Clone.
double meshSize_
data Current increment for y points
int numberLinks() const
Number of links for each member.
OsiLink(const OsiSolverInterface *solver, int yRow, int yColumn, double meshSize)
Useful constructor -.
virtual double feasibleRegion(OsiSolverInterface *solver, const OsiBranchingInformation *info) const
Set bounds to fix the variable at the current (integer) value.
virtual bool boundBranch() const
Return true if branch should only bound variables.
virtual double infeasibility(const OsiBranchingInformation *info, int &whichWay) const
Infeasibility - large is 0.5.
int yColumn_
Column which defines y.
virtual bool canDoHeuristics() const
Return true if object can take part in normal heuristics.
List of bounds which depend on other bounds.
OsiLinkedBound()
Default Constructor.
int numberAffected_
Number of variables/elements affected.
OsiLinkedBound(const OsiLinkedBound &)
Copy constructor.
~OsiLinkedBound()
Destructor.
OsiLinkedBound(OsiSolverInterface *model, int variable, int numberAffected, const int *positionL, const int *positionU, const double *multiplier)
Useful Constructor.
int maximumAffected_
Maximum number of variables/elements affected.
boundElementAction * affected_
Actions.
void addBoundModifier(bool upperBoundAffected, bool useUpperBound, int whichVariable, double multiplier=1.0)
Add a bound modifier.
OsiLinkedBound & operator=(const OsiLinkedBound &rhs)
Assignment operator.
int variable() const
Get variable.
OsiSolverInterface * model_
Pointer back to model.
void updateBounds(ClpSimplex *solver)
Update other bounds.
Branching object for Linked ordered sets.
virtual void print(const OsiSolverInterface *solver=NULL)
Print something about branch - only if log level high.
OsiOldLinkBranchingObject & operator=(const OsiOldLinkBranchingObject &rhs)
OsiOldLinkBranchingObject()
virtual ~OsiOldLinkBranchingObject()
OsiOldLinkBranchingObject(const OsiOldLinkBranchingObject &)
OsiOldLinkBranchingObject(OsiSolverInterface *solver, const OsiOldLink *originalObject, int way, double separator)
virtual OsiBranchingObject * clone() const
Clone.
virtual double branch(OsiSolverInterface *solver)
Does next branch and updates state.
OsiOldLink(const OsiSolverInterface *solver, int numberMembers, int numberLinks, int typeSOS, const int *which, const double *weights, int setNumber)
Useful constructor - A valid solution is if all variables are zero apart from k*numberLink to (k+1)*n...
OsiOldLink(const OsiSolverInterface *solver, int numberMembers, int numberLinks, int first, const double *weights, int setNumber)
Useful constructor - A valid solution is if all variables are zero apart from k*numberLink to (k+1)*n...
virtual double infeasibility(const OsiBranchingInformation *info, int &whichWay) const
Infeasibility - large is 0.5.
virtual OsiBranchingObject * createBranch(OsiSolverInterface *solver, const OsiBranchingInformation *info, int way) const
Creates a branching object.
int numberLinks() const
Number of links for each member.
virtual bool canDoHeuristics() const
Return true if object can take part in normal heuristics.
virtual double feasibleRegion(OsiSolverInterface *solver, const OsiBranchingInformation *info) const
Set bounds to fix the variable at the current (integer) value.
virtual OsiObject * clone() const
Clone.
OsiOldLink(const OsiOldLink &)
virtual bool boundBranch() const
Return true if branch should only bound variables.
OsiOldLink & operator=(const OsiOldLink &rhs)
virtual void resetSequenceEtc(int numberColumns, const int *originalColumns)
Redoes data when sequence numbers change.
Define data for one link.
int xColumn_
Column which defines x.
std::string function_
Function.
OsiOneLink & operator=(const OsiOneLink &rhs)
OsiOneLink(const OsiSolverInterface *solver, int xRow, int xColumn, int xyRow, const char *functionString)
Useful constructor -.
OsiOneLink(const OsiOneLink &)
Define a single integer class - but one where you keep branching until fixed even if satisfied.
virtual double infeasibility(const OsiBranchingInformation *info, int &whichWay) const
Infeasibility - large is 0.5.
OsiSimpleFixedInteger & operator=(const OsiSimpleFixedInteger &rhs)
Assignment operator.
OsiSimpleFixedInteger(int iColumn, double lower, double upper)
Useful constructor - passed solver index and original bounds.
OsiSimpleFixedInteger(const OsiSolverInterface *solver, int iColumn)
Useful constructor - passed solver index.
virtual OsiBranchingObject * createBranch(OsiSolverInterface *solver, const OsiBranchingInformation *info, int way) const
Creates a branching object.
OsiSimpleFixedInteger(const OsiSimpleFixedInteger &)
Copy constructor.
virtual OsiObject * clone() const
Clone.
OsiSimpleFixedInteger()
Default Constructor.
virtual ~OsiSimpleFixedInteger()
Destructor.
OsiSimpleFixedInteger(const OsiSimpleInteger &)
Useful constructor - passed simple integer.
This is to allow the user to replace initialSolve and resolve.
double bestObjectiveValue() const
Objective value of best solution found internally.
ClpSimplex * quadraticModel_
Copy of quadratic model if one.
void setSpecialOptions3(int value)
Set special options.
OsiSolverLinearizedQuadratic()
Default Constructor.
double bestObjectiveValue_
Objective value of best solution found internally.
int specialOptions3() const
Get special options.
ClpSimplex * quadraticModel() const
Copy of quadratic model if one.
const double * bestSolution() const
Best solution found internally.
int specialOptions3_
0 bit (1) - don't do mini B&B 1 bit (2) - quadratic only in objective
virtual OsiSolverInterface * clone(bool copyData=true) const
Clone.
OsiSolverLinearizedQuadratic(const OsiSolverLinearizedQuadratic &)
Copy constructor.
OsiSolverLinearizedQuadratic & operator=(const OsiSolverLinearizedQuadratic &rhs)
Assignment operator.
virtual void initialSolve()
Solve initial LP relaxation.
double * bestSolution_
Best solution found internally.
virtual ~OsiSolverLinearizedQuadratic()
Destructor.
OsiSolverLinearizedQuadratic(ClpSimplex *quadraticModel)
Useful constructor (solution should be good)
This is to allow the user to replace initialSolve and resolve This version changes coefficients.
void setBiLinearPriority(int value)
Set biLinear priority.
int specialOptions2() const
Get special options.
void setBiLinearPriorities(int value, double meshSize=1.0)
Set all biLinear priorities on x-x variables.
double bestObjectiveValue() const
Objective value of best solution found internally.
double defaultMeshSize_
Default mesh.
CoinModel coinModel_
Model in CoinModel format.
int * startNonLinear_
Starts of lists.
virtual int fathom(bool allFixed)
Problem specific Returns -1 if node fathomed and no solution 0 if did nothing 1 if node fathomed and ...
virtual ~OsiSolverLink()
Destructor.
double * bestSolution_
Best solution found internally.
CoinPackedMatrix * originalRowCopy_
Row copy of matrix Just genuine columns and rows.
int objectiveRow_
Objective transfer row if one.
const CoinModel * coinModel() const
Return CoinModel.
int * fixVariables_
list of fixed variables
double * heuristicSolution(int numberPasses, double deltaTolerance, int mode)
Solves nonlinear problem from CoinModel using SLP - and then tries to get heuristic solution Returns ...
int * whichNonLinear_
Indices in a list/row.
double defaultBound() const
Default maximumbound.
int objectiveVariable() const
Objective transfer variable if one.
ClpSimplex * quadraticModel() const
Copy of quadratic model if one.
OsiSolverLink(const OsiSolverLink &)
Copy constructor.
void gutsOfDestructor(bool justNullify=false)
Do real work of initialize.
int integerPriority() const
Get integer priority.
OsiSolverLink & operator=(const OsiSolverLink &rhs)
Assignment operator.
ClpSimplex * quadraticModel_
Copy of quadratic model if one.
int * convex_
Indicator whether is convex, concave or neither -1 concave, 0 neither, +1 convex.
void analyzeObjects()
Analyze constraints to see which are convex (quadratic)
int updateCoefficients(ClpSimplex *solver, CoinPackedMatrix *matrix)
Update coefficients - returns number updated if in updating mode.
int biLinearPriority_
Priority for bilinear.
int doAOCuts(CglTemporary *cutGen, const double *solution, const double *solution2)
Do OA cuts.
void addTighterConstraints()
Add reformulated bilinear constraints.
CoinPackedMatrix * matrix_
Clean copy of matrix Marked coefficients will be multiplied by L or U.
CoinPackedMatrix * cleanMatrix() const
Clean copy of matrix So we can add rows.
virtual OsiSolverInterface * clone(bool copyData=true) const
Clone.
double * nonlinearSLP(int numberPasses, double deltaTolerance)
Solves nonlinear problem from CoinModel using SLP - may be used as crash for other algorithms when nu...
void setIntegerPriority(int value)
Set integer priority.
void gutsOfCopy(const OsiSolverLink &rhs)
Do real work of copy.
CoinPackedMatrix * originalRowCopy() const
Row copy of matrix Just genuine columns and rows Linear part.
OsiSolverLink()
Default Constructor.
void load(CoinModel &modelObject, bool tightenBounds=false, int logLevel=1)
int numberNonLinearRows_
Number of rows with nonLinearities.
void setBranchingStrategyOnVariables(int strategyValue, int priorityValue=-1, int mode=7)
Set options and priority on all or some biLinear variables 1 - on I-I 2 - on I-x 4 - on x-x or combin...
OsiLinkedBound * info_
Information.
void setFixedPriority(int priorityValue)
Two tier integer problem where when set of variables with priority less than this are fixed the probl...
CoinPackedMatrix * quadraticRow(int rowNumber, double *linear) const
Gets correct form for a quadratic row - user to delete.
int objectiveVariable_
Objective transfer variable if one.
int numberVariables_
Number of variables in tightening phase.
void setBestSolution(const double *solution, int numberColumns)
Set best solution found internally.
int numberFix_
Number of variables which when fixed help.
double defaultBound_
Default maximum bound.
void setBestObjectiveValue(double value)
Set objective value of best solution found internally.
void setDefaultMeshSize(double value)
void setMeshSizes(double value)
Set all mesh sizes on x-x variables.
int * rowNonLinear_
Row number for a list.
int specialOptions2_
0 bit (1) - call fathom (may do mini B&B) 1 bit (2) - quadratic only in objective (add OA cuts) 2 bit...
int biLinearPriority() const
Get biLinear priority.
int integerPriority_
Priority for integers.
void setDefaultBound(double value)
void addBoundModifier(bool upperBoundAffected, bool useUpperBound, int whichVariable, int whichVariableAffected, double multiplier=1.0)
Add a bound modifier.
void setSpecialOptions2(int value)
Set special options.
double defaultMeshSize() const
Default meshSize.
void sayConvex(bool convex)
Say convex (should work it out) - if convex false then strictly concave.
virtual void resolve()
Resolve an LP relaxation after problem modification.
virtual void initialSolve()
Solve initial LP relaxation.
OsiSolverLink(CoinModel &modelObject)
This creates from a coinModel object.
const double * bestSolution() const
Best solution found internally.
double bestObjectiveValue_
Objective value of best solution found internally.
double linearizedBAB(CglStored *cut)
Solve linearized quadratic objective branch and bound.
Define a single variable class which is involved with OsiBiLinear objects.
void addBiLinearObjects(OsiSolverLink *solver)
Add all bi-linear objects.
virtual OsiObject * clone() const
Clone.
OsiUsesBiLinear(const OsiSimpleInteger &rhs, int type)
Useful constructor - passed simple integer.
virtual OsiBranchingObject * createBranch(OsiSolverInterface *solver, const OsiBranchingInformation *info, int way) const
Creates a branching object.
virtual double feasibleRegion(OsiSolverInterface *solver, const OsiBranchingInformation *info) const
Set bounds to fix the variable at the current value.
OsiUsesBiLinear(const OsiSolverInterface *solver, int iColumn, int type)
Useful constructor - passed solver index.
virtual double infeasibility(const OsiBranchingInformation *info, int &whichWay) const
Infeasibility - large is 0.5.
OsiObject ** objects_
Objects.
OsiUsesBiLinear()
Default Constructor.
int type_
Type of variable - 0 continuous, 1 integer.
OsiUsesBiLinear(int iColumn, double lower, double upper, int type)
Useful constructor - passed solver index and original bounds.
int numberBiLinear_
data Number of bilinear objects (maybe could be more general)
OsiUsesBiLinear & operator=(const OsiUsesBiLinear &rhs)
Assignment operator.
virtual ~OsiUsesBiLinear()
Destructor.
OsiUsesBiLinear(const OsiUsesBiLinear &rhs)
Copy constructor.