source: stable/2.8/Cbc/src/CbcParam.hpp @ 1942

Last change on this file since 1942 was 1573, checked in by lou, 9 years ago

Change to EPL license notice.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 9.5 KB
Line 
1/* $Id: CbcParam.hpp 1573 2011-01-05 01:12:36Z stefan $ */
2// Copyright (C) 2002, International Business Machines
3// Corporation and others.  All Rights Reserved.
4// This code is licensed under the terms of the Eclipse Public License (EPL).
5
6#ifndef CbcParam_H
7#define CbcParam_H
8
9#include "OsiSolverInterface.hpp"
10#include "CbcModel.hpp"
11class ClpSimplex;
12/*! \brief Parameter codes
13
14  Parameter type ranges are allocated as follows
15  <ul>
16    <li>   1 -- 100     double parameters
17    <li> 101 -- 200     integer parameters
18    <li> 201 -- 250     string parameters
19    <li> 251 -- 300     cuts etc(string but broken out for clarity)
20    <li> 301 -- 400     `actions'
21  </ul>
22
23  `Actions' do not necessarily invoke an immediate action; it's just that they
24  don't fit neatly into the parameters array.
25
26  This coding scheme is in flux.
27  CBC_PARAM_STR_NODESTRATEGY,
28  CBC_PARAM_STR_BRANCHSTRATEGY,
29  CBC_PARAM_NOTUSED_ADDCUTSSTRATEGY,
30  CLP_PARAM_ACTION_CLEARCUTS,
31  CBC_PARAM_NOTUSED_OSLSTUFF,
32  CBC_PARAM_NOTUSED_CBCSTUFF are not used at present (03.10.24).
33*/
34
35enum CbcParameterType
36
37{ CBC_PARAM_GENERALQUERY = -100, 
38  CBC_PARAM_FULLGENERALQUERY,
39
40  CLP_PARAM_DBL_PRIMALTOLERANCE = 1, 
41  CLP_PARAM_DBL_DUALTOLERANCE, 
42  CBC_PARAM_DBL_CUTOFF, 
43  CLP_PARAM_DBL_TIMELIMIT,
44  CLP_PARAM_DBL_DUALBOUND, 
45  CLP_PARAM_DBL_PRIMALWEIGHT, 
46  CLP_PARAM_DBL_OBJSCALE, 
47  CLP_PARAM_DBL_RHSSCALE,
48
49  CBC_PARAM_DBL_INFEASIBILITYWEIGHT = 51, 
50  CBC_PARAM_DBL_INTEGERTOLERANCE, 
51  CBC_PARAM_DBL_INCREMENT, 
52  CBC_PARAM_DBL_ALLOWABLEGAP,
53
54  CBC_PARAM_DBL_DJFIX = 81, 
55  CBC_PARAM_DBL_GAPRATIO, 
56  CBC_PARAM_DBL_TIGHTENFACTOR,
57
58  CLP_PARAM_INT_LOGLEVEL = 101, 
59  CLP_PARAM_INT_SOLVERLOGLEVEL, 
60  CBC_PARAM_INT_MAXNODES, 
61  CBC_PARAM_INT_STRONGBRANCHING,
62  CLP_PARAM_INT_MAXFACTOR, 
63  CLP_PARAM_INT_PERTVALUE, 
64  CLP_PARAM_INT_MAXITERATION, 
65  CLP_PARAM_INT_PRESOLVEPASS, 
66  CLP_PARAM_INT_IDIOT, 
67  CLP_PARAM_INT_SPRINT,
68  CLP_PARAM_INT_OUTPUTFORMAT, 
69  CLP_PARAM_INT_SLPVALUE, 
70  CLP_PARAM_INT_PRESOLVEOPTIONS, 
71  CLP_PARAM_INT_PRINTOPTIONS, 
72  CLP_PARAM_INT_SPECIALOPTIONS,
73
74  CLP_PARAM_STR_DIRECTION = 201, 
75  CLP_PARAM_STR_DUALPIVOT, 
76  CLP_PARAM_STR_SCALING, 
77  CLP_PARAM_STR_ERRORSALLOWED, 
78  CLP_PARAM_STR_KEEPNAMES, 
79  CLP_PARAM_STR_SPARSEFACTOR,
80  CLP_PARAM_STR_PRIMALPIVOT, 
81  CLP_PARAM_STR_PRESOLVE, 
82  CLP_PARAM_STR_CRASH, 
83  CLP_PARAM_STR_BIASLU, 
84  CLP_PARAM_STR_PERTURBATION, 
85  CLP_PARAM_STR_MESSAGES, 
86  CLP_PARAM_STR_AUTOSCALE,
87  CLP_PARAM_STR_CHOLESKY, 
88  CLP_PARAM_STR_KKT, 
89  CLP_PARAM_STR_BARRIERSCALE, 
90  CLP_PARAM_STR_GAMMA, 
91  CLP_PARAM_STR_CROSSOVER, 
92  CLP_PARAM_STR_PFI, 
93  CLP_PARAM_NOTUSED_ALGORITHM,
94
95  CBC_PARAM_STR_NODESTRATEGY = 251, 
96  CBC_PARAM_STR_BRANCHSTRATEGY, 
97  CBC_PARAM_NOTUSED_ADDCUTSSTRATEGY,
98  CBC_PARAM_STR_GOMORYCUTS, 
99  CBC_PARAM_STR_PROBINGCUTS, 
100  CBC_PARAM_STR_KNAPSACKCUTS, 
101  CBC_PARAM_NOTUSED_ODDHOLECUTS,
102  CBC_PARAM_STR_ROUNDING, 
103  CBC_PARAM_STR_SOLVER, 
104  CBC_PARAM_STR_CLIQUECUTS, 
105  CBC_PARAM_STR_COSTSTRATEGY, 
106  CBC_PARAM_STR_FLOWCUTS, 
107  CBC_PARAM_STR_MIXEDCUTS,
108  CBC_PARAM_STR_TWOMIRCUTS, 
109  CBC_PARAM_STR_PREPROCESS,
110
111  CLP_PARAM_ACTION_DIRECTORY = 301, 
112  CLP_PARAM_ACTION_IMPORT, 
113  CLP_PARAM_ACTION_EXPORT, 
114  CLP_PARAM_ACTION_RESTORE, 
115  CLP_PARAM_ACTION_SAVE, 
116  CLP_PARAM_ACTION_DUALSIMPLEX, 
117  CLP_PARAM_ACTION_PRIMALSIMPLEX,
118  CLP_PARAM_ACTION_MAXIMIZE, 
119  CLP_PARAM_ACTION_MINIMIZE, 
120  CLP_PARAM_ACTION_EXIT, 
121  CLP_PARAM_ACTION_STDIN, 
122  CLP_PARAM_ACTION_UNITTEST, 
123  CLP_PARAM_ACTION_NETLIB_DUAL, 
124  CLP_PARAM_ACTION_NETLIB_PRIMAL, 
125  CLP_PARAM_ACTION_SOLUTION,
126  CLP_PARAM_ACTION_TIGHTEN, 
127  CLP_PARAM_ACTION_FAKEBOUND, 
128  CLP_PARAM_ACTION_HELP, 
129  CLP_PARAM_ACTION_PLUSMINUS, 
130  CLP_PARAM_ACTION_NETWORK, 
131  CLP_PARAM_ACTION_ALLSLACK, 
132  CLP_PARAM_ACTION_REVERSE, 
133  CLP_PARAM_ACTION_BARRIER, 
134  CLP_PARAM_ACTION_NETLIB_BARRIER,
135  CLP_PARAM_ACTION_REALLY_SCALE, 
136  CLP_PARAM_ACTION_BASISIN, 
137  CLP_PARAM_ACTION_BASISOUT, 
138  CLP_PARAM_ACTION_SOLVECONTINUOUS, 
139  CBC_PARAM_ACTION_BAB, 
140  CBC_PARAM_ACTION_MIPLIB, 
141  CLP_PARAM_ACTION_CLEARCUTS,
142  CLP_VERSION_NOTUSED_PRINTVERSION,
143
144  CBC_PARAM_NOTUSED_OSLSTUFF = 401, 
145  CBC_PARAM_NOTUSED_CBCSTUFF,
146
147  CBC_PARAM_NOTUSED_INVALID = 1000
148};
149
150
151/// Very simple class for setting parameters
152
153class CbcParam {
154
155public:
156
157    /**@name Constructor and destructor */
158    //@{
159    /// Constructors
160    CbcParam (  );
161    CbcParam (std::string name, std::string help,
162              double lower, double upper, CbcParameterType type, bool display = true);
163    CbcParam (std::string name, std::string help,
164              int lower, int upper, CbcParameterType type, bool display = true);
165    // Other strings will be added by insert
166    CbcParam (std::string name, std::string help, std::string firstValue,
167              CbcParameterType type, int defaultIndex = 0, bool display = true);
168    // Action
169    CbcParam (std::string name, std::string help,
170              CbcParameterType type, int indexNumber = -1, bool display = true);
171    /// Copy constructor.
172    CbcParam(const CbcParam &);
173    /// Assignment operator. This copies the data
174    CbcParam & operator=(const CbcParam & rhs);
175    /// Destructor
176    ~CbcParam (  );
177    //@}
178
179    /**@name stuff */
180    //@{
181    /// Insert string (only valid for keywords)
182    void append(std::string keyWord);
183    /// Adds one help line
184    void addHelp(std::string keyWord);
185    /// Returns name
186    inline std::string  name(  ) const {
187        return name_;
188    };
189    /// Returns short help
190    inline std::string  shortHelp(  ) const {
191        return shortHelp_;
192    };
193    /// Sets a double parameter (nonzero code if error)
194    int setDoubleParameter(CbcModel & model, double value) const;
195    /// Gets a double parameter
196    double doubleParameter(CbcModel & model) const;
197    /// Sets a int parameter (nonzero code if error)
198    int setIntParameter(CbcModel & model, int value) const;
199    /// Gets a int parameter
200    int intParameter(CbcModel & model) const;
201    /// Sets a double parameter (nonzero code if error)
202    int setDoubleParameter(ClpSimplex * model, double value) const;
203    /// Gets a double parameter
204    double doubleParameter(ClpSimplex * model) const;
205    /// Sets a int parameter (nonzero code if error)
206    int setIntParameter(ClpSimplex * model, int value) const;
207    /// Gets a int parameter
208    int intParameter(ClpSimplex * model) const;
209    /// Sets a double parameter (nonzero code if error)
210    int setDoubleParameter(OsiSolverInterface * model, double value) const;
211    /// Gets a double parameter
212    double doubleParameter(OsiSolverInterface * model) const;
213    /// Sets a int parameter (nonzero code if error)
214    int setIntParameter(OsiSolverInterface * model, int value) const;
215    /// Gets a int parameter
216    int intParameter(OsiSolverInterface * model) const;
217    /// Checks a double parameter (nonzero code if error)
218    int checkDoubleParameter(double value) const;
219    /// Returns name which could match
220    std::string matchName (  ) const;
221    /// Returns parameter option which matches (-1 if none)
222    int parameterOption ( std::string check ) const;
223    /// Prints parameter options
224    void printOptions (  ) const;
225    /// Returns current parameter option
226    inline std::string currentOption (  ) const {
227        return definedKeyWords_[currentKeyWord_];
228    }
229    /// Sets current parameter option
230    inline void setCurrentOption ( int value ) {
231        currentKeyWord_ = value;
232    }
233    /// Sets int value
234    inline void setIntValue ( int value ) {
235        intValue_ = value;
236    }
237    inline int intValue () const {
238        return intValue_;
239    }
240    /// Sets double value
241    inline void setDoubleValue ( double value ) {
242        doubleValue_ = value;
243    }
244    inline double doubleValue () const {
245        return doubleValue_;
246    }
247    /// Sets string value
248    inline void setStringValue ( std::string value ) {
249        stringValue_ = value;
250    }
251    inline std::string stringValue () const {
252        return stringValue_;
253    }
254    /// Returns 1 if matches minimum, 2 if matches less, 0 if not matched
255    int matches (std::string input) const;
256    /// type
257    inline CbcParameterType type() const {
258        return type_;
259    }
260    /// whether to display
261    inline bool displayThis() const {
262        return display_;
263    }
264    /// Set Long help
265    inline void setLonghelp(const std::string help) {
266        longHelp_ = help;
267    }
268    /// Print Long help
269    void printLongHelp() const;
270    /// Print action and string
271    void printString() const;
272    /// type for classification
273    inline int indexNumber() const {
274        return indexNumber_;
275    }
276private:
277    /// gutsOfConstructor
278    void gutsOfConstructor();
279    //@}
280////////////////// data //////////////////
281private:
282
283    /**@name data
284     We might as well throw all type data in - could derive?
285    */
286    //@{
287    // Type see CbcParameterType
288    CbcParameterType type_;
289    /// If double == okay
290    double lowerDoubleValue_;
291    double upperDoubleValue_;
292    /// If int == okay
293    int lowerIntValue_;
294    int upperIntValue_;
295    // Length of name
296    unsigned int lengthName_;
297    // Minimum match
298    unsigned int lengthMatch_;
299    /// set of valid strings
300    std::vector<std::string> definedKeyWords_;
301    /// Name
302    std::string name_;
303    /// Short help
304    std::string shortHelp_;
305    /// Long help
306    std::string longHelp_;
307    /// Action
308    CbcParameterType action_;
309    /// Current keyWord (if a keyword parameter)
310    int currentKeyWord_;
311    /// Display on ?
312    bool display_;
313    /// Integer parameter - current value
314    int intValue_;
315    /// Double parameter - current value
316    double doubleValue_;
317    /// String parameter - current value
318    std::string stringValue_;
319    /// index number to use for display purposes
320    int indexNumber_;
321    //@}
322};
323#endif  /* CbcParam_H */
324
Note: See TracBrowser for help on using the repository browser.