Skip to content

Commit 46c5bde

Browse files
committed
Stripped termination record from MipRace
1 parent e91a215 commit 46c5bde

File tree

5 files changed

+15
-42
lines changed

5 files changed

+15
-42
lines changed

check/TestMipSolver.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1003,7 +1003,7 @@ TEST_CASE("issue-2432", "[highs_test_mip_solver]") {
10031003
}
10041004

10051005
TEST_CASE("mip-race", "[highs_test_mip_solver]") {
1006-
const bool ci_test = false;//true;
1006+
const bool ci_test = true;//false;//
10071007
const std::string model = ci_test ? "rgn" : "fiball";
10081008
// "neos-3381206-awhea";
10091009
const std::string model_file = ci_test ?

highs/mip/HighsMipSolver.cpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -688,13 +688,11 @@ void HighsMipSolver::run() {
688688

689689
void HighsMipSolver::cleanupSolve() {
690690
if (!submip) {
691-
assert(mipdata_->mipRaceTerminated() == (terminator_.terminatedNw() != HighsModelStatus::kNotset));
692-
if (!mipdata_->mipRaceTerminated()) {
691+
if (terminator_.notTerminatedNw()) {
693692
// No other instance has terminated the MIP race, so terminate
694693
// it
695694
highsLogUser(options_mip_->log_options, HighsLogType::kInfo,
696695
"instance%d: terminate %6.4f (MIP)\n", int(this->mipdata_->mipRaceMyInstance()), this->timer_.read());
697-
mipdata_->mipRaceTerminate();
698696
terminator_.terminateNw();
699697
} else {
700698
// Indicate that this MIP race instance has been interrupted

highs/mip/HighsMipSolver.h

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@ struct MipRaceIncumbent {
3434
};
3535

3636
struct MipRaceRecord {
37-
std::vector<bool> terminated;
3837
std::vector<MipRaceIncumbent> incumbent;
3938
void clear();
4039
void initialise(const HighsInt mip_race_concurrency, const HighsInt num_col);
@@ -57,8 +56,6 @@ struct MipRace {
5756
void update(const double objective, const std::vector<double>& solution);
5857
bool newSolution(const HighsInt instance, double objective,
5958
std::vector<double>& solution);
60-
void terminate();
61-
bool terminated() const;
6259
void report() const;
6360
};
6461

@@ -72,6 +69,7 @@ struct HighsTerminator {
7269
HighsModelStatus*record_);
7370
void terminateNw();
7471
HighsModelStatus terminatedNw() const;
72+
bool notTerminatedNw() const;
7573
void report(const HighsLogOptions log_options) const;
7674
};
7775

highs/mip/HighsMipSolverData.cpp

Lines changed: 12 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -2422,13 +2422,13 @@ 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->mipRaceTerminated() == this->terminatedNw());
2426-
if (this->mipRaceTerminated()) {
2425+
assert(this->terminatedNw() == this->terminatedNw());
2426+
if (this->terminatedNw()) {
24272427
highsLogUser(options.log_options, HighsLogType::kInfo,
24282428
"instance%d: terminated %6.4f (MIP)\n", int(this->mipRaceMyInstance()), this->mipsolver.timer_.read());
24292429
return true;
24302430
}
2431-
assert(this->mipRaceTerminated() == this->terminatedNw());
2431+
assert(this->terminatedNw() == this->terminatedNw());
24322432
if (this->terminatedNw()) return true;
24332433
}
24342434

@@ -2728,18 +2728,6 @@ HighsInt HighsMipSolverData::mipRaceNewSolution(const HighsInt instance,
27282728
return mipsolver.mip_race_.newSolution(instance, objective_value, solution);
27292729
}
27302730

2731-
void HighsMipSolverData::mipRaceTerminate() {
2732-
assert(!mipsolver.submip);
2733-
if (!mipsolver.mip_race_.record) return;
2734-
mipsolver.mip_race_.terminate();
2735-
}
2736-
2737-
bool HighsMipSolverData::mipRaceTerminated() const {
2738-
assert(!mipsolver.submip);
2739-
if (!mipsolver.mip_race_.record) return false;
2740-
return mipsolver.mip_race_.terminated();
2741-
}
2742-
27432731
void HighsMipSolverData::mipRaceReport() const {
27442732
assert(!mipsolver.submip);
27452733
if (mipsolver.terminator_.record) mipsolver.terminator_.report(mipsolver.options_mip_->log_options);
@@ -2934,14 +2922,12 @@ HighsInt MipRaceIncumbent::read(const HighsInt last_incumbent_read,
29342922
}
29352923

29362924
void MipRaceRecord::clear() {
2937-
this->terminated.clear();
29382925
this->incumbent.clear();
29392926
}
29402927

29412928
void MipRaceRecord::initialise(const HighsInt mip_race_concurrency,
29422929
const HighsInt num_col) {
29432930
this->clear();
2944-
this->terminated.assign(mip_race_concurrency, false);
29452931
MipRaceIncumbent incumbent_;
29462932
incumbent_.initialise(num_col);
29472933
for (HighsInt instance = 0; instance < mip_race_concurrency; instance++)
@@ -2962,10 +2948,6 @@ void MipRaceRecord::report(const HighsLogOptions log_options) const {
29622948
highsLogUser(log_options, HighsLogType::kInfo, "\nMipRaceRecord: ");
29632949
for (HighsInt instance = 0; instance < mip_race_concurrency; instance++)
29642950
highsLogUser(log_options, HighsLogType::kInfo, " %20d", int(instance));
2965-
highsLogUser(log_options, HighsLogType::kInfo, "\nTerminated: ");
2966-
for (HighsInt instance = 0; instance < mip_race_concurrency; instance++)
2967-
highsLogUser(log_options, HighsLogType::kInfo, " %20s",
2968-
this->terminated[instance] ? "T" : "F");
29692951
highsLogUser(log_options, HighsLogType::kInfo, "\nStartWrite: ");
29702952
for (HighsInt instance = 0; instance < mip_race_concurrency; instance++)
29712953
highsLogUser(log_options, HighsLogType::kInfo, " %20d",
@@ -3022,18 +3004,6 @@ bool MipRace::newSolution(const HighsInt instance, double objective,
30223004
return false;
30233005
}
30243006

3025-
void MipRace::terminate() {
3026-
assert(this->record);
3027-
this->record->terminated[this->my_instance] = true;
3028-
}
3029-
3030-
bool MipRace::terminated() const {
3031-
assert(this->record);
3032-
for (HighsInt instance = 0; instance < this->concurrency(); instance++)
3033-
if (this->record->terminated[instance]) return true;
3034-
return false;
3035-
}
3036-
30373007
void MipRace::report() const {
30383008
assert(this->record);
30393009
this->record->report(this->log_options);
@@ -3078,6 +3048,15 @@ HighsModelStatus HighsTerminator::terminatedNw() const {
30783048
return HighsModelStatus::kNotset;
30793049
}
30803050

3051+
bool HighsTerminator::notTerminatedNw() 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+
30813060
void HighsTerminator::report(const HighsLogOptions log_options) const {
30823061
highsLogUser(log_options, HighsLogType::kInfo, "\nTerminator: ");
30833062
for (HighsInt instance = 0; instance < this->num_instance; instance++)

highs/mip/HighsMipSolverData.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -306,8 +306,6 @@ struct HighsMipSolverData {
306306
void mipRaceUpdate();
307307
HighsInt mipRaceNewSolution(const HighsInt instance, double& objective_value,
308308
std::vector<double>& solution);
309-
void mipRaceTerminate();
310-
bool mipRaceTerminated() const;
311309
void mipRaceReport() const;
312310

313311
void terminateNw();

0 commit comments

Comments
 (0)