source: trunk/Couenne/src/couenne.opt @ 490

Last change on this file since 490 was 409, checked in by jim_ostrowski, 11 years ago

Adding orbital branching features to Couenne

File size: 9.2 KB
Line 
1#
2# Couenne options
3#
4# Couenne is an open-source solver for nonconvex Mixed-Integer
5# Nonlinear Programming (MINLP) problems. See more at
6#
7# https://projects.coin-or.org/Couenne
8#
9# The following is a list of option to tweak the performance of
10# Couenne.  Each option has a brief description and is set to a
11# default value that we believe works well in most cases.
12#
13#
14# Some of the notation used here is close to that of the paper that
15# describes Couenne:
16#
17# P. Belotti, J. Lee, L. Liberti, F. Margot, A. Waechter, "Branching
18#   and bounds tightening techniques for non-convex MINLP," 2008.
19# Available on Optimization Online at
20#
21# http://www.optimization-online.org/DB_HTML/2008/08/2059.html
22#
23# We refer the curious user of Couenne to this paper for more insight
24# on how the options are used.
25
26
27
28#
29# Verbosity/output level options
30#
31
32# display statistics at the end of the run [yes/no]. Set to yes for a
33# line of output at the end with some brief data on the problem
34
35display_stats no
36
37
38# The following are verbosity levels for the main components of Couenne.
39# Values: 0 for quiet, 11 for excessive output [0..11]
40
41branching_print_level       0 # Output level for braching code in Couenne.
42boundtightening_print_level 0 # Output level for bound tightening code in Couenne
43convexifying_print_level    0 # Output level for convexifying code in Couenne
44problem_print_level         7 # Output level for problem manipulation code in Couenne
45                              # (4 prints out original problem)
46nlpheur_print_level         0 # Output level for NLP heuristic in Couenne
47#disjcuts_print_level       0 # Output level for disjunctive cuts in Couenne - disabled for now
48
49orbital_branching yes
50
51#
52# Option for branching rules
53#
54
55# Multipliers of pseudocosts for estimating and update estimation of bound
56#
57# When using pseudocosts, the lower bound of a node is estimated by multiplying
58# the pseudocost by a measure of the "infeasibility" of that variable.
59#
60# Valid Settings:
61#   infeasibility (infeasibility returned by object)
62#   projectDist (distance between current LP point and resulting branches' LP points)
63#   interval_lp (width of the interval between bound and current lp point)
64#   interval_lp_rev (similar to interval_lp, reversed)
65#   interval_br (width of the interval between bound and branching point)
66#   interval_br_rev (similar to interval_br, reversed)
67
68pseudocost_mult interval_br_rev
69
70
71# Use distance between LP points to update multipliers of
72# pseudocosts. Can give a better estimate of the change in the node as
73# a result of the branching rule.
74
75pseudocost_mult_lp no
76
77
78# Use Special Ordered Sets (SOS) as indicated in the MINLP
79# model. Couenne recognizes constraints of the form
80#
81# f_1(x) + f_2(x) ... + f_n (x) = 1,
82#
83# where f_i (x) are binary expressions, as SOS constraints, and adds
84# them to the Branch&Bound solver (disabled now -- still testing)
85
86enable_sos no
87
88
89# Apply bound tightening before branching
90#
91# Upon branching, it may be useful to apply a bound reduction
92# technique as a preprocessing step for the node, even to check if the
93# node is feasible
94
95branch_fbbt yes
96
97
98# Apply convexification cuts before branching (for now only within
99# strong branching)
100#
101# This is useful to get a more precise lower bound within strong
102# branching (note: does not work when performing the real branching
103# rule)
104
105branch_conv_cuts yes
106
107
108# Chooses branching point selection strategy
109#
110#
111# When branching on a continuous variable x that has a bound interval
112# [l,u], the branching point is also important. Couenne implements
113# several ways of computing the branching point, that may depend on
114# the current solution of the LP relaxation or on the characteristics
115# of the linearization that would result from the branching.
116#
117# The default value of this option is a convex combination
118#
119#     alpha xm + (1-alpha) xp
120#
121#
122# where xm is the middle point (l+u)/2, xp is the value of x in the
123# current LP relaxation, and 0 <= alpha <= 1. Alpha is defined in the
124# next option.
125#
126# Valid Settings:
127#   lp-clamped (LP point clamped in [k,1-k] of the bound intervals (k defined by lp_clamp))
128#   lp-central (LP point if within [k,1-k] of the bound intervals,
129#               middle point otherwise(k defined by branch_lp_clamp))
130#   balanced (minimizes max distance from curve to convexification)
131#   min-area (minimizes total area of the two convexifications)
132#   mid-point (convex combination of current point and mid point)
133#   no-branch (do not branch, return null infeasibility; for testing purposes only)
134
135branch_pt_select mid-point
136
137
138# Defines convex combination of mid point and current LP point. See
139# comments on option "branch_pt_select" above.
140
141#branch_midpoint_alpha 0.75
142
143
144# Priority of continuous variable branching
145#
146# In Cbc, the Branch&Bound solver on which Couenne is based, integer
147# variables have a priority of 1000. This parameter is the branching
148# priority of continuous variables. Setting it to more than 1000 gives
149# precedence to integer variables, i.e., as long as one integer
150# variable is currently "infeasible" (i.e. fractional) it will be
151# branched on.  A value below 1000 will give precedence to continuous
152# variables.
153
154#cont_var_priority 2000
155
156
157# Apply Reduced Cost Branching (instead of the Violation Transfer) --
158# MUST have vt_obj enabled
159#
160#
161# Violation Transfer and reduced cost branching are similar techniques
162# for selecting a branching variable. Couenne implements both and lets
163# you choose which one to use. Set this to yes to use reduced cost
164# branching. Experimentally, Violation Transfer appears slightly
165# better, hence it is preferred by default.
166
167red_cost_branching no
168
169
170# Type of branching object for variable selection
171#
172#
173# This parameter determines the branching variable selection
174# technique. With "vt_obj", the Violation Transfer branching technique
175# is used. "var_obj" chooses a variable based on the set of nonlinear
176# expressions that depends on it, while "expr_obj" selects the most
177# violated nonlinear expression and branches on one of the variables
178# on which the expression depends. The default is var_obj
179#
180#
181# Valid Settings:
182#   vt_obj    use Violation Transfer from Tawarmalani and Sahinidis
183#   var_obj   use one object for each variable
184#   expr_obj  use one object for each nonlinear expression
185
186branching_object var_obj
187
188
189
190
191#
192# Options for bound tightening
193#
194
195
196# Feasibility-based (cheap) bound tightening (FBBT)
197#
198# A fast bound reduction technique. Not very efficient in eliminating
199# vast portions of the solution set, but recommended.
200
201feasibility_bt yes
202
203
204# Optimality-based (expensive) bound tightening (OBBT)
205#
206# A slower bound reduction technique that relies on solving 2n LP
207# problems (n is the number of variables). Probably more efficient
208# that FBBT, but much more computationally intensive. Recommended
209# for small problems. See also the next option.
210
211optimality_bt yes
212
213
214# Specify the frequency (in terms of nodes) for optimality-based bound
215# tightening
216#
217# As OBBT is expensive, the user may choose to run it only until the
218# depth k of the branch&bound tree, and with probability exponentially
219# decreasing with the depth of the branch&bound node at any other node
220# below depth k.
221
222log_num_obbt_per_level 1
223
224
225# Aggressive feasibility-based bound tightening (to use with NLP points)
226#
227#
228# See the paper for a detailed explanation. This is also an expensive
229# but efficient way to reduce the solution set
230
231aggressive_fbbt yes
232
233
234# Specify the frequency (in terms of nodes) for aggressive bound tightening.
235#
236# A parameter analogous to what log_num_obbt_per_level is for OBBT.
237
238log_num_abt_per_level 2
239
240
241#
242# Options for reformulation and linearization
243#
244
245
246# Specify the frequency (in terms of nodes) at which couenne ecp cuts
247# are generated.
248#
249# A default value of 1 has linearization inequalities generated at
250# every node.
251
252convexification_cuts 1
253
254
255# Specify the number of points at which to convexify when
256# convexification type.
257
258convexification_points 4
259
260
261# Yes if only violated convexification cuts should be added
262
263violated_cuts_only yes
264
265
266
267#
268# Options for debugging
269#
270# Some of these options usually slow down Couenne, and are hence only suggested for debugging purposes.
271#
272
273# Check all LPs through an independent call to
274#  OsiClpSolverInterface::initialSolve() (very expensive)
275#check_lp no
276
277# Artificial cutoff. Used when you know a feasible solution and want
278# to use it to restrict the solution space
279
280#art_cutoff 1e100
281
282# Window around known optimum
283#opt_window
284
285# Artificial lower bound
286#art_lower -1e100
287
288
289#
290# Other options
291#
292
293
294# Do we search for local solutions of NLP's?
295local_optimization_heuristic yes
296
297
298# Specify the logarithm of the number of local optimizations to
299# perform.
300#
301#
302# Analogous to log_num_abt_per_level and log_num_obbt_per_level, this
303# option determines until which depth of the branch&bound tree the
304# call to a nonlinear solver is done at every node. Below this depth,
305# calls to the nonlinear solver happen with probability inversely
306# proportional to the depth of the node.
307
308log_num_local_optimization_per_level 2
309
310
311# Tolerance for constraints/auxiliary variables
312#
313#
314# A solution is feasible for the original problem if the maximum
315# violation of a constraint is below this number
316
317feas_tolerance 1e-6
318
319
320# Use quadratic expressions and related exprQuad class
321#
322# Allows to use a single operator for quadratic forms (not yet enabled)
323
324use_quadratic no
Note: See TracBrowser for help on using the repository browser.