Cbc  2.10.10
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
CbcCutGenerator.hpp
Go to the documentation of this file.
1 /* $Id$ */
2 // Copyright (C) 2003, 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 CbcCutGenerator_H
7 #define CbcCutGenerator_H
8 
9 #include "OsiSolverInterface.hpp"
10 #include "OsiCuts.hpp"
11 #include "CglCutGenerator.hpp"
12 #include "CbcCutModifier.hpp"
13 
14 class CbcModel;
15 class OsiRowCut;
16 class OsiRowCutDebugger;
17 
18 //#############################################################################
19 
50 
51 public:
70  bool generateCuts(OsiCuts &cs, int fullScan, OsiSolverInterface *solver,
71  CbcNode *node);
73 
78 
80  CbcCutGenerator(CbcModel *model, CglCutGenerator *generator,
81  int howOften = 1, const char *name = NULL,
82  bool normal = true, bool atSolution = false,
83  bool infeasible = false, int howOftenInsub = -100,
84  int whatDepth = -1, int whatDepthInSub = -1, int switchOffIfLessThan = 0);
85 
88 
91 
95 
103  void refreshModel(CbcModel *model);
104 
106  inline const char *cutGeneratorName() const
107  {
108  return generatorName_;
109  }
110 
112  void generateTuning(FILE *fp);
127  void setHowOften(int value);
128 
130  inline int howOften() const
131  {
132  return whenCutGenerator_;
133  }
135  inline int howOftenInSub() const
136  {
137  return whenCutGeneratorInSub_;
138  }
140  inline int inaccuracy() const
141  {
142  return inaccuracy_;
143  }
145  inline void setInaccuracy(int level)
146  {
147  inaccuracy_ = level;
148  }
149 
160  void setWhatDepth(int value);
162  void setWhatDepthInSub(int value);
164  inline int whatDepth() const
165  {
166  return depthCutGenerator_;
167  }
169  inline int whatDepthInSub() const
170  {
172  }
174  inline void setMaximumTries(int value)
175  {
176  maximumTries_ = value;
177  }
179  inline int maximumTries() const
180  {
181  return maximumTries_;
182  }
183 
185  inline int switches() const
186  {
187  return switches_;
188  }
190  inline void setSwitches(int value)
191  {
192  switches_ = value;
193  }
195  inline bool normal() const
196  {
197  return (switches_ & 1) != 0;
198  }
200  inline void setNormal(bool value)
201  {
202  switches_ &= ~1;
203  switches_ |= value ? 1 : 0;
204  }
206  inline bool atSolution() const
207  {
208  return (switches_ & 2) != 0;
209  }
211  inline void setAtSolution(bool value)
212  {
213  switches_ &= ~2;
214  switches_ |= value ? 2 : 0;
215  }
219  inline bool whenInfeasible() const
220  {
221  return (switches_ & 4) != 0;
222  }
226  inline void setWhenInfeasible(bool value)
227  {
228  switches_ &= ~4;
229  switches_ |= value ? 4 : 0;
230  }
232  inline bool timing() const
233  {
234  return (switches_ & 64) != 0;
235  }
237  inline void setTiming(bool value)
238  {
239  switches_ &= ~64;
240  switches_ |= value ? 64 : 0;
241  timeInCutGenerator_ = 0.0;
242  }
244  inline double timeInCutGenerator() const
245  {
246  return timeInCutGenerator_;
247  }
248  inline void incrementTimeInCutGenerator(double value)
249  {
250  timeInCutGenerator_ += value;
251  }
253  inline CglCutGenerator *generator() const
254  {
255  return generator_;
256  }
258  inline int numberTimesEntered() const
259  {
260  return numberTimes_;
261  }
262  inline void setNumberTimesEntered(int value)
263  {
264  numberTimes_ = value;
265  }
266  inline void incrementNumberTimesEntered(int value = 1)
267  {
268  numberTimes_ += value;
269  }
271  inline int numberCutsInTotal() const
272  {
273  return numberCuts_;
274  }
275  inline void setNumberCutsInTotal(int value)
276  {
277  numberCuts_ = value;
278  }
279  inline void incrementNumberCutsInTotal(int value = 1)
280  {
281  numberCuts_ += value;
282  }
284  inline int numberElementsInTotal() const
285  {
286  return numberElements_;
287  }
288  inline void setNumberElementsInTotal(int value)
289  {
290  numberElements_ = value;
291  }
292  inline void incrementNumberElementsInTotal(int value = 1)
293  {
294  numberElements_ += value;
295  }
297  inline int numberColumnCuts() const
298  {
299  return numberColumnCuts_;
300  }
301  inline void setNumberColumnCuts(int value)
302  {
303  numberColumnCuts_ = value;
304  }
305  inline void incrementNumberColumnCuts(int value = 1)
306  {
307  numberColumnCuts_ += value;
308  }
310  inline int numberCutsActive() const
311  {
312  return numberCutsActive_;
313  }
314  inline void setNumberCutsActive(int value)
315  {
316  numberCutsActive_ = value;
317  }
318  inline void incrementNumberCutsActive(int value = 1)
319  {
320  numberCutsActive_ += value;
321  }
322  inline void setSwitchOffIfLessThan(int value)
323  {
324  switchOffIfLessThan_ = value;
325  }
326  inline int switchOffIfLessThan() const
327  {
328  return switchOffIfLessThan_;
329  }
331  inline bool needsOptimalBasis() const
332  {
333  return (switches_ & 128) != 0;
334  }
336  inline void setNeedsOptimalBasis(bool yesNo)
337  {
338  switches_ &= ~128;
339  switches_ |= yesNo ? 128 : 0;
340  }
342  inline bool mustCallAgain() const
343  {
344  return (switches_ & 8) != 0;
345  }
347  inline void setMustCallAgain(bool yesNo)
348  {
349  switches_ &= ~8;
350  switches_ |= yesNo ? 8 : 0;
351  }
353  inline bool switchedOff() const
354  {
355  return (switches_ & 16) != 0;
356  }
358  inline void setSwitchedOff(bool yesNo)
359  {
360  switches_ &= ~16;
361  switches_ |= yesNo ? 16 : 0;
362  }
364  inline bool ineffectualCuts() const
365  {
366  return (switches_ & 512) != 0;
367  }
369  inline void setIneffectualCuts(bool yesNo)
370  {
371  switches_ &= ~512;
372  switches_ |= yesNo ? 512 : 0;
373  }
375  inline bool whetherToUse() const
376  {
377  return (switches_ & 1024) != 0;
378  }
380  inline void setWhetherToUse(bool yesNo)
381  {
382  switches_ &= ~1024;
383  switches_ |= yesNo ? 1024 : 0;
384  }
386  inline bool whetherInMustCallAgainMode() const
387  {
388  return (switches_ & 2048) != 0;
389  }
391  inline void setWhetherInMustCallAgainMode(bool yesNo)
392  {
393  switches_ &= ~2048;
394  switches_ |= yesNo ? 2048 : 0;
395  }
397  inline bool whetherCallAtEnd() const
398  {
399  return (switches_ & 4096) != 0;
400  }
402  inline void setWhetherCallAtEnd(bool yesNo)
403  {
404  switches_ &= ~4096;
405  switches_ |= yesNo ? 4096 : 0;
406  }
408  inline bool needsRefresh() const
409  {
410  return (switches_ & 8192) != 0;
411  }
413  inline void setNeedsRefresh(bool yesNo)
414  {
415  switches_ &= ~8192;
416  switches_ |= yesNo ? 8192 : 0;
417  }
419  inline int numberCutsAtRoot() const
420  {
421  return numberCutsAtRoot_;
422  }
423  inline void setNumberCutsAtRoot(int value)
424  {
425  numberCutsAtRoot_ = value;
426  }
428  inline int numberActiveCutsAtRoot() const
429  {
431  }
432  inline void setNumberActiveCutsAtRoot(int value)
433  {
434  numberActiveCutsAtRoot_ = value;
435  }
437  inline int numberShortCutsAtRoot() const
438  {
439  return numberShortCutsAtRoot_;
440  }
441  inline void setNumberShortCutsAtRoot(int value)
442  {
443  numberShortCutsAtRoot_ = value;
444  }
446  inline void setModel(CbcModel *model)
447  {
448  model_ = model;
449  }
451  inline bool globalCutsAtRoot() const
452  {
453  return (switches_ & 32) != 0;
454  }
456  inline void setGlobalCutsAtRoot(bool yesNo)
457  {
458  switches_ &= ~32;
459  switches_ |= yesNo ? 32 : 0;
460  }
462  inline bool globalCuts() const
463  {
464  return (switches_ & 256) != 0;
465  }
467  inline void setGlobalCuts(bool yesNo)
468  {
469  switches_ &= ~256;
470  switches_ |= yesNo ? 256 : 0;
471  }
473  void addStatistics(const CbcCutGenerator *other);
475  void scaleBackStatistics(int factor);
477 
478 private:
481 
482  OsiCuts savedCuts_;
488 
489  // The CglCutGenerator object
490  CglCutGenerator *generator_;
491 
494 
506 
511 
517 
540 };
541 
542 // How often to do if mostly switched off (A)
543 #define SCANCUTS 1000
544 // How often to do if mostly switched off (probing B)
545 #define SCANCUTS_PROBING 1000
546 
547 #endif
548 
549 /* vi: softtabstop=2 shiftwidth=2 expandtab tabstop=2
550 */
CbcCutGenerator::setGlobalCuts
void setGlobalCuts(bool yesNo)
Set whether global cuts.
Definition: CbcCutGenerator.hpp:467
CbcCutGenerator::setGlobalCutsAtRoot
void setGlobalCutsAtRoot(bool yesNo)
Set whether global cuts at root.
Definition: CbcCutGenerator.hpp:456
CbcCutGenerator::numberCutsAtRoot
int numberCutsAtRoot() const
Number of cuts generated at root.
Definition: CbcCutGenerator.hpp:419
CbcCutGenerator::cutGeneratorName
const char * cutGeneratorName() const
return name of generator
Definition: CbcCutGenerator.hpp:106
CbcCutGenerator::setHowOften
void setHowOften(int value)
Set the cut generation interval.
CbcCutGenerator::numberCutsInTotal
int numberCutsInTotal() const
Total number of cuts added.
Definition: CbcCutGenerator.hpp:271
CbcCutGenerator::incrementNumberElementsInTotal
void incrementNumberElementsInTotal(int value=1)
Definition: CbcCutGenerator.hpp:292
CbcCutGenerator::numberCuts_
int numberCuts_
Total number of cuts added.
Definition: CbcCutGenerator.hpp:523
CbcCutGenerator::setWhenInfeasible
void setWhenInfeasible(bool value)
Set whether the cut generator should be called when the subproblem is found to be infeasible.
Definition: CbcCutGenerator.hpp:226
CbcCutGenerator::CbcCutGenerator
CbcCutGenerator()
Default constructor.
CbcCutGenerator::numberTimes_
int numberTimes_
Number times cut generator entered.
Definition: CbcCutGenerator.hpp:521
CbcCutGenerator::setNumberActiveCutsAtRoot
void setNumberActiveCutsAtRoot(int value)
Definition: CbcCutGenerator.hpp:432
CbcCutGenerator::inaccuracy
int inaccuracy() const
Get level of cut inaccuracy (0 means exact e.g. cliques)
Definition: CbcCutGenerator.hpp:140
CbcCutGenerator::setNeedsOptimalBasis
void setNeedsOptimalBasis(bool yesNo)
Set if optimal basis needed.
Definition: CbcCutGenerator.hpp:336
CbcCutGenerator::setWhatDepth
void setWhatDepth(int value)
Set the cut generation depth.
CbcCutGenerator::setNumberShortCutsAtRoot
void setNumberShortCutsAtRoot(int value)
Definition: CbcCutGenerator.hpp:441
CbcCutGenerator::whetherInMustCallAgainMode
bool whetherInMustCallAgainMode() const
Whether in must call again mode (or after others)
Definition: CbcCutGenerator.hpp:386
CbcCutGenerator::setAtSolution
void setAtSolution(bool value)
Set whether the cut generator should be called when a solution is found.
Definition: CbcCutGenerator.hpp:211
CbcCutGenerator::numberShortCutsAtRoot_
int numberShortCutsAtRoot_
Number of short cuts at root.
Definition: CbcCutGenerator.hpp:535
CbcCutGenerator::switchOffIfLessThan_
int switchOffIfLessThan_
If first pass at root produces fewer than this cuts then switch off.
Definition: CbcCutGenerator.hpp:505
CbcCutGenerator::setSwitchedOff
void setSwitchedOff(bool yesNo)
Set whether generator switched off for moment.
Definition: CbcCutGenerator.hpp:358
CbcCutGenerator::incrementNumberColumnCuts
void incrementNumberColumnCuts(int value=1)
Definition: CbcCutGenerator.hpp:305
CbcCutGenerator::switchOffIfLessThan
int switchOffIfLessThan() const
Definition: CbcCutGenerator.hpp:326
CbcCutGenerator::whenCutGeneratorInSub_
int whenCutGeneratorInSub_
Number of nodes between calls to the CglCutGenerator::generateCuts routine in sub tree.
Definition: CbcCutGenerator.hpp:502
CbcCutGenerator::timeInCutGenerator_
double timeInCutGenerator_
Time in cut generator.
Definition: CbcCutGenerator.hpp:485
CbcCutGenerator::atSolution
bool atSolution() const
Get whether the cut generator should be called when a solution is found.
Definition: CbcCutGenerator.hpp:206
CbcCutGenerator::incrementNumberTimesEntered
void incrementNumberTimesEntered(int value=1)
Definition: CbcCutGenerator.hpp:266
CbcCutGenerator::setWhetherCallAtEnd
void setWhetherCallAtEnd(bool yesNo)
Set whether to call at end.
Definition: CbcCutGenerator.hpp:402
CbcCutGenerator::depthCutGeneratorInSub_
int depthCutGeneratorInSub_
Depth at which to call the CglCutGenerator::generateCuts routine (If >0 then overrides when and is ca...
Definition: CbcCutGenerator.hpp:516
CbcCutGenerator::needsOptimalBasis
bool needsOptimalBasis() const
Say if optimal basis needed.
Definition: CbcCutGenerator.hpp:331
CbcCutGenerator::maximumTries
int maximumTries() const
Get maximum number of times to enter.
Definition: CbcCutGenerator.hpp:179
CbcCutGenerator::generator
CglCutGenerator * generator() const
Get the CglCutGenerator corresponding to this CbcCutGenerator.
Definition: CbcCutGenerator.hpp:253
CbcCutGenerator::globalCuts
bool globalCuts() const
Whether global cuts.
Definition: CbcCutGenerator.hpp:462
CbcCutGenerator::whetherToUse
bool whetherToUse() const
Whether to use if any cuts generated.
Definition: CbcCutGenerator.hpp:375
CbcCutGenerator::setSwitches
void setSwitches(int value)
Set switches (for copying from virgin state)
Definition: CbcCutGenerator.hpp:190
CbcCutGenerator::setNumberColumnCuts
void setNumberColumnCuts(int value)
Definition: CbcCutGenerator.hpp:301
CbcCutGenerator::switches
int switches() const
Get switches.
Definition: CbcCutGenerator.hpp:185
CbcCutGenerator::operator=
CbcCutGenerator & operator=(const CbcCutGenerator &rhs)
Assignment operator.
CbcCutGenerator::setNormal
void setNormal(bool value)
Set whether the cut generator should be called in the normal place.
Definition: CbcCutGenerator.hpp:200
CbcCutModifier.hpp
CbcCutGenerator::setNeedsRefresh
void setNeedsRefresh(bool yesNo)
Set whether needs refresh on copy.
Definition: CbcCutGenerator.hpp:413
CbcCutGenerator::refreshModel
void refreshModel(CbcModel *model)
Set the client model.
CbcCutGenerator::numberShortCutsAtRoot
int numberShortCutsAtRoot() const
Number of short cuts at root.
Definition: CbcCutGenerator.hpp:437
CbcCutGenerator::setNumberCutsInTotal
void setNumberCutsInTotal(int value)
Definition: CbcCutGenerator.hpp:275
CbcCutGenerator::timeInCutGenerator
double timeInCutGenerator() const
Return time taken in cut generator.
Definition: CbcCutGenerator.hpp:244
CbcCutGenerator::globalCutsAtRoot
bool globalCutsAtRoot() const
Whether global cuts at root.
Definition: CbcCutGenerator.hpp:451
CbcModel
Simple Branch and bound class.
Definition: CbcModel.hpp:100
CbcCutGenerator::generator_
CglCutGenerator * generator_
Definition: CbcCutGenerator.hpp:490
CbcCutGenerator::howOften
int howOften() const
Get the cut generation interval.
Definition: CbcCutGenerator.hpp:130
CbcCutGenerator::incrementNumberCutsInTotal
void incrementNumberCutsInTotal(int value=1)
Definition: CbcCutGenerator.hpp:279
CbcCutGenerator::inaccuracy_
int inaccuracy_
Level of cut inaccuracy (0 means exact e.g. cliques)
Definition: CbcCutGenerator.hpp:519
CbcCutGenerator::model_
CbcModel * model_
The client model.
Definition: CbcCutGenerator.hpp:487
CbcCutGenerator::mustCallAgain
bool mustCallAgain() const
Whether generator MUST be called again if any cuts (i.e. ignore break from loop)
Definition: CbcCutGenerator.hpp:342
CbcCutGenerator::scaleBackStatistics
void scaleBackStatistics(int factor)
Scale back statistics by factor.
CbcCutGenerator::setMaximumTries
void setMaximumTries(int value)
Set maximum number of times to enter.
Definition: CbcCutGenerator.hpp:174
CbcCutGenerator::setWhetherInMustCallAgainMode
void setWhetherInMustCallAgainMode(bool yesNo)
Set whether in must call again mode (or after others)
Definition: CbcCutGenerator.hpp:391
CbcCutGenerator::numberCutsActive
int numberCutsActive() const
Total number of cuts active after (at end of n cut passes at each node)
Definition: CbcCutGenerator.hpp:310
CbcCutGenerator::addStatistics
void addStatistics(const CbcCutGenerator *other)
Add in statistics from other.
CbcCutGenerator::setSwitchOffIfLessThan
void setSwitchOffIfLessThan(int value)
Definition: CbcCutGenerator.hpp:322
CbcCutGenerator::whetherCallAtEnd
bool whetherCallAtEnd() const
Whether to call at end.
Definition: CbcCutGenerator.hpp:397
CbcCutGenerator::switches_
int switches_
Switches - see gets and sets.
Definition: CbcCutGenerator.hpp:537
CbcCutGenerator::setInaccuracy
void setInaccuracy(int level)
Set level of cut inaccuracy (0 means exact e.g. cliques)
Definition: CbcCutGenerator.hpp:145
CbcCutGenerator::setNumberElementsInTotal
void setNumberElementsInTotal(int value)
Definition: CbcCutGenerator.hpp:288
CbcCutGenerator::numberTimesEntered
int numberTimesEntered() const
Number times cut generator entered.
Definition: CbcCutGenerator.hpp:258
CbcCutGenerator::setNumberCutsAtRoot
void setNumberCutsAtRoot(int value)
Definition: CbcCutGenerator.hpp:423
CbcCutGenerator::setWhatDepthInSub
void setWhatDepthInSub(int value)
Set the cut generation depth in sub tree.
CbcCutGenerator::numberCutsAtRoot_
int numberCutsAtRoot_
Number of cuts generated at root.
Definition: CbcCutGenerator.hpp:531
CbcCutGenerator::whatDepth
int whatDepth() const
Get the cut generation depth criterion.
Definition: CbcCutGenerator.hpp:164
CbcCutGenerator::generateCuts
bool generateCuts(OsiCuts &cs, int fullScan, OsiSolverInterface *solver, CbcNode *node)
Generate cuts for the client model.
CbcCutGenerator::setTiming
void setTiming(bool value)
Set whether the cut generator is being timed.
Definition: CbcCutGenerator.hpp:237
CbcCutGenerator::normal
bool normal() const
Get whether the cut generator should be called in the normal place.
Definition: CbcCutGenerator.hpp:195
CbcCutGenerator::whenCutGenerator_
int whenCutGenerator_
Number of nodes between calls to the CglCutGenerator::generateCuts routine.
Definition: CbcCutGenerator.hpp:498
CbcNode
Information required while the node is live.
Definition: CbcNode.hpp:49
CbcCutGenerator::switchedOff
bool switchedOff() const
Whether generator switched off for moment.
Definition: CbcCutGenerator.hpp:353
CbcCutGenerator::numberColumnCuts_
int numberColumnCuts_
Total number of column cuts added.
Definition: CbcCutGenerator.hpp:527
CbcCutGenerator::numberActiveCutsAtRoot
int numberActiveCutsAtRoot() const
Number of cuts active at root.
Definition: CbcCutGenerator.hpp:428
CbcCutGenerator::timing
bool timing() const
Get whether the cut generator is being timed.
Definition: CbcCutGenerator.hpp:232
CbcCutGenerator::ineffectualCuts
bool ineffectualCuts() const
Whether last round of cuts did little.
Definition: CbcCutGenerator.hpp:364
CbcCutGenerator::numberColumnCuts
int numberColumnCuts() const
Total number of column cuts.
Definition: CbcCutGenerator.hpp:297
CbcCutGenerator::howOftenInSub
int howOftenInSub() const
Get the cut generation interval.in sub tree.
Definition: CbcCutGenerator.hpp:135
CbcCutGenerator::setIneffectualCuts
void setIneffectualCuts(bool yesNo)
Set whether last round of cuts did little.
Definition: CbcCutGenerator.hpp:369
CbcCutGenerator::setModel
void setModel(CbcModel *model)
Set model.
Definition: CbcCutGenerator.hpp:446
CbcCutGenerator
Interface between Cbc and Cut Generation Library.
Definition: CbcCutGenerator.hpp:49
CbcCutGenerator::incrementTimeInCutGenerator
void incrementTimeInCutGenerator(double value)
Definition: CbcCutGenerator.hpp:248
CbcCutGenerator::maximumTries_
int maximumTries_
Maximum number of times to enter.
Definition: CbcCutGenerator.hpp:539
CbcCutGenerator::incrementNumberCutsActive
void incrementNumberCutsActive(int value=1)
Definition: CbcCutGenerator.hpp:318
CbcCutGenerator::setNumberTimesEntered
void setNumberTimesEntered(int value)
Definition: CbcCutGenerator.hpp:262
CbcCutGenerator::generatorName_
char * generatorName_
Name of generator.
Definition: CbcCutGenerator.hpp:493
CbcCutGenerator::numberElements_
int numberElements_
Total number of elements added.
Definition: CbcCutGenerator.hpp:525
CbcCutGenerator::numberCutsActive_
int numberCutsActive_
Total number of cuts active after (at end of n cut passes at each node)
Definition: CbcCutGenerator.hpp:529
CbcCutGenerator::whenInfeasible
bool whenInfeasible() const
Get whether the cut generator should be called when the subproblem is found to be infeasible.
Definition: CbcCutGenerator.hpp:219
CbcCutGenerator::whatDepthInSub
int whatDepthInSub() const
Get the cut generation depth criterion.in sub tree.
Definition: CbcCutGenerator.hpp:169
CbcCutGenerator::setNumberCutsActive
void setNumberCutsActive(int value)
Definition: CbcCutGenerator.hpp:314
CbcCutGenerator::~CbcCutGenerator
~CbcCutGenerator()
Destructor.
CbcCutGenerator::needsRefresh
bool needsRefresh() const
Whether needs refresh on copy.
Definition: CbcCutGenerator.hpp:408
CbcCutGenerator::numberElementsInTotal
int numberElementsInTotal() const
Total number of elements added.
Definition: CbcCutGenerator.hpp:284
CbcCutGenerator::setMustCallAgain
void setMustCallAgain(bool yesNo)
Set whether generator MUST be called again if any cuts (i.e. ignore break from loop)
Definition: CbcCutGenerator.hpp:347
CbcCutGenerator::setWhetherToUse
void setWhetherToUse(bool yesNo)
Set whether to use if any cuts generated.
Definition: CbcCutGenerator.hpp:380
CbcCutGenerator::numberActiveCutsAtRoot_
int numberActiveCutsAtRoot_
Number of cuts active at root.
Definition: CbcCutGenerator.hpp:533
CbcCutGenerator::savedCuts_
OsiCuts savedCuts_
Saved cuts.
Definition: CbcCutGenerator.hpp:483
CbcCutGenerator::depthCutGenerator_
int depthCutGenerator_
Depth at which to call the CglCutGenerator::generateCuts routine (If >0 then overrides when and is ca...
Definition: CbcCutGenerator.hpp:510
CbcCutGenerator::generateTuning
void generateTuning(FILE *fp)
Create C++ lines to show how to tune.