- Main Page
- Namespaces
- Classes
- Files
- Directories

- Search for |

- File List
- File Members

# CglLandPUtils.hpp

Go to the documentation of this file.

    00001 // Copyright (C) 2005-2009, Pierre Bonami and others.  All Rights Reserved.
    00002 // Author:   Pierre Bonami
    00003 //           LIF
    00004 //           CNRS, Aix-Marseille Universites
    00005 // Date:     02/23/08
    00006 //
    00007 // $Id$
    00008 //
    00009 // This code is licensed under the terms of the Eclipse Public License (EPL).
    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;// (1 - 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