Skip to content

Commit 4269687

Browse files
committed
Now referring to non-primal simplex as dual in sub-solver timing; formatted
1 parent 0c454cb commit 4269687

File tree

5 files changed

+76
-60
lines changed

5 files changed

+76
-60
lines changed

highs/lp_data/HConst.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -303,10 +303,10 @@ enum IisStatus : int {
303303

304304
enum SubSolverIndex : int {
305305
kSubSolverMip = 0,
306-
kSubSolverSimplexBasis,
307-
kSubSolverSimplexNoBasis,
308-
kSubSolverPrimalSimplexBasis,
309-
kSubSolverPrimalSimplexNoBasis,
306+
kSubSolverDuSimplexBasis,
307+
kSubSolverDuSimplexNoBasis,
308+
kSubSolverPrSimplexBasis,
309+
kSubSolverPrSimplexNoBasis,
310310
kSubSolverHipo,
311311
kSubSolverIpx,
312312
kSubSolverHipoAc,

highs/lp_data/HighsInterface.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4327,10 +4327,10 @@ void HighsSubSolverCallTime::initialise() {
43274327
this->num_call.assign(kSubSolverCount, 0);
43284328
this->run_time.assign(kSubSolverCount, 0);
43294329
this->name.assign(kSubSolverCount, "");
4330-
this->name[kSubSolverSimplexBasis] = "Simplex (basis)";
4331-
this->name[kSubSolverSimplexNoBasis] = "Simplex (no basis)";
4332-
this->name[kSubSolverPrimalSimplexBasis] = "Primal simplex (basis)";
4333-
this->name[kSubSolverPrimalSimplexNoBasis] = "Primal simplex (no basis)";
4330+
this->name[kSubSolverDuSimplexBasis] = "Du simplex (basis)";
4331+
this->name[kSubSolverDuSimplexNoBasis] = "Du simplex (no basis)";
4332+
this->name[kSubSolverPrSimplexBasis] = "Pr simplex (basis)";
4333+
this->name[kSubSolverPrSimplexNoBasis] = "Pr simplex (no basis)";
43344334
this->name[kSubSolverHipo] = "HiPO";
43354335
this->name[kSubSolverIpx] = "IPX";
43364336
this->name[kSubSolverHipoAc] = "HiPO (AC)";
@@ -4361,7 +4361,7 @@ void Highs::reportSubSolverCallTime() const {
43614361
std::stringstream ss;
43624362
ss.str(std::string());
43634363
ss << highsFormatToString(
4364-
"\nSub-solver timing\nSolver Calls Time "
4364+
"\nSub-solver timing\nSolver Calls Time "
43654365
"Time/call");
43664366
if (mip_time > 0) ss << " MIP%";
43674367
highsLogUser(options_.log_options, HighsLogType::kInfo, "%s\n",
@@ -4372,7 +4372,7 @@ void Highs::reportSubSolverCallTime() const {
43724372
if (this->sub_solver_call_time_.num_call[Ix]) {
43734373
ss.str(std::string());
43744374
ss << highsFormatToString(
4375-
"%-18s %9d %11.4e %11.4e",
4375+
"%-21s %9d %11.4e %11.4e",
43764376
this->sub_solver_call_time_.name[Ix].c_str(),
43774377
int(this->sub_solver_call_time_.num_call[Ix]),
43784378
this->sub_solver_call_time_.run_time[Ix],
@@ -4391,7 +4391,7 @@ void Highs::reportSubSolverCallTime() const {
43914391
}
43924392
if (mip_time > 0)
43934393
highsLogUser(options_.log_options, HighsLogType::kInfo,
4394-
"TOTAL (excluding AC) %11.4e %5.1f\n",
4394+
"TOTAL (excluding AC) %11.4e %5.1f\n",
43954395
sum_mip_sub_solve_time,
43964396
1e2 * sum_mip_sub_solve_time / mip_time);
43974397
}

highs/mip/HighsMipAnalysis.cpp

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -124,29 +124,29 @@ void HighsMipAnalysis::mipTimerUpdate(
124124
// If IPM has not been run first, then check that simplex call
125125
// counts are consistent with valid_basis and presolve
126126
if (valid_basis) {
127-
assert(sub_solver_call_time.num_call[kSubSolverSimplexNoBasis] == 0);
127+
assert(sub_solver_call_time.num_call[kSubSolverDuSimplexNoBasis] == 0);
128128
} else if (!presolve) {
129-
assert(sub_solver_call_time.num_call[kSubSolverSimplexBasis] == 0);
129+
assert(sub_solver_call_time.num_call[kSubSolverDuSimplexBasis] == 0);
130130
}
131131
} else {
132132
// IPM has been run first, then at least one of the simplex call
133133
// counts should be zero
134-
assert(sub_solver_call_time.num_call[kSubSolverSimplexBasis] == 0 ||
135-
sub_solver_call_time.num_call[kSubSolverSimplexNoBasis] == 0);
134+
assert(sub_solver_call_time.num_call[kSubSolverDuSimplexBasis] == 0 ||
135+
sub_solver_call_time.num_call[kSubSolverDuSimplexNoBasis] == 0);
136136
}
137137

138-
mipTimerAdd(kMipClockSimplexBasisSolveLp,
139-
sub_solver_call_time.num_call[kSubSolverSimplexBasis],
140-
sub_solver_call_time.run_time[kSubSolverSimplexBasis]);
141-
mipTimerAdd(kMipClockSimplexNoBasisSolveLp,
142-
sub_solver_call_time.num_call[kSubSolverSimplexNoBasis],
143-
sub_solver_call_time.run_time[kSubSolverSimplexNoBasis]);
144-
mipTimerAdd(kMipClockPrimalSimplexBasisSolveLp,
145-
sub_solver_call_time.num_call[kSubSolverPrimalSimplexBasis],
146-
sub_solver_call_time.run_time[kSubSolverPrimalSimplexBasis]);
147-
mipTimerAdd(kMipClockPrimalSimplexNoBasisSolveLp,
148-
sub_solver_call_time.num_call[kSubSolverPrimalSimplexNoBasis],
149-
sub_solver_call_time.run_time[kSubSolverPrimalSimplexNoBasis]);
138+
mipTimerAdd(kMipClockDuSimplexBasisSolveLp,
139+
sub_solver_call_time.num_call[kSubSolverDuSimplexBasis],
140+
sub_solver_call_time.run_time[kSubSolverDuSimplexBasis]);
141+
mipTimerAdd(kMipClockDuSimplexNoBasisSolveLp,
142+
sub_solver_call_time.num_call[kSubSolverDuSimplexNoBasis],
143+
sub_solver_call_time.run_time[kSubSolverDuSimplexNoBasis]);
144+
mipTimerAdd(kMipClockPrSimplexBasisSolveLp,
145+
sub_solver_call_time.num_call[kSubSolverPrSimplexBasis],
146+
sub_solver_call_time.run_time[kSubSolverPrSimplexBasis]);
147+
mipTimerAdd(kMipClockPrSimplexNoBasisSolveLp,
148+
sub_solver_call_time.num_call[kSubSolverPrSimplexNoBasis],
149+
sub_solver_call_time.run_time[kSubSolverPrSimplexNoBasis]);
150150

151151
if (sub_solver_call_time.num_call[kSubSolverHipo]) {
152152
const HighsInt mip_clock = analytic_centre
@@ -179,9 +179,9 @@ void HighsMipAnalysis::reportMipSolveLpClock(const bool header) {
179179
double total_time = mip_clocks.timer_pointer_->read(0);
180180
if (total_time < 0.01) return;
181181
HighsInt simplex_basis_solve_iclock =
182-
mip_clocks.clock_[kMipClockSimplexBasisSolveLp];
182+
mip_clocks.clock_[kMipClockDuSimplexBasisSolveLp];
183183
HighsInt simplex_no_basis_solve_iclock =
184-
mip_clocks.clock_[kMipClockSimplexNoBasisSolveLp];
184+
mip_clocks.clock_[kMipClockDuSimplexNoBasisSolveLp];
185185
HighsInt ipm_solve_iclock = mip_clocks.clock_[kMipClockIpxSolveLp];
186186
// HighsInt num_no_basis_solve =
187187
// mip_clocks.timer_pointer_->clock_num_call[no_basis_solve_iclock]; HighsInt
@@ -299,8 +299,8 @@ void HighsMipAnalysis::checkSubSolverCallTime(
299299
error = true;
300300
}
301301
};
302-
check(kSubSolverSimplexBasis, kMipClockSimplexBasisSolveLp);
303-
check(kSubSolverSimplexNoBasis, kMipClockSimplexNoBasisSolveLp);
302+
check(kSubSolverDuSimplexBasis, kMipClockDuSimplexBasisSolveLp);
303+
check(kSubSolverDuSimplexNoBasis, kMipClockDuSimplexNoBasisSolveLp);
304304
check(kSubSolverHipo, kMipClockHipoSolveLp);
305305
check(kSubSolverIpx, kMipClockIpxSolveLp);
306306
check(kSubSolverHipoAc, kMipClockHipoSolveAnalyticCentreLp);

highs/mip/MipTimer.h

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -96,14 +96,14 @@ enum iClockMip {
9696
kMipClockModKSepa,
9797

9898
// LP solves
99-
kMipClockSimplexBasisSolveLp,
100-
kMipClockSimplexNoBasisSolveLp,
99+
kMipClockDuSimplexBasisSolveLp,
100+
kMipClockDuSimplexNoBasisSolveLp,
101101
kMipClockHipoSolveAnalyticCentreLp,
102102
kMipClockIpxSolveAnalyticCentreLp,
103103
kMipClockHipoSolveLp,
104104
kMipClockIpxSolveLp,
105-
kMipClockPrimalSimplexBasisSolveLp,
106-
kMipClockPrimalSimplexNoBasisSolveLp,
105+
kMipClockPrSimplexBasisSolveLp,
106+
kMipClockPrSimplexNoBasisSolveLp,
107107

108108
// Sub-MIP solves
109109
kMipClockSubMipSolve,
@@ -138,11 +138,11 @@ class MipTimer {
138138
// clock[kMipClockHipoSolveAnalyticCentreLp] and
139139
// clock[kMipClockIpxSolveAnalyticCentreLp] aren't changed by inserting new
140140
// clocks
141-
clock[kMipClockSimplexBasisSolveLp] =
142-
timer_pointer->clock_def("Solve LP - simplex basis");
143-
clock[kMipClockSimplexNoBasisSolveLp] =
144-
timer_pointer->clock_def("Solve LP - simplex no basis");
145-
assert(clock[kMipClockSimplexNoBasisSolveLp] == 8);
141+
clock[kMipClockDuSimplexBasisSolveLp] =
142+
timer_pointer->clock_def("Solve LP - du simplex basis");
143+
clock[kMipClockDuSimplexNoBasisSolveLp] =
144+
timer_pointer->clock_def("Solve LP - du simplex no basis");
145+
assert(clock[kMipClockDuSimplexNoBasisSolveLp] == 8);
146146
clock[kMipClockHipoSolveAnalyticCentreLp] =
147147
timer_pointer->clock_def("Solve LP: HiPO analytic centre");
148148
clock[kMipClockIpxSolveAnalyticCentreLp] =
@@ -151,10 +151,10 @@ class MipTimer {
151151
assert(clock[kMipClockIpxSolveAnalyticCentreLp] == 10);
152152
clock[kMipClockHipoSolveLp] = timer_pointer->clock_def("Solve LP: HiPO");
153153
clock[kMipClockIpxSolveLp] = timer_pointer->clock_def("Solve LP: IPX");
154-
clock[kMipClockPrimalSimplexBasisSolveLp] =
155-
timer_pointer->clock_def("Solve LP - primal simplex basis");
156-
clock[kMipClockPrimalSimplexNoBasisSolveLp] =
157-
timer_pointer->clock_def("Solve LP - primal simplex no basis");
154+
clock[kMipClockPrSimplexBasisSolveLp] =
155+
timer_pointer->clock_def("Solve LP - pr simplex basis");
156+
clock[kMipClockPrSimplexNoBasisSolveLp] =
157+
timer_pointer->clock_def("Solve LP - pr simplex no basis");
158158

159159
// Level 1 - Should correspond to kMipClockTotal
160160
clock[kMipClockInit] = timer_pointer->clock_def("Initialise");
@@ -372,10 +372,10 @@ class MipTimer {
372372

373373
void reportMipSolveLpClock(const HighsTimerClock& mip_timer_clock) {
374374
const std::vector<HighsInt> mip_clock_list{
375-
kMipClockSimplexBasisSolveLp,
376-
kMipClockSimplexNoBasisSolveLp,
377-
kMipClockPrimalSimplexBasisSolveLp,
378-
kMipClockPrimalSimplexNoBasisSolveLp,
375+
kMipClockDuSimplexBasisSolveLp,
376+
kMipClockDuSimplexNoBasisSolveLp,
377+
kMipClockPrSimplexBasisSolveLp,
378+
kMipClockPrSimplexNoBasisSolveLp,
379379
kMipClockHipoSolveAnalyticCentreLp,
380380
kMipClockIpxSolveAnalyticCentreLp,
381381
kMipClockHipoSolveLp,

highs/simplex/HApp.h

Lines changed: 28 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -44,17 +44,33 @@ inline HighsStatus returnFromSolveLpSimplex(HighsLpSolverObject& solver_object,
4444
// will generally be one after simplex, so have to deduce whether
4545
// there was one before
4646
HighsInt sub_solver_ix = -1;
47-
if (solver_object.sub_solver_call_time_.run_time[kSubSolverSimplexBasis] < 0) sub_solver_ix = kSubSolverSimplexBasis;
48-
if (solver_object.sub_solver_call_time_.run_time[kSubSolverSimplexNoBasis] < 0) sub_solver_ix = kSubSolverSimplexNoBasis;
49-
if (solver_object.sub_solver_call_time_.run_time[kSubSolverPrimalSimplexBasis] < 0) sub_solver_ix = kSubSolverPrimalSimplexBasis;
50-
if (solver_object.sub_solver_call_time_.run_time[kSubSolverPrimalSimplexNoBasis] < 0) sub_solver_ix = kSubSolverPrimalSimplexNoBasis;
47+
if (solver_object.sub_solver_call_time_.run_time[kSubSolverDuSimplexBasis] <
48+
0)
49+
sub_solver_ix = kSubSolverDuSimplexBasis;
50+
if (solver_object.sub_solver_call_time_.run_time[kSubSolverDuSimplexNoBasis] <
51+
0)
52+
sub_solver_ix = kSubSolverDuSimplexNoBasis;
53+
if (solver_object.sub_solver_call_time_.run_time[kSubSolverPrSimplexBasis] <
54+
0)
55+
sub_solver_ix = kSubSolverPrSimplexBasis;
56+
if (solver_object.sub_solver_call_time_.run_time[kSubSolverPrSimplexNoBasis] <
57+
0)
58+
sub_solver_ix = kSubSolverPrSimplexNoBasis;
5159
// Ensure that one clock has been identified
5260
assert(sub_solver_ix >= 0);
5361
// Check that only one clock was started
54-
if (sub_solver_ix != kSubSolverSimplexBasis) assert(solver_object.sub_solver_call_time_.run_time[kSubSolverSimplexBasis] >= 0);
55-
if (sub_solver_ix != kSubSolverSimplexNoBasis) assert(solver_object.sub_solver_call_time_.run_time[kSubSolverSimplexNoBasis] >= 0);
56-
if (sub_solver_ix != kSubSolverPrimalSimplexBasis) assert(solver_object.sub_solver_call_time_.run_time[kSubSolverPrimalSimplexBasis] >= 0);
57-
if (sub_solver_ix != kSubSolverPrimalSimplexNoBasis) assert(solver_object.sub_solver_call_time_.run_time[kSubSolverPrimalSimplexNoBasis] >= 0);
62+
if (sub_solver_ix != kSubSolverDuSimplexBasis)
63+
assert(solver_object.sub_solver_call_time_
64+
.run_time[kSubSolverDuSimplexBasis] >= 0);
65+
if (sub_solver_ix != kSubSolverDuSimplexNoBasis)
66+
assert(solver_object.sub_solver_call_time_
67+
.run_time[kSubSolverDuSimplexNoBasis] >= 0);
68+
if (sub_solver_ix != kSubSolverPrSimplexBasis)
69+
assert(solver_object.sub_solver_call_time_
70+
.run_time[kSubSolverPrSimplexBasis] >= 0);
71+
if (sub_solver_ix != kSubSolverPrSimplexNoBasis)
72+
assert(solver_object.sub_solver_call_time_
73+
.run_time[kSubSolverPrSimplexNoBasis] >= 0);
5874
// Update the call count and run time
5975
solver_object.sub_solver_call_time_.num_call[sub_solver_ix]++;
6076
solver_object.sub_solver_call_time_.run_time[sub_solver_ix] +=
@@ -122,15 +138,15 @@ inline HighsStatus solveLpSimplex(HighsLpSolverObject& solver_object) {
122138
HighsInt sub_solver_ix = -1;
123139
if (options.simplex_strategy == kSimplexStrategyPrimal) {
124140
if (basis.valid) {
125-
sub_solver_ix = kSubSolverPrimalSimplexBasis;
141+
sub_solver_ix = kSubSolverPrSimplexBasis;
126142
} else {
127-
sub_solver_ix = kSubSolverPrimalSimplexNoBasis;
143+
sub_solver_ix = kSubSolverPrSimplexNoBasis;
128144
}
129145
} else {
130146
if (basis.valid) {
131-
sub_solver_ix = kSubSolverSimplexBasis;
147+
sub_solver_ix = kSubSolverDuSimplexBasis;
132148
} else {
133-
sub_solver_ix = kSubSolverSimplexNoBasis;
149+
sub_solver_ix = kSubSolverDuSimplexNoBasis;
134150
}
135151
}
136152
assert(sub_solver_ix >= 0);

0 commit comments

Comments
 (0)