@@ -271,40 +271,42 @@ HighsCallbackFunctionType userkMipUserSetPartialSolution =
271271 }
272272 };
273273
274- HighsCallbackFunctionType userQpCallback =
275- [](int callback_type, const std::string& message,
276- const HighsCallbackOutput* data_out, HighsCallbackInput* data_in,
277- void * user_callback_data) {
278- // Extract local_callback_data from user_callback_data unless it
279- // is nullptr
280- if (callback_type == kCallbackQpFirstFeasiblePoint ) {
281- // Use local_callback_data to maintain the objective value from
282- // the previous callback
283- assert (user_callback_data);
284- // Extract the double value pointed to from void* user_callback_data
285- const double local_callback_data = *(double *)user_callback_data;
286- if (dev_run)
287- printf (
288- " userQpCallback(type %2d; data %11.4g): %s with solution[0] = %g\n " ,
289- callback_type, local_callback_data, message.c_str (),
290- data_out->qp_solution [0 ]);
291- } else if (callback_type == kCallbackQpInterrupt ) {
292- const int local_callback_data =
293- user_callback_data ? static_cast <int >(reinterpret_cast <intptr_t >(
294- user_callback_data))
295- : kUserCallbackNoData ;
296- REQUIRE (local_callback_data == kUserCallbackData );
297- if (dev_run)
298- printf (
299- " userInterruptCallback(type %2d; data %2d): %s with iteration "
300- " count = "
301- " %d\n " ,
302- callback_type, local_callback_data, message.c_str (),
303- int (data_out->qpasm_iteration_count ));
304- data_in->user_interrupt =
305- data_out->qpasm_iteration_count > primal1_qp_iteration_limit;
306- }
307- };
274+ HighsCallbackFunctionType userQpCallback = [](int callback_type,
275+ const std::string& message,
276+ const HighsCallbackOutput*
277+ data_out,
278+ HighsCallbackInput* data_in,
279+ void * user_callback_data) {
280+ // Extract local_callback_data from user_callback_data unless it
281+ // is nullptr
282+ if (callback_type == kCallbackQpFirstFeasiblePoint ) {
283+ // Use local_callback_data to maintain the objective value from
284+ // the previous callback
285+ assert (user_callback_data);
286+ // Extract the double value pointed to from void* user_callback_data
287+ const double local_callback_data = *(double *)user_callback_data;
288+ if (dev_run)
289+ printf (
290+ " userQpCallback(type %2d; data %11.4g): %s with solution[0] = %g\n " ,
291+ callback_type, local_callback_data, message.c_str (),
292+ data_out->qp_solution [0 ]);
293+ } else if (callback_type == kCallbackQpInterrupt ) {
294+ const int local_callback_data =
295+ user_callback_data
296+ ? static_cast <int >(reinterpret_cast <intptr_t >(user_callback_data))
297+ : kUserCallbackNoData ;
298+ REQUIRE (local_callback_data == kUserCallbackData );
299+ if (dev_run)
300+ printf (
301+ " userInterruptCallback(type %2d; data %2d): %s with iteration "
302+ " count = %d and objective_value = %g\n " ,
303+ callback_type, local_callback_data, message.c_str (),
304+ int (data_out->qpasm_iteration_count ),
305+ data_out->objective_function_value );
306+ data_in->user_interrupt =
307+ data_out->qpasm_iteration_count > primal1_qp_iteration_limit;
308+ }
309+ };
308310
309311std::function<void (int , const std::string&, const HighsCallbackOutput*,
310312 HighsCallbackInput*, void *)>
@@ -647,7 +649,8 @@ TEST_CASE("highs-callback-mip-user-solution-c", "[highs-callback]") {
647649}
648650
649651TEST_CASE (" highs-callback-qpasm" , " [highs_callback]" ) {
650- std::string filename = std::string (HIGHS_DIR ) + " /check/instances/primal1.mps" ;
652+ std::string filename =
653+ std::string (HIGHS_DIR ) + " /check/instances/primal1.mps" ;
651654 Highs highs;
652655 // highs.setOptionValue("output_flag", dev_run);
653656 highs.readModel (filename);
@@ -660,4 +663,3 @@ TEST_CASE("highs-callback-qpasm", "[highs_callback]") {
660663
661664 highs.resetGlobalScheduler (true );
662665}
663-
0 commit comments