Skip to content

Commit

Permalink
Merge pull request #1839 from ERGO-Code/fix-1814
Browse files Browse the repository at this point in the history
Added int64_t mip_total_lp_iterations to HighsCallbackDataOut and modified accessor function
  • Loading branch information
jajhall committed Jul 9, 2024
2 parents 66849ca + 600b069 commit 3ccae38
Show file tree
Hide file tree
Showing 5 changed files with 13 additions and 4 deletions.
9 changes: 5 additions & 4 deletions check/TestCallbacks.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -190,12 +190,13 @@ std::function<void(int, const std::string&, const HighsCallbackDataOut*,
if (dev_run)
printf(
"userDataCallback: Node count = %" PRId64
"; LP total iterations = %" PRId64
"; Time = %6.2f; "
"Bounds (%11.4g, %11.4g); Gap = %11.4g; Objective = %11.4g: %s\n",
data_out->mip_node_count, data_out->running_time,
data_out->mip_dual_bound, data_out->mip_primal_bound,
data_out->mip_gap, data_out->objective_function_value,
message.c_str());
data_out->mip_node_count, data_out->mip_total_lp_iterations,
data_out->running_time, data_out->mip_dual_bound,
data_out->mip_primal_bound, data_out->mip_gap,
data_out->objective_function_value, message.c_str());
};

TEST_CASE("my-callback-logging", "[highs-callback]") {
Expand Down
3 changes: 3 additions & 0 deletions src/interfaces/highs_c_api.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1364,6 +1364,9 @@ const void* Highs_getCallbackDataOutItem(const HighsCallbackDataOut* data_out,
return (void*)(&data_out->objective_function_value);
} else if (!strcmp(item_name, kHighsCallbackDataOutMipNodeCountName)) {
return (void*)(&data_out->mip_node_count);
} else if (!strcmp(item_name,
kHighsCallbackDataOutMipTotalLpIterationsName)) {
return (void*)(&data_out->mip_total_lp_iterations);
} else if (!strcmp(item_name, kHighsCallbackDataOutMipPrimalBoundName)) {
return (void*)(&data_out->mip_primal_bound);
} else if (!strcmp(item_name, kHighsCallbackDataOutMipDualBoundName)) {
Expand Down
2 changes: 2 additions & 0 deletions src/interfaces/highs_c_api.h
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,8 @@ const char* const kHighsCallbackDataOutPdlpIterationCountName =
const char* const kHighsCallbackDataOutObjectiveFunctionValueName =
"objective_function_value";
const char* const kHighsCallbackDataOutMipNodeCountName = "mip_node_count";
const char* const kHighsCallbackDataOutMipTotalLpIterationsName =
"mip_total_lp_iterations";
const char* const kHighsCallbackDataOutMipPrimalBoundName = "mip_primal_bound";
const char* const kHighsCallbackDataOutMipDualBoundName = "mip_dual_bound";
const char* const kHighsCallbackDataOutMipGapName = "mip_gap";
Expand Down
1 change: 1 addition & 0 deletions src/lp_data/HighsCallbackStruct.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ typedef struct {
HighsInt pdlp_iteration_count;
double objective_function_value;
int64_t mip_node_count;
int64_t mip_total_lp_iterations;
double mip_primal_bound;
double mip_dual_bound;
double mip_gap;
Expand Down
2 changes: 2 additions & 0 deletions src/mip/HighsMipSolverData.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1999,6 +1999,8 @@ bool HighsMipSolverData::interruptFromCallbackWithData(
mipsolver.callback_->data_out.objective_function_value =
mipsolver_objective_value;
mipsolver.callback_->data_out.mip_node_count = mipsolver.mipdata_->num_nodes;
mipsolver.callback_->data_out.mip_total_lp_iterations =
mipsolver.mipdata_->total_lp_iterations;
mipsolver.callback_->data_out.mip_primal_bound = primal_bound;
mipsolver.callback_->data_out.mip_dual_bound = dual_bound;
// Option mip_rel_gap, and mip_gap in HighsInfo, are both fractions,
Expand Down

0 comments on commit 3ccae38

Please sign in to comment.