/usr/include/coin/CglAllDifferent.hpp is in coinor-libcgl-dev 0.58.9-1+b1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 | // Copyright (C) 2005, International Business Machines
// Corporation and others. All Rights Reserved.
// This code is licensed under the terms of the Eclipse Public License (EPL).
#ifndef CglAllDifferent_H
#define CglAllDifferent_H
#include <string>
#include "CglCutGenerator.hpp"
/** AllDifferent Cut Generator Class
This has a number of sets. All the members in each set are general integer
variables which have to be different from all others in the set.
At present this only generates column cuts
At present it is very primitive compared to proper CSP implementations
*/
class CglAllDifferent : public CglCutGenerator {
public:
/**@name Generate Cuts */
//@{
/** This fixes (or reduces bounds) on sets of all different variables
*/
virtual void generateCuts( const OsiSolverInterface & si, OsiCuts & cs,
const CglTreeInfo info = CglTreeInfo());
//@}
/**@name Constructors and destructors */
//@{
/// Default constructor
CglAllDifferent ();
/// Useful constructot
CglAllDifferent(int numberSets, const int * starts, const int * which);
/// Copy constructor
CglAllDifferent (
const CglAllDifferent &);
/// Clone
virtual CglCutGenerator * clone() const;
/// Assignment operator
CglAllDifferent &
operator=(
const CglAllDifferent& rhs);
/// Destructor
virtual
~CglAllDifferent ();
/// Create C++ lines to get to current state
virtual std::string generateCpp( FILE * fp);
/// This can be used to refresh any inforamtion
virtual void refreshSolver(OsiSolverInterface * solver);
/**
Returns true if may generate Row cuts in tree (rather than root node).
Used so know if matrix will change in tree. Really
meant so column cut generators can still be active
without worrying code.
Default is true
*/
virtual bool mayGenerateRowCutsInTree() const
{ return false;}
//@}
/**@name Sets and Gets */
//@{
/// Set log level
inline void setLogLevel(int value)
{ logLevel_=value;}
/// Get log level
inline int getLogLevel() const
{ return logLevel_;}
/// Set Maximum number of sets to look at at once
inline void setMaxLook(int value)
{ maxLook_=value;}
/// Get Maximum number of sets to look at at once
inline int getMaxLook() const
{ return maxLook_;}
//@}
private:
// Private member methods
/**@name */
//@{
//@}
// Private member data
/**@name Private member data */
//@{
/// Number of sets
int numberSets_;
/// Total number of variables in all different sets
int numberDifferent_;
/// Maximum number of sets to look at at once
int maxLook_;
/// Log level - 0 none, 1 - a bit, 2 - more details
int logLevel_;
/// Start of each set
int * start_;
/// Members (0,1,....) not as in original model
int * which_;
/// Original members
int * originalWhich_;
//@}
};
#endif
|