Go to the documentation of this file.
6 #ifndef CglKnapsackCover_H
7 #define CglKnapsackCover_H
17 const std::string mpdDir );
28 virtual void generateCuts(
const OsiSolverInterface & si, OsiCuts & cs,
89 const OsiSolverInterface & si,
91 CoinPackedVector & krow,
99 const double * element);
102 const OsiSolverInterface & si,
104 CoinPackedVector & krow,
109 const CoinPackedVectorBase & matrixRow);
119 CoinPackedVector & krow,
122 CoinPackedVector & cover,
123 CoinPackedVector & remainder);
131 CoinPackedVector & krow,
134 CoinPackedVector & cover,
135 CoinPackedVector & remainder);
140 CoinPackedVector & krow,
143 CoinPackedVector & cover,
144 CoinPackedVector & remainder
151 CoinPackedVector & cover,
152 CoinPackedVector & remainder,
153 CoinPackedVector &
cut );
158 CoinPackedVector & krow,
162 CoinPackedVector & cover,
163 CoinPackedVector & remainder,
174 CoinPackedVector & cover,
175 CoinPackedVector & remainder,
188 CoinPackedVector & fracCover,
190 CoinPackedVector & atOne,
192 CoinPackedVector & remainder,
198 CoinPackedVector & krow,
201 CoinPackedVector & cover,
202 CoinPackedVector & remainder);
207 CoinPackedVector & krow,
210 CoinPackedVector & fracCover,
211 CoinPackedVector & atOnes,
212 CoinPackedVector & remainder);
238 int minimumSize=2,
int maximumSize=100,
bool extendCliques=
false);
308 const std::string mpdDir );
void switchOnExpensive()
Switch on expensive cuts.
friend void CglKnapsackCoverUnitTest(const OsiSolverInterface *siP, const std::string mpdDir)
A function that tests the methods in the CglKnapsackCover class.
int createCliques(OsiSolverInterface &si, int minimumSize=2, int maximumSize=100, bool extendCliques=false)
Creates cliques for use by probing.
Information about where the cut generator is invoked from.
int * endFixStart_
End of fixes for a column.
int numberCliques_
Number of cliques.
int getMaxInKnapsack() const
get limit on number in knapsack
double epsilon2_
Tolerance to use for violation - bigger than epsilon_.
int liftCoverCut(double &b, int nRowElem, CoinPackedVector &cover, CoinPackedVector &remainder, CoinPackedVector &cut)
lift the cover inequality
int findJohnAndEllisCover(int row, CoinPackedVector &krow, double &b, double *xstar, CoinPackedVector &fracCover, CoinPackedVector &atOnes, CoinPackedVector &remainder)
find a cover using the basic logic found in OSL (w/o SOS)
int numberColumns_
Number of columns.
void CglKnapsackCoverUnitTest(const OsiSolverInterface *siP, const std::string mpdDir)
A function that tests the methods in the CglKnapsackCover class.
int * cliqueStart_
Start of each clique.
void setMaxInKnapsack(int value)
Set limit on number in knapsack.
virtual void generateCuts(const OsiSolverInterface &si, OsiCuts &cs, const CglTreeInfo info=CglTreeInfo())
Generate knapsack cover cuts for the model of the solver interface, si.
Knapsack Cover Cut Generator Class.
int exactSolveKnapsack(int n, double c, double const *pp, double const *ww, double &z, int *x)
A C-style implementation of the Horowitz-Sahni exact solution procedure for solving knapsack problem.
virtual std::string generateCpp(FILE *fp)
Create C++ lines to get to current state.
int * whichClique_
Clique numbers for one or zero fixes.
int * oneFixStart_
Start of oneFixes cliques for a column in matrix or -1 if not in any clique.
Cut Generator Base Class.
int deriveAKnapsack(const OsiSolverInterface &si, OsiCuts &cs, CoinPackedVector &krow, bool treatAsLRow, double &b, int *complement, double *xstar, int rowIndex, int numberElements, const int *index, const double *element)
deriveAKnapsack returns 1 if it is able to derive a (canonical) knapsack inequality in binary variabl...
int numRowsToCheck_
which rows to look at.
void liftUpDownAndUncomplementAndAdd(int nCols, double *xstar, int *complement, int row, int nRowElem, double &b, CoinPackedVector &fracCover, CoinPackedVector &atOne, CoinPackedVector &remainder, OsiCuts &cs)
sequence-dependent lift binary variables either up or down, uncomplement and add to the cut set
void seqLiftAndUncomplementAndAdd(int nCols, double *xstar, int *complement, int row, int nRowElem, double &b, CoinPackedVector &cover, CoinPackedVector &remainder, OsiCuts &cs)
sequence-dependent lift, uncomplement and add the resulting cut to the cut set
virtual void refreshSolver(OsiSolverInterface *solver)
This can be used to refresh any information.
int findLPMostViolatedMinCover(int nCols, int row, CoinPackedVector &krow, double &b, double *xstar, CoinPackedVector &cover, CoinPackedVector &remainder)
Find the most violate minimum cover by solving the lp-relaxation of the most-violate-min-cover proble...
virtual CglCutGenerator * clone() const
Clone.
int findGreedyCover(int row, CoinPackedVector &krow, double &b, double *xstar, CoinPackedVector &cover, CoinPackedVector &remainder)
find a minimum cover by a simple greedy approach
int maxInKnapsack_
Maximum in knapsack.
int * zeroFixStart_
Start of zeroFixes cliques for a column in matrix or -1 if not in any clique.
const OsiSolverInterface * solver_
Cliques **** TEMP so can reference from listing.
int gubifyCut(CoinPackedVector &cut)
For testing gub stuff.
CglKnapsackCover()
Default constructor.
bool expensiveCuts_
exactKnapsack can be expensive - this switches off some
void deleteCliques()
Delete all clique information.
void switchOffExpensive()
Switch off expensive cuts.
int liftAndUncomplementAndAdd(double rowub, CoinPackedVector &krow, double &b, int *complement, int row, CoinPackedVector &cover, CoinPackedVector &remainder, OsiCuts &cs)
sequence-independent lift and uncomplement and add the resulting cut to the cut set
void setTestedRowIndices(int num, const int *ind)
A method to set which rows should be tested for knapsack covers.
int findExactMostViolatedMinCover(int nCols, int row, CoinPackedVector &krow, double b, double *xstar, CoinPackedVector &cover, CoinPackedVector &remainder)
Find a violated minimal cover from a canonical form knapsack inequality by solving the -most- violate...
Derived class to pick up probing info.
virtual ~CglKnapsackCover()
Destructor.
int findPseudoJohnAndEllisCover(int row, CoinPackedVector &krow, double &b, double *xstar, CoinPackedVector &cover, CoinPackedVector &remainder)
find a cover using a variation of the logic found in OSL (w/o SOS)
CglKnapsackCover & operator=(const CglKnapsackCover &rhs)
Assignment operator.
CliqueEntry * cliqueEntry_
Entries for clique.