Skip to content

Commit 24af689

Browse files
committed
error in clique strengthening if might be infeasible
1 parent ac6ad93 commit 24af689

File tree

4 files changed

+10
-6
lines changed

4 files changed

+10
-6
lines changed

src/CoinCliqueList.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ size_t CoinCliqueList::nNodeOccurrences(size_t idxNode) const
128128
}
129129

130130
#ifdef DEBUGCG
131-
void CoinCliqueList::validateClique(const CoinConflictGraph *cgraph, const size_t *idxs, const size_t size) {
131+
bool CoinCliqueList::validateClique(const CoinConflictGraph *cgraph, const size_t *idxs, const size_t size) {
132132
if (size == 0) {
133133
fprintf(stderr, "Empty clique!\n");
134134
abort();
@@ -143,9 +143,10 @@ void CoinCliqueList::validateClique(const CoinConflictGraph *cgraph, const size_
143143
for (size_t j = i + 1; j < size; j++) {
144144
if ((!cgraph->conflicting(idxs[i], idxs[j])) || (idxs[i] == idxs[j])) {
145145
fprintf(stderr, "ERROR: Nodes %ld and %ld are not in conflict.\n", idxs[i], idxs[j]);
146-
abort();
146+
return false;// may be infeasible abort();
147147
}
148148
}
149149
}
150+
return true;
150151
}
151152
#endif

src/CoinCliqueList.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,12 +115,13 @@ class COINUTILSLIB_EXPORT CoinCliqueList
115115
#ifdef DEBUGCG
116116
/**
117117
* Validate a clique according to a conflict graph.
118+
* returns false if bad in some way
118119
*
119120
* @param cgraph conflict graph
120121
* @param idxs indexes of the clique
121122
* @param size size of the clique
122123
**/
123-
static void validateClique(const CoinConflictGraph *cgraph, const size_t *idxs, const size_t size);
124+
static bool validateClique(const CoinConflictGraph *cgraph, const size_t *idxs, const size_t size);
124125
#endif
125126

126127
private:

src/CoinCliqueSet.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,11 +73,11 @@ bool CoinCliqueSet::insertIfNotDuplicate(size_t size, const size_t *els) {
7373
}
7474

7575
size_t CoinCliqueSet::vectorHashCode(const std::vector<size_t> &els) {
76+
77+
size_t size = els.size();
7678
#ifdef DEBUGCG
7779
assert(size > 0);
7880
#endif
79-
80-
size_t size = els.size();
8181
size_t code = (size * sequence_[0]);
8282
code += (els[0] * sequence_[1]);
8383

src/CoinDynamicConflictGraph.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -199,9 +199,11 @@ CoinDynamicConflictGraph::CoinDynamicConflictGraph (
199199
if ( twoLargest[0] + twoLargest[1] <= rhs && (rowSense!='E' && rowSense!='R') )
200200
continue;
201201

202+
if(rhs < 0.0)
203+
continue; // might be infeasible
202204
#ifdef DEBUGCG
203205
assert(nz == length[idxRow]);
204-
assert(rhs >= 0.0);
206+
//assert(rhs >= 0.0);
205207
#endif
206208

207209
//explicit clique

0 commit comments

Comments
 (0)