1// Copyright (C) 2000, International Business Machines
2// Corporation and others. All Rights Reserved.
3// This code is licensed under the terms of the Eclipse Public License (EPL).
4
5#ifndef OsiSolverParameters_H
6#define OsiSolverParameters_H
7
8enum OsiIntParam {
9 /** The maximum number of iterations (whatever that means for the given
10 solver) the solver can execute in the OsiSolverinterface::initialSolve()
11 and the OsiSolverinterface::resolve() methods before terminating. */
12 OsiMaxNumIteration = 0,
13 /** The maximum number of iterations (whatever that means for the given
14 solver) the solver can execute in the
15 OsiSolverinterface::solveFromHotStart() method before terminating. */
16 OsiMaxNumIterationHotStart,
17 /** The name discipline; specifies how the solver will handle row and
18 column names.
19 - 0: Auto names: Names cannot be set by the client. Names of the form
20 Rnnnnnnn or Cnnnnnnn are generated on demand when a name for a
21 specific row or column is requested; nnnnnnn is derived from the row
22 or column index. Requests for a vector of names return a vector with
23 zero entries.
24 - 1: Lazy names: Names supplied by the client are retained. Names of the
25 form Rnnnnnnn or Cnnnnnnn are generated on demand if no name has been
26 supplied by the client. Requests for a vector of names return a
27 vector sized to the largest index of a name supplied by the client;
28 some entries in the vector may be null strings.
29 - 2: Full names: Names supplied by the client are retained. Names of the
30 form Rnnnnnnn or Cnnnnnnn are generated on demand if no name has been
31 supplied by the client. Requests for a vector of names return a
32 vector sized to match the constraint system, and all entries will
33 contain either the name specified by the client or a generated name.
34 */
35 OsiNameDiscipline,
36 /** Just a marker, so that OsiSolverInterface can allocate a static sized
37 array to store parameters. */
38 OsiLastIntParam
39};
40
41enum OsiDblParam {
42 /** Dual objective limit. This is to be used as a termination
43 criteria in methods where the dual objective monotonically changes
44 (e.g., dual simplex, the volume algorithm) */
45 OsiDualObjectiveLimit = 0,
46 /** Primal objective limit. This is to be used as a termination
47 criteria in methods where the primal objective monotonically changes
48 (e.g., primal simplex) */
49 OsiPrimalObjectiveLimit,
50 /** The maximum amount the dual constraints can be violated and still be
51 considered feasible. */
52 OsiDualTolerance,
53 /** The maximum amount the primal constraints can be violated and still be
54 considered feasible. */
55 OsiPrimalTolerance,
56 /** The value of any constant term in the objective function. */
57 OsiObjOffset,
58 /** Just a marker, so that OsiSolverInterface can allocate a static sized
59 array to store parameters. */
60 OsiLastDblParam
61};
62
63
64enum OsiStrParam {
65 /** Name of the problem. This is the found on the Name card of
66 an mps file. */
67 OsiProbName = 0,
68 /** Name of the solver. This parameter is not settable. */
69 OsiSolverName,
70 /** Just a marker, so that OsiSolverInterface can allocate a static sized
71 array to store parameters. */
72 OsiLastStrParam
73};
74
75enum OsiHintParam {
76 /** Whether to do a presolve in initialSolve */
77 OsiDoPresolveInInitial = 0,
78 /** Whether to use a dual algorithm in initialSolve.
79 The reverse is to use a primal algorithm */
80 OsiDoDualInInitial,
81 /** Whether to do a presolve in resolve */
82 OsiDoPresolveInResolve,
83 /** Whether to use a dual algorithm in resolve.
84 The reverse is to use a primal algorithm */
85 OsiDoDualInResolve,
86 /** Whether to scale problem */
87 OsiDoScale,
88 /** Whether to create a non-slack basis (only in initialSolve) */
89 OsiDoCrash,
90 /** Whether to reduce amount of printout, e.g., for branch and cut */
91 OsiDoReducePrint,
92 /** Whether we are in branch and cut - so can modify behavior */
93 OsiDoInBranchAndCut,
94 /** Just a marker, so that OsiSolverInterface can allocate a static sized
95 array to store parameters. */
96 OsiLastHintParam
97};
98
99enum OsiHintStrength {
100 /** Ignore hint (default) */
101 OsiHintIgnore = 0,
102 /** This means it is only a hint */
103 OsiHintTry,
104 /** This means do hint if at all possible */
105 OsiHintDo,
106 /** And this means throw an exception if not possible */
107 OsiForceDo
108};
109
110#endif
111