[PPL-devel] [GIT] ppl/ppl(master): Added WEIGHT_BEGIN() macros and reset a few weights.
Enea Zaffanella
zaffanella at cs.unipr.it
Tue Jul 14 15:00:55 CEST 2009
Module: ppl/ppl
Branch: master
Commit: cd670303e2a9dcf9248ab316bc6b8e81163188a6
URL: http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=cd670303e2a9dcf9248ab316bc6b8e81163188a6
Author: Enea Zaffanella <zaffanella at cs.unipr.it>
Date: Tue Jul 14 14:59:48 2009 +0200
Added WEIGHT_BEGIN() macros and reset a few weights.
---
src/MIP_Problem.cc | 18 ++++++++++++------
1 files changed, 12 insertions(+), 6 deletions(-)
diff --git a/src/MIP_Problem.cc b/src/MIP_Problem.cc
index 1d3819b..284ccb0 100644
--- a/src/MIP_Problem.cc
+++ b/src/MIP_Problem.cc
@@ -886,6 +886,7 @@ PPL::MIP_Problem::steepest_edge_float_entering_index() const {
for (dimension_type j = tableau.num_columns() - 1; j-- > 1; ) {
const Coefficient& cost_j = working_cost[j];
if (sgn(cost_j) == cost_sign) {
+ WEIGHT_BEGIN();
// We cannot compute the (exact) square root of abs(\Delta x_j).
// The workaround is to compute the square of `cost[j]'.
assign(challenger_num, cost_j);
@@ -911,6 +912,7 @@ PPL::MIP_Problem::steepest_edge_float_entering_index() const {
current_value = challenger_value;
entering_index = j;
}
+ WEIGHT_ADD_MUL(1, tableau_num_rows);
}
}
return entering_index;
@@ -925,6 +927,7 @@ PPL::MIP_Problem::steepest_edge_exact_entering_index() const {
// The normalization factor for each coefficient in the tableau.
std::vector<Coefficient> norm_factor(tableau_num_rows);
{
+ WEIGHT_BEGIN();
// Compute the lcm of all the coefficients of variables in base.
PPL_DIRTY_TEMP_COEFFICIENT(lcm_basis);
lcm_basis = 1;
@@ -937,8 +940,8 @@ PPL::MIP_Problem::steepest_edge_exact_entering_index() const {
// `lcm_basis' will no longer be needed.
lcm_basis *= lcm_basis;
std::swap(squared_lcm_basis, lcm_basis);
+ WEIGHT_ADD_MUL(2, tableau_num_rows);
}
- WEIGHT_ADD_MUL(2, tableau_num_rows);
// Defined here to avoid repeated (de-)allocations.
PPL_DIRTY_TEMP_COEFFICIENT(challenger_num);
@@ -954,6 +957,7 @@ PPL::MIP_Problem::steepest_edge_exact_entering_index() const {
for (dimension_type j = tableau.num_columns() - 1; j-- > 1; ) {
const Coefficient& cost_j = working_cost[j];
if (sgn(cost_j) == cost_sign) {
+ WEIGHT_BEGIN();
// We cannot compute the (exact) square root of abs(\Delta x_j).
// The workaround is to compute the square of `cost[j]'.
challenger_num = cost_j * cost_j;
@@ -969,7 +973,6 @@ PPL::MIP_Problem::steepest_edge_exact_entering_index() const {
add_mul_assign(challenger_den, scalar_value, scalar_value);
}
}
- WEIGHT_ADD_MUL(2, tableau_num_rows);
// Initialization during the first loop.
if (entering_index == 0) {
std::swap(current_num, challenger_num);
@@ -985,6 +988,7 @@ PPL::MIP_Problem::steepest_edge_exact_entering_index() const {
std::swap(current_den, challenger_den);
entering_index = j;
}
+ WEIGHT_ADD_MUL(1, tableau_num_rows);
}
}
return entering_index;
@@ -1015,6 +1019,7 @@ void
PPL::MIP_Problem::linear_combine(Row& x,
const Row& y,
const dimension_type k) {
+ WEIGHT_BEGIN();
const dimension_type x_size = x.size();
PPL_ASSERT(x_size == y.size());
PPL_ASSERT(y[k] != 0 && x[k] != 0);
@@ -1036,7 +1041,7 @@ PPL::MIP_Problem::linear_combine(Row& x,
}
x[k] = 0;
x.normalize();
- WEIGHT_ADD_MUL(3, x_size);
+ WEIGHT_ADD_MUL(1, x_size);
}
// See pages 42-43 of [PapadimitriouS98].
@@ -1092,6 +1097,7 @@ PPL::MIP_Problem
const Coefficient& t_ib = t_i[base[i]];
const int t_ie_sign = sgn(t_ie);
if (t_ie_sign != 0 && t_ie_sign == sgn(t_ib)) {
+ WEIGHT_BEGIN();
const Row& t_e = tableau[exiting_base_index];
const Coefficient& t_ee = t_e[entering_var_index];
lcm_assign(lcm, t_ee, t_ie);
@@ -1106,7 +1112,7 @@ PPL::MIP_Problem
if (sign > 0
|| (sign == 0 && base[i] < base[exiting_base_index]))
exiting_base_index = i;
- WEIGHT_ADD(7);
+ WEIGHT_ADD(1);
}
}
return exiting_base_index;
@@ -1162,6 +1168,7 @@ PPL::MIP_Problem::compute_simplex_using_steepest_edge_float() {
// feasible region.
pivot(entering_var_index, exiting_base_index);
+ WEIGHT_BEGIN();
// Now begins the objective function's value check to choose between
// the `textbook' and the float `steepest-edge' technique.
cost_sgn_coeff = working_cost[working_cost.size()-1];
@@ -1172,7 +1179,6 @@ PPL::MIP_Problem::compute_simplex_using_steepest_edge_float() {
challenger *= current_den;
abs_assign(current, cost_sgn_coeff);
current *= current_num;
- WEIGHT_ADD(2);
#if PPL_NOISY_SIMPLEX
++num_iterations;
if (num_iterations % 200 == 0)
@@ -1200,6 +1206,7 @@ PPL::MIP_Problem::compute_simplex_using_steepest_edge_float() {
if (cost_sgn_coeff < 0)
neg_assign(current_num);
abs_assign(current_den, cost_sgn_coeff);
+ WEIGHT_ADD(1);
}
}
@@ -1230,7 +1237,6 @@ PPL::MIP_Problem::compute_simplex_using_exact_pricing() {
if (exiting_base_index == tableau_num_rows)
return false;
- WEIGHT_ADD(1);
// Check if the client has requested abandoning all expensive
// computations. If so, the exception specified by the client
// is thrown now.
More information about the PPL-devel
mailing list