00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef ClpSimplexPrimalQuadratic_H
00011 #define ClpSimplexPrimalQuadratic_H
00012
00013 class ClpQuadraticInfo;
00014 class ClpQuadraticObjective;
00015
00016 #include "ClpSimplexPrimal.hpp"
00017
00026 class ClpSimplexPrimalQuadratic : public ClpSimplexPrimal {
00027
00028 public:
00029
00040
00041 int primalSLP(int numberPasses, double deltaTolerance);
00047 int primalQuadratic(int phase=2);
00051 int primalQuadratic2 (ClpQuadraticInfo * info,
00052 int phase=2);
00057 ClpSimplexPrimalQuadratic * makeQuadratic(ClpQuadraticInfo & info);
00058
00060 int endQuadratic(ClpSimplexPrimalQuadratic * quadraticModel,
00061 ClpQuadraticInfo & info);
00063 int checkComplementarity (ClpQuadraticInfo * info,
00064 CoinIndexedVector * array1, CoinIndexedVector * array2);
00066 void createDjs (ClpQuadraticInfo * info,
00067 CoinIndexedVector * array1, CoinIndexedVector * array2);
00071 int whileIterating (ClpQuadraticInfo * info);
00084 int primalRow(CoinIndexedVector * rowArray,
00085 CoinIndexedVector * rhsArray,
00086 CoinIndexedVector * spareArray,
00087 CoinIndexedVector * spareArray2,
00088 ClpQuadraticInfo * info,
00089 int cleanupIteration);
00099 void statusOfProblemInPrimal(int & lastCleaned, int type,
00100 ClpSimplexProgress * progress,
00101 ClpQuadraticInfo * info);
00103
00104 };
00105
00110 class ClpQuadraticInfo {
00111
00112 public:
00113
00114 public:
00115
00118
00119 ClpQuadraticInfo();
00122 ClpQuadraticInfo(const ClpSimplex * model);
00124 ~ClpQuadraticInfo();
00125
00126 ClpQuadraticInfo(const ClpQuadraticInfo&);
00127
00128 ClpQuadraticInfo& operator=(const ClpQuadraticInfo&);
00130
00131
00134
00135 inline int numberXColumns() const
00136 {return numberXColumns_;};
00138 inline int numberQuadraticColumns() const
00139 {return numberQuadraticColumns_;};
00141 inline int numberXRows() const
00142 {return numberXRows_;};
00144 inline int numberQuadraticRows() const
00145 {return numberQuadraticRows_;};
00147 inline int sequenceIn() const
00148 {return currentSequenceIn_;};
00149 inline void setSequenceIn(int sequence)
00150 {currentSequenceIn_=sequence;};
00152 inline int crucialSj() const
00153 {return crucialSj_;};
00154 inline void setCrucialSj(int sequence)
00155 {crucialSj_=sequence;};
00157 inline int currentPhase() const
00158 {return currentPhase_;};
00159 inline void setCurrentPhase(int phase)
00160 {currentPhase_=phase;};
00162 inline const double * currentSolution() const
00163 {return currentSolution_;};
00164 void setCurrentSolution(const double * solution);
00166 inline ClpQuadraticObjective * originalObjective() const
00167 { return originalObjective_;};
00168 inline void setOriginalObjective( ClpQuadraticObjective * obj)
00169 { originalObjective_ = obj;};
00171 CoinPackedMatrix * quadraticObjective() const;
00173 double * linearObjective() const;
00175 void saveStatus();
00177 void restoreStatus();
00179 inline double * djWeight() const
00180 { return djWeight_;};
00182 void createGradient(ClpSimplex * model);
00184 inline double * gradient() const
00185 { return gradient_;};
00187 inline double infeasCost() const
00188 { return infeasCost_;};
00189 inline void setInfeasCost(double value)
00190 { infeasCost_ = value;};
00192 inline int * basicRow() const
00193 { return basicRow_;};
00195 inline int * impliedSj() const
00196 { return impliedSj_;};
00198
00199 private:
00202
00203 ClpQuadraticObjective * originalObjective_;
00205 int * basicRow_;
00207 int * impliedSj_;
00209 int currentSequenceIn_;
00211 int crucialSj_;
00213 int validSequenceIn_;
00215 int validCrucialSj_;
00217 int currentPhase_;
00219 double * currentSolution_;
00221 int validPhase_;
00223 double * validSolution_;
00225 double * djWeight_;
00227 double * gradient_;
00229 int numberXRows_;
00231 int numberXColumns_;
00233 int numberQuadraticColumns_;
00235 int numberQuadraticRows_;
00237 double infeasCost_;
00239 };
00240 #endif
00241