Skip to content

Commit bbf5224

Browse files
committed
Introduced num_infinite_hessian_values to HighsUserScaleData
1 parent 023eade commit bbf5224

File tree

3 files changed

+26
-14
lines changed

3 files changed

+26
-14
lines changed

highs/lp_data/HStruct.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,7 @@ struct HighsUserScaleData {
191191
double small_matrix_value;
192192
double large_matrix_value;
193193
HighsInt num_infinite_costs;
194+
HighsInt num_infinite_hessian_values;
194195
HighsInt num_infinite_col_bounds;
195196
HighsInt num_infinite_row_bounds;
196197
HighsInt num_small_matrix_values;
@@ -200,7 +201,6 @@ struct HighsUserScaleData {
200201
const double& infinite_cost_, const double& infinite_bound_,
201202
const double& small_matrix_value_,
202203
const double& large_matrix_value_);
203-
bool scaleError() const;
204204
bool scaleError(std::string& message) const;
205205
bool scaleWarning(std::string& message) const;
206206
};

highs/lp_data/HighsLpUtils.cpp

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3716,20 +3716,15 @@ void HighsUserScaleData::initialise(const HighsInt& user_cost_scale_,
37163716
this->small_matrix_value = small_matrix_value_;
37173717
this->large_matrix_value = large_matrix_value_;
37183718
this->num_infinite_costs = 0;
3719+
this->num_infinite_hessian_values = 0;
37193720
this->num_infinite_col_bounds = 0;
37203721
this->num_infinite_row_bounds = 0;
37213722
this->num_small_matrix_values = 0;
37223723
this->num_large_matrix_values = 0;
37233724
}
37243725

3725-
bool HighsUserScaleData::scaleError() const {
3726-
return this->num_infinite_costs + this->num_infinite_col_bounds +
3727-
this->num_infinite_row_bounds + this->num_large_matrix_values >
3728-
0;
3729-
}
3730-
37313726
bool HighsUserScaleData::scaleError(std::string& message) const {
3732-
if (this->num_infinite_costs + this->num_infinite_col_bounds +
3727+
if (this->num_infinite_costs + this->num_infinite_hessian_values + this->num_infinite_col_bounds +
37333728
this->num_infinite_row_bounds + this->num_large_matrix_values ==
37343729
0)
37353730
return false;
@@ -3749,8 +3744,21 @@ bool HighsUserScaleData::scaleError(std::string& message) const {
37493744
ss << " " << this->num_infinite_costs << " infinite cost";
37503745
if (this->num_infinite_costs > 1) ss << "s";
37513746
}
3752-
if (this->num_infinite_col_bounds) {
3747+
if (this->num_infinite_hessian_values) {
37533748
if (this->num_infinite_costs) {
3749+
if (this->num_infinite_col_bounds ||
3750+
this->num_infinite_row_bounds) {
3751+
ss << ",";
3752+
} else {
3753+
ss << " and";
3754+
}
3755+
}
3756+
ss << " " << this->num_infinite_hessian_values << " infinite Hessian values";
3757+
if (this->num_infinite_hessian_values > 1) ss << "s";
3758+
}
3759+
if (this->num_infinite_col_bounds) {
3760+
if (this->num_infinite_costs ||
3761+
this->num_infinite_hessian_values) {
37543762
if (this->num_infinite_row_bounds) {
37553763
ss << ",";
37563764
} else {
@@ -3761,13 +3769,17 @@ bool HighsUserScaleData::scaleError(std::string& message) const {
37613769
if (this->num_infinite_col_bounds > 1) ss << "s";
37623770
}
37633771
if (this->num_infinite_row_bounds) {
3764-
if (this->num_infinite_costs || this->num_infinite_col_bounds) ss << " and";
3772+
if (this->num_infinite_costs ||
3773+
this->num_infinite_hessian_values ||
3774+
this->num_infinite_col_bounds) ss << " and";
37653775
ss << " " << this->num_infinite_row_bounds << " infinite row bound";
37663776
if (this->num_infinite_row_bounds > 1) ss << "s";
37673777
}
37683778
if (this->num_large_matrix_values) {
3769-
if (this->num_infinite_costs + this->num_infinite_col_bounds +
3770-
this->num_infinite_row_bounds >
3779+
if (this->num_infinite_costs +
3780+
this->num_infinite_hessian_values +
3781+
this->num_infinite_col_bounds +
3782+
this->num_infinite_row_bounds >
37713783
0)
37723784
ss << ", and";
37733785
ss << " " << this->num_large_matrix_values << " large matrix value";

highs/model/HighsHessianUtils.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -522,14 +522,14 @@ void reportHessian(const HighsLogOptions& log_options, const HighsInt dim,
522522

523523
void userScaleHessian(HighsHessian hessian, HighsUserScaleData& data,
524524
const bool apply) {
525-
data.num_infinite_costs = 0;
525+
data.num_infinite_hessian_values = 0;
526526
if (!hessian.dim_) return;
527527
const HighsInt user_cost_scale = data.user_cost_scale;
528528
if (!user_cost_scale) return;
529529
double cost_scale_value = std::pow(2, user_cost_scale);
530530
for (HighsInt iEl = 0; iEl < hessian.start_[hessian.dim_]; iEl++) {
531531
double value = hessian.value_[iEl] *= cost_scale_value;
532-
if (std::abs(value) > data.infinite_cost) data.num_infinite_costs++;
532+
if (std::abs(value) > data.infinite_cost) data.num_infinite_hessian_values++;
533533
if (apply) hessian.value_[iEl] = value;
534534
}
535535
}

0 commit comments

Comments
 (0)