source: branches/sandbox/Cbc/src/CbcParam_ansi.hpp @ 1286

Last change on this file since 1286 was 1286, checked in by EdwinStraver, 10 years ago

Changed formatting using AStyle -A4 -p

File size: 7.8 KB
Line 
1/* $Id: CbcParam.hpp 1271 2009-11-05 15:57:25Z forrest $ */
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"
10class ClpSimplex;
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
17    <li> 201 -- 250     string parameters
18    <li> 251 -- 300     cuts etc(string but broken out for clarity)
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.
24
25  This coding scheme is in flux.
26  NODESTRATEGY, BRANCHSTRATEGY, ADDCUTSSTRATEGY,
27  CLEARCUTS, OSLSTUFF, CBCSTUFF are not used at present (03.10.24).
28*/
29
30enum CbcParameterType
31
32{ GENERALQUERY = -100, FULLGENERALQUERY,
33
34  PRIMALTOLERANCE = 1, DUALTOLERANCE, CUTOFF, TIMELIMIT,
35  DUALBOUND, PRIMALWEIGHT,  OBJSCALE, RHSSCALE,
36
37  INFEASIBILITYWEIGHT = 51, INTEGERTOLERANCE, INCREMENT, ALLOWABLEGAP,
38
39  DJFIX = 81, GAPRATIO, TIGHTENFACTOR,
40
41  LOGLEVEL = 101, SOLVERLOGLEVEL, MAXNODES, STRONGBRANCHING,
42  MAXFACTOR, PERTVALUE, MAXITERATION, PRESOLVEPASS, IDIOT, SPRINT,
43  OUTPUTFORMAT, SLPVALUE, PRESOLVEOPTIONS, PRINTOPTIONS, SPECIALOPTIONS,
44
45  DIRECTION = 201, DUALPIVOT, SCALING, ERRORSALLOWED, KEEPNAMES, SPARSEFACTOR,
46  PRIMALPIVOT, PRESOLVE, CRASH, BIASLU, PERTURBATION, MESSAGES, AUTOSCALE,
47  CHOLESKY, KKT, BARRIERSCALE, GAMMA, CROSSOVER, PFI, ALGORITHM,
48
49  NODESTRATEGY = 251, BRANCHSTRATEGY, ADDCUTSSTRATEGY,
50  GOMORYCUTS, PROBINGCUTS, KNAPSACKCUTS, ODDHOLECUTS,
51  ROUNDING, SOLVER, CLIQUECUTS, COSTSTRATEGY, FLOWCUTS, MIXEDCUTS,
52  TWOMIRCUTS, PREPROCESS,
53
54  DIRECTORY = 301, IMPORT, EXPORT, RESTORE, SAVE, DUALSIMPLEX, PRIMALSIMPLEX,
55  MAXIMIZE, MINIMIZE, EXIT, STDIN, UNITTEST, NETLIB_DUAL, NETLIB_PRIMAL, SOLUTION,
56  TIGHTEN, FAKEBOUND, HELP, PLUSMINUS, NETWORK, ALLSLACK, REVERSE, BARRIER, NETLIB_BARRIER,
57  REALLY_SCALE, BASISIN, BASISOUT, SOLVECONTINUOUS, BAB, MIPLIB, CLEARCUTS, PRINTVERSION,
58
59  OSLSTUFF = 401, CBCSTUFF,
60
61  INVALID = 1000
62};
63
64
65/// Very simple class for setting parameters
66
67class CbcParam {
68
69public:
70
71    /**@name Constructor and destructor */
72    //@{
73    /// Constructors
74    CbcParam (  );
75    CbcParam (std::string name, std::string help,
76              double lower, double upper, CbcParameterType type, bool display = true);
77    CbcParam (std::string name, std::string help,
78              int lower, int upper, CbcParameterType type, bool display = true);
79    // Other strings will be added by insert
80    CbcParam (std::string name, std::string help, std::string firstValue,
81              CbcParameterType type, int defaultIndex = 0, bool display = true);
82    // Action
83    CbcParam (std::string name, std::string help,
84              CbcParameterType type, int indexNumber = -1, bool display = true);
85    /// Copy constructor.
86    CbcParam(const CbcParam &);
87    /// Assignment operator. This copies the data
88    CbcParam & operator=(const CbcParam & rhs);
89    /// Destructor
90    ~CbcParam (  );
91    //@}
92
93    /**@name stuff */
94    //@{
95    /// Insert string (only valid for keywords)
96    void append(std::string keyWord);
97    /// Adds one help line
98    void addHelp(std::string keyWord);
99    /// Returns name
100    inline std::string  name(  ) const {
101        return name_;
102    };
103    /// Returns short help
104    inline std::string  shortHelp(  ) const {
105        return shortHelp_;
106    };
107    /// Sets a double parameter (nonzero code if error)
108    int setDoubleParameter(CbcModel & model, double value) const;
109    /// Gets a double parameter
110    double doubleParameter(CbcModel & model) const;
111    /// Sets a int parameter (nonzero code if error)
112    int setIntParameter(CbcModel & model, int value) const;
113    /// Gets a int parameter
114    int intParameter(CbcModel & model) const;
115    /// Sets a double parameter (nonzero code if error)
116    int setDoubleParameter(ClpSimplex * model, double value) const;
117    /// Gets a double parameter
118    double doubleParameter(ClpSimplex * model) const;
119    /// Sets a int parameter (nonzero code if error)
120    int setIntParameter(ClpSimplex * model, int value) const;
121    /// Gets a int parameter
122    int intParameter(ClpSimplex * model) const;
123    /// Sets a double parameter (nonzero code if error)
124    int setDoubleParameter(OsiSolverInterface * model, double value) const;
125    /// Gets a double parameter
126    double doubleParameter(OsiSolverInterface * model) const;
127    /// Sets a int parameter (nonzero code if error)
128    int setIntParameter(OsiSolverInterface * model, int value) const;
129    /// Gets a int parameter
130    int intParameter(OsiSolverInterface * model) const;
131    /// Checks a double parameter (nonzero code if error)
132    int checkDoubleParameter(double value) const;
133    /// Returns name which could match
134    std::string matchName (  ) const;
135    /// Returns parameter option which matches (-1 if none)
136    int parameterOption ( std::string check ) const;
137    /// Prints parameter options
138    void printOptions (  ) const;
139    /// Returns current parameter option
140    inline std::string currentOption (  ) const {
141        return definedKeyWords_[currentKeyWord_];
142    }
143    /// Sets current parameter option
144    inline void setCurrentOption ( int value ) {
145        currentKeyWord_ = value;
146    }
147    /// Sets int value
148    inline void setIntValue ( int value ) {
149        intValue_ = value;
150    }
151    inline int intValue () const {
152        return intValue_;
153    }
154    /// Sets double value
155    inline void setDoubleValue ( double value ) {
156        doubleValue_ = value;
157    }
158    inline double doubleValue () const {
159        return doubleValue_;
160    }
161    /// Sets string value
162    inline void setStringValue ( std::string value ) {
163        stringValue_ = value;
164    }
165    inline std::string stringValue () const {
166        return stringValue_;
167    }
168    /// Returns 1 if matches minimum, 2 if matches less, 0 if not matched
169    int matches (std::string input) const;
170    /// type
171    inline CbcParameterType type() const {
172        return type_;
173    }
174    /// whether to display
175    inline bool displayThis() const {
176        return display_;
177    }
178    /// Set Long help
179    inline void setLonghelp(const std::string help) {
180        longHelp_ = help;
181    }
182    /// Print Long help
183    void printLongHelp() const;
184    /// Print action and string
185    void printString() const;
186    /// type for classification
187    inline int indexNumber() const {
188        return indexNumber_;
189    }
190private:
191    /// gutsOfConstructor
192    void gutsOfConstructor();
193    //@}
194////////////////// data //////////////////
195private:
196
197    /**@name data
198     We might as well throw all type data in - could derive?
199    */
200    //@{
201    // Type see CbcParameterType
202    CbcParameterType type_;
203    /// If double == okay
204    double lowerDoubleValue_;
205    double upperDoubleValue_;
206    /// If int == okay
207    int lowerIntValue_;
208    int upperIntValue_;
209    // Length of name
210    unsigned int lengthName_;
211    // Minimum match
212    unsigned int lengthMatch_;
213    /// set of valid strings
214    std::vector<std::string> definedKeyWords_;
215    /// Name
216    std::string name_;
217    /// Short help
218    std::string shortHelp_;
219    /// Long help
220    std::string longHelp_;
221    /// Action
222    CbcParameterType action_;
223    /// Current keyWord (if a keyword parameter)
224    int currentKeyWord_;
225    /// Display on ?
226    bool display_;
227    /// Integer parameter - current value
228    int intValue_;
229    /// Double parameter - current value
230    double doubleValue_;
231    /// String parameter - current value
232    std::string stringValue_;
233    /// index number to use for display purposes
234    int indexNumber_;
235    //@}
236};
237#endif  /* CbcParam_H */
Note: See TracBrowser for help on using the repository browser.