diff options
author | Harpreet | 2016-08-04 15:25:44 +0530 |
---|---|---|
committer | Harpreet | 2016-08-04 15:25:44 +0530 |
commit | 9fd2976931c088dc523974afb901e96bad20f73c (patch) | |
tree | 22502de6e6988d5cd595290d11266f8432ad825b /build/Bonmin/include/coin/CbcBranchBase.hpp | |
download | FOSSEE-Optim-toolbox-development-9fd2976931c088dc523974afb901e96bad20f73c.tar.gz FOSSEE-Optim-toolbox-development-9fd2976931c088dc523974afb901e96bad20f73c.tar.bz2 FOSSEE-Optim-toolbox-development-9fd2976931c088dc523974afb901e96bad20f73c.zip |
initial add
Diffstat (limited to 'build/Bonmin/include/coin/CbcBranchBase.hpp')
-rw-r--r-- | build/Bonmin/include/coin/CbcBranchBase.hpp | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/build/Bonmin/include/coin/CbcBranchBase.hpp b/build/Bonmin/include/coin/CbcBranchBase.hpp new file mode 100644 index 0000000..56c4261 --- /dev/null +++ b/build/Bonmin/include/coin/CbcBranchBase.hpp @@ -0,0 +1,78 @@ +/* $Id: CbcBranchBase.hpp 1573 2011-01-05 01:12:36Z lou $ */ +// Copyright (C) 2002, International Business Machines +// Corporation and others. All Rights Reserved. +// This code is licensed under the terms of the Eclipse Public License (EPL). + +#ifndef CbcBranchBase_H +#define CbcBranchBase_H + +#include <string> +#include <vector> +#include "OsiBranchingObject.hpp" + +enum CbcRangeCompare { + CbcRangeSame, + CbcRangeDisjoint, + CbcRangeSubset, + CbcRangeSuperset, + CbcRangeOverlap +}; + +#include "CbcObject.hpp" +#include "CbcBranchingObject.hpp" +#include "CbcBranchDecision.hpp" +#include "CbcConsequence.hpp" +#include "CbcObjectUpdateData.hpp" + +//############################################################################## + +/** Compare two ranges. The two bounds arrays are both of size two and + describe closed intervals. Return the appropriate CbcRangeCompare value + (first argument being the sub/superset if that's the case). In case of + overlap (and if \c replaceIfOverlap is true) replace the content of thisBd + with the intersection of the ranges. +*/ +static inline CbcRangeCompare +CbcCompareRanges(double* thisBd, const double* otherBd, + const bool replaceIfOverlap) +{ + const double lbDiff = thisBd[0] - otherBd[0]; + if (lbDiff < 0) { // lb of this < lb of other + if (thisBd[1] >= otherBd[1]) { // ub of this >= ub of other + return CbcRangeSuperset; + } else if (thisBd[1] < otherBd[0]) { + return CbcRangeDisjoint; + } else { + // overlap + if (replaceIfOverlap) { + thisBd[0] = otherBd[0]; + } + return CbcRangeOverlap; + } + } else if (lbDiff > 0) { // lb of this > lb of other + if (thisBd[1] <= otherBd[1]) { // ub of this <= ub of other + return CbcRangeSubset; + } else if (thisBd[0] > otherBd[1]) { + return CbcRangeDisjoint; + } else { + // overlap + if (replaceIfOverlap) { + thisBd[1] = otherBd[1]; + } + return CbcRangeOverlap; + } + } else { // lb of this == lb of other + if (thisBd[1] == otherBd[1]) { + return CbcRangeSame; + } + return thisBd[1] < otherBd[1] ? CbcRangeSubset : CbcRangeSuperset; + } + + return CbcRangeSame; // fake return + +} + +//############################################################################# + +#endif + |