Skip to content

Commit 4ad6e3b

Browse files
committed
Use HighsTerminator::my_instance
1 parent 9948f3c commit 4ad6e3b

File tree

4 files changed

+31
-39
lines changed

4 files changed

+31
-39
lines changed

highs/mip/HighsMipSolver.cpp

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -690,23 +690,25 @@ void HighsMipSolver::run() {
690690

691691
void HighsMipSolver::cleanupSolve() {
692692
if (!submip) {
693-
if (terminator_.notTerminated()) {
694-
// No other instance has terminated the MIP race, so terminate
695-
// it
696-
highsLogUser(options_mip_->log_options, HighsLogType::kInfo,
697-
"instance%d: terminate %6.4f (MIP)\n",
698-
int(this->mipdata_->mipRaceMyInstance()),
699-
this->timer_.read());
700-
terminator_.terminate();
701-
} else {
702-
// Indicate that this MIP race instance has been interrupted
703-
highsLogUser(options_mip_->log_options, HighsLogType::kInfo,
704-
"instance%d: terminated %6.4f (MIP)\n",
705-
int(this->mipdata_->mipRaceMyInstance()),
706-
this->timer_.read());
707-
modelstatus_ = HighsModelStatus::kHighsInterrupt;
693+
if (mipdata_->terminatorActive()) {
694+
if (!mipdata_->terminatorTerminated()) {
695+
// No other instance has terminated the MIP race, so terminate
696+
// it
697+
highsLogUser(options_mip_->log_options, HighsLogType::kInfo,
698+
"instance%d: terminate %6.4f (MIP)\n",
699+
int(this->mipdata_->mipRaceMyInstance()),
700+
this->timer_.read());
701+
mipdata_->terminatorTerminate();
702+
} else {
703+
// Indicate that this instance has been interrupted
704+
highsLogUser(options_mip_->log_options, HighsLogType::kInfo,
705+
"instance%d: terminated %6.4f (MIP)\n",
706+
int(this->mipdata_->mipRaceMyInstance()),
707+
this->timer_.read());
708+
modelstatus_ = HighsModelStatus::kHighsInterrupt;
709+
}
710+
if (mipdata_->mipRaceActive()) mipdata_->mipRaceReport();
708711
}
709-
mipdata_->mipRaceReport();
710712
}
711713

712714
// Force a final logging line

highs/mip/HighsMipSolver.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,8 @@ struct HighsTerminator {
6767
void initialise(HighsInt num_instance_, HighsInt my_instance_,
6868
HighsModelStatus* record_);
6969
void terminate();
70-
HighsModelStatus terminated() const;
71-
bool notTerminated() const;
70+
bool terminated() const;
71+
HighsModelStatus terminationStatus() const;
7272
void report(const HighsLogOptions log_options) const;
7373
};
7474

highs/mip/HighsMipSolverData.cpp

Lines changed: 7 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2422,14 +2422,11 @@ bool HighsMipSolverData::checkLimits(int64_t nodeOffset) const {
24222422
if (!mipsolver.submip) {
24232423
highsLogUser(options.log_options, HighsLogType::kInfo,
24242424
"instance%d: terminated? %6.4f (MIP)\n", int(this->mipRaceMyInstance()), this->mipsolver.timer_.read());
2425-
assert(this->terminated() == this->terminated());
2426-
if (this->terminated()) {
2425+
if (this->terminatorTerminated()) {
24272426
highsLogUser(options.log_options, HighsLogType::kInfo,
24282427
"instance%d: terminated %6.4f (MIP)\n", int(this->mipRaceMyInstance()), this->mipsolver.timer_.read());
24292428
return true;
24302429
}
2431-
assert(this->terminated() == this->terminated());
2432-
if (this->terminated()) return true;
24332430
}
24342431

24352432
// Possible user interrupt
@@ -2734,14 +2731,14 @@ void HighsMipSolverData::mipRaceReport() const {
27342731
if (mipsolver.mip_race_.record) mipsolver.mip_race_.report();
27352732
}
27362733

2737-
void HighsMipSolverData::terminate() {
2738-
if (mipsolver.terminator_.num_instance <= 0) return;
2734+
void HighsMipSolverData::terminatorTerminate() {
2735+
assert(mipsolver.terminator_.num_instance > 0);
27392736
mipsolver.terminator_.terminate();
27402737
}
27412738

2742-
bool HighsMipSolverData::terminated() const {
2743-
if (mipsolver.terminator_.num_instance > 0)
2744-
mipsolver.termination_status_ = mipsolver.terminator_.terminated();
2739+
bool HighsMipSolverData::terminatorTerminated() const {
2740+
if (this->terminatorActive())
2741+
mipsolver.termination_status_ = mipsolver.terminator_.terminationStatus();
27452742
return mipsolver.termination_status_ != HighsModelStatus::kNotset;
27462743
}
27472744

@@ -3039,7 +3036,7 @@ void HighsTerminator::terminate() {
30393036
this->record[this->my_instance] = HighsModelStatus::kHighsInterrupt;
30403037
}
30413038

3042-
HighsModelStatus HighsTerminator::terminated() const {
3039+
HighsModelStatus HighsTerminator::terminationStatus() const {
30433040
assert(this->record);
30443041
for (HighsInt instance = 0; instance < this->num_instance; instance++) {
30453042
if (this->record[instance] != HighsModelStatus::kNotset)
@@ -3048,15 +3045,6 @@ HighsModelStatus HighsTerminator::terminated() const {
30483045
return HighsModelStatus::kNotset;
30493046
}
30503047

3051-
bool HighsTerminator::notTerminated() const {
3052-
assert(this->record);
3053-
for (HighsInt instance = 0; instance < this->num_instance; instance++) {
3054-
if (this->record[instance] != HighsModelStatus::kNotset)
3055-
return false;
3056-
}
3057-
return true;
3058-
}
3059-
30603048
void HighsTerminator::report(const HighsLogOptions log_options) const {
30613049
highsLogUser(log_options, HighsLogType::kInfo, "\nTerminator: ");
30623050
for (HighsInt instance = 0; instance < this->num_instance; instance++)

highs/mip/HighsMipSolverData.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -302,14 +302,16 @@ struct HighsMipSolverData {
302302
const ExternalMipSolutionQueryOrigin external_solution_query_origin);
303303

304304
HighsInt mipRaceConcurrency() const;
305+
bool mipRaceActive() const { return mipRaceConcurrency() > 0; }
305306
HighsInt mipRaceMyInstance() const;
306307
void mipRaceUpdate();
307308
HighsInt mipRaceNewSolution(const HighsInt instance, double& objective_value,
308309
std::vector<double>& solution);
309310
void mipRaceReport() const;
310311

311-
void terminate();
312-
bool terminated() const;
312+
void terminatorTerminate();
313+
bool terminatorTerminated() const;
314+
bool terminatorActive() const { return mipsolver.terminator_.num_instance > 0; }
313315
};
314316

315317
#endif

0 commit comments

Comments
 (0)