Skip to content

Commit 9089098

Browse files
committed
Simplified Highs::forceHighsSolutionBasisSize()
1 parent f1afc85 commit 9089098

File tree

1 file changed

+15
-52
lines changed

1 file changed

+15
-52
lines changed

highs/lp_data/Highs.cpp

Lines changed: 15 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -4376,68 +4376,31 @@ void Highs::forceHighsSolutionBasisSize() {
43764376
// HighsBasis and HighsInfo
43774377
const HighsInt num_col = this->model_.lp_.num_col_;
43784378
const HighsInt num_row = this->model_.lp_.num_row_;
4379-
HighsInt previous_size;
4380-
// Col values
4381-
previous_size = static_cast<HighsInt>(solution_.col_value.size());
4382-
solution_.col_value.resize(num_col);
4383-
if (previous_size < num_col) {
4384-
for (HighsInt iCol = previous_size; iCol < num_col; iCol++)
4385-
solution_.col_value[iCol] = 0;
4379+
// Values
4380+
if (solution_.col_value.size() < static_cast<size_t>(num_col) ||
4381+
solution_.row_value.size() < static_cast<size_t>(num_row)) {
43864382
solution_.value_valid = false;
43874383
info_.primal_solution_status = kSolutionStatusNone;
43884384
}
4389-
// Row values
4390-
previous_size = static_cast<HighsInt>(solution_.row_value.size());
4391-
solution_.row_value.resize(num_row);
4392-
if (previous_size < num_row) {
4393-
for (HighsInt iRow = previous_size; iRow < num_row; iRow++)
4394-
solution_.row_value[iRow] = 0;
4395-
solution_.value_valid = false;
4396-
info_.primal_solution_status = kSolutionStatusNone;
4397-
}
4398-
// Col duals
4399-
previous_size = static_cast<HighsInt>(solution_.col_dual.size());
4400-
solution_.col_dual.resize(num_col);
4401-
if (previous_size < num_col) {
4402-
for (HighsInt iCol = previous_size; iCol < num_col; iCol++)
4403-
solution_.col_dual[iCol] = 0;
4385+
solution_.col_value.resize(num_col, 0);
4386+
solution_.row_value.resize(num_row, 0);
4387+
// Duals
4388+
if (solution_.col_dual.size() < static_cast<size_t>(num_col) ||
4389+
solution_.row_dual.size() < static_cast<size_t>(num_row)) {
44044390
solution_.dual_valid = false;
44054391
info_.dual_solution_status = kSolutionStatusNone;
44064392
}
4407-
// Row duals
4408-
previous_size = static_cast<HighsInt>(solution_.row_dual.size());
4409-
solution_.row_dual.resize(num_row);
4410-
if (previous_size < num_row) {
4411-
for (HighsInt iRow = previous_size; iRow < num_row; iRow++)
4412-
solution_.row_dual[iRow] = 0;
4413-
solution_.dual_valid = false;
4414-
info_.dual_solution_status = kSolutionStatusNone;
4415-
}
4416-
4417-
// Ensure that the HiGHS basis vectors are the right size,
4418-
// invalidating the basis if they aren't
4419-
previous_size = static_cast<HighsInt>(basis_.col_status.size());
4420-
if (previous_size != num_col) {
4421-
basis_.col_status.resize(num_col);
4422-
if (previous_size < num_col) {
4423-
for (HighsInt iCol = previous_size; iCol < num_col; iCol++)
4424-
basis_.col_status[iCol] = HighsBasisStatus::kNonbasic;
4425-
}
4426-
basis_.valid = false;
4427-
basis_.useful = false;
4428-
info_.basis_validity = kBasisValidityInvalid;
4429-
}
4430-
previous_size = static_cast<HighsInt>(basis_.row_status.size());
4431-
if (previous_size != num_row) {
4432-
basis_.row_status.resize(num_row);
4433-
if (previous_size < num_row) {
4434-
for (HighsInt iRow = previous_size; iRow < num_row; iRow++)
4435-
basis_.row_status[iRow] = HighsBasisStatus::kBasic;
4436-
}
4393+
solution_.col_dual.resize(num_col, 0);
4394+
solution_.row_dual.resize(num_row, 0);
4395+
// Basis
4396+
if (basis_.col_status.size() != static_cast<size_t>(num_col) ||
4397+
basis_.row_status.size() != static_cast<size_t>(num_row)) {
44374398
basis_.valid = false;
44384399
basis_.useful = false;
44394400
info_.basis_validity = kBasisValidityInvalid;
44404401
}
4402+
basis_.col_status.resize(num_col, HighsBasisStatus::kNonbasic);
4403+
basis_.row_status.resize(num_row, HighsBasisStatus::kBasic);
44414404
}
44424405

44434406
void Highs::setHighsModelStatusAndClearSolutionAndBasis(

0 commit comments

Comments
 (0)