Skip to content

Commit 12eb12d

Browse files
committed
minimize code changes
1 parent 8c2e06e commit 12eb12d

File tree

3 files changed

+15
-36
lines changed

3 files changed

+15
-36
lines changed

cpp/src/dual_simplex/diving_queue.hpp

Lines changed: 3 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,6 @@ struct diving_root_t {
4141
{
4242
return a.node.lower_bound > b.node.lower_bound;
4343
}
44-
45-
friend bool operator<(const diving_root_t<i_t, f_t>& a, const diving_root_t<i_t, f_t>& b)
46-
{
47-
return a.node.lower_bound < b.node.lower_bound;
48-
}
4944
};
5045

5146
// A min-heap for storing the starting nodes for the dives.
@@ -57,22 +52,14 @@ class diving_queue_t {
5752
std::vector<diving_root_t<i_t, f_t>> buffer;
5853
static constexpr i_t max_size_ = 256;
5954

60-
void discard_worst_node()
61-
{
62-
auto max_it = std::max_element(buffer.begin(), buffer.end(), std::less<>());
63-
std::swap(*max_it, buffer.back());
64-
buffer.pop_back();
65-
std::make_heap(buffer.begin(), buffer.end(), std::greater<>());
66-
}
67-
6855
public:
6956
diving_queue_t() { buffer.reserve(max_size_); }
7057

7158
void push(diving_root_t<i_t, f_t>&& node)
7259
{
7360
buffer.push_back(std::move(node));
7461
std::push_heap(buffer.begin(), buffer.end(), std::greater<>());
75-
if (buffer.size() > max_size()) { discard_worst_node(); }
62+
if (buffer.size() > max_size()) { buffer.pop_back(); }
7663
}
7764

7865
void emplace(mip_node_t<i_t, f_t>&& node,
@@ -81,12 +68,11 @@ class diving_queue_t {
8168
{
8269
buffer.emplace_back(std::move(node), lower, upper);
8370
std::push_heap(buffer.begin(), buffer.end(), std::greater<>());
84-
if (buffer.size() > max_size()) { discard_worst_node(); }
71+
if (buffer.size() > max_size()) { buffer.pop_back(); }
8572
}
8673

8774
diving_root_t<i_t, f_t> pop()
8875
{
89-
assert(!buffer.empty() && "Cannot pop from an empty queue!");
9076
std::pop_heap(buffer.begin(), buffer.end(), std::greater<>());
9177
diving_root_t<i_t, f_t> node = std::move(buffer.back());
9278
buffer.pop_back();
@@ -95,13 +81,7 @@ class diving_queue_t {
9581

9682
i_t size() const { return buffer.size(); }
9783
constexpr i_t max_size() const { return max_size_; }
98-
99-
const diving_root_t<i_t, f_t>& top() const
100-
{
101-
assert(!buffer.empty() && "Cannot get top from an empty queue!");
102-
return buffer.front();
103-
}
104-
84+
const diving_root_t<i_t, f_t>& top() const { return buffer.front(); }
10585
void clear() { buffer.clear(); }
10686
};
10787

cpp/src/dual_simplex/mip_node.hpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,6 @@ class mip_node_t {
105105
assert(branch_var >= 0);
106106
assert(lower.size() > branch_var);
107107
assert(upper.size() > branch_var);
108-
assert(bounds_changed.size() > branch_var);
109108

110109
// If the bounds have already been updated on another node,
111110
// skip this node as it contains a less tight bounds.

cpp/src/dual_simplex/node_presolve.cpp

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -252,21 +252,21 @@ bool node_presolver_t<i_t, f_t>::bound_strengthening(
252252
int num_ub_changed = 0;
253253

254254
for (i_t i = 0; i < n; ++i) {
255-
if (lower[i] > lower_bounds[i] + settings.primal_tol ||
256-
(!std::isfinite(lower_bounds[i]) && std::isfinite(lower[i]))) {
255+
if (lower[i] > problem.lower[i] + settings.primal_tol ||
256+
(!std::isfinite(problem.lower[i]) && std::isfinite(lower[i]))) {
257257
num_lb_changed++;
258-
lb_change += std::isfinite(lower_bounds[i])
259-
? (lower[i] - lower_bounds[i]) /
260-
(1e-6 + std::max(std::abs(lower[i]), std::abs(lower_bounds[i])))
261-
: 1.0;
258+
lb_change +=
259+
std::isfinite(problem.lower[i])
260+
? (lower[i] - problem.lower[i]) / (1e-6 + std::max(abs(lower[i]), abs(problem.lower[i])))
261+
: 1.0;
262262
}
263-
if (upper[i] < upper_bounds[i] - settings.primal_tol ||
264-
(!std::isfinite(upper_bounds[i]) && std::isfinite(upper[i]))) {
263+
if (upper[i] < problem.upper[i] - settings.primal_tol ||
264+
(!std::isfinite(problem.upper[i]) && std::isfinite(upper[i]))) {
265265
num_ub_changed++;
266-
ub_change += std::isfinite(upper_bounds[i])
267-
? (upper_bounds[i] - upper[i]) /
268-
(1e-6 + std::max(std::abs(upper_bounds[i]), std::abs(upper[i])))
269-
: 1.0;
266+
ub_change +=
267+
std::isfinite(problem.upper[i])
268+
? (problem.upper[i] - upper[i]) / (1e-6 + std::max(abs(problem.upper[i]), abs(upper[i])))
269+
: 1.0;
270270
}
271271
}
272272

0 commit comments

Comments
 (0)