00001
00002
00003 #ifndef CglLinked_H
00004 #define CglLinked_H
00005
00006
00007
00008
00009
00010 #include "CoinModel.hpp"
00011 #include "OsiClpSolverInterface.hpp"
00012 #include "OsiChooseVariable.hpp"
00013 #include "CbcFathom.hpp"
00014 class CbcModel;
00015 class CoinPackedMatrix;
00016 class OsiLinkedBound;
00017 class OsiObject;
00018 class CglStored;
00019 class CglTemporary;
00026 class OsiSolverLink : public CbcOsiSolver {
00027
00028 public:
00029
00032
00033 virtual void initialSolve();
00034
00036 virtual void resolve();
00037
00045 virtual int fathom(bool allFixed) ;
00052 double * nonlinearSLP(int numberPasses,double deltaTolerance);
00056 double linearizedBAB(CglStored * cut) ;
00065 double * heuristicSolution(int numberPasses,double deltaTolerance,int mode);
00066
00068 int doAOCuts(CglTemporary * cutGen, const double * solution, const double * solution2);
00070
00071
00074
00075 OsiSolverLink ();
00076
00089 OsiSolverLink( CoinModel & modelObject);
00090
00091 void load( CoinModel & modelObject,bool tightenBounds=false,int logLevel=1);
00093 virtual OsiSolverInterface * clone(bool copyData=true) const;
00094
00096 OsiSolverLink (const OsiSolverLink &);
00097
00099 OsiSolverLink & operator=(const OsiSolverLink& rhs);
00100
00102 virtual ~OsiSolverLink ();
00103
00105
00106
00109
00110 void addBoundModifier(bool upperBoundAffected, bool useUpperBound, int whichVariable, int whichVariableAffected,
00111 double multiplier=1.0);
00113 int updateCoefficients(ClpSimplex * solver, CoinPackedMatrix * matrix);
00115 void analyzeObjects();
00117 void addTighterConstraints();
00119 inline double bestObjectiveValue() const
00120 { return bestObjectiveValue_;}
00122 inline void setBestObjectiveValue(double value)
00123 { bestObjectiveValue_ = value;}
00125 inline const double * bestSolution() const
00126 { return bestSolution_;}
00128 void setBestSolution(const double * solution, int numberColumns);
00130 inline void setSpecialOptions2(int value)
00131 { specialOptions2_=value;}
00133 void sayConvex(bool convex);
00135 inline int specialOptions2() const
00136 { return specialOptions2_;}
00140 CoinPackedMatrix * cleanMatrix() const
00141 { return matrix_;}
00146 CoinPackedMatrix * originalRowCopy() const
00147 { return originalRowCopy_;}
00149 ClpSimplex * quadraticModel() const
00150 { return quadraticModel_;}
00152 CoinPackedMatrix * quadraticRow(int rowNumber,double * linear) const;
00154 inline double defaultMeshSize() const
00155 { return defaultMeshSize_;}
00156 inline void setDefaultMeshSize(double value)
00157 { defaultMeshSize_=value;}
00159 inline double defaultBound() const
00160 { return defaultBound_;}
00161 inline void setDefaultBound(double value)
00162 { defaultBound_=value;}
00164 inline void setIntegerPriority(int value)
00165 { integerPriority_=value;}
00167 inline int integerPriority() const
00168 { return integerPriority_;}
00170 inline int objectiveVariable() const
00171 { return objectiveVariable_;}
00173 inline void setBiLinearPriority(int value)
00174 { biLinearPriority_=value;}
00176 inline int biLinearPriority() const
00177 { return biLinearPriority_;}
00179 inline const CoinModel * coinModel() const
00180 { return &coinModel_;}
00182 void setBiLinearPriorities(int value, double meshSize=1.0);
00190 void setBranchingStrategyOnVariables(int strategyValue, int priorityValue=-1,
00191 int mode=7);
00193 void setMeshSizes(double value);
00197 void setFixedPriority(int priorityValue);
00199
00200
00201
00202 protected:
00203
00204
00207
00208
00210 void gutsOfDestructor(bool justNullify=false);
00212 void gutsOfCopy(const OsiSolverLink & rhs) ;
00214
00220 CoinPackedMatrix * matrix_;
00224 CoinPackedMatrix * originalRowCopy_;
00226 ClpSimplex * quadraticModel_;
00228 int numberNonLinearRows_;
00230 int * startNonLinear_;
00232 int * rowNonLinear_;
00236 int * convex_;
00238 int * whichNonLinear_;
00240 CoinModel coinModel_;
00242 int numberVariables_;
00244 OsiLinkedBound * info_;
00252 int specialOptions2_;
00254 int objectiveRow_;
00256 int objectiveVariable_;
00258 double bestObjectiveValue_;
00260 double defaultMeshSize_;
00262 double defaultBound_;
00264 double * bestSolution_;
00266 int integerPriority_;
00268 int biLinearPriority_;
00270 int numberFix_;
00272 int * fixVariables_;
00274 };
00279 class OsiLinkedBound {
00280
00281 public:
00282
00285
00286 void updateBounds(ClpSimplex * solver);
00288
00289
00292
00293 OsiLinkedBound ();
00295 OsiLinkedBound(OsiSolverInterface * model, int variable,
00296 int numberAffected, const int * positionL,
00297 const int * positionU, const double * multiplier);
00298
00300 OsiLinkedBound (const OsiLinkedBound &);
00301
00303 OsiLinkedBound & operator=(const OsiLinkedBound& rhs);
00304
00306 ~OsiLinkedBound ();
00307
00309
00312
00313 inline int variable() const
00314 { return variable_;}
00316 void addBoundModifier(bool upperBoundAffected, bool useUpperBound, int whichVariable,
00317 double multiplier=1.0);
00319
00320 private:
00321 typedef struct {
00322
00323
00324
00325
00326
00327 unsigned int affect:2;
00328 unsigned int ubUsed:1;
00329
00330
00331
00332
00333
00334 unsigned int type:4;
00335 unsigned int affected:25;
00336 double multiplier;
00337 } boundElementAction;
00338
00341
00342 OsiSolverInterface * model_;
00344 int variable_;
00346 int numberAffected_;
00348 int maximumAffected_;
00350 boundElementAction * affected_;
00352 };
00353 #include "CbcHeuristic.hpp"
00357 class CbcHeuristicDynamic3 : public CbcHeuristic {
00358 public:
00359
00360
00361 CbcHeuristicDynamic3 ();
00362
00363
00364
00365 CbcHeuristicDynamic3 (CbcModel & model);
00366
00367
00368 CbcHeuristicDynamic3 ( const CbcHeuristicDynamic3 &);
00369
00370
00371 ~CbcHeuristicDynamic3 ();
00372
00374 virtual CbcHeuristic * clone() const;
00375
00377 virtual void setModel(CbcModel * model);
00378
00379 using CbcHeuristic::solution ;
00390 virtual int solution(double & objectiveValue,
00391 double * newSolution);
00393 virtual void resetModel(CbcModel * model);
00395 virtual bool canDealWithOdd() const
00396 { return true;}
00397
00398 protected:
00399 private:
00401 CbcHeuristicDynamic3 & operator=(const CbcHeuristicDynamic3& rhs);
00402 };
00403
00404 #include "OsiBranchingObject.hpp"
00405
00409 class CoinWarmStartBasis;
00410
00411 class OsiOldLink : public OsiSOS {
00412
00413 public:
00414
00415
00416 OsiOldLink ();
00417
00424 OsiOldLink (const OsiSolverInterface * solver, int numberMembers,
00425 int numberLinks, int first,
00426 const double * weights, int setNumber);
00433 OsiOldLink (const OsiSolverInterface * solver, int numberMembers,
00434 int numberLinks, int typeSOS, const int * which,
00435 const double * weights, int setNumber);
00436
00437
00438 OsiOldLink ( const OsiOldLink &);
00439
00441 virtual OsiObject * clone() const;
00442
00443
00444 OsiOldLink & operator=( const OsiOldLink& rhs);
00445
00446
00447 virtual ~OsiOldLink ();
00448
00449 using OsiObject::infeasibility ;
00451 virtual double infeasibility(const OsiBranchingInformation * info,int & whichWay) const;
00452
00453 using OsiObject::feasibleRegion ;
00459 virtual double feasibleRegion(OsiSolverInterface * solver, const OsiBranchingInformation * info) const;
00460
00465 virtual OsiBranchingObject * createBranch(OsiSolverInterface * solver, const OsiBranchingInformation * info, int way) const;
00466
00468 virtual void resetSequenceEtc(int numberColumns, const int * originalColumns);
00469
00471 inline int numberLinks() const
00472 {return numberLinks_;}
00473
00476 virtual bool canDoHeuristics() const
00477 {return false;}
00480 virtual bool boundBranch() const
00481 {return false;}
00482
00483 private:
00485
00487 int numberLinks_;
00488 };
00492 class OsiOldLinkBranchingObject : public OsiSOSBranchingObject {
00493
00494 public:
00495
00496
00497 OsiOldLinkBranchingObject ();
00498
00499
00500 OsiOldLinkBranchingObject (OsiSolverInterface * solver, const OsiOldLink * originalObject,
00501 int way,
00502 double separator);
00503
00504
00505 OsiOldLinkBranchingObject ( const OsiOldLinkBranchingObject &);
00506
00507
00508 OsiOldLinkBranchingObject & operator=( const OsiOldLinkBranchingObject& rhs);
00509
00511 virtual OsiBranchingObject * clone() const;
00512
00513
00514 virtual ~OsiOldLinkBranchingObject ();
00515
00516 using OsiBranchingObject::branch ;
00518 virtual double branch(OsiSolverInterface * solver);
00519
00520 using OsiBranchingObject::print ;
00523 virtual void print(const OsiSolverInterface * solver=NULL);
00524 private:
00526 };
00532 class OsiOneLink {
00533
00534 public:
00535
00536
00537 OsiOneLink ();
00538
00542 OsiOneLink (const OsiSolverInterface * solver, int xRow, int xColumn, int xyRow,
00543 const char * functionString);
00544
00545
00546 OsiOneLink ( const OsiOneLink &);
00547
00548
00549 OsiOneLink & operator=( const OsiOneLink& rhs);
00550
00551
00552 virtual ~OsiOneLink ();
00553
00555
00557 int xRow_;
00559 int xColumn_;
00561 int xyRow;
00563 std::string function_;
00564 };
00574 class OsiLink : public OsiSOS {
00575
00576 public:
00577
00578
00579 OsiLink ();
00580
00584 OsiLink (const OsiSolverInterface * solver, int yRow,
00585 int yColumn, double meshSize);
00586
00587
00588 OsiLink ( const OsiLink &);
00589
00591 virtual OsiObject * clone() const;
00592
00593
00594 OsiLink & operator=( const OsiLink& rhs);
00595
00596
00597 virtual ~OsiLink ();
00598
00599 using OsiObject::infeasibility ;
00601 virtual double infeasibility(const OsiBranchingInformation * info,int & whichWay) const;
00602
00603 using OsiObject::feasibleRegion ;
00609 virtual double feasibleRegion(OsiSolverInterface * solver, const OsiBranchingInformation * info) const;
00610
00615 virtual OsiBranchingObject * createBranch(OsiSolverInterface * solver, const OsiBranchingInformation * info, int way) const;
00616
00618 virtual void resetSequenceEtc(int numberColumns, const int * originalColumns);
00619
00621 inline int numberLinks() const
00622 {return numberLinks_;}
00623
00626 virtual bool canDoHeuristics() const
00627 {return false;}
00630 virtual bool boundBranch() const
00631 {return false;}
00632
00633 private:
00636 double meshSize_;
00638 OsiOneLink * data_;
00640 int numberLinks_;
00642 int yRow_;
00644 int yColumn_;
00645 };
00649 class OsiLinkBranchingObject : public OsiTwoWayBranchingObject {
00650
00651 public:
00652
00653
00654 OsiLinkBranchingObject ();
00655
00656
00657 OsiLinkBranchingObject (OsiSolverInterface * solver, const OsiLink * originalObject,
00658 int way,
00659 double separator);
00660
00661
00662 OsiLinkBranchingObject ( const OsiLinkBranchingObject &);
00663
00664
00665 OsiLinkBranchingObject & operator=( const OsiLinkBranchingObject& rhs);
00666
00668 virtual OsiBranchingObject * clone() const;
00669
00670
00671 virtual ~OsiLinkBranchingObject ();
00672
00673 using OsiBranchingObject::branch ;
00675 virtual double branch(OsiSolverInterface * solver);
00676
00677 using OsiBranchingObject::print ;
00680 virtual void print(const OsiSolverInterface * solver=NULL);
00681 private:
00683 };
00691 class OsiBiLinear : public OsiObject2 {
00692
00693 public:
00694
00695
00696 OsiBiLinear ();
00697
00703 OsiBiLinear (OsiSolverInterface * solver, int xColumn,
00704 int yColumn, int xyRow, double coefficient,
00705 double xMesh, double yMesh,
00706 int numberExistingObjects=0,const OsiObject ** objects=NULL );
00707
00713 OsiBiLinear (CoinModel * coinModel, int xColumn,
00714 int yColumn, int xyRow, double coefficient,
00715 double xMesh, double yMesh,
00716 int numberExistingObjects=0,const OsiObject ** objects=NULL );
00717
00718
00719 OsiBiLinear ( const OsiBiLinear &);
00720
00722 virtual OsiObject * clone() const;
00723
00724
00725 OsiBiLinear & operator=( const OsiBiLinear& rhs);
00726
00727
00728 virtual ~OsiBiLinear ();
00729
00730 using OsiObject::infeasibility ;
00732 virtual double infeasibility(const OsiBranchingInformation * info,int & whichWay) const;
00733
00734 using OsiObject::feasibleRegion ;
00740 virtual double feasibleRegion(OsiSolverInterface * solver, const OsiBranchingInformation * info) const;
00741
00746 virtual OsiBranchingObject * createBranch(OsiSolverInterface * solver, const OsiBranchingInformation * info, int way) const;
00747
00749 virtual void resetSequenceEtc(int numberColumns, const int * originalColumns);
00750
00751
00752 virtual double checkInfeasibility(const OsiBranchingInformation * info) const;
00753
00756 virtual bool canDoHeuristics() const
00757 {return false;}
00760 virtual bool boundBranch() const
00761 { return (branchingStrategy_&4)!=0;}
00763 inline int xColumn() const
00764 { return xColumn_;}
00766 inline int yColumn() const
00767 { return yColumn_;}
00769 inline int xRow() const
00770 { return xRow_;}
00772 inline int yRow() const
00773 { return yRow_;}
00775 inline int xyRow() const
00776 { return xyRow_;}
00778 inline double coefficient() const
00779 { return coefficient_;}
00781 inline void setCoefficient(double value)
00782 { coefficient_ = value;}
00784 inline int firstLambda() const
00785 { return firstLambda_;}
00787 inline double xSatisfied() const
00788 { return xSatisfied_;}
00789 inline void setXSatisfied(double value)
00790 { xSatisfied_=value;}
00792 inline double ySatisfied() const
00793 { return ySatisfied_;}
00794 inline void setYSatisfied(double value)
00795 { ySatisfied_=value;}
00797 inline double xOtherSatisfied() const
00798 { return xOtherSatisfied_;}
00799 inline void setXOtherSatisfied(double value)
00800 { xOtherSatisfied_=value;}
00802 inline double yOtherSatisfied() const
00803 { return yOtherSatisfied_;}
00804 inline void setYOtherSatisfied(double value)
00805 { yOtherSatisfied_=value;}
00807 inline double xMeshSize() const
00808 { return xMeshSize_;}
00809 inline void setXMeshSize(double value)
00810 { xMeshSize_=value;}
00812 inline double yMeshSize() const
00813 { return yMeshSize_;}
00814 inline void setYMeshSize(double value)
00815 { yMeshSize_=value;}
00817 inline double xySatisfied() const
00818 { return xySatisfied_;}
00819 inline void setXYSatisfied(double value)
00820 { xySatisfied_=value;}
00822 void setMeshSizes(const OsiSolverInterface * solver, double x, double y);
00833 inline int branchingStrategy() const
00834 { return branchingStrategy_;}
00835 inline void setBranchingStrategy(int value)
00836 { branchingStrategy_=value;}
00844 inline int boundType() const
00845 { return boundType_;}
00846 inline void setBoundType(int value)
00847 { boundType_ = value;}
00849 void newBounds(OsiSolverInterface * solver, int way, short xOrY, double separator) const;
00851 int updateCoefficients(const double * lower, const double * upper, double * objective,
00852 CoinPackedMatrix * matrix, CoinWarmStartBasis * basis) const;
00854 double xyCoefficient(const double * solution) const;
00856 void getCoefficients(const OsiSolverInterface * solver,double xB[2], double yB[2], double xybar[4]) const;
00858 double computeLambdas(const double xB[3], const double yB[3],const double xybar[4],double lambda[4]) const;
00860 void addExtraRow(int row, double multiplier);
00862 void getPseudoShadow(const OsiBranchingInformation * info);
00864 double getMovement(const OsiBranchingInformation * info);
00865
00866 protected:
00868 void computeLambdas(const OsiSolverInterface * solver,double lambda[4]) const;
00870
00872 double coefficient_;
00874 double xMeshSize_;
00876 double yMeshSize_;
00878 double xSatisfied_;
00880 double ySatisfied_;
00882 double xOtherSatisfied_;
00884 double yOtherSatisfied_;
00886 double xySatisfied_;
00888 mutable double xyBranchValue_;
00890 int xColumn_;
00892 int yColumn_;
00894 int firstLambda_;
00905 int branchingStrategy_;
00913 int boundType_;
00915 int xRow_;
00917 int yRow_;
00919 int xyRow_;
00921 int convexity_;
00923 int numberExtraRows_;
00925 double * multiplier_;
00927 int * extraRow_;
00929 mutable short chosen_;
00930 };
00934 class OsiBiLinearBranchingObject : public OsiTwoWayBranchingObject {
00935
00936 public:
00937
00938
00939 OsiBiLinearBranchingObject ();
00940
00941
00942 OsiBiLinearBranchingObject (OsiSolverInterface * solver, const OsiBiLinear * originalObject,
00943 int way,
00944 double separator, int chosen);
00945
00946
00947 OsiBiLinearBranchingObject ( const OsiBiLinearBranchingObject &);
00948
00949
00950 OsiBiLinearBranchingObject & operator=( const OsiBiLinearBranchingObject& rhs);
00951
00953 virtual OsiBranchingObject * clone() const;
00954
00955
00956 virtual ~OsiBiLinearBranchingObject ();
00957
00958 using OsiBranchingObject::branch ;
00960 virtual double branch(OsiSolverInterface * solver);
00961
00962 using OsiBranchingObject::print ;
00965 virtual void print(const OsiSolverInterface * solver=NULL);
00968 virtual bool boundBranch() const;
00969 private:
00972 short chosen_;
00973 };
00981 class OsiBiLinearEquality : public OsiBiLinear {
00982
00983 public:
00984
00985
00986 OsiBiLinearEquality ();
00987
00993 OsiBiLinearEquality (OsiSolverInterface * solver, int xColumn,
00994 int yColumn, int xyRow, double rhs,
00995 double xMesh);
00996
00997
00998 OsiBiLinearEquality ( const OsiBiLinearEquality &);
00999
01001 virtual OsiObject * clone() const;
01002
01003
01004 OsiBiLinearEquality & operator=( const OsiBiLinearEquality& rhs);
01005
01006
01007 virtual ~OsiBiLinearEquality ();
01008
01010 virtual double improvement(const OsiSolverInterface * solver) const;
01016 double newGrid(OsiSolverInterface * solver, int type) const;
01018 inline int numberPoints() const
01019 { return numberPoints_;}
01020 inline void setNumberPoints(int value)
01021 { numberPoints_ = value;}
01022
01023 private:
01025 int numberPoints_;
01026 };
01028
01029
01030 class OsiSimpleFixedInteger : public OsiSimpleInteger {
01031
01032 public:
01033
01035 OsiSimpleFixedInteger ();
01036
01038 OsiSimpleFixedInteger (const OsiSolverInterface * solver, int iColumn);
01039
01041 OsiSimpleFixedInteger (int iColumn, double lower, double upper);
01042
01044 OsiSimpleFixedInteger (const OsiSimpleInteger &);
01045
01047 OsiSimpleFixedInteger ( const OsiSimpleFixedInteger &);
01048
01050 virtual OsiObject * clone() const;
01051
01053 OsiSimpleFixedInteger & operator=( const OsiSimpleFixedInteger& rhs);
01054
01056 virtual ~OsiSimpleFixedInteger ();
01057
01058 using OsiObject::infeasibility ;
01060 virtual double infeasibility(const OsiBranchingInformation * info, int & whichWay) const;
01061
01066 virtual OsiBranchingObject * createBranch(OsiSolverInterface * solver, const OsiBranchingInformation * info, int way) const;
01067 protected:
01069
01070 };
01080 class OsiUsesBiLinear : public OsiSimpleInteger {
01081
01082 public:
01083
01085 OsiUsesBiLinear ();
01086
01088 OsiUsesBiLinear (const OsiSolverInterface * solver, int iColumn, int type);
01089
01091 OsiUsesBiLinear (int iColumn, double lower, double upper, int type);
01092
01094 OsiUsesBiLinear (const OsiSimpleInteger & rhs, int type);
01095
01097 OsiUsesBiLinear ( const OsiUsesBiLinear & rhs);
01098
01100 virtual OsiObject * clone() const;
01101
01103 OsiUsesBiLinear & operator=( const OsiUsesBiLinear& rhs);
01104
01106 virtual ~OsiUsesBiLinear ();
01107
01108 using OsiObject::infeasibility ;
01110 virtual double infeasibility(const OsiBranchingInformation * info, int & whichWay) const;
01111
01116 virtual OsiBranchingObject * createBranch(OsiSolverInterface * solver, const OsiBranchingInformation * info, int way) const;
01117
01118 using OsiObject::feasibleRegion ;
01124 virtual double feasibleRegion(OsiSolverInterface * solver, const OsiBranchingInformation * info) const;
01125
01127 void addBiLinearObjects(OsiSolverLink * solver);
01128 protected:
01131 int numberBiLinear_;
01133 int type_;
01135 OsiObject ** objects_;
01136 };
01144 class OsiChooseStrongSubset : public OsiChooseStrong {
01145
01146 public:
01147
01149 OsiChooseStrongSubset ();
01150
01152 OsiChooseStrongSubset (const OsiSolverInterface * solver);
01153
01155 OsiChooseStrongSubset (const OsiChooseStrongSubset &);
01156
01158 OsiChooseStrongSubset & operator= (const OsiChooseStrongSubset& rhs);
01159
01161 virtual OsiChooseVariable * clone() const;
01162
01164 virtual ~OsiChooseStrongSubset ();
01165
01170 virtual int setupList ( OsiBranchingInformation *info, bool initialize);
01184 virtual int chooseVariable( OsiSolverInterface * solver, OsiBranchingInformation *info, bool fixVariables);
01185
01187 inline int numberObjectsToUse() const
01188 { return numberObjectsToUse_;}
01190 inline void setNumberObjectsToUse(int value)
01191 { numberObjectsToUse_ = value;}
01192
01193 protected:
01194
01196 int numberObjectsToUse_;
01197 };
01198
01199 #include <string>
01200
01201 #include "CglStored.hpp"
01202
01203 class CoinWarmStartBasis;
01205 class CglTemporary : public CglStored {
01206
01207 public:
01208
01209
01220 virtual void generateCuts( const OsiSolverInterface & si, OsiCuts & cs,
01221 const CglTreeInfo info = CglTreeInfo()) const;
01223
01226
01227 CglTemporary ();
01228
01230 CglTemporary (const CglTemporary & rhs);
01231
01233 virtual CglCutGenerator * clone() const;
01234
01236 CglTemporary &
01237 operator=(const CglTemporary& rhs);
01238
01240 virtual
01241 ~CglTemporary ();
01243
01244 private:
01245
01246
01247
01248
01249 };
01250
01251
01257 class OsiSolverLinearizedQuadratic : public OsiClpSolverInterface {
01258
01259 public:
01260
01263
01264 virtual void initialSolve();
01266
01267
01270
01271 OsiSolverLinearizedQuadratic ();
01273 OsiSolverLinearizedQuadratic( ClpSimplex * quadraticModel);
01275 virtual OsiSolverInterface * clone(bool copyData=true) const;
01276
01278 OsiSolverLinearizedQuadratic (const OsiSolverLinearizedQuadratic &);
01279
01281 OsiSolverLinearizedQuadratic & operator=(const OsiSolverLinearizedQuadratic& rhs);
01282
01284 virtual ~OsiSolverLinearizedQuadratic ();
01285
01287
01288
01291
01292 inline double bestObjectiveValue() const
01293 { return bestObjectiveValue_;}
01295 const double * bestSolution() const
01296 { return bestSolution_;}
01298 inline void setSpecialOptions3(int value)
01299 { specialOptions3_=value;}
01301 inline int specialOptions3() const
01302 { return specialOptions3_;}
01304 ClpSimplex * quadraticModel() const
01305 { return quadraticModel_;}
01307
01308
01309
01310 protected:
01311
01312
01315
01318
01319 double bestObjectiveValue_;
01321 ClpSimplex * quadraticModel_;
01323 double * bestSolution_;
01328 int specialOptions3_;
01330 };
01331 class ClpSimplex;
01336 ClpSimplex * approximateSolution(CoinModel & coinModel,
01337 int numberPasses, double deltaTolerance,
01338 int mode=0);
01339 #endif