00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef ClpSolve_H
00011 #define ClpSolve_H
00012
00019 class ClpSolve {
00020
00021 public:
00022
00024 enum SolveType {
00025 useDual=0,
00026 usePrimal,
00027 usePrimalorSprint,
00028 useBarrier,
00029 useBarrierNoCross,
00030 automatic,
00031 notImplemented
00032 };
00033 enum PresolveType {
00034 presolveOn=0,
00035 presolveOff,
00036 presolveNumber,
00037 presolveNumberCost
00038 };
00039
00042
00043 ClpSolve ( );
00045 ClpSolve ( SolveType method, PresolveType presolveType,
00046 int numberPasses, int options[6],
00047 int extraInfo[6], int independentOptions[3]);
00049 void generateCpp(FILE * fp);
00051 ClpSolve(const ClpSolve &);
00053 ClpSolve & operator=(const ClpSolve & rhs);
00055 ~ClpSolve ( );
00057
00102 void setSpecialOption(int which,int value,int extraInfo=-1);
00103 int getSpecialOption(int which) const;
00104
00106 void setSolveType(SolveType method, int extraInfo=-1);
00107 SolveType getSolveType();
00108
00109
00110 void setPresolveType(PresolveType amount, int extraInfo=-1);
00111 PresolveType getPresolveType();
00112 int getPresolvePasses() const;
00114 int getExtraInfo(int which) const;
00117 void setInfeasibleReturn(bool trueFalse);
00118 inline bool infeasibleReturn() const
00119 { return independentOptions_[0]!=0;};
00121 inline bool doDual() const
00122 { return (independentOptions_[1]&1)==0;};
00123 inline void setDoDual(bool doDual)
00124 { if (doDual) independentOptions_[1] &= ~1; else independentOptions_[1] |= 1;};
00126 inline bool doSingleton() const
00127 { return (independentOptions_[1]&2)==0;};
00128 inline void setDoSingleton(bool doSingleton)
00129 { if (doSingleton) independentOptions_[1] &= ~2; else independentOptions_[1] |= 2;};
00131 inline bool doDoubleton() const
00132 { return (independentOptions_[1]&4)==0;};
00133 inline void setDoDoubleton(bool doDoubleton)
00134 { if (doDoubleton) independentOptions_[1] &= ~4; else independentOptions_[1] |= 4;};
00136 inline bool doTripleton() const
00137 { return (independentOptions_[1]&8)==0;};
00138 inline void setDoTripleton(bool doTripleton)
00139 { if (doTripleton) independentOptions_[1] &= ~8; else independentOptions_[1] |= 8;};
00141 inline bool doTighten() const
00142 { return (independentOptions_[1]&16)==0;};
00143 inline void setDoTighten(bool doTighten)
00144 { if (doTighten) independentOptions_[1] &= ~16; else independentOptions_[1] |= 16;};
00146 inline bool doForcing() const
00147 { return (independentOptions_[1]&32)==0;};
00148 inline void setDoForcing(bool doForcing)
00149 { if (doForcing) independentOptions_[1] &= ~32; else independentOptions_[1] |= 32;};
00151 inline bool doImpliedFree() const
00152 { return (independentOptions_[1]&64)==0;};
00153 inline void setDoImpliedFree(bool doImpliedfree)
00154 { if (doImpliedfree) independentOptions_[1] &= ~64; else independentOptions_[1] |= 64;};
00156 inline bool doDupcol() const
00157 { return (independentOptions_[1]&128)==0;};
00158 inline void setDoDupcol(bool doDupcol)
00159 { if (doDupcol) independentOptions_[1] &= ~128; else independentOptions_[1] |= 128;};
00161 inline bool doDuprow() const
00162 { return (independentOptions_[1]&256)==0;};
00163 inline void setDoDuprow(bool doDuprow)
00164 { if (doDuprow) independentOptions_[1] &= ~256; else independentOptions_[1] |= 256;};
00166 inline bool doSingletonColumn() const
00167 { return (independentOptions_[1]&512)==0;};
00168 inline void setDoSingletonColumn(bool doSingleton)
00169 { if (doSingleton) independentOptions_[1] &= ~512; else independentOptions_[1] |= 512;};
00171 inline int presolveActions() const
00172 { return independentOptions_[1]&0xffff;};
00173 inline void setPresolveActions(int action)
00174 { independentOptions_[1] = (independentOptions_[1]&0xffff0000)|(action&0xffff);};
00176 inline int substitution() const
00177 { return independentOptions_[2];};
00178 inline void setSubstitution(int value)
00179 { independentOptions_[2] = value;};
00181
00183 private:
00184
00188
00189 SolveType method_;
00191 PresolveType presolveType_;
00193 int numberPasses_;
00195 int options_[6];
00197 int extraInfo_[6];
00203 int independentOptions_[3];
00205 };
00206 #endif