00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef CglLandPUtils_H
00013 #define CglLandPUtils_H
00014 #include "CglLandPTabRow.hpp"
00015
00016 class CoinRelFltEq;
00017 class OsiRowCut;
00018 class OsiCuts;
00019 #include <vector>
00020 #include <cmath>
00021
00022 namespace LAP
00023 {
00025 double normCoef(TabRow &row, int ncols, const int * nonBasics);
00027 void scale(OsiRowCut &cut);
00029 void scale(OsiRowCut &cut, double norma);
00031 void modularizeRow(TabRow & row, const bool * integerVar);
00032
00033
00035 inline double intersectionCutCoef(double alpha_i, double beta)
00036 {
00037 if (alpha_i>0) return alpha_i* (1 - beta);
00038 else return -alpha_i * beta;
00039 }
00040
00042 inline double modularizedCoef(double alpha, double beta)
00043 {
00044 double f_i = alpha - floor(alpha);
00045 if (f_i <= beta)
00046 return f_i;
00047 else
00048 return f_i - 1;
00049 }
00050
00052 inline bool int_val(double value, double tol)
00053 {
00054 return fabs( floor( value + 0.5 ) - value ) < tol;
00055 }
00056
00057
00059 struct Cuts
00060 {
00061 Cuts(): numberCuts_(0), cuts_(0)
00062 {
00063 }
00065 int insertAll(OsiCuts & cs, CoinRelFltEq& eq);
00067 ~Cuts() {}
00069 OsiRowCut * rowCut(unsigned int i)
00070 {
00071 return cuts_[i];
00072 }
00074 const OsiRowCut * rowCut(unsigned int i) const
00075 {
00076 return cuts_[i];
00077 }
00079 void insert(int i, OsiRowCut * cut);
00081 int numberCuts()
00082 {
00083 return numberCuts_;
00084 }
00086 void resize(unsigned int i)
00087 {
00088 cuts_.resize(i, reinterpret_cast<OsiRowCut *> (NULL));
00089 }
00090 private:
00092 int numberCuts_;
00094 std::vector<OsiRowCut *> cuts_;
00095 };
00096
00097 }
00098 #endif
00099