@@ -4368,23 +4368,39 @@ void Highs::newHighsBasis() {
43684368// model, and that the HiGHS basis is kept up-to-date with any solved
43694369// basis
43704370void Highs::forceHighsSolutionBasisSize () {
4371- // Ensure that the HiGHS solution vectors are the right size
4372- solution_.col_value .resize (model_.lp_ .num_col_ );
4373- solution_.row_value .resize (model_.lp_ .num_row_ );
4374- solution_.col_dual .resize (model_.lp_ .num_col_ );
4375- solution_.row_dual .resize (model_.lp_ .num_row_ );
4376- // Ensure that the HiGHS basis vectors are the right size,
4377- // invalidating the basis if they aren't
4378- if (basis_.col_status .size () != static_cast <size_t >(model_.lp_ .num_col_ )) {
4379- basis_.col_status .resize (model_.lp_ .num_col_ );
4380- basis_.valid = false ;
4381- basis_.useful = false ;
4371+ // Ensure that the HiGHS solution and basis vectors are the right size
4372+ //
4373+ // If the column or row, values or duals, are increased in size,
4374+ // ensure that values are assigned to the new entries, and that
4375+ // validity and status values are over-written in HighsSolution,
4376+ // HighsBasis and HighsInfo
4377+ const HighsInt num_col = this ->model_ .lp_ .num_col_ ;
4378+ const HighsInt num_row = this ->model_ .lp_ .num_row_ ;
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)) {
4382+ solution_.value_valid = false ;
4383+ info_.primal_solution_status = kSolutionStatusNone ;
4384+ }
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)) {
4390+ solution_.dual_valid = false ;
4391+ info_.dual_solution_status = kSolutionStatusNone ;
43824392 }
4383- if (basis_.row_status .size () != static_cast <size_t >(model_.lp_ .num_row_ )) {
4384- basis_.row_status .resize (model_.lp_ .num_row_ );
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)) {
43854398 basis_.valid = false ;
43864399 basis_.useful = false ;
4400+ info_.basis_validity = kBasisValidityInvalid ;
43874401 }
4402+ basis_.col_status .resize (num_col, HighsBasisStatus::kNonbasic );
4403+ basis_.row_status .resize (num_row, HighsBasisStatus::kBasic );
43884404}
43894405
43904406void Highs::setHighsModelStatusAndClearSolutionAndBasis (
0 commit comments