Skip to content

Commit f3719dc

Browse files
committed
Modify solveHipo to accept Hessian
1 parent bc7e62f commit f3719dc

5 files changed

Lines changed: 26 additions & 16 deletions

File tree

highs/ipm/IpxWrapper.cpp

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -406,10 +406,10 @@ HighsStatus solveLpIpx(const HighsOptions& options, HighsTimer& timer,
406406

407407
#ifdef HIPO
408408
HighsStatus solveLpHipo(HighsLpSolverObject& solver_object) {
409-
return solveLpHipo(solver_object.options_, solver_object.timer_,
410-
solver_object.lp_, solver_object.basis_,
411-
solver_object.solution_, solver_object.model_status_,
412-
solver_object.highs_info_, solver_object.callback_);
409+
return solveHipo(solver_object.options_, solver_object.timer_,
410+
solver_object.lp_, {}, solver_object.basis_,
411+
solver_object.solution_, solver_object.model_status_,
412+
solver_object.highs_info_, solver_object.callback_);
413413
}
414414

415415
#ifdef HIPO_USES_OPENBLAS
@@ -419,11 +419,11 @@ void openblas_set_num_threads(int num_threads);
419419
}
420420
#endif
421421

422-
HighsStatus solveLpHipo(const HighsOptions& options, HighsTimer& timer,
423-
const HighsLp& lp, HighsBasis& highs_basis,
424-
HighsSolution& highs_solution,
425-
HighsModelStatus& model_status, HighsInfo& highs_info,
426-
HighsCallback& callback) {
422+
HighsStatus solveHipo(const HighsOptions& options, HighsTimer& timer,
423+
const HighsLp& lp, const HighsHessian& H,
424+
HighsBasis& highs_basis, HighsSolution& highs_solution,
425+
HighsModelStatus& model_status, HighsInfo& highs_info,
426+
HighsCallback& callback) {
427427
// Use HiPO
428428
//
429429
// Can return HighsModelStatus (HighsStatus) values:
@@ -461,6 +461,11 @@ HighsStatus solveLpHipo(const HighsOptions& options, HighsTimer& timer,
461461
openblas_set_num_threads(1);
462462
#endif
463463

464+
if (!H.empty()) {
465+
printf("Using HiPO\n");
466+
return HighsStatus::kError;
467+
}
468+
464469
// Create solver instance
465470
hipo::Solver hipo{};
466471
// This creates ipx::LpSolver ipx_lps_, in case HiPO has to switch

highs/ipm/IpxWrapper.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,11 @@ HighsStatus solveLpIpx(const HighsOptions& options, HighsTimer& timer,
3434
#ifdef HIPO
3535
HighsStatus solveLpHipo(HighsLpSolverObject& solver_object);
3636

37-
HighsStatus solveLpHipo(const HighsOptions& options, HighsTimer& timer,
38-
const HighsLp& lp, HighsBasis& highs_basis,
39-
HighsSolution& highs_solution,
40-
HighsModelStatus& model_status, HighsInfo& highs_info,
41-
HighsCallback& callback);
37+
HighsStatus solveHipo(const HighsOptions& options, HighsTimer& timer,
38+
const HighsLp& lp, const HighsHessian& H,
39+
HighsBasis& highs_basis, HighsSolution& highs_solution,
40+
HighsModelStatus& model_status, HighsInfo& highs_info,
41+
HighsCallback& callback);
4242

4343
HighsStatus reportHipoStatus(const HighsOptions& options,
4444
const hipo::Int status, const hipo::Solver& hipo);

highs/lp_data/Highs.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121
#include "io/Filereader.h"
2222
#include "io/LoadOptions.h"
23+
#include "ipm/IpxWrapper.h"
2324
#include "lp_data/HighsCallbackStruct.h"
2425
#include "lp_data/HighsInfoDebug.h"
2526
#include "lp_data/HighsLpSolverObject.h"
@@ -3980,8 +3981,9 @@ HighsStatus Highs::callSolveQp() {
39803981
}
39813982

39823983
if (use_hipo) {
3983-
printf("Using HiPO\n");
3984-
3984+
solveHipo(options_, timer_, lp, hessian, basis_, solution_, model_status_,
3985+
info_, callback_);
3986+
39853987
} else {
39863988
//
39873989
// Run the QP solver

highs/model/HighsHessian.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,3 +226,5 @@ HighsCDouble HighsHessian::objectiveCDoubleValue(
226226
}
227227
return objective_function_value;
228228
}
229+
230+
bool HighsHessian::empty() const { return dim_ <= 0; }

highs/model/HighsHessian.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ class HighsHessian {
4242
bool scaleOk(const HighsInt cost_scale, const double small_matrix_value,
4343
const double large_matrix_value) const;
4444
HighsInt numNz() const;
45+
bool empty() const;
4546

4647
void print() const;
4748
};

0 commit comments

Comments
 (0)