source: trunk/Cbc/src/CbcParam.hpp @ 1461

Last change on this file since 1461 was 1432, checked in by bjarni, 10 years ago

Added extra return at end of each source file where needed, to remove possible linefeed conflicts (NightlyBuild? errors)

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